どーも。ばぁどです。
念願だったマルウェア解析スクリプトがついに完成しました。
(ソースコード公開していますが、ファイルパスとか独自のものなので、そのままは使えないと思います!)
github.com
初めてのPython。
ほぼ、初めてのshellscript。
なんかプログラマとしてそれ以前に考慮しなきゃいけないところとかあるのですが・・・
ファイル名微妙だし、ソースコードの中身はすごい汚いし、コメントも入ってないので、これから随時リファクタリングなどを行なっていきます。
一旦、スクリプトが完成したのでその共有でした。
次回の観察日誌からマルウェアの解析結果を載せることができそうです。
開発TIPS
Virus total
今回はVirus totalのAPIを使用しました。
developers.virustotal.com
file-report以外にもエンドポイントがあるみたいなので、そちらの方が良ければ、そっち使います。
Virus totalのAPIは1分間におけるAPIの使用回数があるので、4回実行したら一度60秒以上待つ必要があります。(ソースコード中は65秒で設定)
実行結果の例(2018年11月23日19:00 現在)
# python check.py
START SCRIPT
[LOG] Check: tmpfQnHEL
[LOG] Check: tmpe4ebw9
[LOG] Check: tmpKZEhAq
[LOG] Check: b33b30c3cc7e027320e4d203303cc36a4e84b44451278bbb524ec54d5f61a4d6
[LOG] Sleep 65 seconds.
[LOG] Check: tmpiBhhlP
[LOG] Check: tmpyl2ld4
[LOG] Check: tmpeXn97K
[LOG] Check: tmpKWk7Vv
[LOG] Sleep 65 seconds.
[LOG] Check: 872950739d98fdb6385e024e2bb3b8879e4e9387a4afc4a8a69b7f309b13279f
===================[LOG] FAILED API======================
{u'response_code': 0, u'resource': u'872950739d98fdb6385e024e2bb3b8879e4e9387a4afc4a8a69b7f309b13279f', u'verbose_msg': u'The requested resource is not among the finished, queued or pending scans'}
[LOG] Check: 2b5ce510a3d9a2ac1b3638bd32944cdc125d9c53f87c4d10ac4852f12683be05
[LOG] Check: tmpFAKOif
[LOG] Check: tmprusSbe
[LOG] Sleep 65 seconds.
[LOG] Check: tmpbTUvYJ
[LOG] Check: tmpNy7R6x
[LOG] Check: tmp84HPF3
[LOG] Check: tmpAQ0Gnf
[LOG] Sleep 65 seconds.
[LOG] Check: tmpaKo7_E
[LOG] Check: tmpfXFEXD
[LOG] Check: 79197e90329ff0c84b88e3eaa4f0ce1393bae0df74752272dea84db849798231
[LOG] Check: 9c2848962733846bf50b490fd8f6c7ce9ecade2d3f2f530f5ecbba283af87d3a
[LOG] Sleep 65 seconds.
[LOG] Check: 5685b086ce12ffede8814e303223a67eca476735dfe4e9e84b751354a5ea0232
[LOG] Check: 86fbdd7df9486a17e9c408c7e50635e26402fdf297c9e97f1a5256100401dcc5
[LOG] Check: 5c8c41253aa68adeb955e7d1c7b8e084e06537f75eff12c3f3a0f3cb30cb2152
[LOG] Check: 0ffa9e646e881568c1f65055917547b04d89a8a2150af45faa66beb2733e7427
[LOG] Sleep 65 seconds.
[LOG] Check: tmp1Q7jBF
[LOG] Check: tmp9df5pF
[LOG] Check: tmpApB9Dx
[LOG] Check: tmpC1igwO
[LOG] Sleep 65 seconds.
[LOG] Check: tmp_HKrPu
[LOG] Check: tmp0f4rsH
[LOG] Check: tmpLSkNE7
[LOG] Check: tmpE8bXAp
[LOG] Sleep 65 seconds.
[LOG] Check: f72d5721e2246d68faa22ed9fc7a2b903ff95eb2f7047fe79599cf42e772f138
[LOG] Check: tmpA3Cj85
[LOG] Check: tmp8khfH6
[LOG] Check: tmpZVtSCx
[LOG] Sleep 65 seconds.
[LOG] Check: tmpM771xe
[LOG] Check: tmpdvxYCI
[LOG] Check: tmpLZDt81
[LOG] Check: tmpJDc7Zr
[LOG] Sleep 65 seconds.
END SCRIPT
なにやら一つだけVirus totalでは解析できないものがあるなぁ。
調べるか。
解析結果
取り急ぎ、前回分までのマルウェアの解析結果。
取得日時: 11月4日 〜 11月16日分
マルウェア総数:40個
file コマンド
ついでにfile
コマンドの結果。本当は上記の表に加えたい。
./0ffa9e646e881568c1f65055917547b04d89a8a2150af45faa66beb2733e7427: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
./2b5ce510a3d9a2ac1b3638bd32944cdc125d9c53f87c4d10ac4852f12683be05: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
./5685b086ce12ffede8814e303223a67eca476735dfe4e9e84b751354a5ea0232: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
./5c8c41253aa68adeb955e7d1c7b8e084e06537f75eff12c3f3a0f3cb30cb2152: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped
./79197e90329ff0c84b88e3eaa4f0ce1393bae0df74752272dea84db849798231: a /usr/bin/perl script executable (binary data)
./86fbdd7df9486a17e9c408c7e50635e26402fdf297c9e97f1a5256100401dcc5: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped
./872950739d98fdb6385e024e2bb3b8879e4e9387a4afc4a8a69b7f309b13279f: ASCII text
./9c2848962733846bf50b490fd8f6c7ce9ecade2d3f2f530f5ecbba283af87d3a: ELF 32-bit LSB executable, ARM, version 1 (ARM), statically linked, stripped
./b33b30c3cc7e027320e4d203303cc36a4e84b44451278bbb524ec54d5f61a4d6: Bourne-Again shell script executable (binary data)
./f72d5721e2246d68faa22ed9fc7a2b903ff95eb2f7047fe79599cf42e772f138: a /usr/bin/perl script executable (binary data)
./tmp0f4rsH: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmp1Q7jBF: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmp84HPF3: empty
./tmp8khfH6: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmp9df5pF: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpA3Cj85: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpAQ0Gnf: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpApB9Dx: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpC1igwO: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpE8bXAp: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpFAKOif: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpJDc7Zr: empty
./tmpKWk7Vv: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpKZEhAq: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpLSkNE7: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpLZDt81: empty
./tmpM771xe: empty
./tmpNy7R6x: empty
./tmpZVtSCx: empty
./tmp_HKrPu: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpaKo7_E: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpbTUvYJ: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpdvxYCI: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpe4ebw9: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpeXn97K: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpfQnHEL: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpfXFEXD: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpiBhhlP: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmprusSbe: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
./tmpyl2ld4: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
Virus Totalでは解析できなかったやつ
ファイル名:872950739d98fdb6385e024e2bb3b8879e4e9387a4afc4a8a69b7f309b13279f
file
コマンドの結果
./872950739d98fdb6385e024e2bb3b8879e4e9387a4afc4a8a69b7f309b13279f: ASCII text
中身
※ウイルスというか単なるコマンドだったので大丈夫だよね?(問題あれば消します)
cd /tmp/
./udp25000&
/etc/init.d/iptables stop
/tmp
フォルダ下に移動して、udp
をどうにかしようとしているのか?(わからない)
iptables
をストップさせようとしているのはわかった。
悪い子ですね。
そりゃスクリプト記述されているだけなんだから、VirusTotalで解析できるわけがないや。
まとめ
今回はスクリプト完成のご報告。
次回からマルウェアの解析結果も掲載できます。
今は最低限の情報しか掲載していないので、今後スクリプトで情報を追加していきます。