しゅーとくんが寝かせてくれない!2

我らが大先生Wakatono様が作ったDNS query blockerをしゅーとくんが作りたいとのこと。

しゅーと: 『サーバAにユーザa、bを配置して嘘の応答を答えるサーバBにaがgoogle.comのAレコードを問い合わせしてキャッシュしたあと、bがgoogle.comにアクセスしたときの挙動を知りたい
もしbが嘘のAレコードにアクセスしたら実装考えるわ』

足軽「すげぇ」

==20分後==

しゅーと:「そもそも権限ないユーザは好き勝手にDNSサーバを設定できないことに気づいて萎えた」

足軽「DNSポイゾニングも権限ないとできないのん?」

しゅーと: 『あれとは別やでーーー
俺がやりたかったのは、同じサーバに同居してる別のユーザへのキャッシュポイズニング』

足軽「ふぇえ、ちょっとまって」


うーんうーん、こういうことか?(Scapyでカキカキ)

>>>IP(dst="192.168.1.1")/UDP(dport="domain",sport=RandShort())/DNS(qdcount=1,opcode="QUERY")/DNSQR(qname="www.google.com",qtype="A",qclass="IN")


dport=domain |>>>


>>> a=_


>>> b = sr1( a )


Begin emission:
.Finished to send 1 packets.
Received 2 packets, got 1 answers, remaining 0 packets

>>> b

IP version=4L ihl=5L tos=0x0 len=140 id=0 flags=DF frag=0L ttl=64 proto=udp chksum=0xb6f1 src=192.168.1.1 dst=192.168.1.30 options='' |UDP sport=domain dport=1546 len=120 chksum=0x9544 |DNS id=0 qr=1L opcode=QUERY aa=0L tc=0L rd=0L ra=1L z=0L rcode=ok qdcount=1 ancount=5 nscount=0 arcount=0 qd=DNSQR qname='www.google.com.' qtype=A qclass=IN |> an=DNSRR rrname='www.google.com.' type=A rclass=IN ttl=163 rdata='74.125.235.144' |DNSRR rrname='www.google.com.' type=A rclass=IN ttl=163 rdata='74.125.235.148' |DNSRR rrname='www.google.com.' type=A rclass=IN ttl=163 rdata='74.125.235.146' |DNSRR rrname='www.google.com.' type=A rclass=IN ttl=163 rdata='74.125.235.145' |DNSRR rrname='www.google.com.' type=A rclass=IN ttl=163 rdata='74.125.235.147' |>>>>> ns=None ar=None |>>>



足軽「僕が思ったことが、 a パケットが 192.168.1.1(DNS)に送って、192.168.1.1が正規のパケットb を返すまでに、
ニセパケット C(まだ存在しないけど)を aのsource(192.168.1.30)に送るってことで合ってるよね?」

我ながら糞下手くそな説明に対して

しゅーと「そうやよ」

と理解してくれました。


わかったこと…

足軽: 相当早いですよねこれ・・・
しゅーと: 1msの世界
足軽: アセンブリ?(ゲラゲラ
しゅーと: アセンブリ(真顔)

Wakatono様はCらしいのでCで書くしか無いですけど、
相当処理早くしないとこれ追いつかないです。。キャッシュもポイゾニングもできないです…

======


DNSキャッシュポイゾニングは

ポート番号とトランザクションIDが一致しないといけない
それを一致させるためにランダムで送りまくる


さらに一回キャッシュするとTTL内は再問い合わせしなくなる
だから「普通」ならDNSキャッシュポイズニングは成功しにくい
でもサーバによってはポート番号固定(53番)にしてるうんこ設定があるから決め打ちすればエントロピーは2^16にグッと下がる

カミンスキー攻撃は、キャッシュをされないようにしてる=TTLが0になる

普通の攻撃ではキャッシュされたらTTL分(5−10分くらい)待たないといけないけど、
カミンスキー攻撃ならまた成功するまでずっと続けられる

っていうことですな。

けど、BINDのバグってもうほとんど無さそう