GitLab 基礎 - ハンズオンラボ: セキュリティスキャナーの実装

このハンズオンガイドでは、CI/CDプロセスにセキュリティスキャナーを追加するプロセスを学習します。

完了までの推定時間: 30分

目標

このラボでは、CI/CDパイプラインのオプション機能であるSASTを使用して、コードのセキュリティ脆弱性を特定します。GitLabの脆弱性レポートは、各パイプライン実行で見つかった新旧の脆弱性を表示します。詳細はドキュメントを参照してください。

タスク A. SASTコンポーネントの検索

GitLabには様々なCI/CDコンポーネントが用意されており、プロジェクトに含めることができるビルド済みのCI/CD設定です。GitLabインスタンスで利用可能なすべてのコンポーネントを確認するには:

  1. 左サイドバーで Search or go to を選択してください。

  2. 表示されるダイアログで Explore を選択してください。

  3. 左サイドバーで CI/CD Catalog を選択してください。これにより、GitLabインスタンスで利用可能なすべてのCI/CDカタログアイテムの一覧が表示されます。このラボでは、プロジェクトにSASTを追加してください。SASTコンポーネントを選択してください。

CI/CDコンポーネントを選択すると、コンポーネントの使用方法と設定オプションを説明する Readme が表示されます。SASTコンポーネントでは、次のコードを使って含めることができると示されています:

include:
  - component: $CI_SERVER_FQDN/components/sast/[email protected]

これをCI/CDファイルに追加しましょう。

タスク B. SASTコンポーネントの追加

  1. ページの左上にあるTanukiロゴをクリックしてCI/CDプロジェクトに移動し、Cool App QA プロジェクトをクリックしてください。

  2. 左サイドバーで Code > Branches を選択してください。

  3. initial-code ブランチを選択してください。

  4. Build > Pipeline Editor を選択してください。

  5. ファイルの先頭(imageの下)に、mainバージョンのSASTインポートを追加してください。

    include:
      - component: $CI_SERVER_FQDN/components/sast/[email protected]
    
  6. ファイルのstagesセクションに、以下のように test という名前のステージを追加します:

    stages:
      - build
      - test
    

    これらの変更を加えると、ファイルは次のようになります:

    default:
      image: golang
    
    include:
      - component: $CI_SERVER_FQDN/components/sast/[email protected]
    
    stages:
      - build
      - test
    
    build go:
      stage: build
      script:
        - go build
        - ./array
    
  7. Branchinitial-code に設定されていることを確認してください。Commit changes を選択してください。

  8. 変更をコミットした後、左サイドバーで Build > Pipelines に移動してください。

  9. 最新のパイプラインを選択してください。

  10. semgrep-sast という名前の新しいジョブが表示されます。このジョブは、include キーワードを使用してインポートされたセキュリティスキャンです。

タスク C. run.py の追加とSASTスキャン結果の確認

このタスクでは、既知の脆弱性を含むファイルを追加し、SASTがそれを検出するかどうかを確認してください。

  1. パンくずリストのプロジェクト名をクリックして Project overview ページに戻ってください。

  2. ブランチドロップダウンを使用して initial-code ブランチに切り替えてください。

  3. プロジェクトランディングページの上部、ブランチドロップダウンの右側にある (+) > This directory > New file をクリックしてください。

  4. File name フィールドに run.py と入力してください。

  5. 以下の内容をファイルにコピーします:

    import subprocess
    
    in = input("Enter your server ip: ")
    subprocess.run(["ping", in])
    
    print("Attempting to connect to the server")
    print("Application authentication was successful")
    
  6. Commit changes を選択し、適切な Commit message を追加して、Commit changes ボタンをクリックしてください。initial-code ブランチのコードをマージします。

  7. 左側のナビゲーションペインで Build > Pipelines をクリックしてください。

  8. パイプラインテーブルの行の上部で、running(まだ実行中の場合)または passed(パイプラインが完了した場合)のステータスラベルをクリックしてください。

    SASTスキャンには少し時間がかかる場合があります。コーヒーでも飲みながらお待ちください。

  9. SASTスキャンが完了したら、ページを更新して、パイプラインの詳細ページに表示される Security という新しいタブをクリックしてください。

  10. 一覧表示されている脆弱性をクリックして、run.py のSASTスキャンで検出された潜在的なセキュリティ問題について確認してください。

  11. 問題を修正するためにコードを編集し(subprocess.run コマンドを削除するなど)、変更をコミットしてみてください。脆弱性レポートにまだその問題が表示されますか?

ラボガイド完了

このラボの演習を完了しました。このコースの他のラボガイドを確認できます。

ご提案はありますか?

ラボへの変更を希望する場合は、マージリクエストで変更を送信してください。