GitLab CI/CD - ハンズオンラボ: セキュリティスキャン
所要時間の目安: 15〜20分
目標
SAST(Static Application Security Testing)は、CI/CD パイプラインのオプション機能で、既知の脆弱性についてソースコードを分析します。GitLab の脆弱性レポートは、各パイプライン実行で発見された新旧の脆弱性を表示します。このラボでは、CI/CD パイプラインで SAST スキャンを有効にするプロセスを学びます。SAST スキャナーの詳細については、こちらをクリックしてください。
タスク A. テストファイルの作成
前のラボで作成した CICD Demo プロジェクトを開きます。
左上付近にあるブランチドロップダウンの右側で、(+) > This directory > New file をクリックします。
ファイル名として
run.pyと入力します。以下のコードを本文にコピー&ペーストします:
import subprocess ip = input("Enter your server ip: ") subprocess.run(["ping", ip]) print("Attempting to connect to the server") print("Application authentication was successful")コミットメッセージに
Create Run.py as a test fileと入力します。Target branch を
mainに設定します。Commit changes をクリックします。
このファイルにはコマンドインジェクションの脆弱性があり、セキュリティ侵害につながる可能性があります。SAST スキャナーを使用してコード内の問題を検出します。
タスク B. SAST スキャンの作成と実行
前のラボで作成した CICD Demo プロジェクトを開きます。
.gitlab-ci.ymlファイルをクリックして内容を確認します。Edit > Edit single file をクリックします。ファイルの末尾に以下のスニペットを貼り付けます。
include: - template: Jobs/SAST.gitlab-ci.ymlCommit message フィールドに
Enable SASTと入力し、Target Branch をmainのままにして、Commit changes をクリックします。この変更によって開始されたパイプラインに移動し、
semgrep-sastジョブをクリックして実行中であることを確認します。Buildステージが完了するまで1〜2分かかる場合があります。SAST スキャンの結果を確認するには、左側のナビゲーションペインで Secure > Vulnerability Report をクリックします。Tool ドロップダウンリストで SAST を選択します。脆弱性をクリックして詳細を確認します。
タスク C. 主要な問題の修正
サイドバーで Code > Repository に移動します。
run.pyファイルをクリックします。run.pyファイルで、青い Edit ドロップダウンをクリックして Edit single file を選択します。スキャンにより、1行目と4行目に脆弱性が含まれていることが示されました。
# main.py Line 1 import subprocess# main.py Line 4 subprocess.run(["ping", ip])問題は、これらの行がシステムコマンドの実行にユーザー入力を使用していることです。この状況では、攻撃者が意図しないコマンドをアプリケーションに実行させる入力を巧みに作成できます。これを解決するには、コマンドを削除するか、コマンドからユーザー入力を取り除く方法があります。
コードから2行を削除します。ファイルは以下のようになるはずです。
print("Attempting to connect to the server") print("Application authentication was successful")コミットフィールドに
Fix changes as suggested by SAST scanと入力し、Target Branch をmainのままにして、Commit changes をクリックします。変更を更新するには、SAST スキャンを再度実行する必要があります。
パイプラインの実行が完了したら、左側のナビゲーションペインで Secure > Vulnerability Report をクリックします。Tool ドロップダウンリストで SAST を選択します。セキュリティ問題が修正されているか確認します。
ラボガイドの完了
このラボ演習が完了しました。このコースの他のラボガイドも参照できます。
ご意見・ご提案?
GitLab CI/CD のハンズオンガイド に変更を加えたい場合は、マージリクエストで変更内容を提出してください!
