Anthropic、ClaudeでコードのAttack Surfaceを縮小

Anthropic RED2026年10月21日 (水)
Anthropic、ClaudeでコードのAttack Surfaceを縮小
  • •AnthropicがClaudeで25のオープンソースプロジェクトを分析し、攻撃者が到達可能なコードを減らすことで493件の問題を発見
  • •Claudeは設定の組み合わせ162件を特定し、うち94件は気づかれないままセキュリティ制御を無効化していた
  • •OpenSSH 10.4では約4,500行の認証前に到達可能なML-DSA-44コードを発見し、リリース10.6で修正された

Anthropicは、Claudeを使ってソフトウェアが到達可能なコードをマップし、デプロイ環境が公開する必要のない機能へのアクセスを削除または制限することで、ソフトウェアのAttack Surfaceを縮小する研究を発表しました。同社は、個々の脆弱性を見つけて修正する方法は拡張性が低く、到達可能なコードを減らすことで、未知の脆弱性や実際に悪用されている脆弱性の深刻度を、一つずつ発見・修正することなく下げられると説明しています。

Anthropicは、C、C++、Java、PHP、Pythonなど複数の言語で書かれた25のオープンソースプロジェクト、500万行を超えるコードにClaudeを適用しました。Claudeは493件の問題を発見し、17,000を超える設定オプションの一覧を作成しました。そのうち3,842件はセキュリティに関係する制御や機能に関するものでした。研究者はプロジェクトを、任意の到達可能なユーザーにサービスを提供する公開型10件、認証済みユーザーにサービスを提供する制限型11件、運用者自身の環境にサービスを提供する非公開型4件の3つに分類しました。

研究では3つの手法が用いられました。デフォルト設定では、出荷時の既定構成で到達可能で、どの既定機能も利用しようとしていないコードを探します。設定の相互作用では、単独では妥当でも組み合わせると問題を起こすオプションの組を探します。早期到達性では、認証などの適切な制御やプロトコル状態遷移の前に実行される、セキュリティに敏感または複雑なコードを探します。Anthropicによると、制限型の11プロジェクトすべてに意図せず到達可能なコードが含まれており、デフォルト設定における93件の不要な認証前の攻撃面、認証前にコードが実行されたり状態が記録されたりする37か所、事前認証制御を黙って弱める61の設定組み合わせが含まれていました。

設定の相互作用については、Claudeはエラー、警告、想定される相互作用の文書なしに受け入れられていたセキュリティ関連の組み合わせを162件発見しました。94件では組み合わせが黙ってセキュリティ制御を無効化し、68件は同じ仕組みの内部での不整合でした。Claudeはまた、無関係な4つのプロジェクトで共通のパターンも見つけました。逆引きDNSが無効のとき、ホスト名やワイルドカードで書かれたアクセスルールはIPアドレスに一致しないため、拒否ルールが決して発動せず、リストがフェイルオープンになるという問題です。別のプロジェクトでは、証明書ベースの身元確認が黙って除外され、認証されていないクライアントがリクエスト処理コードに到達できる状態になっていました。競合する設定は21年間存在していたとのことです。

OpenSSHのケーススタディでは、Claudeはリリース10.4のSSHデーモンを追跡し、デフォルト設定で認証されていないクライアントが到達可能な、約4,500行の新しく実験的なML-DSA-44耐量子署名コードを発見しました。このアルゴリズムはデフォルトでは有効化されておらず、管理者が明示的に無効化した場合には除外されていたにもかかわらずです。Anthropicによれば、この行数はデフォルトのsshdにおける認証前コードの約16%にあたります。チームはパッチを添えて問題を報告し、リリース10.5では検査がパース前に移動されました。その後Claudeは、広告されるアルゴリズム名と実際にパースされる鍵の種類の不一致や、ゲートされていない証明書CA署名経路など、残る2つの欠陥を特定しました。さらなる修正では検査がパーサー内部に置かれ、メンテナーはバージョン10.6で変更を出荷しました。これにより、デフォルトビルドで認証されていないクライアントが従来到達できたコードのおよそ5分の1が取り除かれました。

Anthropicはこの3つの手法を再利用可能なClaudeスキルとしてパッケージ化し、OSS-Scannerへの統合を進めています。このスキルは3つのパスを実行し、それぞれが前のパスからの短いコンテキストを除いて空のコンテキストウィンドウから始まり、各発見をプログラムの動的トレースで確認します。デフォルト設定での発見については、ゲートを設計・実装し、プロジェクト自身のテストを実行してプログラムのデフォルト動作が変わらないことを確認します。