今日表示しない

トップへ戻る

トップへ戻る

セキュリティ インサイト

セキュリティ インサイト

セキュリティ インサイト

AI

AI

AI

エンキホワイトハット

エンキホワイトハット

コンテンツ

コンテンツ

コンテンツ

この1年間で、開発チームの働き方は急速に変化しました。CursorやGitHub Copilot、Claude CodeといったAIコーディングアシスタントが日常的なツールとして定着し、開発スピードが以前よりもはるかに速くなりました。開発作業においてAIが担当する範囲が深く、また広くなったことで、少ない人員でもより多くの機能を短時間で開発できるようになりました。

問題は、AIベースの開発が普及するにつれて、人間が直接ロジックやセキュリティ設定を検証する時間も減少しているという点です。AIが生成したコードをAIが再びレビューするという流れまで増えたことで、セキュリティの抜け穴が増加し、本番環境では権限検証の漏れ、シークレット(秘密情報)の露出、旧バージョンの依存関係といった脆弱性につながる事例が繰り返し確認されています。つまり、LLMエージェントは「機能的に動作するコード」の生成には強みを持っていますが、本番環境基準の認証および認可の例外処理や、実際の権限フローまで完全に検証することはできないケースが多いのです。

したがって、この記事ではNki Whitehat(エンキホワイトハット)のホワイトハッカーの視点から、AIコーディングアシスタントを用いた開発作業をより安全に行えるよう、AIコーディング環境で繰り返し発見されるセキュリティ問題と、組織レベルでの対応方向について整理しました。

AIコーディングアシスタント基盤の開発で、必ずチェックすべき3つのポイント

1. ハードコーディングされたシークレット・APIキー

AIコーディングアシスタントは、ひとまず動作するコードを迅速に出力することに最適化されています。その過程で、サンプルのAPIキー、テスト用のDB接続情報、サンプルのJWTシークレットがコード内にそのまま残ってしまうケースが発生します。

Enki Whitehatが実施したレッドチームプロジェクトでも、同様の事例がありました。ある企業の社内コードリポジトリにそのまま保存されていたAPI_KEYと一部のシステムアカウントの認証情報を収集し、内部拡散に活用された事例がありました。これは、「ホワイトハッカーが最もよく使う攻撃ルート TOP 5」の2位であるサプライチェーン攻撃へと繋がります。1つのリポジトリに残されたトークンが、ビルドパイプライン全体を掌握できる鍵となる構造なのです。

海外の調査でも、AIアシスタントが関与したコミットのシークレット流出率は、人間が単独で作成したコミットの約2倍の水準に達していると報告されており(Apiiro — 4x Velocity, 10x Vulnerabilities)、2025年の1年間だけで公開GitHubに新たに露出したシークレットの規模も増え続けているのが現状です。(GitGuardian — State of Secrets Sprawl 2026)

このような流れを受け、社内で実施できる対策は以下の通りです。

対策方法

  • Git履歴の全区間を対象に、シークレットスキャナー(gitleaks、trufflehogなど)を定期的に実行

  • .envsecrets.yamlのようなファイルは、シークレットマネージャー(AWS Secrets Manager、HashiCorp Vaultなど)へ移行

  • 静的解析(SAST)パイプラインで「ハードコーディングされた認証情報」のルールを有効化

  • リポジトリに公開されてしまった資格情報およびAPIキーの無効化(破棄)処理

  • pre-commitフックを利用し、機密文字列がコミットされる前にブロック


2. 古いバージョンのライブラリ・依存関係

AIコーディングアシスタントは、学習時点のライブラリバージョンをデフォルトとして推奨する傾向があります。アシスタントの推奨をそのまま適用する開発者の場合、数ヶ月から1年前のバージョンが自然とpackage.jsonやrequirements.txtに書き込まれることになります。これは、TOP 5 攻撃ルートの4位である「1-day 脆弱性」の代表的な原因です。すでにパッチが提供され、CVE番号まで付与されている脆弱性であるにもかかわらず、自社チームだけがアップデートしていない状態で放置されていることになります。以前のレッドチームの事例では、あるSaaS製品のAI推奨テンプレートが、すでにCVEが公開されているバージョンの認証ライブラリをデフォルトとして組み込んでいたケースも確認されました。

対策方法

  • SBOM(Software Bill of Materials:ソフトウェア部品表)を生成し、どのバージョンがデプロイされているかの可視性を確保

  • npm auditpip-auditosv-scannerをCIパイプラインの基本ルーチンとして追加

  • DependabotやRenovateなどの自動アップデートツールを活用

  • AIアシスタントが提案した依存関係は、コードレビューの過程でバージョンを再確認

ただし、最近ではnpmやPyPIのエコシステムを狙ったサプライチェーン攻撃も同様に増加しています。実際に、正規パッケージと類似した名前の悪意あるパッケージや、乗っ取られたメンテナンスアカウントを介した悪意あるアップデートの事例も継続的に報告されています。最近のTeamPCPサプライチェーン攻撃事例では、CI/CDトークンの奪取とオープンソースパッケージのアップデートチェーンを悪用し、自動化された開発環境そのものを攻撃経路として利活用することもありました。このため、自動アップデートツールも単なる「自動反映」に頼るのではなく、信頼できるパッケージであるかや変更内容を共に検証する運用体制の中で使用することが重要です。


3. 不完全な認証・権限管理

AIが生成する認証および認可のコードは、標準的なケースにおいては適切に動作します。ログイン、トークン発行、基本的なロール検証(役割チェック)まではきれいに記述されます。問題はエッジケースです。Enki WhitehatがOFFen PTaaSを通じて繰り返し確認したパターンは以下の通りです。

  • JWT有効期限検証ロジックが抜けており、破棄されたトークンでもアクセス可能なエンドポイント

  • IDOR(Insecure Direct Object Reference:安全でない直接オブジェクト参照):オブジェクトIDを変更するだけで、他人のユーザーデータが露出してしまうルート

  • 権限チェックがフロントエンドにしか適用されておらず、バックエンドのルートで省略されているケース

  • 管理者用APIと一般ユーザー用APIが同じハンドラーを共有し、分岐処理が漏れている場合

この領域は、自動化ツールが特に検知しにくいのが特徴です。認可呼び出しはコードに含まれているものの、ランタイムで実際には強制されない構造になっていることが多く、静的解析(SAST)で検知されないケースが多々あります。動的解析(DAST)でも、オブジェクトIDを変更しながら他人のリソースを要求したり、フロントエンドで制限されている入力をバイパスしてサーバーに直接リクエストを送信するようなシナリオを自動実行するのは困難です。攻撃者の視点から直接ロジックを検証して初めて明らかになる領域です。

対策方法

  • 認証・認可ロジックをコードレビューの必須チェック項目に指定します。それだけでなく、未認可のリクエストが実際にブロックされるかを確認する必要があります。

  • 新規追加されたAPIやルートが認証なしで公開されていないかを合わせて点検します。AIが作成したコードでは権限検証が漏れていたり、テスト用のエンドポイントがそのまま残ったりすることがあるためです。

  • デプロイ前のユニットテストと統合テストを行い、認証・認可ロジックが意図通りに動作するか確認します。機能が正常に動作するかどうかだけでなく、権限がない状態でのアクセスや他人のリソースへのリクエストといった不正な状況についても検証する必要があります。

  • 自動模擬ハッキング(自動ペネトレーションテスト)のシナリオを繰り返し実行し、新規追加されたAPIや変更された権限ロジックで同様の問題が再発していないか点検します。

  • 四半期に1回以上、あるいは認証・認可システムに変更があった場合は、外部のPTaaSでエッジケースを検証します。オブジェクトIDの操作や権限のバイパスなど、自動化ツールで見落としがちなパターンは、攻撃者の視点から直接確認する必要があります。

AIバイブコーディング時代、脆弱性を作らないための段階的予防策

1. コード作成の段階で

AIが生成したコードは、「正常に動作するかどうか」と「安全であるかどうか」を切り離して検証する必要があります。機能が動作するからといって、セキュリティ的に安全であるとは限りません。

  • AIが生成した依存関係が、実際に存在する正当なパッケージであるかをまず確認し(存在しないパッケージ名を狙ったスロップスクワッティング攻撃に注意)、最新の安定バージョンであるかをチェックします。

  • 認証・認可のロジックはAIの下書きをそのまま使用せず、エッジケース(期限切れトークン、権限のないユーザーによる直接要求など)をレビュアーが直接確認します。

  • 最近では、LLMのプロンプト段階でRBAC(役割ベースのアクセス制御)、認証および認可ミドルウェア、JWT検証ロジックなどをあわせて明示し、生成段階から権限構造を一定レベルで強制する手法も活用されています。

  • .envsecrets.yamlのようなファイルは絶対にコミットせず、シークレットマネージャー(AWS Secrets Manager、HashiCorp Vaultなど)で管理します。


2. コミット前の段階で

自動化ツールを用いて、人間が見落とす部分を補完します。

  • CI段階で同様のシークレットスキャンおよび静的分析のステップをもう一度強制し、漏れを防ぎます。

  • CIパイプラインの段階でosv-scannerなどの各フレームワークの依存関係スキャニングを実行し、使用するパッケージのセキュリティを検証します。

  • SBOM(ソフトウェア部品構成表)を生成し、どのバージョンがデプロイされるかの可視性を確保します。


3. 稼働中のサービスで

コードをデプロイした後も、継続的な監視が必要です。稼働中のサービスであれば、WAFやランタイム脅威検出機能を通じて異常なリクエストや行為をリアルタイムで遮断し、セキュリティイベントログを中央で収集・分析して、異常行為の試みを早期に特定できるようにする必要があります。

  • DependabotやRenovateを利用してパッチリリースに対するPRを自動的に受け取り、パッチの遅延を減らしつつも、マージ前の変更内容の確認は維持する必要があります。自動アップデートもサプライチェーン攻撃の経路になり得るため、最終的なマージは人間が直接行うことを推奨します。

  • 外部に露出している資産や流出した資格情報の痕跡を継続的にモニタリングします。

  • 四半期に1回以上、外部のセキュリティ専門家の視点から、認証・認可のエッジケースを含むペネトレーションテスト(模擬ハッキング)を実施します。自動化ツールでは検知できない設計レベルの欠陥は、この段階で明らかになります。

この段階で発見された欠陥のタイプは、その後のコーディングガイド、プロンプトルール、セキュリティポリシーなどに再び反映される必要があります。単に脆弱性を修正するだけで終わらせるのではなく、同じ問題が繰り返し発生しないように、組織の開発・デプロイプロセス自体を継続的に改善していくことが重要です。

おわりに

AIアシスタントが作成したコードの最終的な責任は、コミットした人とデプロイした組織にあります。AIがコードをより速く、より多く生成するようになるにつれて、そのコードを検証する体制も補完される必要があります。

したがって、最終的に重要なのはAIの使用有無そのものよりも、組織がどのような検証体制を整えているかです。コード生成段階からレビュー、デプロイ、運用に至るまで、セキュリティ検証のフローが共に設計されている必要があり、自動化ツールと人間による攻撃者の観点からのレビューが連携して機能しなければなりません。

AIは開発の生産性を大幅に向上させてくれますが、セキュリティの責任まで代わりに従ってくれるわけではありません。だからこそ、これからの開発環境においては「どれだけ速く作れるか」と同じくらい、「どのように検証し、運用するか」がさらに重要な競争力となるでしょう。

エンキホワイトハット

エンキホワイトハット

ENKI ホワイトハット
ENKI ホワイトハット

オフェンシブセキュリティの専門企業として、攻撃者の視点から次元の異なるセキュリティを提示します。

オフェンシブセキュリティの専門企業として、攻撃者の視点から次元の異なるセキュリティを提示します。

隙のないセキュリティ設計の始まり、NO.1ホワイトハッカーのノウハウから

インシデント発生前、
今すぐ備えましょう

隙のないセキュリティ設計の始まり、
No.1ホワイトハッカーのノウハウから

インシデント発生前、
今すぐ備えましょう

隙のないセキュリティ設計の始まり、
No.1ホワイトハッカーのノウハウから

インシデント発生前、
今すぐ備えましょう

購読する

コンテンツが役に立ったら?
エンキーレターを購読しましょう!

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.