ばぁど・うぉっちんぐ

セキュリティを頑張りたいプログラマ。自由と春を求めて羽ばたく渡り鳥。

ばぁどのハニーポット・うぉっちんぐ - T-Pot(Cowrie) で取得したマルウェアをローカルに持ってくる -

ばぁどです。

AWSのEC2上に構築した、T-PotのCwrieでキャプチャしたマルウェアをローカルに持ってくるのが凄い苦労しました。

今回は、その苦労話です苦笑

観察日記というよりは、トラブルシューティングです。

最終的なscpコマンド

色々と試行錯誤をしまして下記のscp コマンドにたどり着きました。 今回は、i オプションと、Pオプションを使用しました。

オプション 説明
i 接続に使用する公開鍵ファイルを指定
P 接続先のポート番号を指定
scp -i "pemのあるURL" -P [port番号] [user名]@[ドメイン]:[サーバー内のURL] [ローカルのURL]

ハマりポイント1. ポート番号を指定していなかった

初期はポート番号を指定せずにコマンドを打っていました。

結果はPermission deniedです。

Permission denied (password,publickey,keyboard-interactive).

まずはここの調査になります。

ここで気になったところは、私が構築しているハニーポットsshする時にポート番号を指定しているということ。

ssh時にポート番号を指定している理由は、 セキュリティ上ssh する時のポート番号を変更していたためです。 scpで利用するポート番号を調べたところ、指定しない場合はssh のデフォルトである22を利用するということだったので、ここはポート番号を指定することで難なく突破。

なんとなくここはエラー見たときに察しはついたんだよなー。

ハマりポイント2. フォルダ・ファイルへのアクセス権限がなかった

次になんとなくscpできるようにはなったので、Cowireで取得したマルウェアをローカルに持ってきます。

T-pot上では、Cowire で取得したマルウェアは下記ファイルパスに格納されます。

/data/cowrie

[[ユーザー名]@consciousdesert:/data/cowrie]# ls -la
total 11072
drwxrw----  6 tpot tpot    4096 Oct 29 03:28 .
drwxrw---- 18 tpot tpot    4096 Sep 22 19:41 ..
drwxrw----  2 tpot tpot    4096 Oct 29 03:28 downloads
-rwxrw----  1 tpot tpot       0 Oct 28 16:28 downloads.tgz
-rwxrw----  1 tpot tpot  285266 Oct 17 03:28 downloads.tgz.10.gz
-rwxrw----  1 tpot tpot  286941 Oct 16 03:28 downloads.tgz.11.gz
-rwxrw----  1 tpot tpot  285412 Oct 15 03:28 downloads.tgz.12.gz
-rwxrw----  1 tpot tpot  285431 Oct 14 16:28 downloads.tgz.13.gz
-rwxrw----  1 tpot tpot  285271 Oct 14 03:28 downloads.tgz.14.gz
-rwxrw----  1 tpot tpot  285497 Oct 12 03:28 downloads.tgz.15.gz
-rwxrw----  1 tpot tpot    2330 Oct 28 16:28 downloads.tgz.1.gz
-rwxrw----  1 tpot tpot  285492 Oct 27 03:28 downloads.tgz.2.gz
-rwxrw----  1 tpot tpot  285294 Oct 26 03:28 downloads.tgz.3.gz
-rwxrw----  1 tpot tpot  570910 Oct 25 03:28 downloads.tgz.4.gz
-rwxrw----  1 tpot tpot  287426 Oct 24 03:28 downloads.tgz.5.gz
-rwxrw----  1 tpot tpot  285475 Oct 21 16:28 downloads.tgz.6.gz
-rwxrw----  1 tpot tpot 1572707 Oct 21 03:28 downloads.tgz.7.gz
-rwxrw----  1 tpot tpot 5713692 Oct 20 03:28 downloads.tgz.8.gz
-rwxrw----  1 tpot tpot  572817 Oct 19 03:28 downloads.tgz.9.gz
drwxrw----  2 tpot tpot    4096 Sep 22 19:41 keys
drwxrw----  3 tpot tpot    4096 Oct 29 09:09 log
drwxrw----  2 tpot tpot    4096 Sep 22 19:40 misc

上記のように、1日ごとに圧縮して保持してくれています。

ハニーポットのログを15日まで保持するように指定しているので、15日前の分までは保持していますが、それ以降のものは削除してくれています。

また、このファイルパスはroot権限を持っているユーザーでないと見えません。今回はここがポイントでした。

$ scp -i "pemのあるURL" -P [port番号] [user名]@[ドメイン]:/data/cowire/downloads/downloads.tgz.1.gz ./
scp: /data/cowire/downloads/downloads.tgz.1.gz: Permission denied

root権限でしかアクセスできないところに、ログインユーザーで取りに行こうとしてもそりゃ権限エラーになるわ。

今回は接続しているユーザー下にフォルダ(downloadsフォルダ)を作成。 そこにroot 権限でコピー。

cp /data/cowire/downloads.tgz.1.gz /home/[ユーザー名]/downloads/
$ cd /home/[ユーザー名]/downloads/
$ ls -la
total 12
drwxr-xr-x 2 root  root  4096 Oct 29 16:17 .
drwxr-xr-x 6 honey honey 4096 Oct 29 14:39 ..
-rwxr----- 1 root  root  2330 Oct 29 16:16 downloads.tgz.1.gz

ここで注目するべきは、圧縮ファイルの権限。 rootからしか見れないところにあったため最初は710の状態。

scpで持ってくれるように権限も変更しておきます。

読み取りさえできればいいはずなので、read権限を付与。

$chmod 714 downloads.tgz.1.gz 
$ls -la
total 12
drwxr-xr-x 2 root  root  4096 Oct 29 16:17 .
drwxr-xr-x 6 honey honey 4096 Oct 29 14:39 ..
-rwx--xr-- 1 root  root  2330 Oct 29 16:16 downloads.tgz.1.gz

さぁ、scpだ!!

$scp -i "pemのあるURL" -P [port番号] [user名]@[ドメイン]:/home/[ユーザー名]/downloads/downloads.tgz.1.gz ./
downloads.tgz.1.gz                            100% 2330   132.9KB/s   00:00 

無事に成功!歓喜

ローカルに持ってこれた!!

$ ls -la
total 568
drwxr-xr-x  5 hatoritakuya  staff     160 Oct 29 16:25 .
drwxr-xr-x  3 hatoritakuya  staff      96 Oct 24 20:14 ..
-rwx--xr--  1 hatoritakuya  staff    2330 Oct 29 16:22 downloads.tgz.1.gz

あとは、解凍してマルウェアを解析できる状態にするだけです。

gzの解凍はgunzipコマンド。

$ gunzip downloads.tgz.1.gz 
$ ls -la
total 568
drwxr-xr-x  5 hatoritakuya  staff     160 Oct 29 16:27 .
drwxr-xr-x  3 hatoritakuya  staff      96 Oct 24 20:14 ..
-rwx--xr--  1 hatoritakuya  staff    2307 Oct 29 16:22 downloads.tgz.1

続いて、tgzの解凍。 使用するのは、tarコマンド。 オプションは-xzvfを使用。

結構-xzvfはおまじないみたいに使っているので、このタイミングで調査。

オプション 説明
x externalの略。ファイルを抽出する。
z 圧縮する形式としてgzip形式を利用する。圧縮、展開時両方指定可能。(拡張子は「.tar.gz」または「.tgz」)
v verbose の略。処理したファイルを詳しく出力。
f ファイル名指定

コマンドを実行。

$ tar -xzvf downloads.tgz.1
$ ls -la
total 568
drwxr-xr-x  5 hatoritakuya  staff     160 Oct 29 16:27 .
drwxr-xr-x  3 hatoritakuya  staff      96 Oct 24 20:14 ..
drwxr-xr-x  3 hatoritakuya  staff      96 Oct 29 16:25 data
-rwx--xr--  1 hatoritakuya  staff    2307 Oct 29 16:22 downloads.tgz.1

新しくdataフォルダが作成される。

data以降のファイルパスは、T-potと同じパスで展開されます。

$ cd data/cowrie/downloads/
$ ls -la
total 1224
drwxr-----  3 hatoritakuya  staff      96 Oct 29 16:33 .
drwxr-xr-x  3 hatoritakuya  staff      96 Oct 29 15:01 ..
-rwxr-----  1 hatoritakuya  staff  625867 Oct 26 03:53 tmpo3Qp_6

今回目的のマルウェアを発見!!

あとはこのマルウェアを焼くなり、煮るなりする (マルウェアの解析は仮想環境でやりましょう)

まとめ

マルウェアをscpで持ってくる方法を今回はまとめました。

やっとマルウェア解析できる。

今月、マルウェアの表層解析、動的解析、静的解析を勉強していたので、このマルウェアの調査結果もアウトプットしていきます。