Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How to secure AI-coded (vibe coded) applications

2025年09月26日に「Dev.to」が公開したITニュース「How to secure AI-coded (vibe coded) applications」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

AIが生成したアプリのセキュリティ確保は、コードを全てレビューできないため難しい。認証をインフラ層で実施し、データアクセスを可視化するなど、AIに依存しない新しいセキュリティ手法で、ビジネス利用への信頼を築く必要がある。

ITニュース解説

AI技術の進化は目覚ましく、最近ではチャットを通じてデータベース操作や外部サービス連携を含む複雑なアプリケーションでも簡単に作成できるようになった。まるでAIが横にいる状態でライブコーディングしているかのように、手軽にアプリケーションを生み出せる時代が到来している。しかし、この便利さの裏側には、これまでとは異なる新たなセキュリティの課題が潜んでいる。

これまでPythagoraのようなAIを活用したアプリケーション開発ツールでは、いかにして簡単にアプリを作れるか、使いやすい操作画面(UX)にするか、という点に注力されてきた。しかし、AIが生成したウェブアプリケーションを実際に安全に運用するにはどうすればよいのか、というより本質的な問題への注目が集まっている。この問題に対しては、単にセキュリティをAIに任せたり、抽象化したりするのではなく、人間が最終的な責任を持ち、確固たる管理をするという考え方の転換が必要不可欠だとされている。

実際に、AIを活用した開発環境でのセキュリティ侵害はすでに発生している。例えば、Pythagora自身やその提携ベンダーがハッカー攻撃の標的となり、OpenAIのAPIキーが盗まれ、3万ドル以上の費用が不正に利用されてしまうという被害があった。また、別のAI開発ツールで作成されたアプリケーションが、すべてのユーザーデータを外部に公開してしまうという重大な情報漏洩も報告されている。これらの事例は、AIが生成するアプリケーションのセキュリティ対策が喫緊の課題であることを示している。

そこで、AIが生成するアプリケーションにおける潜在的な脆弱性を特定し、技術的な知識が少ない開発者でも安全なアプリケーションを構築できる方法を探る必要が出てきた。ここでは、ノーコード(AI生成コードを含む)アプリケーションのセキュリティに関する学びと、具体的な対策について解説する。

ウェブアプリケーションには様々な脆弱性が存在するが、これらは主に以下のカテゴリに分類できる。

第一に、安全でないHTTPS接続がある。今日では、ウェブサイトのセキュリティ対策として基本的なものであり、ほとんどのサイトで標準的に導入されている。もし「http://」で始まるウェブサイトを開いた場合、ブラウザが明確に警告するように、そこに入力されたすべてのデータはハッカーによって傍受され、内容を読み取られてしまう可能性がある。一方、「https://」で始まるウェブサイトではデータが暗号化されるため、ハッカーが傍受しても意味不明な文字列しか見ることができない。

第二に、認証(Authentication)の脆弱性がある。これはウェブアプリケーションを安全にする上で最初の、そして極めて重要な部分である。AIによるコーディングツールではこの部分もカバーされているように見えるが、AIが生成したコードのすべてを人間が確認できない場合、認証機能が本当に100%安全であるかどうかが問題になる。例えば、AIがコードを生成する際に、管理者権限を要求する重要なキーワードを誤って削除してしまった場合、会社のすべての顧客情報がインターネットを巡回するあらゆるクローラー(検索エンジンなどがウェブサイトを読み込むためのプログラム)に公開されてしまう可能性がある。また、一時的に社内情報を公開するページを作成し、後でそのページ自体を削除したつもりでも、データを取得するための裏口(エンドポイント)が残ったままで、誰でも社員情報を取得できてしまうケースも考えられる。

第三に、認可(Authorization)、またはアクセス制御の脆弱性がある。アプリケーションが社外からアクセスされないことを確認した上で、今度は社内の人間でも、それぞれがアクセスしてはいけないデータにアクセスできないようにすることが重要だ。例えば、人事管理アプリケーションにおいて、全従業員が人事担当者の給与明細を閲覧できてはならない。

第四に、コードベースの脆弱性がある。これには様々な種類があるが、特に重要なものをいくつか紹介する。

  • 侵害されたライブラリ: 現代のウェブアプリケーションは、他の開発者が作成したオープンソースのライブラリ(コードの部品)の上に成り立っていることが多い。オープンソースであるため、ハッカーはライブラリの内部構造を完全に把握できる。もしライブラリの開発者が悪意のある脆弱性(システムへのバックドアなど)を仕込んだ場合、そのライブラリを使用しているすべてのアプリケーションがハッキングの対象となる。たとえ自身が直接そのライブラリをインストールしていなくても、使用している別のライブラリがその脆弱なライブラリを使っていた場合でも、影響を受ける可能性がある。
  • 機密データの露出: バックエンドの構造に注意しないと、APIキーなどの機密情報が誤ってユーザー(必ずしもハッカーでなくても)に公開されてしまうことがある。もしユーザーがAPIキーを発見した場合、そのキーを使って不正にサービスを利用され、高額な利用料金を請求される可能性もある。例えば、OpenAIのAPIキーが漏洩した場合、大量の言語モデルへのリクエストを不正に行われるといった事態が考えられる。
  • インジェクション: コードの構造が正しくないと、ユーザーが入力したデータがサーバー上で悪意のあるコードとして実行されてしまうことがある。最も有名なのはSQLインジェクションと呼ばれるもので、ユーザーの入力内容をそのままデータベースへの問い合わせ(SQLクエリ)に組み込むコードがあった場合、ユーザーが名前の入力欄に「DROP DATABASE」と入力すると、データベース全体が削除されてしまう可能性がある。実際にこのような事例が、AIが生成したアプリで発生している。

AIは人間の開発者よりもはるかに多くのコードを短時間で生成する。1日に1万行、将来は5万行ものコードを生成することも現実的だ。これほどの量のコードを人間がすべてレビューすることは、実質的に不可能である。しかし、AIが生成するコードは必ずしも質が低いわけではない。多くのログ出力、エラー処理、追加機能などが含まれており、中には人間の開発者のコードよりも優れている場合もある。重要なのは、AIが生成するコードの量自体ではなく、そのコードの中に潜在的なセキュリティ上の欠陥、特にAIの「幻覚(hallucinations)」によって生じる問題があることだ。AIが重要なセキュリティチェックのためのコード行を一つでも見落とすだけで、システム全体が危険に晒される可能性がある。例えば、前述の「管理者権限を要求する」コードが抜け落ちるだけで、企業のすべての顧客データが誰にでも公開されてしまう事態も起こり得る。

このため、AIが生成するアプリケーションをビジネスで安全に利用するためには、AIにコーディングを任せつつも、セキュリティだけは人間の手でしっかりと保証するというアプローチが必要だ。AIがいくらコードを書いても、アプリケーションが展開される前に、データが100%安全であることを人間が保証する仕組みが求められる。

Pythagoraでは、AIがどれだけコードを生成してもデータが安全に保たれるように、コードの全行をレビューすることなくセキュリティを確保するための複数の「セキュリティ層」を構築している。

まず第一に、非認証ユーザーからのコードベースの隔離がある。 これは、AIが生成するアプリケーションのコードそのもので認証機能を実装するのではなく、アプリケーションの手前、つまりインフラストラクチャ層で認証を強制するという考え方だ。Pythagoraでは、リバースプロキシ(具体的にはNginx)と呼ばれる、サーバーの前面に位置する、アプリケーションへのアクセスを仲介するコンポーネントで認証を行うシステムを採用している。これにより、認証されていないユーザーからのリクエストは、AIが生成したアプリケーションコードに到達する前にブロックされる。AIが誤って認証に関するコードを変更したり、重要なアクセス制御を削除したりしても、このインフラ層での認証が機能していれば、非認証ユーザーはアプリケーションにアクセスすることすらできないため、システム全体が安全に保たれる。

第二に、透明なデータアクセスがある。 AIが生成するバックエンドは、コードレビューをしない限りその内部の動作が不透明な「ブラックボックス」になりがちだ。しかし、AIが日々大量のコードを生成する中で、全コードレビューは現実的ではない。そこで、コードを一行ずつ確認する代わりに、アプリケーションの動作を「可視化」して人間がレビューできるようにする。具体的には、どのAPIエンドポイントが利用可能か、どのユーザーがそれらにアクセスできるか、どのデータベースクエリが実行されるか、どの外部サービスにどのようなデータが送信されるか、といった情報を一覧で確認できるツールを提供する。これにより、開発者は詳細なコードに踏み込むことなく、アプリケーションのバックエンドが意図通りに動作しているか、または危険な処理をしていないかを把握し、確認することができる。

第三に、コードベースの脆弱性対策がある。 これは主に、静的コード解析と呼ばれる方法で、コードを実行せずにセキュリティ上の問題点を自動的に特定する。例えば、Githubのようなプラットフォームは、APIキーがコードに直接埋め込まれていたり、既知の脆弱性を持つライブラリが使用されていたりする場合に警告を発してくれる。Pythagoraでは、アプリケーションがデプロイされる前に以下のチェックを行う予定だ。

  • 静的コード解析: コードを自動で解析し、潜在的な脆弱性を検出する。
  • 自動ペネトレーションテストスキャン: 実際に攻撃をシミュレートしてシステムの脆弱性を探すテストを自動で行う。
  • PythagoraのセキュリティエージェントによるAIコードベーススキャン: Claude Codeを活用したセキュリティエージェントが、AIが生成したコードを詳細にスキャンし、以下のような脆弱性を検出する。
    • インジェクション(SQL、OS、LDAPなど): ユーザー入力が不正なコードとして実行される可能性がある箇所をチェックする。
    • 秘密鍵の露出: APIキーなどの機密情報が、本来不要なフロントエンドなどに誤って公開されていないかを確認する。
    • クロスサイトスクリプティング(XSS)や安全でない非中央集権: ユーザーが入力した文字列が、意図せずウェブページ上でコードとして実行されてしまう可能性がある箇所をチェックする。

最終的に、これらのセキュリティ対策に加え、組織内で開発されたソフトウェアが確実に安全であることを技術リーダーが承認するプロセスが必要となる。GitHubのプルリクエストのような従来のコードレビュー方式は、AIが生成する大量のコードの前ではもはや効果的ではない。これに代わる、APIエンドポイントやデータベースクエリの変更点など、重要な変更内容を迅速に確認・承認できる新しいプロセスが、AI開発時代における承認の標準となるだろう。

このように、AIが大量のコードを生成し、人間のレビューが追いつかない現代において、ウェブアプリケーションのセキュリティを確保するためには、これまでのアプローチでは不十分だ。AIが生成するコードに起因する典型的な脆弱性を理解し、それに対して人間が主導する多層的なセキュリティ対策を講じること、そして新たな承認プロセスを導入することが、AIを活用したアプリケーションをビジネスの根幹を担うシステムとして安全に利用するための鍵となる。

関連コンテンツ

関連IT用語

関連ITニュース