ビーコンの創出

なんか作ったり報告したり。

DNSの通信を体験してきました(セキュリティ・キャンプ勉強会)

2017年10月31日にセキュリティ・キャンプ勉強会があったので行ってきた日記。

講師:金子 正人さん(IPAセキュリティ・キャンプグループ)

 

DNSについて

よく見るあの図(キャッシュサーバと権威サーバがイチャイチャしてるやつ)が登場。

  • UDP通信でありコネクションレスだよ
  • キャッシュサーバに再帰問い合わせ
  • 権威サーバには反復問い合わせ
  • 質問(名前、リソースレコードタイプ、クラス)が必須
  • 名前とはドメイン名のこと(例:www.example.com)
  • リソースレコードタイプ(例:A, CNAME, MX, NS, SOA, TXT)
  • クラスは常にINクラス。インターネットが発達する前に必要かと思われた残骸。
  • メッセージフォーマットのセクションは5つ(Headerなど)

ヘッダーやタイプなどの仕様はこちらを見ながら確認しました。

Chapter 15 DNS Messages

Domain Name System (DNS) Parameters

 

実際にやってみよう

ブラウジングしながらWiresharkでパケットを観察。フィルターは"udp port 53"。

 

f:id:souring:20171101000322p:plain

Questionセクションの様子。3www8facebook3com0,0001,0001より、ドメイン名www.facebook.com、タイプA、クラスINとなっていることが確認できる。

 

digでDNSリクエストを送ることもできる。

f:id:souring:20171101000446p:plain

1...000..0..0..1..1..と見えるのはHeaderセクションの様子。RD=1でキャッシュサーバに問い合わせてRCODE=0000と正しく受理されている。

 

f:id:souring:20171101000558p:plain

ただし +norec (no recursive : 反復問い合わせ)でキャッシュサーバに問い合わせるとRD=0でRCODE=0101となりRefuseされた。

 

DNSはバイナリでリクエストを送るためtelnetとかできない。そのためコードを書く必要がある。

このあと、講師の方が書いたコードを使って好きなDNSリクエストを送って楽しんだ。なお、digではできない任意のリクエストも送れてしまうため、扱いには注意が必要である。

 

セキュリティについて

コネクションレスUDPを使っているがidで返答を理解している。idは2^16通りしかないので全通り試して偽装できる。これがキャッシュポインズニングできてしまう原因である。

 

感想

ネットワークスペシャリスト試験の勉強でDNSがまあしょっちゅう出てくるので、そこで知っていたことと結びついて面白かった。あ、ここネスペでやったところだ!実際に手を動かすことでより深く知ることができたと思う。あとチューターの方がめちゃくちゃ詳しかった。頼りになりました。

 

続き

souring.hatenablog.com