8章コードインジェクションとフッキング
前章では、マルウェアが感染システムにとどまるために悪用する、様々な持続性メカニズム(Persistence)について検討してきました。この章では、マルウェアが(対象プロセスやリモートプロセスと呼ばれる)別プロセスへコードを挿入し、悪意のあるアクションを実行する方法について学習します。攻撃コードを対象プロセスのメモリへ挿入し、対象プロセスのコンテキスト内で攻撃コードを実行する手法は、コードインジェクション(または、プロセスインジェクション)と呼ばれています。
攻撃者は通常、(explorer.exeやsvchost.exeなど)正当なプロセスを対象プロセスとして選択します。攻撃コードが対象プロセスに挿入されると、キーストロークの記録、パスワードの奪取、データの流出などの悪意のあるアクションを対象プロセスのコンテキスト内で実行できます。対象プロセスのメモリにコードを挿入した後、コード挿入を担当するマルウェアコンポーネントは、システム上で持続し続けるため、システムが再起動するたびに対象プロセスにコードを挿入するか、攻撃コードをメモリのみに保持するため、ファイルシステムから自身を削除できます。
マルウェアのコードインジェクション技術を詳しく理解する前に、仮想メモリの概念を理解することが不可欠です。
8.1 仮想メモリ
一連の命令コードを含むプログラムを実行すると、プロセスが作成されます。Windows OSは、(プロセスメモリと呼ばれる)独自のプライベートメモリアドレス空間で、作成された新しいプロセスを提供します。プロセスメモリは仮想メモリ(Virtual Memory)の一部です。仮想メモリとは、実際のメモリではなく、OSのメモリマネージャが提供する仮想的なメモリです。この仕組みのため、各プロセスは独自のプライベートメモリ空間を持っているように振る舞います。実行時、Windowsメモリマネージャはハードウェアの助けを借りて、仮想メモリアドレスを実際のデータが存在する(RAM上の)物理アドレスに変換します。メモリを管理するために、メモリの一部をディスクにページングします。プロセスのスレッドがディスクにページングされた仮想アドレスにアクセスすると、メモリマネージャは当該アドレスのデータをディスクからメモリへ戻します。次の図は、AとBの2つのプロセスを示しています。これらのプロセスメモリは、物理メモリにマップされ、一部はディスクにページングされます。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access