コース: サイバーセキュリティの基礎

プロセスを利用した攻撃

コース: サイバーセキュリティの基礎

プロセスを利用した攻撃

マルウェアは、見える場所に 潜んでいることもあります。 Windows フックという手法を使って 入力内容を傍受する、 シンプルなマルウェアの例を見てください。 Windows では、 キーボードのキーが押されると、 オペレーティングシステムに イベント信号が送られます。 Windows はどの文字が押されたかを キーボードのドライバーで認識し、 待機中のアプリケーションに メッセージとして送ります。 Window では、 使用中のアプリ以外のプロセスも このメッセージを 見られるようになっています。 ホットキーが使えるのもこのためです。 Windows では、キーボードフック コールバックルーチンと呼ばれる 仕組みです。 キーが押されたことを伝える メッセージがフックにかかると、 本来の送信先以外のプロセスにも 知らせてくれるのです。 この仕組みを使うと、 短いコードで簡単なキーロガーを 作ることができます。 このコードは、 私が WordPad で書いて 「intercept.cpp 」と名付けた、 キーボードフックのプログラムです。 内容はシンプルで、最初の5行は C 言語の標準的な設定コードです。 次の行では、プログラムの起動時にまず 「intercept.txt」という 出力ファイルを開きます。 傍受した文字情報は、 このファイルに保存されます。 次の6行は、 コールバック手続きの定義です。 キーが押されると、 この部分のコードが実行されます。 Windows のイベントは 細かく分かれていて、 キーを押す動作も、キーダウン1回と キーアップ1回とカウントされます。 どちらかを見ればよいので、 このコールバックルーチンでは 「WM_KEYUP」というイベントだけを チェックします。 ルーチンがキーアップを検出すると、 このイベントに関連付けられたデータを 出力ファイルに書き出します。 押された文字を示す Windows 内部コードです。 ルーチンの最後の動作は、 CallNextHookEx 関数を使って、 フックチェーンの次のフックを呼び出して、 イベントを渡すことです。 これで、メッセージは本来の宛先である アプリケーションへのパスに戻ります。 プログラムの残る部分は、 このコールバックルーチンをサポートする Windows プロセスを規定する制御命令です。 この中で注目すべき箇所は、 まず、キーボードへのフックを設定する、 SetWindowsHookEx 関数です。 また、「Alt」キーと「9」の組み合わせを ホットキーに登録しています。 その下は、コードがループしながら 「Alt」と「9」の入力を待っています。 2つのキーが同時に押されると、 フックが解除されて インターセプトファイルが 閉じられ、終了します。 では、コンパイルされた このコードが実際にどのように働くかを 見ていきましょう。 最初に、開いていた コマンドシェルを閉じます。 デモ用のオンラインバンキングポータルに、 アクセス番号とパスワードを 入れていきます。 この端末上で動いているプログラムを 確認する、簡単なフォレンジックを やってみましょう。 コントロールキーと Alt キーと デリートキーを同時に押して、 タスクマネージャーを開きます。 アプリケーションの一覧に インターセプトのプログラムは 表示されていませんが、 詳細をクリックして見てみましょう。 アプリケーションの欄には出ていませんが、 画面を下にスクロールしていくと、 「intercept.exe」があります。 よく注意して見ればあるのですが、 ありきたりなファイル名のおかげもあって、 見つかる恐れが少ないのです。 ここで「Alt」と「9」を押します。 インターセプトのプロセスが 終了したことがわかりますね。 それではここで、 コマンドシェルを再び開いてみましょう。 インターセプトのプログラムが 記録に使っていたログファイルが どうなったかを見てみます。 プログラムが傍受した文字列が 表示されています。 キーボード操作の記録には、 Alt キーやシフトキーなどのデータも 特殊な文字の形で含まれています。 それでも、攻撃者が狙っていた オンラインバンキングのアクセス番号と パスワードはしっかり記録されています。 このようなキーボードフック以外にも、 さまざまなフッキングの手口が 存在します。 ここから学ぶべきことは、 フックを仕掛けられると、 そのシステムを使ってやりとりする オンライン取引の ID やパスワードを 抜かれてしまう危険性がある ということです。

目次