AI はセキュアなコードを書けるか?
2023年5月3日
0 分で読めますAI は驚異的なスピードで進化しており、詩を書くことからネットワークのセキュリティ保護に至るまで、新しいツールやユースケースが毎週発見され、発表されています。
研究者たちは、GPT-4 のような新しい AI モデルが何を可能にするのかを完全には把握していません。そのため、イーロン・マスクやスティーブ・ウォズニアックなどの著名人や AI 研究者たちが、現状よりも強力なモデルのトレーニングを 6 か月間停止し、安全性に関するプロトコルや規制の策定に焦点を当てるべきだと呼びかけています。
GPT-4 に関する最大の懸念の一つは、研究者たちが GPT-4 で何ができるのかをまだ完全に理解していないことです。新しいエクスプロイトや脱獄、新たな振る舞いは今後も発見されますが、LLM のブラックボックス的な性質のため、それらを防ぐのは困難です。OpenAI は、GPT-4 のホワイトペーパーの中でこれについて次のように述べています。
OpenAI は、有害なコンテンツを生成する能力を軽減するさまざまな安全対策とプロセスを、GPT-4 の開発と導入の過程で実施しています。ただし、GPT-4 は敵対的攻撃やエクスプロイト、いわゆる「脱獄」に対して依然として脆弱な場合があり、有害なコンテンツがリスクの原因ではありません。ファインチューニングによってモデルの振る舞いを変更できますが、有害なコンテンツを生成する可能性など、事前トレーニングされたモデルの基本的な能力は潜在的なまま残ります。
GPT-4 は最近リリースされたばかりですが、Chat-GPT を支えてきたその前身である GPT-3については多くのデータがあります。ChatGPT はリリース以来、非常に大きな波紋を呼んでおり、Google や Adobe などの他のテクノロジー大手も自社の AI の存在感をアピールしようと躍起になっています。
生産性の最適化からコンテンツの作成まで、ChatGPT で行えることは多岐にわたります。 しかし、プライバシーの問題やサイバーセキュリティのリスク、アプリケーションのセキュリティ態勢への潜在的な影響により、開発者がそれを用いてコードを生成することについて懸念が寄せられています。
コーディングに AI ツールを使用する場合のプライバシーと知的財産のリスク
昨年末に ChatGPT がリリースされて以来、内部の企業データに使用する場合のプライバシーリスクに関する懸念が、消費者や専門家の間で広がっています。
Cyberhaven の最近のレポートによると、従業員の 3.1% が Chat-GPT に機密情報を投稿しており、AI ツールの内部利用に関するポリシーを作成する重要性が示されています。Samsung は最近、従業員が機密のソースコードと会議メモを Chat-GPT に入力したことを受けて、AI の使用に関する内部警告を発令しました。このデータは現在 OpenAI のトレーニングデータとして扱われており、撤回できるかどうかは不明です。
サイバーセキュリティを強化する AI ツール
セキュリティ専門家にとって、暗い話ばかりではありません。AI テクノロジーには欠点やプライバシー関連の懸念がありますが、新たな脅威に対処するためのツールをセキュリティチームに提供することもあります。
たとえば、OpenAI のレッドチームは、脆弱性の発見と攻撃に加えてソーシャルエンジニアリングに GPT-4 を使用することに成功しており、これにより、レッドチームは新たな脆弱性を見つけて報告できるようになります。
セキュリティ企業は、既存の製品に AI を統合する新しい方法を模索し続けています。Snyk は最近、ハイブリッド AI 技術を活用した新しい自動修正機能を発表しました。この機能が提案する脆弱性修正プログラムは、AI によって生成され、Snyk Code エンジンによってセキュリティが検証されています。
AI を使用したコーディングのアプリケーションセキュリティリスク
ChatGPT はユーザーによるコードの作成を支援しますが、通常は一度にわずかなコードしか生成できません。そのため、大量のコードを生成するために使用すると、ソフトウェアはインターファイルやマルチレベルの問題を考慮していないため、開発者がリスクにさらされる可能性があります。多くの場合、AI はこうしたケースを理解することさえできず、関連する問題を解決できません。
コード生成サービスの品質は、トレーニングに使用されたデータによって決まります。100% バグや脆弱性のないコードを作成することはほぼ不可能であるため、コード生成ツールの提案に脆弱なコードが含まれていることは珍しくありません。さらに憂慮すべきことに、Microsoft が共有している統計によると、開発者がチェックインしているコードの 40% は、AI によって生成された未修正のコードです。組織はソフトウェアの安全性を可能な限り確保する必要があるため、これは AppSec チームにとって大きな懸念事項です。
GitHub の Copilot AI コーディングツールは、GitHub の公開リポジトリなど、公開されているソースからのコードでトレーニングされているため、既存のコードに同様の提案を生成します。トレーニングセットに安全でないコードが含まれている場合は、提案によって典型的な脆弱性が導入される可能性もあります。Invicti の研究者は、Copilot を使用して Python と PHP アプリをビルドし、両方のアプリケーションに含まれる脆弱性をチェックして、XSS、SQL インジェクション、セッション固定の脆弱性などの問題を検出することでこれをテストしました。
GitHub はセキュリティに関して提起された問題を注視しており、最近のアップデートで脆弱性フィルタリング機能を追加しました。
ハードコーディングされた認証情報、SQL インジェクション、パスインジェクションは、モデルのターゲットとなる最も一般的で脆弱なコーディングパターンの一つです。GitHub Copilot は、開発者がより安全なコードを作成するのを支援するための大きな一歩となるソリューションです。
ChatGPT を使用したコーディングに関する Reddit での会話
私たちは、Copilot に関する以前の分析情報に基づき、ChatGPT も同様の道を歩んでいるかどうかを明らかにしたいと考えました。
これを行うため、Reddit に目を向けることにしました。Reddit は、開発者などのテクノロジー専門家が同じ分野の他の専門家からのインサイトを得るために定期的に利用する、ソーシャルニュースの集約とディスカッションのための Web サイトです。
その意味で Reddit は、ChatGPT がコーディングにどのように使用されているかを知るのに最適な場所です。専門家が求めているのはアドバイスですか?この目的での使用を避けるよう他の人に警告していますか?それとも、信頼できるリソースとして賞賛していますか?
まず、コーディングと ChatGPT に関する Reddit のスレッドを分析することから始めました。このスレッドには、約 350 件の投稿が含まれていました。次に、特にタイトルのみではなく Reddit の投稿全体に焦点を当てて、コメントの感情を評価しました。
肯定的
説明のない投稿や関連性のない投稿を除くと、17.9% が肯定的な感情を示していました。あるユーザーは、作業中のコードの画像を投稿し、次のようにコメントしました。「...私は諦めかけていました。30 分かけて解決策を探したあと、最後の手段として GPT に聞いてみたところ、完璧な答えが 5 秒後に返ってきたのです...」
別のユーザーは次のように称賛してます。「コードのリファクタリングや通常とは異なる方法での配列やリストの操作など、複雑な問題に遭遇したときは、ChatGPT にその方法を聞くだけで解決するのが気に入っています。これまで 20 年間も頭を悩ませてきましたが、ようやくこの退屈な作業を AI に任せられるようになりました。プログラマーの強い味方です」。
ただし、肯定的な投稿の中には、ChatGPT が細部を見落としているという注目すべきコメントもありました。
「...確かに非常に便利ではあります。説得力があり、比較的正確なコードを極めて迅速に作成してくれています。しかし、細部を見ると間違いが多々あったのです...」
「...コーディングに関しては私も ChatGPT の大ファンです。必ずしも正しい答えが出るわけではありませんが、それは気にしていません。大抵の場合、かなり正確な答えを出してくれます。たとえるならば、非常に賢いけれど完璧ではない新米の開発者がいつでも手伝ってくれるような感じです...」
「...ChatGPT はコード内のどこに問題があるかを認識しているようですが、それを修正するための正しい解決策を提示しないことがあります...」
ChatGPT に関する肯定的なコメントが、細部に間違いがあることに対する批判で但し書きされていることは、セキュリティ上の懸念を浮き彫りにしています。経験のない人が AI ツールを使ってコードを作成する場合、これらの間違いには気づかず検証されないでしょう。
否定的
全体として、ChatGPT を使用したコーディングに関する否定的な投稿は、肯定的な投稿よりも少ないことがわかりました。説明の 10.3% は全般的に否定的な感情を示しており、多くのユーザーが不正確さに対して不満を表明しています。
あるユーザーは次のように述べています。「...ChatGPT の提案は特に信頼できないと思います。生成されるクエリではエラーが連続して発生しています...」
別のユーザーも、コーディングに役立つ具体的なプロンプトを見つけようとして、同様の問題を指摘しています。「コードの変更をリクエストすると、ChatGPT は変更された 1 行だけでなく、コード全体を出力します。『変更された行のコードだけを出力してください』といったプロンプトを試してみましたが、無視されてコード全体が出力されてしまいます。時間が無駄になるので、変更された行のコードだけを出力するプロンプトが欲しいです」。
ヘルプやアドバイスを求める
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 によって生成されているか、それを管理するための適切なセキュリティチェックが実施されているかを常に把握しておく必要があります。
コードのセキュリティは開発の 1 つの側面にすぎません。ソフトウェア開発は、人、プロセス、テクノロジーの組み合わせです。AI はテクノロジー面を支援できますが、他の要素も必要です。コーディングにおいては品質が鍵となります。人的要因は常に重要です。
最適なアプリケーションセキュリティオプションに関する Snyk のアドバイス
コードが完全に人間によって書かれたものであるか、大部分が AI によって生成されたものであるかを問わず、攻撃対象領域を最小限に抑えるためにセキュリティの基礎を確立することは重要です。アプリケーションのセキュリティを評価することは、コードを悪用しようとする相手からコードを保護する上で不可欠です。アプリケーションセキュリティ評価の実施には、アプリケーションをテストして脅威を検出し、脅威から防御するための戦略を策定することが含まれます。このプロセスにより、組織はアプリケーションの現在のセキュリティ態勢を評価し、将来の攻撃に対してソフトウェアの保護を強化する方法を特定できるようになります。開発者は、アプリケーションセキュリティ評価を定期的に実施して、セキュリティ対策が最新かつ有効なものであることを確認する必要があります。
アプリケーションセキュリティを評価するための 5 つのステップ:
潜在的な脅威アクターを特定する
保護する価値のある機密データを判断する
アプリケーションの攻撃対象領域を可視化する
現在の AppSec プロセスの問題点を評価する
弱点を解消するためのセキュリティロードマップを作成する
ChatGPT のような AI ツールは弱いリンクや脆弱性を見落とす可能性があるのに対し、Snyk は、その課題にはるかに効果的に対応できる開発者セキュリティプラットフォームです。Snyk を使用すると、コード、オープンソースの依存関係、コンテナ、クラウド環境の脆弱性を特定して、自動的に保護できます。
このプラットフォームは、開発ツール、自動化パイプライン、コーディングワークフローに直接統合できるため、シームレスで効率的なセキュリティが確保されます。