ソフトウェアコンポーネントの隠れた脆弱性を暴く
ソフトウェアセキュリティを向上させるためのクローンとシェーディング手法を分析中。
― 1 分で読む
今日は、ソフトウェア開発では、他の人が作ったコンポーネントやライブラリを使うことがよくあるんだ。これらのコンポーネントは中央に保存されていて、開発者がアクセスできるようになってる。でも、これらを使うことで、脆弱性やライセンスの問題、バグなど、いろんな問題にさらされることがあるから、これらを理解することがめっちゃ重要なんだ。そして、ソフトウェアの依存関係を分析するためのツールも作られてるよ。
主な懸念の一つは、コードが複製されたり変更されたときに隠れた依存関係が生じること。これをクローンと言ったり、シャーディングって言ったりする。クローンはコードをそのままコピーすることで、シャーディングはコードを違う名前空間に移動させることを指す。どちらのやり方も、セキュリティの欠陥を特定するのが難しくなる。
この記事では、人気のあるリポジトリで脆弱なコピーのコードを見つける新しい方法について話してる。この方法はシンプルで、複雑なセットアップや特別なデータベースが必要ないんだ。まずは既知の脆弱性から始めて、大量のコードサンプルを調べて、潜在的に脆弱なコピーを見つける。結果は、多くの既存のツールがこうした隠れたリスクを見逃していることを示しているよ。
ソフトウェアコンポーネントの重要性
現代のソフトウェア開発は、ライブラリやコンポーネントにますます依存している。これによって、開発者はゼロからすべてを書くのではなく、既存のコードを再利用することで時間と労力を節約できる。ただ、これには課題もあって、これらのコンポーネントが最新の状態でないと、脆弱性が広がることもある。Equifaxのデータ漏洩やLog4Shellの脆弱性のように、開発者が古いコンポーネントを使うことで、どれだけ深刻な問題になるかを示している。
また、すべてのコードがビルド設定の中で簡単に見えるわけじゃないから、いくつかの脆弱性が見逃されることもある。依存関係をスキャンして分析するためのツールもあって、公共のデータベースに掲載されている既知の脆弱性を調べて、更新が必要なときには開発者に通知するんだ。
脆弱性検出ツールの概要
ソフトウェア構成分析(SCA)ツールは、開発者が自分の依存関係を理解するのを手助けするために作られてる。一般的には、依存関係をスキャンする部分と、これを既知の脆弱性のデータベースと照らし合わせる部分の2つから成り立ってる。各ツールは、依存関係を照合したり特定したりする独自の方法があって、それが誤りにつながることもあるんだ。
これらのツールは便利だけど、完璧ではない。特に、ソフトウェアが実行時に動的にコンポーネントを発見する場合や、コードがクローンやシャーディングされている場合には、脆弱性を見逃すことがある。信頼できないソースから知らずにコードをコピーしたり、他のライブラリが使用しているライブラリが複雑な状況を生み出すことも問題だよ。
クローンとシャーディングの課題
クローンは、開発者が直接コードをプロジェクトにコピーするときに発生することがあって、これが隠れた脆弱性を引き起こすことがある。これらの脆弱性は見つけるのが難しいことが多いんだ、特にコピーしたコードが元のコードと似ていない場合は。
シャーディングは、パッケージ全体が名前を変更されること。ビルドプロセス中に起こることがあって、ツールが脆弱性を見つけたり分析したりするのがより難しくなる。シャーディングには利点もあって、不要な機能を取り除くことでコードを小さくしたり、より安全にしたりする可能性があるけど、依存関係を追うSCAツールには新たな盲点を作ることになるんだ。
Javaでは、同じライブラリの異なるバージョンが衝突して「DLLヘル」という問題が発生することがある。これにより、ソフトウェアを実行したときだけ表示されるエラーが引き起こされ、さらに複雑な問題を引き起こすことがある。
脆弱なコードの検出
これらの問題に対処するために、Javaコンポーネントを分析する新しいアプローチが開発された。この方法は、カスタムデータベースなしで人気のMavenリポジトリにあるクローンコードを見つけることに焦点を当てている。知られた脆弱性のセットから始めて、リポジトリから大量の潜在的なクローンを取得し、脆弱性を分析するんだ。
何千ものコンポーネントをスキャンした結果、確認された脆弱なクローンがかなりの数見つかった。残念ながら、多くの既存のSCAツールはこれらの脆弱性を見逃していた。この結果は、GitHubのセキュリティアドバイザリーデータベースの更新につながり、この分野でのより良いツールの必要性を強調したよ。
実験
シャーディングがどれくらい頻繁に起こるかを調べるために、GitHubのMavenファイルを見た研究が行われた。最初の結果は、そのファイルの小さな割合がシャーディングのためにMavenシェードプラグインを使用していることを示し、シャーディングの実践は一般的ではないことがわかった。
この研究は、追跡されていないシャーディングがどれくらい普及しているのか、どんなリスクをもたらすのかという重要な質問に答えることを目指していた。この情報は、現在の脆弱性検出ツールの効果を評価するために重要だった。
盲点検出
これらの隠れた脆弱性を効果的に検出するために、処理パイプラインが作成された。このパイプラインは、既知の脆弱なアーティファクトと脆弱性を入力として受け取り、そのアーティファクト内に脆弱性が存在する可能性を分析する。
このツールの設計は、精度と軽量性に重点を置いてる。別のインデックスを維持する必要がないから、より効率的なんだ。方法論は、クラスシグネチャを抽出して潜在的なクローンを特定し、それらのクローン内の脆弱性をチェックするためのテストを通じて、その存在を確認することに関わってる。
目標は、シンプルなツールでもより多くの脆弱なアーティファクトを検出できることを示すことで、主にメタデータから動作している既存のSCAツールの限界を克服する必要があることを強調することだよ。
検出のための方法論
検出パイプラインには、いくつかのステップがある:
- バイナリとソースの取得: ツールは、対象のアーティファクトのバイナリとソースコードを取得して分析する。
- クラスの選択: アーティファクトからクラス名を抽出して、潜在的なクローンをリポジトリから照会するために使用する。
- クラスのマッチを取得: ツールは、マッチする名前を持つクラスが含まれている他のアーティファクトを見つけるためにリポジトリに照会し、これらのマッチを統合して可能性の高いクローンを見つける。
- クローン分析の実行: パイプラインは、特定されたクラスの構造を比較することで、クローンを検出する分析を行う。
- 脆弱性の確認: クローンに対してテストを実行して、既知の脆弱性が存在するか確認する。
この構造的なアプローチによって、合理的な短い時間内に脆弱なクローンを特定できるようになり、これまで見逃されていた脆弱性の検出を改善する可能性が示されてるんだ。
結果の評価
実施された実験では、さまざまな脆弱性に対して727件の確認された脆弱なアーティファクトが見つかった。結果を精査して重複を取り除き、ユニークなインスタンスに焦点を当てた後、発見の数は大幅に減少し、かなりの数の脆弱なコピーが確かに存在していたことを示している。
分析で最も一般的に検出された脆弱性は、JSON処理でよく使われるライブラリに対してだった。興味深いことに、これらの多くは、容易な検出を妨げるシャーディング技術を使用していることがわかった。
いくつかのSCAツールは、元のコンポーネントに対してテストされたが、パフォーマンスはさまざまだった。いくつかのツールはほとんどの脆弱性を特定できたが、多くはクローンコンポーネントの問題を検出することができなかった。テストしたクローンのほんの一部しか、これらのツールに認識されなかったことは、現在のSCAツールが効果的に分析できるものとの間に大きなギャップがあることを示しているよ。
研究の限界
分析は精度を目指していたけど、限界もあった。テストは常に脆弱性の全範囲を反映するわけではなく、一部の報告は明確でなかったりあいまいだったりする。ネットワーク接続などの要素は、迅速で効率的なテストを維持するために含まれていなかった。
さらに、分析はすべてのクローンを検出することができなかった、特に深いコードの変更や単純な名前変更を超えるカスタム変更を含むものは。研究では、すべての脆弱なアーティファクトを見つけることは不可能だと認識しているが、このアプローチは注意が必要な重要な問題があることを示している。
ソースコードへの依存も、検出をJavaベースのコンポーネントに限り、Javaバイトコードにコンパイルされるかもしれない他の言語は除外されている。
結論
この研究の結果は、ソフトウェアコンポーネントの脆弱性を検出する既存の方法には改善が必要だってことを示している。クローンやシャーディングの問題は、現在多くのツールで対処されていない隠れた脆弱性をもたらしている。
研究は、SCAツールがプロジェクトのメタデータだけにとどまらない深い分析メカニズムを含めるべきだという考えを支持している。これらの実践によって未発見の脆弱性が多く残っている今、ソフトウェアのセキュリティを確保するために、より良い検出技術が強く求められているんだ。
証拠は、これらの盲点に対処することで脆弱性検出が大きく改善され、より安全なソフトウェア開発の実践につながることを示しているよ。
タイトル: On the Security Blind Spots of Software Composition Analysis
概要: Modern software heavily relies on the use of components. Those components are usually published in central repositories, and managed by build systems via dependencies. Due to issues around vulnerabilities, licenses and the propagation of bugs, the study of those dependencies is of utmost importance, and numerous software composition analysis tools have emerged for this purpose. A particular challenge are hidden dependencies that are the result of cloning or shading where code from a component is "inlined", and, in the case of shading, moved to different namespaces. We present a novel approach to detect vulnerable clones in the Maven repository. Our approach is lightweight in that it does not require the creation and maintenance of a custom index. Starting with 29 vulnerabilities with assigned CVEs and proof-of-vulnerability projects, we retrieve over 53k potential vulnerable clones from Maven Central. After running our analysis on this set, we detect 727 confirmed vulnerable clones (86 if versions are aggregated) and synthesize a testable proof-of-vulnerability project for each of those. We demonstrate that existing SCA tools often miss those exposures. At the time of submission those results have led to changes to the entries for six CVEs in the GitHub Security Advisory Database (GHSA) via accepted pull requests, with more pending.
著者: Jens Dietrich, Shawn Rasheed, Alexander Jordan, Tim White
最終更新: 2023-10-09 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2306.05534
ソースPDF: https://arxiv.org/pdf/2306.05534
ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://dl.acm.org/ccs.cfm
- https://libraries.io/
- https://github.com/jensdietrich/xshady-release
- https://github.com/jensdietrich/xshady
- https://github.com/github/advisory-database/pull/
- https://www.oracle.com/security-alerts/cpujul2023.html
- https://bit.ly/xshady-ghsa-pr
- https://github.com/AdoptOpenJDK/openjdk-jdk16/tree/master/src/java.base/share/classes/jdk/internal/org/
- https://maven.apache.org/plugins/maven-shade-plugin/
- https://sap.github.io/project-kb/
- https://github.com/frohoff/ysoserial
- https://mvnrepository.com/artifact/
- https://nvd.nist.gov/vuln/detail/
- https://central.sonatype.org/search/rest-api-guide/
- https://www.cvedetails.com/cve/CVE-2022-38750/
- https://bitbucket.org/snakeyaml/snakeyaml/issues/526/stackoverflow-oss-fuzz-47027