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