あなたのWebサイトを「いますぐ」セキュリティスキャンする
つい先日、似たような題でブログを書いたのだが、実はもっとさらに上をいく機能があるので、それをご紹介したい。
GitLab Ultimateには、DAST (Dynamic Application Security Testing)が含まれているのだが、実はこの機能、大きく2つある。
- Proxy-based analyzer
- Browser-based analyzer
前回 ( https://qiita.com/SerinaMorino/items/8b948724df3d68085a20 ) は、この前者の「Proxy-based analyzer」を取り上げたのだが、このブログでは、後者の「Browser-based analyzer」をご紹介したい。
とはいえ、しばらくはハイブリッド
ちなみに、小声で言っておくが、Proxy-based analyzerを辞めて、全部Browser-based analyzerにするそうだ( https://docs.gitlab.com/ee/user/application_security/dast/browser_based.html )。
とはいえ、まだ全機能を実現できていないということなので、しばらくは、Browser-basedといいつつ、部分的にProxy-basedも使うとのこと( https://docs.gitlab.com/ee/user/application_security/dast/browser_based.html#vulnerability-check-migration )。
1. 準備
さて、さっそくスキャンしよう。必要なのは、GitLab Ultimate。無償版のCE(Community Edition)やPremium版では使えない。
Ultimateを持っていない方は、GitLab Ultimateトライアルを試そう。
2. プロジェクトを作成
GitLabでは、なにをするにしても最初にプロジェクトを作る必要がある。
次のように、blankでプロジェクトを作ろう。
3. .gitlab-ci.yml ファイルを作る
.gitlab-ci.ymlファイルをいきなり作る。手で作るのが好きな人は手でどうぞ。
ちょっとおしゃれにいきたい人は、次のように、Pipeline Editorメニューをクリック。
次のように、[Configure pipeline]をクリック。
次のように、デフォルトで定義される .gitlab-ci.yml ファイルの中身をすべて選択して、削除。
次に、この中身を手で書くのだが、タブやら改行やら面倒なので、マニュアルから拝借する。拝借するURLはこちら ( https://docs.gitlab.com/ee/user/application_security/dast/browser_based.html#create-a-dast-cicd-job )。
いちおう、リンク切れも将来起きる可能性があるので、どこの部分を言っているのか、スクショを貼り付けておく。
ちなみに、みなさんがコピー・ペーストできるようにということで、以下に載せておく。
stages:
- build
- test
- deploy
- dast
include:
- template: DAST.gitlab-ci.yml
dast:
variables:
DAST_WEBSITE: "https://example.com"
DAST_BROWSER_SCAN: "true"
ここでいう、「DAST_WEBSITE」がセキュリティスキャンの対象Webサイトを指定する。OWASPセキュリティツールで有名な、テストサイト(やられサーバー)のURL「 https://juice-shop.herokuapp.com/ 」を使うことにする。
ちなみにコードは以下。
stages:
- build
- test
- deploy
- dast
include:
- template: DAST.gitlab-ci.yml
dast:
variables:
DAST_WEBSITE: "https://juice-shop.herokuapp.com/"
DAST_BROWSER_SCAN: "true"
上の画面のように、[Commit changes]をクリックして、保存する。
この操作で、このプロジェクトのGitレポジトリに、「.gitlab-ci.yml」ファイルが保存&コミットされる。
4. なんと、これで終わりである
なんと、これで終わりである。ここに来た瞬間に、あなたのGitLabは、OWASPのやられサーバーに攻撃しまくっていることになる。
このパイプラインが終わったら(緑になったら)、次に進もう。
5. スキャンそのものは時間かかる
だーっとスキャンする設定なので、結構時間がかかる。辛抱強く待つと、次のように脆弱性が出てくる。
実際の業務では、ここからそれぞれ脆弱性ごとにイシューをつくって、脆弱性つぶしにかかる。
6. どこまでスキャンしたのか、見たい
上の、.gitlab-ci.yml を使うと、結局スキャンがどのページを訪れたのか、よくわからない。実は、このBrowser-based analyzerは、「DAST_BROWSER_CRAWL_GRAPH」というオプションがあり、これを有効にすると、グラフ図で訪れたページを見せる機能がある。
これを使ってみる方法がこちら。
先程と同じように、[Pipeline Editor」から「.gitlab-ci.yml」ファイルの編集画面を開く。
今度は、次のコードのように「DAST_BROWSER_CRAWL_GRAPH」と「artifacts」の設定を加える。
stages:
- build
- test
- deploy
- dast
include:
- template: DAST.gitlab-ci.yml
dast:
variables:
DAST_WEBSITE: "https://juice-shop.herokuapp.com/"
DAST_BROWSER_SCAN: "true"
DAST_BROWSER_CRAWL_GRAPH: "true"
artifacts:
paths:
- gl-dast-crawl-graph.svg
この「artifacts」は何のためかというと、スキャンする際に訪問サイトをこのsvgファイル(グラフィックス)内に描画し、その画像を保存する、という指定になる。
詳しく説明すると・・・
正確には、スキャンそのものはGitLab Runner(共有)で行われるので、.gitlab-ci.ymlファイルの処理内容が完了すると、このGitLab Runner(共有)マシンは初期化されるため、なにもかも消えてしまう。消えてしまう前に、GitLab本体側に収集しておく、という意味になる。
なにはともあれ、ここでもう一度、[Commit changes]を押して、セキュリティスキャンが終わるのを待とう。
6. なにをどこまでスキャンしたのか見る
スキャンが終了したら、次の画面で[Passed]をクリックする。
dastジョブをクリック。
次のように、[Download]をクリック。
すると、[artifacts.zip]というファイルがダウンロードされるので、解凍すると、[gl-dast-crawl-graph.svg]というファイルが手に入る。
ブラウザ等で見ると、次のようにグラフ図が表示される。これはまさに、セキュリティスキャン(実際はhtmlを解釈して、DOM操作をしながらクリック動作をしていく)をした軌跡となっている。
以上、さくっと使えることがわかったと思うので、みなさまもぜひトライを。