私はいくつかの用語に混乱しています。リバースエンジニアリングは、エクスプロイトの研究に非常に似ているようです。つまり、1つのプログラムを元に戻すことができれば、おそらく脆弱性を見つけることができますが、そのためにはCとアセンブリに優れている必要があります。
多くの人が、ペンテスターはpythonおよびCやアセンブリではない他のスクリプト言語を習得する必要があると言っています。これは本当に混乱するので、私の質問は次のとおりです。
エクスプロイトの研究は侵入テストの一部ですか?
ショート:
エクスプロイトの研究は侵入テストとは異なりますか? はい
エクスプロイトの研究は侵入テストの一部ですか? 通常はそうではありません。
侵入テストとは何かの良い要約はここにあります:ウィキペディアの 侵入テスト の定義。
多くの侵入テスト作業は、実際には、既存のよく知られた攻撃またはエクスプロイトを実行しているだけです。 (たとえば、MetaSploitを実行するなど)。この作業は、関連する問題が存在する可能性がある場所のいくつかのモデリングに基づいています。しかし、実際にはエクスプロイトリサーチやリバースエンジニアリングは含まれません。
ただし、侵入テストの詳細については、完全に既成のツールを使用するだけでは不十分です。このステージでは、人々は:
ターゲットシステムの分析は通常、その高レベルの設計、コンポーネント(Webサーバー、フレームワーク、通信プロトコルなど)を調査するレベルです。この分析はもちろん、リバースエンジニアリングやソースコードのレビューまで深く掘り下げることができますが、多くの場合、すでに高レベルの詳細があれば、システムへの攻撃方法を十分に特定できます。
侵入テストに関連する通常の段階のより詳細な説明は、この以前の回答にあります 侵入テストと脆弱性評価の違いは何ですか?
リバースエンジニアリングとエクスプロイトの研究がめったにテストの重要な部分ではない理由は、システムの所有者のためにテストが行われているためです。したがって、攻撃者は通常、エクスプロイト研究者が通常持っているよりもはるかに優れたツールを与えられています。通常、システムは詳細に明らかにされており、効率的に作業を行うことができます。 (言い換えれば、彼らはエクスプロイト調査の多くを短絡させることが許可されています。)
侵入テストでスクリプトが重要な理由は、侵入テストには通常、非常に類似した多数のテストケースが含まれるためです。これらの小さなバリエーションを効率的に作成するには、通常、スクリプトを使用します。
たとえば、このフィールドで使用する一般的なツールであるMetasploitは、pythonを使用してスクリプト化できます。
Pythonに加えて、RubyやPerlなど)の他のスクリプト言語が使用されます。
つまり、1つのプログラムを元に戻すことができれば、おそらく脆弱性を見つけることができますが、そのためにはCとアセンブリに優れている必要があります。
よく書かれたソフトウェアの場合、私は同意しません。ソフトウェアの元のソースコードにアクセスできる場合でも、通常、脆弱性を見つけることは困難です。
バイナリにしかアクセスできない場合は、ソフトウェアを効果的に逆コンパイルする必要があるため、さらに困難であり、多くの知識が失われ、コードは読みやすい形式ではなくなります。最新のソフトウェアは十分に大きいので、バイナリの重要な部分に集中したり、Digの本質的な脆弱性に集中したりすることは非常に困難です。
User4982の素晴らしい答えに基づいて、リバースエンジニアリングとエクスプロイトリサーチも2つのやや異なるアクティビティであることも付け加えておきます。リバースエンジニアは、基本コンポーネントを調査することで製品を理解しようとします。既存の製品とのインターフェースになる場合もありますが、場合によっては単に製品を複製することもあります。そして動機によっては、エクスプロイト研究者は何かを修正したり変更したりすることを意図せずに製品を破壊しようとする場合があります。
エクスプロイトの研究者は、パッケージから脆弱性を引き出すための多くのツールの1つとしてリバースエンジニアリングを使用する場合がありますが、ファズテストやインジェクションエクスプロイトツールがすぐに思い浮かびます。また、リバースエンジニアは、脆弱性のある製品を保護または強化し、固有の脆弱性から自分自身を保護することを目指しているため、同じファジングツールとインジェクションツールを使用してパッチを適用する場所を見つけることができます。それらは同じコインの2つの異なる面です。