Claude によるソフトウェアセキュリティの自動攻撃面削減
自動化された攻撃面の分析と削減は、コードの到達可能性を最小化することで、展開されたソフトウェアのセキュリティを有意に向上させます。これにより、個々の欠陥を発見または修正することなく、未知の脆弱性の深刻度を低減できます。
従来のソフトウェアセキュリティは、個々の脆弱性を発見して修正することに依存しており、このプロセスは規模の拡大にうまく対応できません。対照的に、攻撃面を削減することで、攻撃者が到達可能なコードを制限し、未知の脆弱性でさえ悪用しにくくします。このアプローチは、コードベース全体のリスクプロファイルを最小化します。
コードベースの攻撃面を削減する方法
攻撃面削減技術は、大規模なソフトウェアプロジェクトに固有の複雑さと変化から生じる不要なコード露出を特定し、制限することを目的としています。このプロセスでは、コードを適切なセキュリティゲートの背後に移動します。例えば、機能を事前認証から事後認証へ移動したり、デフォルト有効から明示的なオプトインへ変更したりします。
Anthropic は、自動攻撃面分析のための3つの具体的な方法に焦点を当てました。
- デフォルト設定: 出荷時のデフォルト設定で到達可能だが、デフォルト機能では使用が意図されていないコードを特定します。
- 設定の相互作用: 個々には妥当に見えるが、組み合わせるとセキュリティ問題を引き起こす設定オプションのペア(例: セキュリティ制御を黙って無効化する)を発見します。
- 早期到達可能性: 認証などの適切なセキュリティ制御の前に、被害者の操作なしで、またはプロトコル状態遷移の前に実行される、セキュリティ上重要で複雑なコードを特定します。
オープンソースプロジェクト全体での Claude の発見
これらの技術を、C、C++、Java、PHP、Python などの言語で500万行以上に及ぶ25の大規模オープンソースプロジェクトに適用し、493件の問題を発見しました。これらの発見は、プロジェクトの展開モデルに基づいて分類されました。
- 公開: 到達できるすべてのユーザーにサービスを提供するように設計されたプロジェクト(例: 上流の回答を解析する DNS リゾルバ)。
- ゲート付き: 認証されたユーザーを対象としたプロジェクトで、認証が完了するまで機能が制限されます。
- 非公開: 運営者のプライベート環境にのみサービスを提供するために展開されるプロジェクト。
ゲート付きプロジェクトの脆弱性
Claude は、11のゲート付きプロジェクトすべてに、意図せず到達可能なコードが含まれていることを発見しました。具体的には、ゲート付きコホートでは、デフォルト設定で93の不要な事前認証サーフェス、認証前にコードが実行または状態が記録される37の場所、および管理者が設定した事前認証制御を黙って弱める61の設定の組み合わせが示されました。これらの問題は単独ではすぐに悪用可能ではありませんでしたが、必要な攻撃面を大幅に拡大しました。
設定の相互作用の問題の影響
設定の相互作用の分析により、すべてのプロジェクトタイプにわたって最も影響力のある発見のいくつかがもたらされました。Claude は、エラー、警告、またはそれらの相互作用に関するドキュメントなしで受け入れられた162のセキュリティ上重要な設定の組み合わせを発見しました。
- セキュリティ制御の黙示的な無効化: これらのうち94件では、設定の組み合わせによりセキュリティ制御が黙ってオフになりました。
- 不整合: 残りの68件は、セキュリティメカニズム内の不整合(例えば、無効として設定されているにもかかわらずリスナーが到達可能なままである、または設定ファイル内の順序に依存する競合する設定)を含んでいました。
4つの無関係なプロジェクトで独立して発見された1つの特定のパターンには、フェイルオープンの脆弱性が含まれていました。管理者がIPアドレスの代わりにホスト名またはワイルドカードパターンをアクセスルールに使用し、それを逆DNSルックアップを制御する別のオプションが無効になっていることと組み合わせた場合です。ルックアップがオフの場合、サーバーはルールをクライアントのIPアドレスとプレーンテキストとして比較し、ホスト名パターンと一致することは決してないため、拒否ルールがフェイルオープンします。
ケーススタディ: OpenSSH の攻撃面削減
高度に監査された C コードベースである OpenSSH は、Claude が攻撃面の最大の割合削減を達成したプロジェクトでした。Claude は、10.4 リリースの SSH デーモンの入力パスをトレースし、デフォルト設定で認証されていないクライアントが到達可能な ML-DSA-44 耐量子署名アルゴリズム用の新しい実験的なコード約4,500行を発見しました。
このコードは、管理者がアルゴリズムを明示的に除外した場合でも到達可能でした。これは、デーモンがそのキータイプが許可されているかを確認する前に、クライアントが送信したキータイプを解析したためです。これらの4,500行は、デフォルトの sshd における OpenSSH 自身の事前認証コードの約16%を占めていました。
この最初の発見に続いて、Claude は 10.5 リリースで2つのギャップを特定しました。
- クライアントクレームの不一致: チェックはクライアントが宣伝するアルゴリズム名を調べましたが、パーサーはキーブロブ内に埋め込まれたタイプ文字列によって選択されたため、クライアントは1つのアルゴリズムを宣伝しながら、異なる脆弱なキータイプを送信できました。
- 証明書検証のバイパス: 証明書キータイプはデフォルトで有効でした。攻撃者は証明書を提供し、sshd に埋め込まれた CA 公開鍵を逆シリアル化させ、設定を参照する前に完全な署名検証を実行させることができました。これにより、バイナリ内のすべての公開鍵署名検証器が、鍵交換を完了できる任意のクライアントに到達可能になりました。
バージョン 10.6 で実装された結果の修正では、設定チェックをパーサー自体の中に配置し、エンコードされたキータイプと証明書の CA 署名アルゴリズムが、逆シリアル化または署名検証の前に設定された許可リストと比較されるようにしました。この変更により、認証されていないクライアントが以前到達可能だった OpenSSH コードの約5分の1が削除されました。
実装と結論
Anthropic は、これらの攻撃面削減技術を再利用可能な Claude スキルに組み合わせ、OSS-Scanner に統合しています。このスキルは3つのパスで動作します。
- デフォルト設定で到達可能であり、意図された機能によって使用されていないコードをチェックします。
- 認証などのハードゲートの前、またはプロトコル状態機械のエントリポイントの前に、設定に関係なく実行されるコードを調べます。
- セキュリティ制御を黙ってオフにする、またはその有効性を低下させる設定の組み合わせを評価します。
デフォルト設定の発見については、スキルはゲートを設計および実装し、変更されたビルドがプロジェクトの既存のテストスイートを通過することを検証します。他の2つのパスについては、設定チェックの順序変更や状態順序を強制するガードの追加などの変更を提案します。
提示された技術は可能なことの限られたビューを提供しますが、この方法論は、コードベースの攻撃面を削減することがセキュリティを向上させる非常に実用的で効果的な方法であることを示唆しています。不要な露出を最小化することで、防御側はコードベース内のすべての未知の脆弱性によってもたらされるリスクを、それらが現在悪用されているかどうかに関係なく、同時に低減できます。