In this article
ChatGPTとセキュアコーディング:ChatGPT生成コードのメリットとセキュリティ上の脆弱性
開発者がワークフローを変革するためにAIツールを導入し続けるなか、AI生成コードが一般的になっています。実際、開発者の96%が、作業を効率化するためにAIコーディングアシスタントを利用していると回答しています。
ChatGPTのような生成AI(GenAI)ツールは、ワークフローを高速化し生産性を高める一方で、生成されるコードのセキュリティや品質が保証されるわけではありません。ChatGPTなどのGenAIツールを導入する開発者や組織は、そのメリットを理解すると同時に、AI生成コードに伴う潜在的なセキュリティ脆弱性や問題を認識し、強固なセキュリティ対策を優先して実施する必要があります。

ChatGPTはセキュアなコードを書けるのか?
調査では、開発者の75.8%がAI生成コードは人間が書いたコードよりも安全だと考えています。しかし、AI生成コードが脆弱性を招くことはすでに実証されています。また、OpenAIのcodex-davinci-002モデルを基盤とするAIアシスタントを利用できる開発者は、利用できない開発者に比べて、大幅に安全性の低いコードを書いたことも明らかになっています。興味深いことに、より効果的なプロンプトを入力するなど、モデルとのやり取りに工夫をした開発者は、より安全なコードを作成しました。
つまり、ChatGPTなどのAIコーディングツールでセキュアなコードを書くことは可能ですが、生成結果は学習データとプロンプトエンジニアリングに完全に左右されます。学習データに脆弱性や誤りがあれば、AI生成コードは最初から安全ではありません。そのため、開発者はAI生成コードをすべて安全ではないものと見なし、デプロイ前に脆弱性を修正する必要があります。
そうしなければ、安全でないコードがコードベース全体に広がり、最終的にはアプリケーションやソフトウェアのセキュリティに影響を及ぼす可能性があります。
ChatGPT生成コードの信頼性はどの程度?
ChatGPT生成コードの信頼性は、実行するタスクと基盤となる学習データによって異なります。ChatGPTはより新しい情報にアクセスでき、インターネットを閲覧することもできますが、コーディングのベストプラクティスや言語が進化するなかで、今でも誤った情報を生成したり、信頼性の低いコードを出力したりすることがあります。ChatGPT生成コードは本質的に安全で、信頼でき、最新だと開発者が思い込むと、セキュリティ上の問題につながりかねません。開発者の約80%は、AI生成コードは「十分に安全」だと考えてセキュリティ対策を回避していると認めており、コードベース全体に脆弱性やセキュリティ上の問題が広がるおそれがあります。
ChatGPTのコーディング能力はどの程度?
研究によると、ChatGPTは難易度が低〜中程度のプログラミング問題やタスクをうまくこなせます。また、コーディングタスクを支援するChatGPTには期待が寄せられていますが、明確な限界もあります。前述のとおり、ChatGPTの出力品質は、学習データの品質に左右されます。偏りや誤り、古い情報、不明確なプロンプトは、生成コードの品質に影響します。さらに、ChatGPTは複雑なプログラミング問題への対応に苦労することが多く、専門的なスキルや経験に取って代わることはできません。
ChatGPTはコードの脆弱性を発見できるのか?
ChatGPTはコードを分析して欠陥や矛盾を見つけ、フィードバックを提供できるため、一般的な脆弱性の発見につながる可能性があります。しかし、複雑なコードを理解できない場合があり、コード内の複雑な脆弱性を見つけることもできません。そのため、重大な問題が発生するまで脆弱性が検知されないおそれがあります。
コードレビューの際、ChatGPTはコードをリアルタイムでスキャンできないため、開発者がコードを手動で入力する必要があります。変更や修正がChatGPTに反映されないと、脆弱性が見過ごされたり、解消されなかったりする可能性があります。また、ChatGPTが誤った情報を生成し、コードのセキュリティを誤って評価することもあります。
ChatGPTでセキュアコーディングを徹底できるのか?
ChatGPTをコードの初期評価ツールとして使うことはできますが、開発者のワークフローにはほかのセキュリティ対策も必要です。セキュアコーディングの徹底をChatGPTだけに頼ると、脆弱性を見逃すことになります。セキュアコーディングが実践されていることを確認するため、AppSecチームは包括的なセキュリティツールと対策を引き続き活用する必要があります。
ChatGPTを使ってもデータは安全?
ChatGPTのような大規模言語モデル(LLM)の利用には、重大なデータセキュリティ上の懸念があります。ChatGPTには組み込みのデータセキュリティ対策がありますが、企業はGenAIに含まれるデータが安全だと想定すべきではありません。ユーザーは保護されていると思い込み、気づかないうちにプロンプトで機密情報を共有してしまうことがあります。しかし、機密情報や重要な情報がモデルの学習データに取り込まれ、それを含む出力が生成されれば、企業はリスクにさらされます。
さらに、ChatGPTなどのAIツールが侵害されたり、企業のユーザーアカウントがハッキングされたりすると、悪意のある攻撃者が機密情報や学習データにアクセスし、組織にさらなる影響を及ぼすおそれがあります。このリスクを軽減するため、企業は従業員がAIツールで共有できる情報と、そのデータの管理方法について社内ポリシーを定める必要があります。
ChatGPT生成コードの安全性を確認する方法
組織のサイバーセキュリティを検討する際には、GenAIツールを考慮してセキュリティプロトコルを進化させる必要があります。ChatGPTのようなツールに関する社内ポリシーやプロトコルを含む、強固なセキュリティ体制がなければ、組織はリスクにさらされます。多くの場合、最大のリスクは、安全でないAI生成コードがコードベースにリリースされ、複数のプロジェクトに広がり、侵害を引き起こすことです。
ChatGPT生成コードの安全性を確保する最も効果的な方法は、Snyk Codeのような専用のセキュリティ分析ツールを使うことです。ChatGPTとは異なり、SnykCodeは開発者のワークフローや開発プロセス全体にシームレスに組み込めます。Snyk Codeはコードをリアルタイムでスキャンし、脆弱性を継続的にチェックします。DeepCode AIを搭載したSnykCodeは、脆弱性の優先順位付けと修正の提案を行い、チームが最も重大な問題に注力できるようにします。
ChatGPTなどのGenAIコーディングツールは開発者のワークフローに役立ちますが、組織のコードベースとアプリケーションを安全に保ち、将来の脆弱性や攻撃から守るには、Snykのようなプラットフォームが不可欠です。