setodaNote

忘れる用のメモ書き

解析環境:HTTPS通信も解析できるマルウェア解析環境の構築

以下のサイトで INetSim と BurpSuite を使って HTTPS に対応した形の 解析環境構築方法が紹介されていたので、これを参考にして HTTPS通信も解析できるマルウェア解析環境を作ってみる。

www.freebuf.com

目次

解析環境の概要

f:id:soji256:20180805132336p:plain:w500
解析環境の概要

REMnux の準備

REMnux をダウンロード。

REMnux: A free Linux Toolkit for Reverse-Engineering and Analyzing Malware

直リンク:download the REMnux virtual appliance file

VMware や VirtualBox でインポートする。 ここではVMware を使う前提で進める。 インポート後、初期状態はネットワークが NAT となっているので、 LANセグメントに変更する。

f:id:soji256:20180805125214p:plain
LANセグメントに変更

起動する。

f:id:soji256:20180805092747p:plain
起動直後

画面が小さいと作業がしずらいので適宜調整する。 解像度は左下のスタート的なところから[Preferences]->[Monitor Settings]で変更できる。

キーボードマップを日本語にする(オプション)

vi ~/.bashrc

以下を末尾に追記
setxkbmap jp

読み込み直す
source .bashrc

時刻について

今回構築した際、 タイムゾーンがJSTではないまま時刻のみがホストと同期されてしまった。 対向のWindows端末はJSTとしてホストと同期されており、 後で作成するSSL用証明書の有効期間にずれが生じてうまくいかなくなるため 時刻を修正した。

VMwareの環境設定によっては修正が不要なところだと思う。

タイムゾーンの変更

分かりやすさのために、 まずタイムゾーンをJSTに変更する。

sudo dpkg-reconfigure tzdata
  -> Asia
  -> Tokyo

f:id:soji256:20180805124023p:plain
タイムゾーンの変更

時刻の設定

次に時刻を修正する。

sudo date MMDDhhmmYYYY

ホストの時刻と合わせる。例えば 2018/08/05 12:00 に設定する場合は以下のようになる。

sudo date 080512002018

時刻修正はSSL用証明書の発行前( = BurpSuite を実行する前)に実施する必要がある。

IPアドレスの設定

現在の設定内容を確認する。

sudo vi /etc/network/interfaces

初期は以下のようになっているはず。

# The primary network interface
auto eth0
iface eth0 inet dhcp

これを次のとおり変更する。

# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.100.1
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
gateway 192.168.100.1

上記設定を反映させる。

sudo ifdown eth0
sudo ifup eth0

f:id:soji256:20180805100430p:plain
IPアドレスの設定

INetSim の設定

INetSim の環境設定を変更する。

sudo vi /etc/inetsim/inetsim.conf

service_bind_address

#service_bind_address   10.0.0.1

以下の通り変更
service_bind_address    0.0.0.0

dns_default_ip

#dns_default_ip    10.0.0.1

以下の通り変更
dns_default_ip    192.168.100.1

https_bind_port

#https_bind_port 443

以下の通り変更
https_bind_port 8443

INetSim を起動

INetSim を起動する。
管理者権限でないと最終的にhttpsの通信がうまくいかないので注意。

sudo inetsim

f:id:soji256:20180805101222p:plain
INetSim を起動

fakedns を起動

別タブを開いて(Ctrl+Shift+T)から以下を入力。

fakedns 192.168.100.1

f:id:soji256:20180805101303p:plain
fakedns を起動

BrupSuite を起動

さらに別タブを開いて(Ctrl+Shift+T)から以下を入力。
管理者権限で実行しないと 443 を利用できないので注意。

sudo burpsuite

確認画面が表示されるので、 適宜、確認してから "I Accept" で進める。

f:id:soji256:20180805101557p:plain
BrupSuite を起動

起動直後の状態。

f:id:soji256:20180805101750p:plain
起動直後のBrupSuite

Proxy タブから Intercept を選ぶ。
今回はパケットを止める必要はないのでインターセプトをオフにしておく。
ボタンはトグルになっており、以下はオフの状態。

f:id:soji256:20180805101947p:plain
インターセプトをオフに

次にポートを設定する。Option タブを開く。

f:id:soji256:20180805102126p:plain
Option タブ

Edit から 443で受け付けて8443にリダイレクトする形に変更する。

f:id:soji256:20180805102233p:plain
443を8443にリダイレクト(1/2)

f:id:soji256:20180805102259p:plain
443を8443にリダイレクト(2/2)

確認が出るので Yes とする。

f:id:soji256:20180805102340p:plain
確認

変更後の状態。

f:id:soji256:20180805103741p:plain
変更後の状態

HTTPS の接続確認

さらに別タブを開いて(Ctrl+Shift+T)から以下を入力。

curl --insecure https://localhost

以下のように表示されればOK

<html>
 <head>
 <title>INetSim default HTML page</title>
 </head>
 <body>
 <p></p>
 <p align="center">This is the default HTML page for INetSim HTTP server fake mode.</p>
 <p align="center">This file is an HTML document.</p>
 </body>
</html>

f:id:soji256:20180805102542p:plain
HTTPS の接続確認

以上で REMnux 側の設定はひとまず完了。
次にこれに接続する Windows 端末の設定をしていく。

Windows端末の準備

VMware の設定からネットワークを REMnux と同じLANセグメントに変更する。

f:id:soji256:20180805102910p:plain
LANセグメントに変更

起動する。

IPアドレスの設定

以下の通りIPアドレスを設定する。

IPアドレス : 192.168.100.2
サブネットマクス : 255.255.255.0
デフォルトゲートウェイ : 192.168.100.1

優先DNSサーバー : 192.168.100.1

f:id:soji256:20180805102954p:plain:w483
IPアドレスの設定

ひとまず設定は以上で完了。次に INetSim との接続を確認する。

接続の確認

http の接続確認として、 Windows端末のIEから以下にアクセスする。

http://example.com/

うまくいくと以下のような画面が表示される。

f:id:soji256:20180805103353p:plain
接続の確認

次にhttps の接続確認をする。

https://example.com/

うまくいくと以下のような画面が表示される。 いま時点では証明書のインストールをしていないので、 エラーになっているのが正しい状態。

f:id:soji256:20180805103834p:plain
接続確認(HTTPS)

証明書のインポート

証明書のエラーを解消するために、 証明書を信頼されたものとしてインポートする。

まず REMnux 側の BurpSuite で以下のようにポートを追加する。
この設定は解析に不要なので設定後に忘れずに削除しておく。

f:id:soji256:20180805104146p:plain
ポートを追加(1/2)

f:id:soji256:20180805104202p:plain
ポートを追加(2/2)

設定後、Windows 端末から以下にアクセスする。

http://192.168.100.1:8080/

右上にある「CA Certificate」をクリックして証明書をダウンロードする。

f:id:soji256:20180805104423p:plain
証明書のダウンロード

f:id:soji256:20180805104510p:plain:w507
証明書のインポート

証明書をインストールする。

f:id:soji256:20180805104649p:plain:w359
証明書のインストール(1/3)

[証明書のインストール]->[次へ]->[すべての証明書を次のストアに配置する]を選択し[信頼されたルート証明機関]を選ぶ。

f:id:soji256:20180805104734p:plain
証明書のインストール(2/3)

警告が表示されるので「はい」を選ぶ。

f:id:soji256:20180805104924p:plain:w503
証明書のインストール(3/3)

再度、アクセスすると証明書のエラーもなく接続できる。

f:id:soji256:20180805122737p:plain
HTTPS接続の確認

以上で、HTTPS通信も解析できるマルウェア解析環境の構築が完了。

最後に

最後に、証明書をダウンロードするために設定した 8080 ポートの設定を BurpSuite から忘れずに削除しておく。

うまくいかないとき

Firefox について

Firefox では設定から証明書をインポートする必要がある。

f:id:soji256:20180805123219p:plain
Firefox での設定(1/2)

f:id:soji256:20180805123244p:plain
Firefox での設定(2/2)

Chrome について

今回の方法では Chrome はうまくいかない。

f:id:soji256:20180805123335p:plain
Chrome について(1/2)

Fiddler で HTTPS を復号するような設定をするとうまく接続される。

f:id:soji256:20180805123606p:plain
Chrome について(2/2)

ただし、今度はFirefoxがうまく接続できなくなる。 なお IE はいずれの場合もうまく接続できる。

service_bind_address の設定を確認

service_bind_address が 192.168.100.1 などになっていると http は成功するが https は BurpSuite のエラー画面が表示されてしまう。 以下のように 0.0.0.0 に設定されていることを確認する。

service_bind_address    0.0.0.0

証明書の有効期限の確認

REMnux の時刻が正しくないと、証明書の有効期限が未来になっている場合がある。 Windows端末から証明書を開き、有効期限が未来でないことを確認する。 もし未来になっている場合は、BurpSuite の設定をクリアしてから再設定する。

BurpSuite の設定クリア

BurpSuite を起動後、上部のHelpから実行できる。 [Help]->[Clean burp from computer]から上2つのチェックだけを入れて実行する。

f:id:soji256:20180805122145p:plain
BurpSuite の設定クリア

証明書なども再発行されるので、時刻設定を間違えたときにはこれを実施する。

参考にしたサイト

更新履歴

2018/08/11 全体的に記載を簡潔に修正。