ブログ AIと機械学習 GitLab Duo開発の現場から:AIを活用したセキュリティ脆弱性の修正
公開:July 15, 2024
20分で読めます

GitLab Duo開発の現場から:AIを活用したセキュリティ脆弱性の修正

このチュートリアルでは、GitLab Duoの脆弱性の説明と脆弱性の解決、その他のAI搭載機能が、脆弱性に迅速に対処するのにどのように役立つのかをご説明します。

gitlab duo - new cover

新しい仕事を始めたばかりの初日、大規模な本番環境でのインシデントが発生し、全員で対応が求められる状況に直面したとします。いくつもの重大な脆弱性が新たに発覚し、即時の対応、分析、軽減、そして修正が必要です。こうした場合、どこから調査を始めるべきでしょうか?

GitLab Duoの脆弱性の説明や脆弱性の修正、その他のAI機能を活用し、数分以内に脆弱性への対応を開始する方法を解説していきます。実践的な例を通じて、AI搭載のアシスト機能を活用して効果的に脆弱性を分析し、説明するアプローチを習得しましょう。追加の修正として、AIが生成したコード修正がMR(マージリクエスト)に示され、より迅速な脆弱性解決を支援します。

GitLab Duoの無料トライアルを始めて、脆弱性の修正機能を組織に取り入れてみませんか。

はじめ方:分析

最初のステップは、脆弱性の影響と深刻度を分析することです。GitLabのUIを開き、Secure > 脆弱性レポート の順に進み、メニューから脆弱性レポートにアクセスします。脆弱性リストを SAST でフィルタリングし、対応すべき最も致命的な脆弱性を特定します。

脆弱性レポートの概要

SASTスキャナーの結果は詳細ビューで要約され、ソースコードへのリンクが表示されます。また、公開されているセキュリティアドバイザリからの詳細情報も提示されます。デベロッパーにとって、攻撃の範囲や技術的な詳細、脆弱な環境を十分に把握していない限り、セキュリティレポートから分析を始めるのは、多くの場合で困難です。

脆弱性の説明に基づく理解と軽減策

脆弱性を理解し、その最も効率的で効果的な修正方法を知ることは不可欠です。修正が既存の機能を破損させないようにする必要があります。もし破損させてしまう場合は、メンテナーやプロダクトオーナーとのディスカッションが必要となり、その際には全体像を要約し、代替の軽減策を用意しなければなりません。また、会社を辞めた人が作成したコードやテストが存在しないコードの場合、修正計画を立てるのがさらに難しくなることもあります。

AI搭載の脆弱性の説明機能は、攻撃者がどのように脆弱性を悪用(エクスプロイト)できるかについて要約し、その影響や修正方法についての詳細な説明も行います。

以下の例は、OSコマンドインジェクションの脆弱性を示しており、次のコードスニペットを使用しています。

<?php 

// Read variable name from GET request
$name = $_GET['name'];

// Use the variable name to call eval and print its value 
eval('echo $' . $name . ';');

脆弱性レポートには詳細な説明がないため、全体のコンテキストと影響について理解する必要があります。画面右上の 脆弱性を説明 オプションを選択すると、事前に定義されたプロンプトアクションでGitLab Duo Chatが開きます。これにより、脆弱性の追加の概要が表示され、脆弱性がどのように悪用されるかの説明や、推奨される修正方法が提示されます。

OSコマンドで使用される特殊文字の適切な無害化が行われていない('OSコマンドインジェクション')

脆弱性の説明を文脈に沿った会話にする

また、UXの変更にも気づくでしょう。以前の脆弱性説明のオーバーレイが、GitLab Duo Chatのワークフローに置き換えられています。場合によっては、複雑な脆弱性が複数の軽減ステップに分かれたり、ソースコードの経路が不明瞭になることもあります。

ソースコードツリーを参照しながら、同じChatの文脈でコードの説明、修正、リファクタリング、そしてテストを続けることができます。

C言語の例で全体的なワークフローに取り組んでみましょう。この例では、セキュリティスキャンによってバッファオーバーフローが検出されています。

  1. セキュリティの脆弱性の詳細ビューを開き、右上にある「脆弱性を説明」ボタンを選択します。これにより、問題の概要、潜在的な攻撃ベクター、および提案された修正が表示されるChatプロンプトが開きます。

脆弱性のためのAI - 画像4

  1. 提案された修正を確認し、続けて Can you show an alternative fix using a different function というプロンプトで、Chatに代替パスを尋ねます。ここでの目的は、strcpy() に代わるより安全な関数を学ぶことです。

脆弱性のためのAI - 画像3

  1. Chatは、strlcpy() を使用した代替修正を次の例で提示します。この関数は、ターゲット文字列に許容される文字数のみをコピーし、常に文字列をnullで終端します。また、文字列が切り詰められたかどうかを確認するために、ソース文字列の長さを返します。

脆弱性のためのAI - 画像5

  1. 次に、ソースコードビューに移動するために Location file URLをクリックします。再度Chatを開き、以前の脆弱性の説明の文脈が保持されていることを確認します。次のステップでは、修正を続ける前にテストを追加していきます。これにより、機能の破損やリグレッションの発生を防ぐことができます。たとえば、Based on the vulnerability context and opened source code, how would you add tests for it? などのプロンプトを使用します。

脆弱性のためのAI - 画像7

  1. テストが生成され(仮に追加されたとして)、同じセッションで Can you refactor the source code too? というプロンプトを使用して、Chatにソースコードのリファクタリングを依頼することもできます。

脆弱性のためのAI - 画像6

このワークフローでは、脆弱性の分析、理解、軽減、代替アプローチの発見、テストの追加、さらには脆弱性の修正に対するリファクタリングを行う手順が示されています。

Chatを使ってこのプロセスを続けた後、Web IDEに切り替えて、学んだことを基にソースコードを修正することができます。さらに、変更をコミットし、CI/CDやセキュリティスキャンをトリガーして、DevSecOpsライフサイクル全体のループを完結させるための継続的なワークフローも含まれています。

AIアシストによる脆弱性の修正

セキュリティ脆弱性を理解し、軽減するには、問題の修正を作成し、新しいマージリクエストでパイプラインを実行し、再度セキュリティスキャンを実施するなどのエンジニアリング作業が必要になります。また、修正をステージング(staging)環境にデプロイし、一定期間テストすることも必要な場合があります。

AIは、脆弱性とソースコードに基づいた提案修正を生成することで、このプロセスを支援できます。

ヒント:キャリアの中で最も厄介だった脆弱性を思い出し、そのユースケースを再現してGitLab Duoの導入に活用してみましょう。ちなみに、MITREのCWE Top 25(最も危険なソフトウェアの脆弱性)も、ユースケースとしてはよい例です。

次の例は、CWE-328:弱いハッシュ関数の使用を実装したもので、md5 を使用しています。これはSASTスキャンによって正しく識別されます。

import hashlib

class User:
    def __init__(self, username, password):
        self.username = username
        self.password = password

    def set_password(self, password):
        self.password = hashlib.md5(password.encode()).hexdigest()

脆弱性のためのAI -画像8

右上の Resolve with merge request(マージリクエストで解決)ボタンをクリックします。これにより、AIが修正を提案するMRが開きます。この脆弱性に対する修正として、別のハッシュ関数を使用することが考えられます。

脆弱性のためのAI - 画像9

もうひとつの一般的な脆弱性の例として、関数のエラーコードや潜在的な例外をチェックしないケースがあります。以下のCコードスニペットは、fopen()chmod() の呼び出しに対するCWE-362に関連するファイル操作におけるタイミング攻撃の例を実装しています。

#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>

int main(int argc, char **argv) {##$_0A$####$_0A$##    // File operations##$_0A$##    char *fname = "gitlab.keksi";##$_0A$####$_0A$##    FILE *fp;##$_0A$##    fp = fopen(fname, "r");##$_0A$##    fprintf(fp, "Hello from GitLab Duo Vulnerability Resolution Challenge");##$_0A$##    fclose(fp);##$_0A$####$_0A$##    // Potential chmod() timing attacks    ##$_0A$####$_0A$##    // Make the file world readable##$_0A$##    chmod(fname, S_IRWXU|S_IRWXG|S_IRWXO);##$_0A$####$_0A$##    return 0;##$_0A$##}

chmod() に関するSASTレポートは、次のように表示される場合があります。

脆弱性のためのAI - 画像10

提案された chmod() のマージリクエストにはエラーハンドリングが含まれており、ファイルが世界中で書き込み可能になる潜在的な問題も修正されて、権限が 777 から 600 に変更されています。

脆弱性のためのAI - 画像11

この非同期の演習に取り組んでみましょう。fopen() 関数の脆弱性を特定し、分析した上で修正してください。

GitLab DuoからのさらなるAI支援が必要

セキュリティ問題は、簡単な修正や回避策で解決できることがよくあり、それによって開発チームに長期的な解決策を議論し、計画するための時間を確保することが可能です。他のケースでは、問題がより複雑になり、適切な修正が本番環境に導入されるまで、機能APIを無効にしたり、ファイアウォールでの軽減策が必要になることもあります。

GitLab Duoは、これらの問題を解決するために役立つAIを活用した追加機能を提供しています。

コードの説明:デベロッパーやセキュリティエンジニアとして、行った変更に自信を持つことが重要です。IDE内でコードの説明機能を使用することで、AIが提案した脆弱性修正をより深く理解できます。これにより、どのような調整が行われたか、そしてその理由を正確に把握することができます。

**根本原因分析:**修正がパイプラインを破損させてしまった場合、根本原因分析機能を利用できます。このツールは、根本的な問題を特定し、説明するのに役立ち、効果的に問題に対処できます。必要な修正を加えた後、テストを再実行して問題が解決したか確認できます。

リファクタリング:脆弱性の修正が済んでも、コードがより安全に書けるかどうかを検討する価値があります。IDE内でGitLab Duo Chatを開き、リファクタリング機能を使用して、コードをより安全に書くための代替方法を探ることができます。この事前対策的なアプローチにより、堅牢でセキュアなコードベースを維持できます。

これらのGitLab Duoの機能を活用することで、脆弱性に自信を持って対処し、コードのセキュリティと効率を確保できます。

今後の取り組み

脆弱性の説明と修正の機能をMRプロセスに直接組み込むことで、シフトレフト(より早い段階に移行)させることを計画しています。この統合により、開発サイクルの初期段階で脆弱性に対処し、解決できるようになり、ワークフローが効率化され、最初の段階からコードのセキュリティが強化された状態になります。

GitLab Duoを始める

GitLab Ultimateで利用可能な機能を有効化する方法を説明するドキュメントをご参照ください。また、GitLab Duoの脆弱性の説明および脆弱性の修正は、まもなくGitLabのSelf-Managed環境やGitLab Dedicatedにも導入される予定です。

「GitLab Duoの開発」ブログシリーズをチェックすることで、GitLab Duoの最新情報についてご確認いただけます。

GitLab Duoの無料トライアルを始めて、脆弱性の修正機能を組織に取り入れてみませんか。

ご意見をお寄せください

このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成して、ご意見をお聞かせください。 フィードバックをお寄せください

始めてみましょう

統合されたDevSecOpsプラットフォームによって、チームで何が実現できるかご確認ください。

無料トライアルを開始する

チームに最適なプランを見つけましょう

価格設定を見る

GitLabがチームにもたらすメリットをご覧ください

お問い合わせ