シェルコード【shell code】
概要
シェルコードとは、ソフトウェアの脆弱性を悪用し、標的システムに不正に実行させるプログラムコードのこと。オペレーティングシステム(OS)を対話的に操作するシェルを起動する目的で使われることが多いためこの名で呼ばれるが、現在ではシェルの起動に限らず、攻撃者が意図した任意の処理を実行させるコード全般を指す。

ソフトウェアに脆弱性があると、本来は実行を許可されていない外部からのコードを誤って実行してしまう場合がある。シェルコードはこの隙を突いてメインメモリ上に直接送り込まれ、シェルの起動や特権の奪取を通じて、攻撃者が遠隔からシステムを自由に制御できる状態を作り出す。
ローカル型とリモート型の二種類に大別される。ローカル型は、すでに一般利用者やゲストアカウントとして標的システムにアクセスできる状態から、管理者権限の取得などさらなる侵害を目指す際に用いる。リモート型は、ネットワーク越しに外部から標的を操作できるようにするもので、標的に外部からの接続を待ち受けるポートを開放させたり、逆に攻撃者側のサーバへ接続を確立させたりする処理が記述される。
シェルコードはCPUが直接解釈・実行できる機械語で記述されることが多い。対象となる脆弱性の種類、CPUのアーキテクチャ、OSの種類といった要素に強く依存した設計で、これらが一つでも異なる環境では正常に機能しないことが多い。外部のライブラリに頼らずに動作するよう、原則として単体で必要な機能すべてが実装されている。
かつてはバッファオーバーフローと組み合わせて用いられることが大半であったが、OSに実行不可領域の保護やアドレス空間配置のランダム化などの緩和策が導入されたことで、手法は高度化している。メモリ上に展開された段階で自身を復号する自己暗号化が施されたり、ストレージに書き込まずメモリ上だけで完結するファイルレス攻撃の手段として用いられる事例も見られる。
(2026.6.24更新)