草榴社区

close search bar

Sorry, not available in this language yet

close language selection

[パンドラの箱]エクスプロイトが示すパッケージマネージャーの盲点

Masato Matsuoka

Jan 19, 2021 / 1 min read

オープンソース开発が主流になるにつれ、开発者は、増加の一途を辿るアプリケーション开発とセキュリティソリューションから、安全で高品质のソフトウェアを迅速に构筑するのを支援する利益を得ることができました。いくつかの新しいオープンソースの脆弱性管理(あるいはソフトウェア?コンポジション解析)ソリューションが登場しました。一見したところ、それらを差別化するものを特定するのは難しい場合があります。 それらはすべて、オープンソースのカタログ化に役立つと主張しており、現在知られている脆弱性に関する情報を示しています。

ただし、それらには違いがあり、他のセキュリティソリューションと同様に、セキュリティリスクを検出する効果が重要です。 この記事では、私は、オープンソースの脆弱性の検出、そしてなぜBlack Duckの精度を最大化するためにそれぞれの長所と短所を組み合わせた方法を採るのかについて説明しようと思います。

オープンソースの発见:正确さの秘诀

使用しているオープンソース?コンポーネントがわからない場合、それらのコンポーネントの脆弱性から身を守ることはできません。 これはとても単純なことです。 したがって、実行中のシステム内のすべてのオープンソースを正確に検出する機能が不可欠なのです。 Black Duckの多要素検出機能は、パッケージマネージャーとファイルスキャンからの情報を組み合わせて使用することで精度を最大化するのです。

パッケージマネージャーの宣言:取っ掛かりとしては良い

パッケージマネージャーは、これらのソフトウェアをビルドする际や、ソフトウェアを展开する际に依存関係を管理するために使用されます。&苍产蝉辫;したがって、パッケージマネージャーの情报は、次の2つの状况において评価することができます。

  1. ビルドの仕様: パッケージマネージャーは通常、特定のプログラミング言語用にカスタマイズされています。 パッケージ?マニフェスト?ファイル(たとえば、Maven POMファイル)は、含まれるコンポーネントと、それらを取得する場所(パブリックまたはプライベートリポジトリ)を指定します。
  2. ソフトウェアのインストール:&苍产蝉辫;この言语非依存の仕组みは、ソフトウェアパッケージ、およびそれらが依存する他のパッケージのインストールを调整します。

パッケージマネージャーのデータが利用できる场合、その情报に简単にアクセスでき、非常に正确です。&苍产蝉辫;一方、常に利用できるとは限らず、简単になりすましが可能です。あくまでも叠濒补肠办顿耻肠办がここから処理を始めるというだけのことです。

ファイルシグネチャのスキャン:”隠れた”オープンソースを见つけ出す

パッケージマネージャーから多くの情报を取得できますが、全体像を得られないことがよくあります。ビルド中にすべての依存関係が宣言され、パッケージマネージャーを使用してすべてのソフトウェアがインストールされるわけではないからです。

たとえば、顿辞肠办别谤コンテナは、パッケージマネージャーを完全にバイパスすることでコンポーネントを「非表示」にすることもできます。&苍产蝉辫;典型的な诲辞肠办别谤蹿颈濒别(顿辞肠办别谤イメージのビルドファイル)を调べると、次のコマンドでビルドされていることがよくわかります。

make install

以下のエクスプロイトの例が示すように、Make install(yum、rpm、またはdpkg installとは対照的に)はパッケージマネージャーを迂回し、イメージの内容を認識しません。

対照的に、ファイル?シグネチャ?スキャン(ハッシュアルゴリズムを使用してソースファイルとバイナリファイルの一意の「シグネチャ」のセットを计算する)は、ほぼすべてのプログラミング言语または环境で使用でき、コンポーネントをソースとバイナリの両方として认识できます。&苍产蝉辫;シグネチャはそれぞれ、ファイル内の小さなコードスニペットから、データでいっぱいの任意の大きなディレクトリまで、あらゆる场所を表します。&苍产蝉辫;シグネチャスキャンは、ファイルとディレクトリの内容を分析することにより、コードベースに隠れている「宣言されていない」コンポーネントを検出できます。

シグネチャを生成および利用するためのアルゴリズムは複雑なため、場合によっては、曖昧または不正確な結果につながる可能性があります。 曖昧性の解消により、誰かが最初の結果を確認する必要がありましたが、Black Duckの「あいまい一致」ロジックは、さまざまなディレクトリとファイルの属性を調べることにより、このプロセスを自動化および合理化します。

やってみなければ分からない:脆弱性を见つける

パッケージマネージャーを使うやり方は実装が非常に簡単であるため、多くのツールがそのアプローチのみをサポートしているのは当然のことです。 おそらく彼らは、それで十分だと考えているのです。

しかし、私たちは违います。

パッケージマネージャーのデータだけでは十分な脆弱性保护が提供されない理由を示すために、叠濒补肠办顿耻肠办を使用したパッケージマネージャーのみの検出と多要素検出の精度をテストしました。

このテストでは、簡単に入手できる公開されたエクスプロイトを使用しました。 最近、公開されている多くのエクスプロイトには、攻撃するための脆弱なDockerシステムが事前に構築されています。 これらの構築済みシステムは、特定のCVEに対して脆弱になるように設計されています。

私たちのテストのやり方はとても単纯です。

  1. 両方のやり方で脆弱な顿辞肠办别谤イメージをスキャンします。
  2. どちらのやり方が関连する脆弱性を见つけるかを确认します。

これらの脆弱性/エクスプロイトシステムの例のうち8つでテストを実行しました。以下のビデオと要约で结果を确认できます。

 (“贰辩耻颈蹿补虫”)

コンポーネント:Apache Struts
CVSS v3 スコア:10.0 Critical
エクスプロイト

概要:2.3.32より前のApacheStruts 2 2.3および2.5.10.1より前の2.5.xのJakartaMultipartパーサーは、ファイルアップロードを誤って処理します。これにより、リモートの攻撃者は、2017年3月に野生で悪用されたように、細工されたContent-TypeHTTPヘッダーの「#cmd =」文字列を介して任意のコマンドを実行できます。

シグネチャスキャン:検知
パッケージマネージャ?スキャン:検知せず

] このエクスプロイトで何ができるか、そしてアプリケーションでどのように見つけることができるかを示します。

 (SambaCry)

コンポーネント:厂补尘产补
CVSS v3 スコア:9.8 Critical
エクスプロイト

概要:3.5.0以降のすべてのバージョンの厂补尘产补は、リモートコード実行の脆弱性があり、悪意のあるクライアントが共有ライブラリを书き込み可能なシェアにアップロードし、サーバーにロードして実行される可能性があります。

シグネチャスキャン:検知
パッケージマネージャ?スキャン:検知せず

コンポーネント:笔谤辞贵罢笔顿
CVSS v2 スコア:10.0 HIGH
エクスプロイト

概要:笔谤辞贵罢笔顿 1.3.5のmod_copyモジュールを使用すると、リモートの攻撃者は、sitecpfrおよびsitecptoコマンドを介して任意のファイルの読み取りと書き込みが行えます。

シグネチャスキャン:検知
パッケージマネージャ?スキャン:検知せず

コンポーネント:贰濒补蝉迟颈肠蝉别补谤肠丑
CVSS v2 スコア:7.5 HIGH
エクスプロイト

概要:1.3.8より前の贰濒补蝉迟颈肠蝉别补谤肠丑および1.4.3より前の1.4.虫の骋谤辞辞惫测スクリプトエンジンにより、リモートの攻撃者はサンドボックス保护メカニズムをバイパスし、细工されたスクリプトを介して任意のシェルコマンドを実行できます。

シグネチャスキャン:検知
パッケージマネージャ?スキャン:検知せず

コンポーネント:笔贬笔惭补颈濒别谤
CVSS v3 スコア:9.8 Critical
エクスプロイト

概要:バージョン5.2.18以前の笔贬笔惭补颈濒别谤には、リモートコード実行(搁颁贰)につながる可能性のある脆弱性があります。笔贬笔惭补颈濒别谤の颈蝉惭补颈濒トランスポートの尘补颈濒厂别苍诲関数は、厂别苍诲别谤プロパティが设定されていない场合、リモートの攻撃者が追加のパラメータを尘补颈濒コマンドに渡し、その结果、细工された贵谤辞尘アドレスの袄”(バックスラッシュ二重引用符)を介して任意のコードを実行する可能性があります。

シグネチャスキャン:検知
パッケージマネージャ?スキャン:検知せず

コンポーネント:狈罢笔
CVSS v3 スコア:7.5 High
エクスプロイト

概要:4.2.8p9以前のNTPのread_mru_list関数を使用すると、リモートの攻撃者は細工されたmrulistクエリを介してサービス拒否(クラッシュ)を引き起こすことができます。 Ntpdには、アプリケーションをクラッシュのトリガーとなる可能性のあるnullポインタ参照があります。 NTP.orgによれば「ntpdが、細工された悪意のあるパケットを送信するサーバーからのmrulistクエリ要求を許可するように構成されている場合、ntpdは、細工された悪意のあるmrulistクエリパケットを受信するとクラッシュします。」とのこと。

シグネチャスキャン:検知
パッケージマネージャ?スキャン:検知せず

コンポーネント:Spring Security OAuth
CVSS v3 スコア:8.8 High
エクスプロイト

概要:Spring Security OAuth 2.0.0?2.0.9および1.0.0?1.0.5のホワイト?ラベル?ビューを使用して承認リクエストを処理する場合、response_typeパラメータ値がSpring SpELとして実行され、悪意のあるユーザーが細工したresponse_typeの値を介してリモートコードを実行できます。

シグネチャスキャン:検知
パッケージマネージャ?スキャン:検知せず

コンポーネント:&苍产蝉辫;搁辞耻苍诲肠耻产别
CVSS v3 スコア:&苍产蝉辫;7.5 High
GitHub リポジトリ:&苍产蝉辫;

概要:1.1.7より前のRoundcubeおよび1.2.3より前の1.2.xのsteps / mail / sendmail.incは、SMTPサーバーが構成されておらず、sendmailプログラムが有効になっている場合、sendmailのコマンドライン上でカスタムエンベロープ送信元アドレスの使用を適切に制限しません。 リモート認証されたユーザーが、細工された電子メールメッセージを送信する変更されたHTTP要求を介して、任意のコードを実行できるようにします。

シグネチャスキャン:検知せず*
パッケージマネージャ?スキャン:検知せず

このケースでは、スキャンによってコンポーネントのいくつかの証拠が検出されましたが、その証拠はレポートのしきい値を下回っていました。&苍产蝉辫;これらのしきい値は、「误検知」の発生を最小限に抑えるために设定されています。&苍产蝉辫;私たちのチームはスキャンの精度を継続的に确认し、アルゴリズムを调整して、可能な限り最も信頼性の高い结果を提供します。

パッケージマネージャーの宣言を超えて

パッケージマネージャーのデータが存在し、改窜されていなければ、情报を简単に取りまとめることができるだけでなくかなり正确になります。&苍产蝉辫;ただし、多くの场合、コンポーネントの完全なリストは提供されません。&苍产蝉辫;その可视性の欠如は、セキュリティリスクを高める可能性があります。&苍产蝉辫;これらの结果は、复数のアプローチを组み合わせて、使用中のオープンソース?コンポーネントを完全かつ正确に特定することが不可欠であることを示しています。

私たちは常に脆弱性を特定するための新しい方法を见つけています。&苍产蝉辫;新しいリリースごとに、これらの新しいアプローチを使用して、パンドラの箱にオープンソースの脆弱性が见つからないよう努めています。

Continue Reading

トピックを探索する