LoginSignup
49
42

More than 5 years have passed since last update.

DNSリバインディング対策

Last updated at Posted at 2013-10-28

DNSリバインディング攻撃とは

概要

罠サイトと罠DNSサーバを運営する攻撃者が、
短期間にドメイン(FQDN)に対応するIPアドレスを変更することで
SameOriginPolicyの範囲内で脆弱性サイトへjsによる攻撃を行う。

ステークホルダー

  • 攻撃者
  • 攻撃者運営のDNS(TTL/キャッシュ生存期間を5秒程度に設定)
  • 攻撃者運営の罠サイト(evil.example.com)(192.0.2.1
  • 脆弱性サイト(weak.example.jp)(198.51.100.1
  • 被害者

攻撃の流れ

  1. 被害者が罠サイト(evil.example.com)を閲覧

  2. 攻撃用JavaScript(※)が被害者に送信される
    ※例えば「evil.example.com」上の特定コンテンツにアクセスし、得られた情報を192.0.2.1(evil)に返す、など。

  3. 攻撃者がDNSのAレコードを操作し、evil.example.com198.51.100.1(weak)を指すように変更する。

  4. この時点で、evil.example.com上で実行できるJavaScriptは、脆弱性サイト198.51.100.1(weak)に対する操作ができる状態となる。

  5. そのタイミングに沿って罠スクリプトが発火すれば、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

49
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
42