おふとん

IT全般、セキュリティとかCTFとかに偏りがち

INetSimにおいてドメインによってレスポンスを変える方法

1.前提

INetSimはDNSSMTP(S)、FTP(S)、HTTP(S)、POP3(S)など様々なサービスを模倣してくれるソフトウェアです。
例えばマルウェアのC2サーバを解析したい場合は、DNSの設定でデフォルト値を192.168.100.3にすると全ての名前解決が192.168.100.3で返されます。
f:id:yu_sh38:20181007042925p:plain

2.問題

INetSimはHTTPリクエストに対してデフォルトの設定の場合、固定のページを返します。
f:id:yu_sh38:20181007032325p:plain
よってマルウェアがC2サーバに情報を送信した後に、C2サーバが返すレスポンスを受け取った後のマルウェアの挙動はこの手法では見ることが出来ません。

ただC2サーバの挙動が完全に分かっていなければレスポンスを模倣することが出来ないため、ここでの問題とは別です(インターネットに繋がっている環境で解析するのは他人に迷惑をかけるのでダメ絶対)

今回問題となったのはある検体がC2サーバに送っている以下の情報です。
f:id:yu_sh38:20181007034353p:plain

見事なまでに先ほどのデフォルトのページがIP部分に入り込んでいますね...
この検体ではそのまま送信されましたが、検体によってはこの時点で解析環境だと判断し、動作を中断するものも存在します。

3.原因

これらの検体はホストのグローバルIPを取得するために(解析環境判別も兼ねている?)まずapi.ipify.orgにアクセスします。このAPIは悪質なものではなく、外から見た自分のIPアドレスを返す公開APIです。マルウェアはこのAPIを用いて感染ホストのグローバルIPを判別し、C2サーバに送信しています。
f:id:yu_sh38:20181007034800p:plain

しかしながらこの環境では全ての名前解決が192.168.100.3に返されるため、この通信のレスポンスもデフォルトのページとなってしまっています。その結果があの哀れなIPアドレスです。

4.解決?

INetSimのHTTPサーバの模倣で、パターンマッチで特定のページを返すような機能はないか調べました。その結果、/etc/inetsim/inetsim.confにおいて

デフォルト設定:http_default_fakefile <リソース名> <MIMEタイプ>
拡張子マッチング:http_fakefile <拡張子> <リソース名> <MIMEタイプ> 
Pathマッチング:http_static_fakefile <Path> <リソース名> <MIMEタイプ>

によって返すページを動的に変えることが出来るようです。

しかしながら今回の問題では
デフォルト設定:デフォルトでIPアドレスのみを返すような設定は他の問題を招くかもしれない
拡張子マッチング:拡張子を指定していないアクセス
Pathマッチング:"/"へのアクセスはデフォルト設定に近いので同じ理由で無し

よって今回はDNSの設定で解決しました。
/etc/inetsim/inetsim.confに

dns_static api.ipify.org 192.168.100.4

と書き加え、新たにホスト192.168.100.4を仮想環境内に作成しました。
そして192.168.100.4でもHTTPサーバを建て、IPを返すような処理を行うことで解決しました。
f:id:yu_sh38:20181007042559p:plain

5.課題

様々なサイトへアクセスする検体の場合、その分だけホストが必要になるのでは?
→現状だとそうなってしまいます...Hostヘッダを見て処理を変えるのは出来るはずなので必要となったら調べたい