イベイシブ攻撃用のプログラムを組む

セキュリティ対策用の記事です。仕組みを解説するためのコードであって幇助しているわけではありません。実際に悪用しないでください

ネット上での不正なハッキング(クラッキング)手段の一つ、イベイシブ攻撃が具体的にどのようなコードになるのか解説する。非常にシンプルなコード、原理で実現できる。

過去にアクセスのあったIPアドレスを記録しておき、現在のアクセス者が履歴にあれば正常なページを、無ければ違法なページを表示するというもの。また検索エンジンにもSPAM的な行為を行い、正常なページが登録されるように仕組まれている。

コード例

わずかこれだけのコードで実現できてしまうという簡便さなのですが、そのシンプルさが逆に摘発のしにくさを招いているのでしょう。なお、ここでは実際に運用するには効率が悪くなるようわざと作っています。

#!/usr/bin/perl

;#
;#イベイシブ攻撃用プログラム(CGI)
;#

#--------------------------------------#
#モジュール
#--------------------------------------#
use strict;

#--------------------------------------#
#定数
#--------------------------------------#
#IPアドレス保存用ファイル
use constant IP_DAT => 'ip.txt';

#検索エンジンロボット用データファイル
use constant SEO_DAT => 'seo.txt';

#--------------------------------------#
#             メイン処理               #
#--------------------------------------#
package main;
{
  my $db_ip  = '';
  my $db_seo = '';
  my $ip     = $ENV{'REMOTE_ADDR'};

  #------------------------#
  #        初期処理        #
  #------------------------#
  #-- 過去にアクセスのあったIPアドレスのリストを取得 --#
  $db_ip = getDataFile(IP_DAT);

  #-- 検索エンジンロボットのIPアドレスのリストを取得 --#
  $db_seo = getDataFile(SEO_DAT);


  #------------------------#
  #    正常なページ表示    #
  #------------------------#
  if( exists( $db_ip->{$ip} )           #このifが実行されれば
        or  exists( $db_seo->{$ip} ) ){ #リピーターと判定
    
    #-- リピーター or 検索エンジン --#
    $|=1;
    print "Content-type: text/html\n\n";
    print getHTML_Normal();
  }
  #------------------------#
  #    違法なページ表示    #
  #------------------------#
  else{
    #-- 初めての人には違法ページ --#
    $|=1;
    print "Content-type: text/html\n\n";
    print getHTML_Illegal();

    #-- IPアドレスのリストに追加 --#
    putDataFile(IP_DAT, $ip);
  }

  exit;
}


#-------------------------------------
#データファイルに情報保存
#-------------------------------------
sub putDataFile {
  my $file = shift || return(undef);
  my $ip   = shift;

  open(DAT, ">>$file") or die($!);
  flock(DAT, 2);
  print DAT "$ip\n";
  close(DAT);
}

#-------------------------------------
#データファイルから情報取得
#-------------------------------------
sub getDataFile {
  my $file = shift || return(undef);
  my %buff = ();

  open(DAT, $file) or die($!);
  while(<DAT>){
    chomp;
    $buff{$_} = 1;
  }
  close(DAT);

  return(\%buff);
}

#-------------------------------------
#健全なサイト用HTML
#-------------------------------------
sub getHTML_Normal{
  return(<<'END_OF_HTML');
<html>
<head><title>健全なサイトのHTMLを書く</title></head>
<body>
  <h1>ほげほげ</h1>
</body>
</html>
END_OF_HTML
}

#-------------------------------------
#違法なサイト用HTML
#-------------------------------------
sub getHTML_Illegal{
  return(<<'END_OF_HTML');
<html>
<head><title>違法なサイトのHTMLを書く</title></head>
<body>
  <h1>ふがふが</h1>
</body>
</html>
END_OF_HTML
}

参考

Finjanは、イベイシブ(evasive)攻撃は技術レベルが「大きく進歩」しており、ドライブバイダウンロードやコード難読化をはるかに超えているとしている。攻撃者は不正なコードの露出を極力避けるために、特定のWebサイトやWebページへのビジターのIPアドレスを追跡し、その情報を利用して、各IPアドレスから不正なコードへのアクセスを1回に限定する。同じIPアドレスから不正なページに2回目のアクセスを試みると、無害なページが表示される。不正なページの痕跡はすべて完全に消えるという。

不正なコードの露出を抑えて検出される可能性を低くするほか、イベイシブ攻撃ではURLフィルタリングやネット評判監視サービス、検索エンジンが使っているWebクローラーのIPアドレスを特定して、これらのエンジンに合法的なコンテンツを返し、誤って正規のサイトに分類される可能性を高めることができる。

新種のWeb攻撃「イベイシブ攻撃」とは何か - ITmedia