web-dev-qa-db-ja.com

脆弱性を見つけるコストとエクスプロイトを開発するコスト

あるソフトウェアアプリケーションまたはターゲットに対してゼロデイエクスプロイトを開発したいという人の観点から見ると、攻撃者が行う必要のあるタスクは、大きく分けて次の2つです。 (2)その脆弱性に対して、信頼性の高い、武器化されたエクスプロイトを開発します。

たとえば、ファジング、逆転、静的分析は、脆弱性の発見に役立つ可能性があります。しかし、信頼できるエクスプロイトを構築するには、個別の分析と作業が必要です。

これらの2つのタスクのうち、平均してコストが高くなる傾向があるのはどれですか。これの経済性はどのように見えるのか、そしてこれら2つのタスクのコストの比率を理解するために疑問に思っています。単一の脆弱性を見ると、コストは脆弱性に依存することは知っていますが、平均的なケースについて質問しています。たとえば、エクスプロイトを開発している会社を全体として見た場合、その予算のより多くが1に向けられるか、2に向けられると予想されますか?

広く使用されている比較的成熟したエンドユーザーソフトウェアアプリケーションを攻撃していると仮定します。

6
D.W.

相対的なコストは、脆弱性が何であるかに大きく依存します。これを実証するために、Bashの "Shellshock"バグとglibcの "Ghost" gethostbyname()バグという、最近の2つの脆弱性を参照します。

砲弾ショック

Shellshockバグは、Bashが環境変数から直接コードを実行するために使用できるBashの関数解析の複雑な欠陥が原因でした。このバグは、公に発見されるまで約22年間存在していました。

バグが存在するかどうかのチェックは次のようになります。

_$ env X="() { :;} ; echo vulnerable" /bin/sh -c ":"
_

さて、そのバグを見つけるには、ソースコードを注意深く調査するか、コードファザーを使った適切なセッションが必要です。しかし、それがこのようなテストケースに縮小されるとすぐに、エクスプロイトは簡単にやって来ます。たとえば、ターゲットサーバーがCGIシェルスクリプトを実行していることがわかっている場合:

_$ nc vulnerable.example.com 80 <<__END
GET /path/to/cgi.sh HTTP/1.1
Host: localhost
User-Agent: () { x; }; printf "%s\n\n" "Content-type: text/plain"; /usr/bin/id
Accept: */*

__END
_

そのため、Shellshockを見つけるのは困難でしたが、一度発見されると、悪用するのは簡単でした。

幽霊

一方、glibc gethostbyname()の脆弱性は、特定の非常に特定の条件下でのみ発生する可能性があるバッファオーバーフローの脆弱性です。攻撃者は、64ビットマシンでは最大8バイト、32ビットマシンでは最大4バイトのメモリを上書きできます。攻撃者は特別に細工したDNSエントリを設定し、ターゲットをだましてそれを要求する必要があります。

このバグは約13年間修正されず、修正された時点ではセキュリティの脆弱性として認識されていませんでした。脆弱性として報告したQualysのセキュリティ研究者は、個々のプログラムの悪用可能性をテストするのに長い時間を費やしました。 8バイトの制限とgethostbyname()の一般的な使用方法の詳細により、大多数はそうではありませんでした。また、単にバグをトリガーするだけでプログラムがクラッシュすることにも注意してください。エクスプロイトよりもサービス拒否のほうが多くなります。

Eximメールサーバーの完全なリモートエクスプロイトである彼らのクーデターグレースは、Eximが特定の状況でメモリを編成する方法の特定のプロパティを使用して制限を回避するために巧みに設計されたRube Goldbergチェーンです。これは Qualysのセキュリティアドバイザリ で完全に説明されており、ここでは説明が複雑すぎます。

比較

私は、どのバグを見つけるのがより困難であったかわからないことを認めます。どちらもコードに長い間潜伏していた。 Qualysは「コード監査中に」ゴーストのバグを発見しました。 StéphaneChazelasがShellshockバグを発見しました 彼がすでにBashの動作について知っていたものから外挿することにより 。そして、ファジングツールの助けを借りて、どこを見ればよいかを知ると、関連する一連のバグ全体が非常に迅速に見つかりました。

しかし、どの問題を悪用するのがより困難であったかは、答えがはるかに簡単です。 GhostのバグをEximのエクスプロイトに変換する方法を見つけるために、非常に高度なエンジニアリングが行われたことは明らかです。上記のShellshockエクスプロイトよりもはるかに多くの作業が必要で、作成とテストに約10分かかりました。

3
Jander