2016年8月9日
私がどのようにしてキーロガーをクラックし、最終的に第三者の受信トレイに行きついたか
本記事は、原著者の許諾のもとに翻訳・掲載しております。
(訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。)
ことの始まりは、あるスパムキャンペーンでした。画像1は、スパム向けに仕掛けた罠に最近引っかかった、疑わしいドキュメントファイルが添付されたメールです。文面の英語がとても稚拙なことに気付くかと思いますが、この稚拙さがメール受信者への警告サインとなります。
画像1:スパムサンプル
添付のファイルは、”.doc”のファイル拡張子を使っていますが、実際はRTF(リッチテキストファイル)ファイル形式で、特別に細工されたRTFファイルによるスタックオーバーフローの脆弱性が含まれています。この脆弱性は、CVE-2010-3333で文書化されており、”pFragments”の形をしたプロパティを扱う際にMicrosoft Word RFTパーサを攻撃するものです。これに対する修正モジュールは5年以上前にパッチされています。
画像2:特別に細工されたRTFファイルにある難読化されたシェルコード
画像2を見てお分かりの通り、アンチウィルスソフトに検出されないよう、脆弱性やシェルコードが難読化されています。この脆弱性を抜き出し、きれいにしてから解読すると、シェルコードは volafile[.]io ドメインからファイルをダウンロードして実行することが分かりました。
画像3:シェルコードの16進ダンプ
ペイロード
画像4:ダウンロードされた実行ファイル
ダウンロードされたファイルは、Microsoft .NET Win32の実行ファイルです。ファイルの16進ダンプのプレビューをざっと見たところ、面白いことに、私はHawkEyeのキーロガービルドに取り組もうとしていることが分かりました。
画像5:マルウェアのボディにある、HawKEyeのキーロガーストリング
また、ちょっとした検索で、このキーロガーを開発しているWebサイトを文字列が指し示してくれました。Webサイトでは、全ての”素晴らしい機能”をリストアップしています。
画像6:HawkEyeのキーロガーの機能
簡単に動的プログラム分析をしたところ、キーロガーは、キーロガー自身のコピーをアプリケーションデータ(%appdata%)フォルダに落とし、 WindowsUpdate.exe というファイル名を使っていることが分かりました。これは、再起動した後でもWindowsシステム内で持続的になるように、自動実行のレジストリをセットするためです。
画像7:キーロガーのインストール動作
また、感染したシステムに以下のファイルも落としていました。
- %Temp%\Sysinfo.txt – 落とされたマルウェアの実行ファイルパス
- %Appdata%\pid.txt – マルウェアプロセスID
- %Appdata%\pidloc.txt – マルウェアプロセスの実行ファイルの位置
その後、キーロガーのプロセスからネットワークアクティビティを観察し、checkip.dyndns.comから感染したシステムの外部IPアドレスの入手を試みました。この正規のWebサイトは、感染したシステムのIPアドレスを確認することを目的に、マルウェアによって一般的に使用されています。
画像8:感染したマシンのIPアドレスのパケットキャプチャ
少ししてから、SMTPのネットワークアクティビティが、感染したシステムのシステム情報を攻撃者のメールアドレスに送信したことを確認しました。
画像9:キーロガーによって、攻撃者のメールアドレス送信されたシステム情報を含むメール。
含まれるシステム情報は以下のようなものです。
- CPU名(コンピュータ名)
- 現地の日付と時間
- インストールされている言語
- インストールされているOS
- プラットフォーム
- OSのバージョン
- インストールされているメモリ
- インストールされている.Net Framework
- システム権限
- 既定のブラウザ
- インストールされているファイアウォール
- 内部IPアドレス
- 外部IPアドレス
- 復元されたメールの設定とパスワード
- 復元されたブラウザとFTPパスワード
前述したとおり、キーロガーはMicrosoft .NETでコンパイルされていました。そこで私が次に行ったのは、実行ファイルのデコンパイルです。この作業には、オープンソースで公開されている ILSpy と呼ばれる.NETのデコンパイラを使いました。
画像10:デコンパイルしたHawkEyeのキーロガーのソースコード
デコンパイルされたソースコードを詳しく調べ、”素晴らしい機能”とそれを比較してみると、その要求は100%正当なものであることが確認できました。コードには以下のような機能がありました。
キーロギング
画像11:キーロギングのルーチン
クリップボードを盗む/ロギング
画像12:クリップボードロギングのルーチン
ブラウザ、FTP、そしてメールクライアントのパスワードを盗むのです。また、パスワードマネージャの認証情報やWindowsキーも盗もうとします。
画像13
ワームに似たUSBの感染ルーチンは、キーロガーを他のWindowsマシンに拡散することができます。
画像14:USBの感染ルーチン
また、オンラインゲームのプラットフォームであるSteamを利用するユーザがターゲットになることもあります。コンフィギュレーションデータやログインデータを削除することで、ユーザに再ログインを強制します。そうすることで、ユーザが使用するSteamの認証情報をキーロガーが盗めるようにするのです。
画像15:Steamの削除ルーチン
デスクトップのスクリーンショットを含む盗まれた情報は、キーロガーの設定に従い、攻撃者のメールアドレスまたはFTPサーバに送られます。
画像16:メールの送信ルーチン
攻撃者はキーロガーを設定し、HTTPトンネルを介してPHPホストに盗んだ情報をアップロードすることもあるようですが、コードは無効化されているようです。
画像17
しかしながら、デコンパイルしたプログラムの中で私が発見した最も興味深い点は、 Form1() と名付けられたC#のコンストラクタです。ここにキーロガーのコンフィギュレーションが保存されています。しかし、攻撃者のメールやFTPの認証情報がばれないように、これらのデータは、RijndaelアルゴリズムとBase64を使って暗号化されていました。
画像18:キーロガーのコンフィギュレーション
恐らくご存じかもしれませんが、これらの暗号化されたデータは、常に保護されているとは限りません。特に暗号化ルーチンがデコンパイルされたソースコードであれば尚更です!
画像19:キーロガーはDecryptメソッドを呼び出します
以下の画像は、 encryptedBytes と secretKey の2つのパラメータを受け取る”Decrypt”メソッドです。秘密鍵は、ハードコードされた文字列、 HawkSpySoftwares です。
画像20:暗号化ルーチン
記述したとおり、キーロガーはRijndaelアルゴリズムを使用しており、秘密鍵はUnicode文字列、”099u787978786″でソルトされています。こちらもハードコードされていました。
画像21:Rijndaelアルゴリズムを使ったキーロガー
ちょっと気になったので、復号部のコードをコピーし、適切に修正した後、MS Visual Studioでコンパイルしてみました。もちろん、復号は成功しました(すみません、認証情報はぼかさざるを得ませんでした :))。
画像22:復号されたメールとFTPの認証情報
どうやらメールアカウントは感染したシステム上にあるようです。この受信トレイに送信されたメールは、自動的に攻撃者のGmailアカウントにリルートされています。
画像23:メールは、攻撃者が保持するメールアドレスにリルートされます
まとめ
恐らく攻撃者は、HawkEyeのキーロガーを簡単にクラックできることを知っているのでしょう。そして、自分のメールの認証情報を保護するために、最初のメール受信者として、感染したメールアカウントを乗っ取り、最終的にメールを自分のメールアドレスに転送するのです。
私たちは、感染したメールアカウントの所有者に被害を報告しました。彼らにパスワードを変更してもらい、メッセージのリルート設定から攻撃者のメールアドレスを削除してもらうためです。
この記事を投稿してから、よく似たRTF形式が添付されたスパムメッセージを受け取ったのですが、これにはCVE-2012-0158の脆弱性が含まれていました。ペイロードは同じキーロガーでしたが、異なるメールの認証情報が使われていました。
これらの攻撃に使用された2つの脆弱性は古いものですが、いまだにメール攻撃にはよく使われています。例によって、サイバー犯罪者が使用するこれらの古い脆弱性から保護するためにも、最新のパッチでシステムを更新しておくことをお勧めします。
Trustwave Secure Email GatewayのAMAX(高度なMalware and Exploit Detection)は、メールのゲートウェイ内でこれらの添付されたRTFの脆弱性を検出しています。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa