読者です 読者をやめる 読者になる 読者になる

ScapyでIDS(snort)の検知試験

snort scapy

特定のDNSクエリを検知するsnortルールを見たので、検知させたくなるのです

gokaxtukei.hatenablog.com
Pythonモジュールの一つScapyを使ってみるのよ(・o・)

<目標!>
危険ドメインdevid.infoを名前解決しようとするパケットを作るのです
snortで検知させて、ついでに誤検知も発生させてみる


・Scapy実行

$ scapy

DNSはどこかなー
 ls()で使える通信プロトコルの一覧が出るのです。

>>> ls()
AH         : AH
ARP        : ARP
ASN1_Packet : None
BOOTP      : BOOTP
...
DNS        : DNS
DNSQR      : DNS Question Record
DNSRR      : DNS Resource Record

DNSあるじゃん(・o・)!
 どれどれ中身はで関係ありそうなのはー
 ls(DNS)でDNSで設定できるオプション一覧が出るのです。

>>> ls(DNS)
id         : ShortField           = (0)
qr         : BitField             = (0)
opcode     : BitEnumField         = (0)
qd         : DNSQRField           = (None)

んーふむふむ
準備おーけーwiresharkで見てみます、、、

>>> packet = IP(src="192.168.11.5",dst="192.168.11.55")/UDP(dport=53)/DNS(qd=DNSQR(qname="devid.info"))
>>> wireshark(packet)

これじゃよこれ:D
f:id:gokaxtukei:20151226185835p:plain

>>> packet = IP(src="192.168.11.5",dst="192.168.11.55")/UDP(dport=53)/DNS(qd=DNSQR(qname="devid.info"))
>>> send(packet)


f:id:gokaxtukei:20151226190705p:plain


やった検知(^^)
何したかったんだっけ…?そうそう誤検知するのかテストだった!

>>> packet = IP(src="192.168.11.5",dst="192.168.11.55")/UDP(dport=53)/DNS(qd=DNSQR(qname="hatena.devid.info.gokaxtukei"))
>>> send(packet)

んー検知しないぞ...|00|のせいだ!
content:"|05|devid|04|info|00|"

なるほど、devid.info以上のドメインが存在するとダメにしてるんだ…!

つまり、こうだー

>>> packet = IP(src="192.168.11.5",dst="192.168.11.9")/UDP(dport=53)/DNS(qd=DNSQR(qname="hatena.devid.info..gokaxtukei"))
>>> send(packet)

f:id:gokaxtukei:20151226191946p:plain

きた!
f:id:gokaxtukei:20151226192100p:plain


False Positiveありってことに…ならんか(・へ・)