Skip to main content

AIは安全なコードを書けるのか?

著者

Frank Fischer

feature security

2023年5月3日

0 分で読めます

AIは驚異的な速さで進化しており、詩の作成からネットワークの保護まで、毎週のように新しいツールや活用方法が発見・発表されています。

GPT-4のような新しいAIモデルに何ができるのか、研究者にもまだ完全には分かっていません。そのため、イーロン・マスクやスティーブ・ウォズニアックといった著名人やAI研究者たちは、安全性に関するプロトコルや規制の策定に注力できるよう、より強力なモデルのトレーニングを6か月間停止することを呼びかけています。

GPT-4をめぐる最大の懸念の一つは、研究者がその能力をまだ完全に把握できていないことです。新たなエクスプロイトやジェイルブレイク、創発的な振る舞いは時間の経過とともに見つかりますが、LLMのブラックボックスという性質上、それらを防ぐのは困難です。OpenAIはGPT-4のホワイトペーパーで、次のように述べています。

OpenAIはGPT-4の開発からデプロイまでの各段階でさまざまな安全対策やプロセスを導入し、有害なコンテンツを生成する能力を抑えてきました。しかしGPT-4は、敵対的攻撃やエクスプロイト、いわゆる「ジェイルブレイク」に対して依然として脆弱な可能性があります。また、有害なコンテンツだけがリスクの原因ではありません。ファインチューニングによってモデルの動作を変えられますが、有害なコンテンツを生成する可能性など、事前学習済みモデルの基本的な能力は潜在したままです。

GPT-4はリリースされたばかりですが、その前身であり、Chat-GPTを支えてきたGPT-3については、多くのデータが蓄積されています。ChatGPTの登場以来、大きな話題を呼び、GoogleやAdobeをはじめとする大手テクノロジー企業も、AIへの取り組みを急いで打ち出しています。

生産性の向上からコンテンツの作成まで、ChatGPTの活用範囲は多岐にわたります。一方で、プライバシーの問題やサイバーセキュリティのリスク、アプリケーションセキュリティ態勢への潜在的な影響から、開発者がコードの生成にChatGPTを使うことへの懸念もあります。

ChatGPTの概要、活用例、サイバーセキュリティ上のリスク、従業員データの漏えい、AI生成コードに関する統計を説明するインフォグラフィック。

コーディングにAIツールを使う際のプライバシーと知的財産のリスク

昨年末の公開以来、社内データを使う場合のChatGPTのプライバシーリスクは、消費者や専門家の間で広く懸念されています。

最近のCyberhavenのレポートによると、従業員の3.1%が機密情報をChat-GPTに投稿しており、AIツールの社内利用を規定するポリシーを策定する重要性が示されています。機密性の高いソースコードや会議メモがChat-GPTに入力されたことを受け、Samsungは最近、AIの利用に関する社内警告を従業員に発しました。これらのデータは現在、学習データとしてOpen-AIの手に渡っており、取り戻せるかどうかは不明です。

サイバーセキュリティを強化するAIツール

セキュリティ担当者にとって、悪い話ばかりではありません。AI技術にはデメリットやプライバシー上の懸念がある一方で、セキュリティチームが新たな脅威に対処するためのツールも増えています。

OpenAIのレッドチームは、GPT-4を使って脆弱性の発見と悪用に成功したほか、ソーシャルエンジニアリングも実施しました。これにより、レッドチームは新たな脆弱性を発見し、報告できるようになります。

セキュリティ企業は、既存製品にAIを組み込む新たな方法を模索し続けています。先日発表したAuto-Fix機能では、ハイブリッドAI技術を活用してAIが脆弱性の修正案を提示し、Snyk Codeエンジンがそのセキュリティを検証します。

AIを使ったコーディングに伴うアプリケーションセキュリティのリスク

ChatGPTはコード作成に役立ちますが、一般に一度に扱えるのは小さなコード片だけです。そのため、大量のコードの生成に使うと、ファイル間や複数の階層にまたがる問題が考慮されず、開発者がリスクにさらされる可能性があります。AIはこうしたケースを理解できず、関連する問題を解決できないことも少なくありません。

コード生成製品の品質は、学習に使われたデータ次第です。バグや脆弱性がまったくないコードを実現するのはほぼ不可能なため、コード生成ツールは脆弱なコードを提案に含めてしまうことがよくあります。Microsoftが共有した次の統計を見ると、懸念はさらに高まります。開発者がチェックインするコードの40%は、現在AIが生成した未修正のコードです。組織はソフトウェアをできる限り安全にする必要があるため、これはAppSecチームにとって大きな懸念事項です。

GitHubのAIコーディングツールCopilotは、GitHubの公開リポジトリ内のコードなど、一般に公開されているソースのコードで学習しているため、既存コードに似た提案を生成します。学習データに安全でないコードが含まれていれば、提案にも典型的な脆弱性が持ち込まれる可能性があります。Invictiの研究者は、Copilotを使ってPythonとPHPのアプリを構築し、両方のアプリに含まれる脆弱性を調べることでこれを検証しました。その結果、XSS、SQLインジェクション、セッション固定化の脆弱性などが見つかりました。

GitHubはセキュリティに関する問題を十分に認識しており、最近のアップデートで脆弱性フィルタリング機能を追加しました。

ハードコードされた認証情報、SQLインジェクション、パスインジェクションは、モデルが対象とする脆弱性につながりやすいコーディングパターンの代表例です。GitHub Copilotのこの機能は、開発者がより安全なコードを書くうえで大きな助けとなります。

GitHub Copilotのアップデートにセキュリティ脆弱性フィルタリング機能が追加 | InfoWorld

ChatGPTを使ったコーディングに関するReddit上の投稿

Copilotについて先に行った調査を踏まえ、ChatGPTも同じ傾向にあるのかを明らかにしたいと考えました。

そこで、Redditを調査することにしました。Redditはソーシャルニュースの集約・ディスカッションサイトで、開発者などの技術者が同じ分野の専門家から情報を得るためによく利用しています。

そのため、ChatGPTをコーディングにどう使っているのかを調べるのに最適な場所です。アドバイスを求めているのでしょうか?この用途で使わないよう他の人に警告しているのでしょうか?それとも、信頼できる情報源として称賛しているのでしょうか?

まず、約350件の投稿からなるコーディングとChatGPTに関するRedditスレッドを分析しました。次に、タイトルだけでなくRedditの投稿本文全体に注目し、コメントの感情を評価しました。

肯定的な意見

説明がない投稿や関連性のない投稿を除くと、17.9%が肯定的な感情を示していました。あるユーザーは作業中のコード画像を投稿し、次のように説明しています。「……もう諦めかけていました。解決策を探して30分近く費やし、最後の手段としてGPTに尋ねたところ、5秒後に完璧な答えが返ってきました……」

別のユーザーは特に高く評価し、こう述べています。「コードのリファクタリングや、配列やリストを変わった方法で操作するような複雑な問題に直面したとき、ChatGPTにやり方を尋ねられるのが気に入っています。こうした問題が出てくるたびに、20年間も頭を悩ませてきましたが、ようやくこの退屈な作業をAIに任せられます!私はどんなプログラマーになったのでしょう?」

一方で、肯定的な投稿の中にも、ChatGPTが細部を見落とすという共通の指摘が見られました。

  • 「……確かに、ものすごく印象的です。もっともらしく、比較的正確なコードを非常に速く書いてくれます。でも、細かい部分はまったくうまくいきませんでした……」

  • 「……コーディングに関しては(ほとんどの場合)ChatGPTの大ファンです。いつも正しい答えを出すわけではありませんが、それでも大丈夫です。たいていかなりいい線までいきます。とても賢いけれど完璧ではないジュニア開発者が、いつでもそばにいるようなものです……」

  • 「……ChatGPTは自分が生成したコードの問題箇所を把握しているようですが、修正するための正しい解決策を示さないことがあります……」

肯定的なコメントにも、ChatGPTが細部を見落とすという批判が添えられている点から、セキュリティ上の懸念が浮かび上がります。経験の浅い人がAIツールでコードを作成した場合、こうした誤りを見抜けない可能性があります。

否定的な意見

全体として、ChatGPTを使ったコーディングに関する否定的な投稿は、肯定的な投稿より少ないことが分かりました。説明文のうち10.3%が全体として否定的な感情を示し、多くのユーザーが不正確さに不満を表明していました。

あるユーザーは次のように述べています。「……ChatGPTの提案は特に信頼できないと感じます。生成されるクエリはエラーばかりです……」

別のユーザーも同様の問題を指摘し、コーディングに役立つ具体的なプロンプトを探していました。「コードの変更を依頼すると、1行だけ変更した場合でもChatGPTはコード全体を出力します。『変更した行のコードだけを提示してください』のようなプロンプトを試しましたが、無視して結局コード全体を出力します。時間の無駄なので、変更した行だけを出力させる効果的なプロンプトを知りたいです。」

助けやアドバイスを求める投稿

ChatGPTとコーディングに関するReddit投稿の大半は、助けやアドバイスを求めるものでした(44.6%)。

その内容は、ChatGPTから提示されたコードに重要な抜けがないかを尋ねるものから、あるプログラミング言語から別の言語へコードを変換する方法までさまざまです。

さらに分類すると、投稿の内容は学習リソース(51.4%)、P2Pでの依頼(14.3%)、品質に関する質問・問い合わせ(14.3%)、ユーザーによる制作物(11.4%)、予測(5.7%)、ユーザー体験(2.9%)に分かれました。

このデータから分かったこと

自分のコードを深く理解している人でも、細部の小さな調整や変更に気づきます。現状のChat-GPTは、より単純な作業には非常に役立ちますが、必要なコードを常に完璧に出力するとは限りません。

自分のコードを理解できない人は、非常に感心し、肯定的な反応を示します。必要な知識が少なくても、目標を達成するコードを生成できるためです。

どちらのグループも、AIツールによって生じるセキュリティ上の問題に気づかない可能性があります。特に、開発経験の浅い人はその傾向が強いでしょう。そのため、セキュリティを考慮せずにAIツールを活用する開発者が、AIの提案によって生成された脆弱性をコードベースに持ち込む可能性は十分にあります。

AIの利用動向を考えると、これはますます重要な問題です。昨年、IBMの調査対象となった企業の42%が、自社でAIを活用する方法を模索しています。したがって、AIツールとともにセキュリティを考慮することが不可欠です。

AI時代のアプリケーションセキュリティで考慮すべき重要事項

Chat-GPTやCopilotなどのAIツールは開発を加速できます。ただし、生成されたコードの安全性を確保するには、包括的なセキュリティツールと併用する必要があります。LLMは、開発時にコンパイラーやインタープリターの代わりにはなりません。それと同様に、専用のセキュリティツールに取って代わることもできません。

AIツールの利用に関する社内ポリシーを整備する必要があります。ポリシーでは、次のような項目を定めます。

  • 許容されるユースケースの明確化:AIツールの利用が認められる用途と、AIツールを使って判断できる事項を定義します。

  • データの選定と利用:AIモデルに使用できるデータの種類と品質、および適切なデータソースを明確にします。

  • データのプライバシーとセキュリティ:AIモデルで使うデータが適切に保護され、データのプライバシーとセキュリティを維持するための対策が講じられていることを確認します。

  • コンプライアンス要件:AIツールの利用が、法的、規制上、倫理上の要件をすべて満たしていることを確認します。

  • 定期的な更新:新しいAIツールの開発や事業ニーズの変化に合わせて、ポリシーを継続的に更新します。

これは、組織でAIを利用する際に必要なポリシーを網羅したものではありませんが、策定の出発点として活用できます。

セキュリティチームは、セキュリティチームと攻撃者の双方に新たなツールをもたらすAIの進展を把握しておく必要があります。AIツールは、エクスプロイトの増加に対抗するうえで重要な役割を果たす可能性があります。特に、企業がセキュリティ専門家の採用に苦戦している状況では、セキュリティチームの業務を効率化するツールとして役立ちます。今年はAIツールの新たな活用方法が次々と見つかると予想されるため、最新の動向を把握しておくことが欠かせません。また、開発チームがAIをどの程度利用しているか、コードベースに追加されるコードのうちAIが生成したものがどの程度を占めるか、そしてそれを管理するための適切なセキュリティチェックが整っているかも確認しましょう。

コードセキュリティは、開発における一側面にすぎません。ソフトウェア開発は、人、プロセス、テクノロジーの組み合わせです。AIはテクノロジー面で役立ちますが、ほかの要素も欠かせません。コーディングでは品質が重要です。人間の要素は、これからも常に重要な役割を担います。

アプリケーションセキュリティの最適な選択肢についてのSnykからのアドバイス

コードがすべて人間によって書かれたものでも、大部分がAIによって生成されたものでも、攻撃対象領域を最小限に抑えるために、セキュリティの基本を徹底することが重要です。アプリケーションのセキュリティを評価することは、悪用を狙う攻撃者からコードを守るうえで欠かせません。アプリケーションセキュリティ評価では、アプリケーションをテストして脅威を検出し、それらに対処する戦略を策定します。このプロセスにより、組織はアプリケーションの現在のセキュリティ態勢を評価し、将来の攻撃からソフトウェアを守る方法を特定できます。開発者は、セキュリティ対策が常に最新で効果的であることを確認するため、定期的にアプリケーションセキュリティ評価を実施する必要があります。

アプリケーションセキュリティを評価する5つのステップ:

  1. 潜在的な脅威アクターを特定する

  2. 保護すべき機密データを特定する

  3. アプリケーションの攻撃対象領域を洗い出す

  4. 現在のAppSecプロセスにおける課題を評価する

  5. 弱点を解消するためのセキュリティロードマップを策定する

ChatGPTのようなAIツールは弱点や脆弱性を見落とすことがありますが、Snykは、開発者のセキュリティ確保により適したプラットフォームです。Snykを使えば、コードの脆弱性、オープンソースの依存関係、コンテナ、クラウド環境を特定し、自動的に保護できます。

さらに、このプラットフォームは開発ツール、自動化パイプライン、コーディングワークフローに直接統合でき、シームレスかつ効率的なセキュリティを実現します。

セキュアな開発を加速

Snykは開発者とセキュリティチームをつなぎ、スピードとセキュリティを大規模に両立します。