##DNSリバインディング攻撃とは
###概要
罠サイトと罠DNSサーバを運営する攻撃者が、
短期間にドメイン(FQDN)に対応するIPアドレスを変更することで
SameOriginPolicyの範囲内で脆弱性サイトへjsによる攻撃を行う。
###ステークホルダー
- 攻撃者
- 攻撃者運営のDNS(TTL/キャッシュ生存期間を5秒程度に設定)
- 攻撃者運営の罠サイト(evil.example.com)(192.0.2.1)
- 脆弱性サイト(weak.example.jp)(198.51.100.1)
- 被害者
###攻撃の流れ
-
被害者が罠サイト(evil.example.com)を閲覧
-
攻撃用JavaScript(※)が被害者に送信される
※例えば「evil.example.com」上の特定コンテンツにアクセスし、得られた情報を192.0.2.1(evil)に返す、など。 -
攻撃者がDNSのAレコードを操作し、evil.example.comが198.51.100.1(weak)を指すように変更する。
-
この時点で、evil.example.com上で実行できるJavaScriptは、脆弱性サイト198.51.100.1(weak)に対する操作ができる状態となる。
-
そのタイミングに沿って罠スクリプトが発火すれば、198.51.100.1(weak)上の個人情報の取得など、攻撃が成立する。
##対策
特性上、攻撃は必ず罠サイトのホスト(evil.example.com)から行われるのが肝。
apacheのVirtualHostは、未定義のホスト(SeverName)に対するリクエストが来た場合、
最初の定義がデフォルトとして適用される。
これを利用して、最初にdummyのVirtualHostを定義しておくことで、
罠サイト(evil.example.com)からのアクセスに対しては404を返すことが出来る。
# ダミーVirtualHost
<VirtualHost *:80>
ServerName dummy.example.jp # 正規のホスト名以外ならなんでもok
DocumentRoot /var/www/dummy
ErrorDocument 404 /index.html
</VirtualHost>
# 正規のVirtualHost
<VirtualHost *:80>
ServerName weak.example.jp
DocumentRoot /var/www/html
</VirtualHost>
##tips
weak.example.jpに対して、ホストを偽装(evil.example.com)してアクセス可能かどうか、
つまりDNSリバインディング可能かどうかチェックできる。
curl -v -H 'Host: evil.example.com' http://$(dig weak.example.jp | grep -v '^;' | grep 'A' | awk '{print $5}')
##参考
DNSリバインディング
http://itpro.nikkeibp.co.jp/article/COLUMN/20130218/456766/?ST=security&P=1
間違いだらけの「かんたんログイン」実装法 (3/3)
http://www.atmarkit.co.jp/ait/articles/1103/01/news125_3.html
DNSのTTL設定とは?
http://kazamidori.net/kaoru/2007/03/ttl1.html