DNS検索結果に依存したセキュリティ判断

DNS検索結果に依存したセキュリティ判断

説明

DNSの正引きや逆引きの結果を、信頼の判断、アクセス許可、認証に直接使うと、DNS偽装、キャッシュポイズニング、リバインディングによって回避される可能性があります。

想定される影響

  • 攻撃者がDNS応答を操作し、信頼されたホストに見せかける可能性があります。
  • 逆引きのDNS名だけでアクセスが許可される可能性があります。

対処方法

  • 認証とアクセス許可の判断には、TLSクライアント認証、署名付きトークン、サーバー側の認可など、DNSに依存しない根拠を使用してください。
  • ネットワーク上の位置を確認する必要がある場合は、解決したIPアドレスを承認済みのCIDR範囲と比較し、リダイレクト後も再検証してください。

例

DNSだけに基づくアクセス許可

python
addr = socket.gethostbyname(host)
if addr == TRUSTED_IP:
    grant_access()

追加のネットワーク確認

python
addr = ipaddress.ip_address(socket.gethostbyname(host))
return addr in TRUSTED_NET

説明:

  • 脆弱なコード: DNS検索結果をアクセス許可に直接使うため、DNS応答の操作によって判断が回避される可能性があります。
  • ネットワーク確認の例: 追加の確認として、解決したIPアドレスを承認済みのCIDR範囲と比較します。このコードだけで呼び出し元の身元を確認したり、アクセスを許可したりしてはいけません。認証と認可はDNSから独立して行ってください。

参考資料