GitLab CI/CD - ハンズオンラボ: セキュリティスキャン

このハンズオンガイドでは、SAST を使ってコードのセキュリティ脆弱性を発見・修正する方法を解説します。

所要時間の目安: 15〜20分

目標

SAST(Static Application Security Testing)は、CI/CD パイプラインのオプション機能で、既知の脆弱性についてソースコードを分析します。GitLab の脆弱性レポートは、各パイプライン実行で発見された新旧の脆弱性を表示します。このラボでは、CI/CD パイプラインで SAST スキャンを有効にするプロセスを学びます。SAST スキャナーの詳細については、こちらをクリックしてください。

タスク A. テストファイルの作成

  1. 前のラボで作成した CICD Demo プロジェクトを開きます。

  2. 左上付近にあるブランチドロップダウンの右側で、(+) > This directory > New file をクリックします。

  3. ファイル名として run.py と入力します。

  4. 以下のコードを本文にコピー&ペーストします:

    import subprocess
    
    ip = input("Enter your server ip: ")
    subprocess.run(["ping", ip])
    
    print("Attempting to connect to the server")
    print("Application authentication was successful")
    
  5. コミットメッセージに Create Run.py as a test file と入力します。

  6. Target branchmain に設定します。

  7. Commit changes をクリックします。

    このファイルにはコマンドインジェクションの脆弱性があり、セキュリティ侵害につながる可能性があります。SAST スキャナーを使用してコード内の問題を検出します。

タスク B. SAST スキャンの作成と実行

  1. 前のラボで作成した CICD Demo プロジェクトを開きます。

  2. .gitlab-ci.yml ファイルをクリックして内容を確認します。

  3. Edit > Edit single file をクリックします。ファイルの末尾に以下のスニペットを貼り付けます。

    include:
      - template: Jobs/SAST.gitlab-ci.yml
    
  4. Commit message フィールドに Enable SAST と入力し、Target Branchmain のままにして、Commit changes をクリックします。

  5. この変更によって開始されたパイプラインに移動し、semgrep-sast ジョブをクリックして実行中であることを確認します。

    Build ステージが完了するまで1〜2分かかる場合があります。

  6. SAST スキャンの結果を確認するには、左側のナビゲーションペインで Secure > Vulnerability Report をクリックします。Tool ドロップダウンリストで SAST を選択します。脆弱性をクリックして詳細を確認します。

タスク C. 主要な問題の修正

  1. サイドバーで Code > Repository に移動します。

  2. run.py ファイルをクリックします。

  3. run.py ファイルで、青い Edit ドロップダウンをクリックして Edit single file を選択します。

  4. スキャンにより、1行目と4行目に脆弱性が含まれていることが示されました。

    # main.py Line 1
    import subprocess
    
    # main.py Line 4
    subprocess.run(["ping", ip])
    

    問題は、これらの行がシステムコマンドの実行にユーザー入力を使用していることです。この状況では、攻撃者が意図しないコマンドをアプリケーションに実行させる入力を巧みに作成できます。これを解決するには、コマンドを削除するか、コマンドからユーザー入力を取り除く方法があります。

  5. コードから2行を削除します。ファイルは以下のようになるはずです。

    print("Attempting to connect to the server")
    print("Application authentication was successful")
    
  6. コミットフィールドに Fix changes as suggested by SAST scan と入力し、Target Branchmain のままにして、Commit changes をクリックします。

    変更を更新するには、SAST スキャンを再度実行する必要があります。

  7. パイプラインの実行が完了したら、左側のナビゲーションペインで Secure > Vulnerability Report をクリックします。Tool ドロップダウンリストで SAST を選択します。セキュリティ問題が修正されているか確認します。

ラボガイドの完了

このラボ演習が完了しました。このコースの他のラボガイドも参照できます。

ご意見・ご提案?

GitLab CI/CD のハンズオンガイド に変更を加えたい場合は、マージリクエストで変更内容を提出してください!