2024.03.12

GitLab機能紹介 #7「SAST/DAST」

佐藤梨花
SB C&S株式会社 テクニカルマーケティングセンター
このエントリーをはてなブックマークに追加

こんにちは。SB C&Sの佐藤です。

本連載では開発サイクル全体を管理出来るプラットフォームである「GitLab」で使用される主な機能について解説していきます。

GitLabについてご存知ない、もしくは名前は知っているけれど具体的にどんな機能があるか気になる、そんな方におすすめの連載となっております。

7回目は「SAST/DAST」について解説します。

SAST/DAST

まずはこの2項目について詳しくご存知でない方のために、それぞれの概要をご説明します。

SASTStatic Application Security Testing

  • 和訳:静的アプリケーションセキュリティテスト
  • プログラムのコードを分析することで、脆弱性を検出するテスト手法(ホワイトボックス)
  • チェック対象:SQLインジェクション、入力検証、スタック・バッファ・オーバーフロー 等

DASTDynamic Application Security Testing

  • 和訳:動的アプリケーションセキュリティテスト
  • 動いているWebアプリケーションに対し、悪用シミュレーションにより脆弱性を検出するテスト(ブラックボックス)
  • チェック対象:SQLインジェクション、クロスサイトスクリプティング、サーバー設定不備、

この両者の大きな違いは「コードレベルの検証を行うか」という点です。SASTはコード解析がメインとなるためコードや言語に依存しますが、DASTはコード自体を対象としないため、どの言語であっても基本的に同様のテストを行うことが可能です。そのためDASTSASTよりも回帰性が高いという見方も可能です。

しかしどちらも脆弱性の早期発見(シフトレフト)に大変効果的であり、またどちらか一方ではなく、どちらも実施することが大切である点は、実際に開発を行っている方にとっては明白な事実として認識頂けると思います。

また昨今のようなリリース頻度に対応しながら脆弱性を排除しアプリケーション品質を向上させるためには、これらのテストは「全ての変更に対し常に行われる」ことが重要であり、Gitの世界で考えるのであれば「全てのコミットに対し行われる」必要があります。しかし、こういった要件に手動、もしくは複数のツールの組み合わせで対応するには大変な初期コストや保守費が必要となります。

そういった悩みに対し「ワンプラットフォームで解決」を提供するのがGitLabSAST/DAST機能になります。

 

GitLabにおけるSAST/DASTの実装

SAST/DASTは「変更毎に実行されることが望ましい」ため、実装としてはCIサイクルへの組み込みがベストとされています。そのため従来の方法では

  1. SAST(もしくはDAST)ツールを準備
  2. SAST(もしくはDAST)ツールでGit等のコード変更を検知
  3. SAST(もしくはDAST)ツールで事前定義しておいた内容を実施
  4. 結果をGit系に返し、以降の挙動を制御

というのが一般的なワークフローでした。

ですがこの構成ですと複数のツールを跨るため、初期学習コストや運用管理、セキュリティ等の問題が発生します。

GitLabでは独自のCI管理機能である「.gitlab-ci.yml」を使用して行います。このファイルにてSAST/DASTの実行を定義することで、GitLabで定義したCICDサイクルの中のみでアナライザー(テスト定義の集合体)を使用した各種スキャンを行うことが可能です。

またプロジェクトが複数の言語を使用している場合でも、適切なアナライザーのセットが自動的に実行されます。

.gitlab-ci.ymlについては次回のブログにて詳細を紹介予定です

 

また本項で解説する実行構成は最も単純な定義方法になります。

以下でご紹介する設定を行うことで最適なアナライザーが選択されたSASTスキャンが実行されます。単純な実行以外にも様々な設定を追加可能ですので、詳細は公式ドキュメント(SAST/DAST)をご覧ください。

 

SAST

サポート対象言語/アナライザー 

※2024/03現在

言語 / フレームワーク

スキャンに使用したアナライザー

最低サポートGitLabバージョン

.NET (すべてのバージョン、C#のみ)

GitLabが管理するルールでのSemgrep

15.4

Apex (Salesforce)

PMD

12.1

C

GitLabが管理するルールでのSemgrep

14.2

C/C++

Flawfinder

10.7

Elixir(Phoenix

Sobelow

11.1

Go

GitLabが管理するルールでのSemgrep

14.4

Groovy1

find-sec-bugs プラグインによるSpotBugs

11.3 (Gradle) & 11.9 (Maven、SBT)

Helm Charts

Kubesec

13.1

Java(任意のビルドシステム)

GitLabが管理するルールでのSemgrep

14.1

Java (Android)

MobSF (Beta)

13.5

JavaScript

GitLabが管理するルールでのSemgrep

13.1

Kotlin (Android)

MobSF (Beta)

13.5

Kotlin (General)

find-sec-bugs プラグインによるSpotBugs

13.11

Kubernetes manifests

Kubesec

12.6

Node.js

NodeJsScan

11.1

Objective-C (iOS)

MobSF (Beta)

13.5

PHP

phpcs-security-audit

10.8

Python

GitLabが管理するルールでのSemgrep

13.9

React

GitLabが管理するルールでのSemgrep

13.1

Ruby

brakeman

13.9

Ruby on Rails

brakeman

10.3

Scala (ビルドシステムは問わず)

GitLabが管理するルールでのSemgrep

16

Scala1

find-sec-bugs プラグインによるSpotBugs

11.0(SBT) & 11.9 (Gradle, Maven)

Swift (iOS)

MobSF (Beta)

13.5

TypeScript

GitLabが管理するルールでのSemgrep

13.1

.gitlab-ci.yml定義方法

1.SASTを有効にするために、「gitlab-ci.yml(SAST用テンプレート)をインクルードする

定義例)

include:
  - template: Jobs/SAST.gitlab-ci.yml

2.Stageを定義

定義例)

stages:
  - test

gitlab_202403_01_01.png

その他

・シークレット検出用テンプレート

- template: Security/Secret-Detection.gitlab-ci.yml

DAST

アナライザー

DASTでは言語毎のアナライザーではなく、スキャン対象によるアナライザーが自動で選択されます。

  • プロキシーベースアナライザー
  • ブラウザーベースアナライザー
  • APIアナライザー

Stage定義方法

1.SASTを有効にするために、「gitlab-ci.yml(SAST用テンプレート)をインクルードする

定義例)

include:
- template: DAST.gitlab-ci.yml

2.Stageを定義

定義例)

stages:
- dast

gitlab_202403_01_02.png

結果確認/ダウンロード

スキャン結果の確認もしくは結果ファイルのダウンロード方法は以下の3通りがあります。

1.Merge requestPipelines

gitlab_202403_01_03.png

2.BuildPipelines

gitlab_202403_01_04.png

3.SecureVulnerability report
 このページでは脆弱性の一覧も確認可能です。

gitlab_202403_01_05.png

まとめ

従来の方法とは異なり、.gitlab-ci.ymlファイルに定義すれば1プラットフォームで実行から結果確認まで行えるGitLabSAST/DAST機能をご紹介しました。

最小構成であれば数行のコードで実施出来る+言語やフレームワークの種類によって最適なアナライザーを選択してくれるという利点も、これからSAST/DASTに取り組んでみようと思われている方にとって、とても嬉しいポイントではないでしょうか。

アプリケーション品質を大きく左右する部分になりますので、是非一度お試しください。

次回は本記事の中でも紹介しました、GitLabCICDを定義するために必要な「.gitlab-ci.yml」について解説します。GitLabを使いこなす上で大変重要な機能になりますので、是非こちらも併せてご覧ください。

GitLabの特設サイトはこちら

GitLab特設サイトでは、GitLabの製品情報やトライアル(無償試用版)をお申込みいただけます。
ぜひ、特設サイトをご確認ください。

この記事の著者:佐藤梨花

SB C&S株式会社 テクニカルマーケティングセンター

勤怠管理システムの開発(使用言語:Java)に約8年間従事。
現在はエンジニア時の経験を活かしたDevOpsやDX推進のプリセールスとして業務に精励しています。


DevOps Hubのアカウントをフォローして
更新情報を受け取る

  • Like on Feedly
    follow us in feedly

関連記事

このエントリーをはてなブックマークに追加

お問い合わせ

DevOpsに関することなら
お気軽にご相談ください。

Facebook、TwitterでDevOpsに関する
情報配信を行っています。