🐷

Free 版でも SAST の結果を GitLab Web UI で見たい!

2022/12/19に公開

この記事は GitLab Advent Calendar 2022 の 19 日目の記事です。

Free 版でも SAST の結果を GitLab Web UI で見たい!

GitLab SAST って手軽ですよね? Free プランでも利用できるようになったんですが、肝心の GitLab Web UI で検出された脆弱性を見るには Ultimate プランが必要です。SAST 形式の JSON レポートをダウンロードして読まないといけないわけです...

これだと SAST の魅力半減ですよね。

というわけで、Free プランでも SAST の結果を GitLab Web UI で見るためのツールを開発しました。

GitLab Code Quality があるじゃないか

同じソースコードの静的解析で、Free プランでも GitLab Web UI で検査結果を確認できる GitLab Code Quality という機能があります。Code Quality は解析エンジンとして Code Climate を利用していますが、実は Code Quality 形式の JSON レポートをアップロードできれば解析エンジンは何でも構いません

つまり、GitLab SAST のレポートを Code Quality 形式に変換できれば、マージリクエストの Code Quality として結果を確認できます。Ultimate プラン以上ならマージリクエストのコード差分でも確認できます。(以前は GitLab.com に限り、公開プロジェクトでは利用できたのですが、今はできないようです)

最近の静的解析ツールは SARIF 形式の JSON レポートファイルをサポートしていることが多いようです。SAST Analyzer の一つ Semgrep Analyzer も SARIF 形式のレポートを出力しています。こいつを変換したほうが汎用性がありそうです。

というわけで SARIF -> Code Quality の変換ツール SARIF Converter を作りました。

SAST の結果を Code Quality で確認する

SAST Analyzer の一つで最もよく使われている Semgrep analyzer を実行 (/analyzer run) して、作成されている semgrep.sarif ファイルを Code Quality 形式に変換して確認できるようにしています。

sast:
  image: $CI_TEMPLATE_REGISTRY_HOST/security-products/semgrep:3
  before_script:
    - wget -O sarif-converter https://gitlab.com/ignis-build/sarif-converter/-/releases/permalink/latest/downloads/bin/sarif-converter-linux
    - chmod +x sarif-converter
  script:
    # SAST Analyzer の実行
    - /analyzer run
  after_script:
    # Code Quality 形式に変換
    - ./sarif-converter --type codequality semgrep.sarif gl-code-quality-report.json
  artifacts:
    reports:
      codequality: gl-code-quality-report.json

マージリクエストに脆弱性のあるコードをプッシュすると、Code Quality の問題としてマージリクエストのページで報告されます。(サンプルのマージリクエスト)

Ultimate プラン以上なら、マージリクエストのコード差分でも確認できます。(素直に SAST を利用したほうがいいと思いますが...)

もちろん、GitLab Security Dashbord (Ultimate プラン) は使えませんが、マージリクエストで確認できるだけでも十分役に立ちます。

他の SAST Analyzer は?

SAST Analyzer はたくさんあって、Semgrep Analyzer は GitLab が推している主力です。将来的には Semgrep Analyzer に統一する方針のようで、ESLint Analyzer などは Semgrep Analyzer に置き換えられましたが、まだ置き換えられていないものも多くあります。

おそらく、Semgrep Analyzer 以外は SARIF 形式のレポートを出力していないと思われます。残念ながら、この方法ではできません。

しかし、最近の静的解析ツールは SARIF 形式のレポート出力ができることが多いので、SAST Analyzer を使わずに、それが利用している静的解析ツールを直接呼び出せば同じことができます。詳しくはまた後日。

最後に

SARIF Converter を使うと、Free プランでも GitLab Web UI で SAST の脆弱性の指摘を確認することができます。セキュリティダッシュボードは使えませんが、マージリクエストで脆弱性が確認できるだけでも十分でしょう。

Discussion