PRevent: Open-source tool to detect malicious code in pull requests
2025/02/20 HelpNetSecurity — ユーザー組織におけるソフトウェア開発ライフサイクルの一環として、悪意のコードの検出に有益となる OSS ツールが、Apiiro のセキュリティ研究者たちによりリリースされた。それらは、プルリクエストに対するスキャナーである PRevent と、悪意のコードを検出するルールセットSemgrep、静的コード用の分析ツール Opengrep で構成されている。

これらのツールは、リポジトリとパッケージ内に隠れている、何千もの悪意のコード・インスタンスを分析し、研究者が特定する2つのアンチ・パターンを検出することで機能する。それらのパターンは、難読化/判読不能なソースコードと、ランタイムでの動的実行で検出されるものであり、ビルド時/コンパイル時ではないという。
Apiiro のセキュリティ研究者である Matan Giladi は、「悪意のパターンの中には、正当なコードにも散見されるパターンもあり、誤検知の原因となっている。ただし、私たちは、コーディングのアンチ・パターンに重点を置いている。それは、ベスト・プラクティスに反するパターンであり、一般的なコードベースでは稀な存在であり、悪意のコードで多用されるパターンである」と説明している。
悪意のコードを検出するルールセット:Semgrep/Opengrep
この Semgrep/Opengrep ルールセットは、15 種類のプログラミング言語である、Bash/Clojure/C#/Dart/Go/Kotlin/Java/JavaScript/TypeScript/Lua/PHP/Python/Ruby/Rust/Scala で記述されたコードにおいて、前述の2つのアンチパターンを検出する。
その設計思想は、コメントの無いコードで実行されるものであり、あらゆる CI/CD パイプラインとの統合を前提に開発されているため、ビルド/テスト/事前デプロイ/本番環境などの、あらゆるステップで検出を可能にする。
プルリクエスト・スキャナー:PRevent
その一方で PRevent は、プルリクエスト・イベントによりトリガーされる。つまり、プルリクエスト・イベントをスキャンすることで、悪意のコードとコメントをダイレクトに検出する。
この PRevent は、GitHub 組織またはアカウント内で開発者が作成し、サーバへデプロイできる GitHub アプリである。
このアプリケーションは GitHub と通信し、必要に応じてプルリクエストをスキャンしてコメントを添付するほかに、選択したリポジトリとブランチの、スキャンにおける取込/除外のコンフィグにも対応する。そして、レビュー担当者の承認が得られるまでマージをブロックし、指定された担当者によるコード・レビューをトリガーすることも可能だという。
Matan Giladi は、「完全なプライバシーとコントロールを前提として設計された PRevent は、GitHub Enterprise アカウントの場合には、社内ネットワーク内にデータを留めることが可能であり、また、その通信も、GitHub とプライベート・サーバの間だけに限定できる」と強調している。
なお、PRevent がサポートするコーディング言語は、Semgrep/Opengrep と同じである。
Matan Giladi は、「ランタイムでの動的実行と難読化の検出は、シンプルだがパワフルであり、ほぼ全ての既知のインシデントを捕捉し、悪意のコード防御という強固な基盤を形成する。ただし、その成功は、正しいワークフローの採用に依存する。たとえば、当社のルールセットでは、 xz バックドア・ペイロードに正しくフラグ付けするが、適切なワークフローがなければ、そのコードはスキャンされない。プルリクエストのスキャンは基本であり、重要な最初のステップである」と締め括っている。
ソフトウェア開発ライフサイクルにおいて、プルリクエスト内の悪意あるコードを検出するための OSS ツール群が、Apiiro からリリースされました。このようなツールが普及すれば、悪意あるコードの流入を未然に防ぐことができるため、今後もこのようなツールの発展に期待したいところです。Apiiro のブログでは、これらのツールに関する、より詳細な情報が提供されています。よろしければ、カテゴリ SecTools と併せて、ご参照下さい。

You must be logged in to post a comment.