ChatGPTで生成されたコードのセキュリティリスクと対処方法
本記事では、Chat GPTをはじめとする生成AIを活用したコード開発のサイバーセキュリティ上の懸念点とその対処方法について解説します。
![ChatGPTで生成されたコードのセキュリティリスクと対処方法](/content/dam/trendmicro/global/ja/jp-security/23/g/chatgpt-security-vulnerabilities/thumbnail-image-om-chatgpt-security-vulnerabilities-pc.jpg)
ChatGPTは、OpenAIが構築・訓練したGPT-3.5/GPT-4アーキテクチャに基づく大規模言語モデル(LLM)です。このLLMの高度なディープラーニング(DL)アルゴリズムは、自然言語を処理し、関連する応答を生成することが可能です。そのため、ChatGPTは、テキストプロンプトに対する人間らしい反応を生成することができます。
ChatGPTの中でも注目すべき機能の1つは、コードスニペット(よく使用される短いコードのまとまり)や全体のソフトウェアプログラムを自動的に生成する能力です。プロンプトを受け取ると、要件を満たすコードを返すことができます。その後、人間の開発者がさらにコードを最適化しリファクタリングすることができます。
その便利さから、ChatGPT(および他のAIツール)は、特に複雑なアルゴリズムを伴う反復的なコーディングタスクにおいて人気が高まっています。データ処理タスク、機械学習(ML)アルゴリズム、さらにはビデオゲームエンジンのコードを生成するためにChatGPTを使用すると、大幅に時間を節約することができます。ChatGPTによるコード生成は効率性を向上させ、時間的に余裕のない開発者にとって魅力的です。
しかし、AIによって生成されたコードには、改善が必要となる点に注意してください。ChatGPTは、開発概念やコンテキスト(文脈)に対する知識が不足しています。もし、このことを認識していない開発者が、重大なセキュリティ上の脆弱性を含むAI生成コードをそれに気づかないまま使用してしまうことで、欠陥があるコードがプロダクション環境に導入されてしまう可能性があります。開発者は、ChatGPTや他のAIをあくまで補足用のツールとして考えるべきです。
本稿では、AIによって生成されたコードのサイバーセキュリティへの影響と、その対処方法について解説します。
ChatGPTがセキュリティに与える影響
ChatGPTはテキストのプロンプトに対して人間のような応答を生成するため、専門家はすでにセキュリティ上のリスクを懸念しています。特に注目すべきは、ChatGPTが攻撃目的で使用される可能性です。一部の報道では、攻撃者がChatGPTにフィッシングメールの作成を手助けさせるようなプロンプトを設計することが可能であると指摘しています。
こうした懸念は、ChatGPTがセキュリティ上どのようなリスクをもたらすか、つまり攻撃者が生成したコンテンツがどのように利用されるかが注目されがちです。しかし、もし本稿の読者が実際の開発に携わる方であればご存じかと思いますが、アプリケーションのセキュリティを維持するためには、一見すると気づかないような脆弱性も特定し解決する必要があります。ここで、コード生成にChatGPTを使用するリスクが注目されます。なぜならば、攻撃者は、AIが生成したコードがもたらす脆弱性を悪用できてしまうからです。
ChatGPT生成のコードに依存することは、安全ではないコードを本番環境のアプリケーションに展開し、意図せず脆弱性を導入してしまう可能性があることを意味します。これは特に、AIが生成したコードについての予備知識が少ないユーザにとって厄介な問題です。2021年の研究においては、GitHub CoPilot(Chat GPT-3をベースとしてサービス化されたAIコーディング支援ツール)では、約40%の確率でセキュリティ上の問題が生じたとの見解を示しました。
![図:「マルウェアを作成して」の指示に対し、ChatGPTは「そのリクエストは実行できない」と応答している](/content/dam/trendmicro/global/ja/jp-security/23/g/chatgpt-security-vulnerabilities/image-om-chatgpt-security-vulnerabilities_01.png)
これらのフィルタに加えて、OpenAIはChatGPTが応答の精度と質を向上させるように訓練しています。まず、大量のテキストとコードを使用してChatGPTを訓練し、その後、人間の開発者がその応答を見直し、精緻化を施しました。「人間のフィードバックからの強化学習(RLHF)」として知られているこのプロセスは、人間が、より正確な応答に対してシステムに報酬を与えることができることを意味しています。RLHFは、ChatGPTがより良いテキストとコードベースの応答を生成するように訓練するのに役立ちます。
単純なコピーアンドペーストは禁物
それでもなお、ChatGPTは100%安全とはいえません。攻撃者は、プロンプトを微調整することで、潜在的に有害なコードをChatGPTで生成することが可能です。例えば、それぞれ単体では悪意のある目的を持たないコードの断片をChatGPTに生成させ、それらを組み合わせることでマルウェアとして機能させるといった工夫ができるでしょう。
ChatGPTは、与えられたプロンプトの要件を満たす機能的なコードを生成することができますが、基本的なセキュリティ機能が欠けたままコードを生成することがよくあります。例えば、ChatGPTで生成されたコードでは、入力の検証、レート制限、あるいは認証や認可のような、中核となるAPIのセキュリティ機能が欠けている可能性があります。こうした欠陥を突いて、攻撃者が機密の個人情報を抽出したり、サービス拒否(DoS)攻撃を実行したりできる脆弱性が生まれる可能性があります。
AIで生成されるコードは、開発者や組織がChatGPTのようなツールを使用して作業を効率化していく中で、今後さらにリスクが増加していくでしょう。その結果、脆弱なコードがすぐに拡散される可能性があります。
一方、ChatGPTは、開発者に対して特定のセキュリティ機能が欠けていることをアドバイスするケースもあります。以下の画像は、その一例です。ただし、このメッセージは常に表示されるわけではありません。また、表示されたとしても、一部の開発者はそれを無視する可能性もあります。
![図:ChatGPTの応答で、適切なテストやセキュリティ施策を施すよう注意が出されている](/content/dam/trendmicro/global/ja/jp-security/23/g/chatgpt-security-vulnerabilities/image-om-chatgpt-security-vulnerabilities_02.png)
これらのセキュリティ上の課題を考慮すると、ChatGPTや類似のプログラムを使用してコード生成を行うことの妥当性に疑問が生じるかもしれません。使用自体は可能ですが、特別な注意を払うことは不可欠でしょう。
AIが生成するコードの安全な使用方法
ChatGPTが生成したコードには常に追加チェックが必要であり、最終的にコードを使用する際の責任は開発者にあることを留意してください。
一般的なセキュリティのベストプラクティスに従うだけでなく、ChatGPTやその他のAIが生成したコードを使用する開発者は、以下の点にも留意してください。
・ChatGPTによって生成されたすべてのコードは脆弱性を含んでいる可能性があるものとして扱い、高度なAIがコードを生成したからといって、それがセキュリティ上も問題ないと思い込むことは避けるべきです。
・ChatGPTを使用したコード開発を補完するため、手動でもチェックを行い、ChatGPTに完全に依存しないようにしてください。
・開発したアプリケーションには必ず厳格なセキュリティテストを実施してください。
・セキュリティ上の問題を見つけられる同僚などにコードをレビューしてもらうことを推奨します。
・言語やライブラリに不慣れな場合は、関連ドキュメントをよく参照しましょう。
・AIが最善を知っていると思い込むことは避け、常に調査を行うことを心掛けてください。
ChatGPTを利用してセキュリティを向上させる
ChatGPTだけに頼ってコードを生成することは、開発したアプリケーションに脆弱性を生じさせる可能性があることを述べてきました。一方で、ChatGPTは指示に応じてセキュリティ機能を追加し、脆弱性のレビューも実行できるため、効果的に利用することもできます。
例えば、アプリケーションに新たなセキュリティ機能を追加したいが、どのように最適に実装すべきかわからない場合、ChatGPTに対して要件に基づいたコードを生成するよう指示することができます。ChatGPTはその後、認証を含むアプリケーションプログラミングインターフェイス(API)のコードにセキュリティのベストプラクティスを組み込んだり、入力検証やレート制限などの機能を追加したりするコードを生成することができます。
さらに、開発者はChatGPTを利用して既存のコードに対して脆弱性のレビューを実行することも可能です。これにより、大規模なコードベースを持つ企業や組織がセキュリティ問題を素早く特定し、対策を講じる方法を見つけるのに役立ちます。例えば、下の画像に示されているように、ChatGPTにStructured Query Language(SQL)インジェクションの脆弱性を特定させ、軽減するコードを生成するように指示することができます。
![図:SQLインジェクションを軽減するコードの再生成指示に対しChatGPTがコードを調整して応答している](/content/dam/trendmicro/global/ja/jp-security/23/g/chatgpt-security-vulnerabilities/image-om-chatgpt-security-vulnerabilities_03.png)
開発者はChatGPTを唯一のセキュリティ対策の拠り所とすべきではありませんが、アプリケーションにセキュリティ機能を追加したり、既存のコードの脆弱性をレビューしたりする場合、開発者にとっては有用なツールとなります。ChatGPTは、手作業のコーディングと厳格なセキュリティテストと組み合わせて使用することで、より安全で堅牢なアプリケーションを構築する開発者を支援してくれるでしょう。
ただし、ChatGPTにセキュアなコードの生成を指示しても、セキュリティを保証するものではない点には留意してください。AIが生成したコードは補完的な役割に留めるべきであるのと同様、セキュリティ対策でもChatGPTは、他のセキュリティ対策と組み合わせて使用し、セキュリティを強化するリソースとして活用すべきです。
まとめ
ChatGPTは、効率化に非常に役立つ強力なAI言語モデルです。開発者の労力を軽減し、使いやすい点が魅力的ですが、多くの場合、セキュリティをあまり考慮していない基本的なコードスニペットしか生成しません。
OpenAIは、こうした問題を緩和するための対策を講じていますが、絶対的なものではありません。ChatGPTは、セキュリティのベストプラクティスを実装する場合やコード生成する場合においても、あくまで開発を補完するために使用するべきです。ChatGPTが生成したコードは、本番環境のアプリケーションに展開する前に、必ず徹底的なテストとレビューを実施することが重要です。
ChatGPTおよびそれによって生成されるコードのセキュリティへの影響は、使用する開発者や企業・組織に大きく依存します。いずれの場合も、AIによって生成されたコードは最大限の注意と慎重さで実装すべきであるという点は変わりありません。
参考記事生成AIに関するトレンドマイクロからの関連の記事は、以下をご参考ください:
• ChatGPTのセキュリティ:法人組織がChatGPT利用時に気を付けるべきこと ~機微情報と従業員の利用編
• ChatGPTのセキュリティ:法人組織がChatGPT利用時に気を付けるべきこと~回答内容の真贋チェック・今後の展望編
• 統合サイバーセキュリティプラットフォーム「Trend Vision One™」を拡張
※当社のAI技術に関する情報が含まれます。
関連情報Trend Vision One
![line](/content/dam/trendmicro/global/ja/about/mem-test/line_20220311.png)
Security GO新着記事
“安全”に裏打ちされた“安心”を~コープデリのサイバーリスクマネジメントの現在地~
(2024年8月29日)
ランサムウェアグループ「Blacksuit(ブラックスーツ)」を解説
(2024年8月28日)
Telegram(テレグラム)とは?サイバー犯罪に悪用される理由
(2024年8月28日)