生成AIは開発セキュリティの敵か味方か? 〜生産性とセキュリティを同時に向上させる方法〜

3行でわかる本記事のサマリ

  • コード生成AIの利用拡大:エンジニアの92%がAIツールを使用しており、GitHub CopilotやAmazon Q Developerが主流である。
  • 3つのセキュリティリスク:コードの情報漏洩、オープンソースライセンス違反、生成コードの脆弱性が考慮すべきリスクである。
  • 対策とツールの重要性:SASTツールや生成AIを活用し、開発コードのセキュリティを強化することが重要である。

はじめに

大きな潮流となっている生成AIですが、アプリケーション開発のシーンでも活用が広がってきています。まさにコード生成AIが開発業務において欠かせない存在となっている方も少なくないでしょうし、これから導入を検討する方も多いでしょう。そんなコード生成AIに関して注意すべきセキュリティの実態について、わかりやすく説明いたします。

目次

  1. エンジニアの開発業務に多く利用されているコード生成AI
  2. エンジニアの"敵"となりうる3つのリスク
  3. コード生成AIが脆弱性を生み出す割合はかなり高い
  4. セキュリティ対策に有効なSASTツールと脆弱性の修正に役立つ生成AI

1. エンジニアの開発業務に多く利用されているコード生成AI

ChatGPTが登場して以来、コード開発に特化した生成AIも含めてさまざまなベンダーからコード生成AIが提供されており、2023年米国で実施された調査では、開発エンジニアのおよそ92%がAIツールを活用しているという結果が出ています。日本国内でも同様の調査結果があり、60%近くの方が開発業務のなかでAIを使っているという結果が得られています。多くの開発エンジニアが使っているため、各社ともさまざまなツールを提供しているのが現在の状況です。

そもそもコード生成AIは、実際に数行のコードを入力するだけで、そのコメントや関数を参照して開発者が記述したいと考えているコードや構造を予測してプログラムを自動的に生成してくれるものです。実際に企業で採用されているものでは、GitHub CopilotやAmazon Q Developerなどが大きなシェアを占めており、他にも多くのツールが存在しています。なお、Amazon Q Developerは以前までAmazon CodeWhispererという名前だったソリューションです。

生成AI1.png

出典:https://github.blog/2023-06-13-survey-reveals-ais-impact-on-the-developer-experience/

このコード生成AIを導入すると、GitHub Copilotであればコーディング速度が55%向上し、74%の回答者が満足度の高い仕事に集中できたと答えています。また、Amazon Q Developerであれば、25%ほど初期開発の迅速化を実現し、開発生産性が最大で40%向上したと回答するなど、エンジニアの大きな味方となっています。タイピングの数が減り、ドキュメントを読む時間やエラー解消の方法を調査する時間も削減できることが、アンケート結果の数値に表れています。結果としてコード生成AIは、仕事の満足度向上やエンジニアの幸福度アップ、開発生産性の向上につながっていくのです。

生成AI2.png

2. エンジニアの"敵"となりうる3つのリスク

一方で、考慮すべきリスクも存在しているため、いいことばかりではないのも事実です。ここでは、セキュリティリスクの観点にフォーカスして見てみましょう。コード生成AIには、多くのセキュリティリスクが存在していますが、よく話題になるのが大きく3つあります。いわゆる、味方ではなくエンジニアの"敵"になる可能性があるポイントです。

1つ目が、取り扱うコードがAIの学習に利用されないかというリスクです。これは情報漏洩にもつながる話であり、使う際にはしっかり考えなければいけません。2つ目が、AIが生成したコードが、オープンソースのライセンス違反になっていないかという点です。実際に米国では訴訟が起こっているケースもあるため、このリスクもしっかり考えておきたいです。そして3つ目が、生成されたコードに脆弱性が含まれていないかというリスクです。AIが生成したコードにバグや脆弱性が含まれているという話を聞いたことがある方もいるでしょう。

取り扱うコードがAIの学習に利用されないか

コード生成AIは、記述したコードを参考に、最良なコードの書き換え提案をしてくれますが、その場合記述したプロンプト情報やコード情報はAIのサーバー側にあるエンジンに送られ、その結果がアウトプットされることになります。つまり、記述したコードそのものが、AIの学習データとして利用されることになるのです。当然ながら、学習量を増やしていくことでAIが生成するコードの品質は向上しますが、コードそのものが企業において貴重な資産であるため、それが学習データとして利用されてしまうことは避けたいところです。コード内に企業の機密情報が含まれている可能性も十分考えられるため、記述したコードを学習データとして活用されないようにすることがリスク回避として重要です。

そのリスクを低減させるためには、学習データとして利用されない企業向けのプランを契約することです。きちんと活用している製品のポリシーなどの情報を確認する必要がありますが、GitHub CopilotやAmazon Q Developerにおいては、ビジネス用もしくは有料課金されたプランに関しては、学習に利用しない旨が明記されています。企業向けのものについては、エンタープライズグレードのセキュリティポリシーやプライバシーポリシーが提供されるため、しっかり企業向けのプランを採用することが大切です。

生成AI3.png

出典
https://resources.github.com/copilot-trust-center/

https://aws.amazon.com/q/developer/features/

AIが生成したコードによってオープンソースのライセンス違反が発生しないか

オープンソースのライセンス違反が起こりうる背景には、AIが学習しているソースは世の中に存在するコードとなっているためです。当然ながら、学習したソースと同じようなコードを出力してしまうということは発生する可能性があります。この学習データの中に、世の中に広く公開されているオープンソースが含まれており、そのコードをそのまま流用する場合は、オープンソースを管理する団体のライセンスだということを明記する必要があります。

つまり、オープンソースの利用規約などをしっかり把握しておかないと、ライセンス違反によって訴訟に発展することが起こりうるのです。本来は公開したくない自社のコードを公開せざるを得ない状況に追い込まれることもあるため、しっかり考慮する必要があります。

実は、ライセンス違反が発生しないような機能が備わっているコード生成AIも存在しており、フィルタリングやライセンススキャンによって、オープンソースのコードと一致するものをブロックしたりアラートやログを出したりすることが可能です。そんな機能が備わったソリューションを使うことで、リスク軽減につなげていくことができます。

また、もう1つの対策として、サードパーティ製のOSSライセンス管理ツールを利用することも選択肢となります。自分たちの作成したコードをスキャンして、オープンソースのライセンスに抵触しないかアラートをあげてくれるのです。実際には、Web上に公開されているコードをコピー&ペーストして使ってしまうというケースは、コード生成AIを使う前から行われており、すでにライセンススキャンを個別に採用している企業も多く見られます。すでに導入している企業はリスクを低減するためにもコード生成AI利用時にも引き続き有用であり、未導入の企業でも、検討してみる価値は大いにあります。

生成AI4.png

生成されたコードに脆弱性が含まれていないか

以前から、生成AIが出力するコードには、脆弱性があるものが含まれている可能性があると言われています。世の中にあるコードを学習データとして利用しているコード生成AIであるため、その中にバグや脆弱性が含まれていることは十分考えられます。

コード生成AIは、基本的にLLMと呼ばれる言語モデルのため、コードの構文解析などは行わないものが多く、ソースコードの内容も言語として理解するために、実際に動作するか、安定的に動くかという保証は難しいです。その結果、想定通りに動作しないコードや脆弱性が含まれるコードが出力されることがあります。

3. コード生成AIが脆弱性を生み出す割合はかなり高い

実際には、コード生成AIが脆弱性を含むコードを出す割合が研究されています。例えばGitHub Copilotに関する論文では、GitHub Copilot自体は2021年6月にベータ版が公開され、同年10月の調査では、実に40%の割合で脆弱性が含まれていたと報告されています。このリスクがあるため、GitHub Copilotには2023年2月に脆弱性フィルタリングが搭載され、SQLインジェクションやバスインジェクションなどが含まれないような対策が進められてきました。それでも、同様の調査を実施したところ、36%もの割合で脆弱性が含まれていたと報告があり、その後の調査でも割合は低下しているものの、まだ脆弱性を含むコードを出す危険性は解消されていません。おそらくこれをゼロにするのは難しいです。

生成AI5.png

一方で、コード生成AIが出すコードの精度や品質自体は上がってきています。ある調査では、特定のアプリケーションの中でGitHub Copilotが生成したコードの割合が46%となっており、アプリの中の半分近くがコード生成AIによって生成されているケースがあります。ただし、そのコードには2023年11月報告時点で27%の脆弱性が含まれている可能性があり、生成AIが生成したコードをしっかりチェックしないと攻撃者が悪用可能なアプリを作り上げてしまうことになりかねません。

確かにコード生成AIを使うことで開発生産性を高めることはできますが、完璧なコードを出力すると認識してしまうと危険な結果を招くことになります。Copilotという名前が示すように、あくまで人間に対する副操縦士として生成AIを位置付け、責任を持つ立場としての人間の目でチェックすることが求められます。コード生成AIを導入する前に、コードレビューやセキュリティテストの工程が今後ますます重要になるはずです。

人間が責任を持つとはいえ、全て人間の手作業だけでなくツールも有効に活用しながら、開発速度や生産性を高めていくことが大切です。人間の目では見落としてしまうようなリスクもツールを活用して減らしていくことも重要な対策となります。

生成AI6.png

4. セキュリティ対策に有効なSASTツールと脆弱性の修正に役立つ生成AI

ここでは、脆弱性のチェックなど開発するコードのセキュリティ対策に有効な、SAST(Static Application Security Testing)ツールや脆弱性を回避する修正案を提示してくれる生成AIについて紹介します。SASTツールとは、開発したコード内に脆弱性が含まれていないかをチェックするツールで、作成したアプリケーションを動かしてスキャンするのではなく、アプリを動作させずに静的に解析できるため、開発工程の早い段階で脆弱性チェックができるという大きなメリットがあります。

生成AI7.png

このSASTツールは多くのベンダーが提供しており、有名なものではSnyk CodeやGitHub Code Scanning、Synopsys Coverityなどがあり、それ以外にもオープンソースのものも含めてさまざまなSASTツールがあります。ぜひ脆弱性チェックに活用してもらいたいです。

SASTツールで見つかった脆弱性については、従来は自分たちで修正方法を調査して対処することが求められていましたが、最近では修正を支援してくれる生成AIも登場しています。この領域のソリューションはまだ登場したばかりで、ベータ版や開発中のものも多いですが、ぜひ活用してみてはいかがでしょうか。具体的には、MobbやGitHub Code Scanning Autofix、Snyk DeepCode AIといったものがあります。また、脆弱性スキャンや修正というソリューションだけでなく、コードをレビューしてくれる生成AIも登場しているため、こちらもチェックしてもらいたいです。

生成AI8.png

結局、コード生成AIはソフトウェア開発に役立つものの、完璧ではなく、脆弱性やバグを含んだコードを生成することがあることは十分認識しておくべきです。それを理解したうえで適切に利用することで、開発者に対して生成AIはスーパーパワーを授けてくれる存在となります。また、SASTツールの導入や脆弱性修正に役立つ生成AIなどを導入することで、脆弱性を回避するなどリスク低減につなげることができるでしょう。リスクへの対処を検討しながら、コード生成AIを開発業務に利用してもらいたいです。

▼GitHubに関する資料はこちらからダウンロード頂けます。

GitHub Copilot
~GitHubユーザーが知っておくべきAI×セキュリティの最新動向~

生成AI9.png

ホワイトペーパーのダウンロードはこちら3.JPG

メルマガ登録バナー(セキュリティ).jpg

      ランキング