2008年12月23日

Team Cymru の Malware Hash Registry を使うための Perl スクリプト

ファイルの HASH値を whois (43/tcp) または dns (53/udp) で問い合わせると、それがマルウェアのデータベースに登録されているか否かを答えてくれるサービスを Team Cymru が提供しています。

Team Cymru - Malware Hash Registry
http://www.team-cymru.org/Services/MHR/

そこで、ファイルを指定するだけで HASH値を調べて、このサービスに問い合わせ、結果を表示してくれる Perl スクリプトを作ってみました(ちょっと見難いですが…)。
#!/usr/bin/perl

$#ARGV == 0 || die "$0 needs one argument!\n";

$file = "$ARGV[0]";
-e "$file" || die "$file: no such file!\n";

$sha1 = "openssl sha1";
$qfmt = "dig +short %s.malware.hash.cymru.com TXT";

open(SHA1, "$sha1 \"$file\" |") || die "Can't open \"$sha1\"!\n";
$_ = join "", <SHA1>;
close(SHA1);

( $digest ) = /([0-9a-f]{40})/;
( $digest eq "" ) && die "Can't find SHA1!\n";

$qcmd = sprintf("$qfmt", $digest);
open(QUEUE, "$qcmd |") || die "Can't open \"$qcmd\"!\n";
$_ = join "", <QUEUE>;
close(QUEUE);

( $t, $p ) = /\"([0-9]+) ([0-9]{1,3})\"/;
if ( $t ne "" && $p ne "" ) {
print "$p% (";
print scalar localtime($t);
print ")\n";
exit(1);
} else {
print "no data in database.\n";
}

exit(0);
これは内部から HASH値の取り出しに openssl、dns問い合わせに dig を使っています。大概の Unix系 OS ならばこのまま使えると思いますが、Windows のように標準でこれらのコマンドを有していない場合は次のように書き換えてください。

(1) HASH値の取り出し
(旧) $sha1 = "openssl sha1";
(新) $sha1 = "fciv -sha1";
fciv は Windows 標準ではありませんが、Microsoft が無償で提供しているツールです。

Microsoft サポート オンライン
可用性と ファイル チェックサム整合性検証 ユーティリティの説明
http://support.microsoft.com/kb/841290/ja

fciv.exe を PATH の通った場所にインストールしてください。

(2) dns問い合わせ
(旧) $qfmt = "dig +short %s.malware.hash.cymru.com TXT";
(新) $qfmt = "nslookup -q=txt %s.malware.hash.cymru.com 2>&1";

また dnsではなく whoisを使う場合は次のように書き換えてください。
(旧) $qfmt = "dig +short %s.malware.hash.cymru.com TXT";
(新) $qfmt = "whois -h hash.cymru.com %s";
(旧) ( $t, $p ) = /\"([0-9]+) ([0-9]{1,3})\"/;
(新) ( $t, $p ) = /^$digest ([0-9]+) ([0-9]{1,3})/;

なお、Windows では ActivePerl 5.10.0 での動作を確認しています。

ActivePerl
http://aspn.activestate.com/ASPN/Downloads/ActivePerl/
posted by yamaga at 10:41| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック