Skip to main content

シェルコードとは何ですか?

ShellCodeは、ランニングプログラムを制御する意図を備えたコンピューターメモリに注入されるマシンコードのシーケンス、または実行可能な命令です。このような攻撃では、手順の1つは、プログラムカウンターの制御を獲得することです。これは、実行される次の命令を特定します。その後、プログラムフローを挿入コードにリダイレクトできます。邪魔なマシンコードは、攻撃のペイロードと呼ばれ、シェルコードという用語で一般的に言及される要素です。この方法は、操作システムコマンドシェルを開くことで攻撃者アクセスを付与するためにしばしば使用されているため、一般にコードインジェクション攻撃がシェルコードとして知られるようになりました。入力データとメモリエラーを処理します。ソフトウェア開発者は通常、入力データを厳密に定義し、不適切な値を拒否することにより、この脅威を回避できます。チェックされていない場合、その値に割り当てられたメモリよりも多くのストレージスペースを必要とする値が受け入れられる可能性があります。これにより、バッファオーバーフローと呼ばれるセキュリティ骨折が発生し、データの一部が割り当てられたスペースに隣接するメモリ位置に書き込まれます。慎重に操作すると、この異常は邪魔なコードを導入できるようになります。ShellCodeは通常、アセンブリ、C、C ++などの低レベルのシステムアクセスを備えたプログラミング言語で記述されます。ただし、ターゲットを絞った脆弱性に応じて、Perlなどの解釈されたスクリプト言語のコードを挿入したり、Javaなどの仮想マシンのバイトコードを挿入することで同じ結果が実現する可能性があります。コードは、プログラムカウンターのハイジャックの前、最中、または後に埋め込むことができます。したがって、邪魔なコードは、ターゲットマシンのファイルに含まれているか、ネットワーク接続を介してリアルタイムで送信される場合があります。

ローカルシェルコードエクスプロイトは、物理的なアクセスを持つマシンを攻撃者に制御するように設計されています。この場合の目的は、たとえば、管理者の特権を持つアカウントを作成することです。同様に、ランニングプロセスの特権レベルが高い場合、エクスプロイトが成功すると、侵入者への同じレベルのアクセスが一時的に付与されます。remoteリモートマシンで実行されるプロセスは、標準のネットワークプロトコルを使用してターゲットコンピューターと通信することができます。Connect-Back Shellcodeは、ターゲットマシンに、侵入者コンピューターへの接続を開始するように指示します。侵入者が接続を開始すると、コードはリモートマシン上のポートと呼ばれるネットワーク接続を制御しようとするため、コードがバインドシェルと呼ばれます。ファイアウォールがアウトバウンド接続をめったに禁止することはめったにないため、接続バック方法はより広く使用されています。