GitLabが持っている、セキュリティスキャンを、秒で使う方法(実際は分かかる) - Proxy-based analyzer

# あなたのWebサイトをスキャンする

セキュリティに興味がある方、一度や二度、セキュリティスキャンツールをつかったことがあるだろう。
ない人は、いつか使ってみたい、そう思ったことがあるはずだ。
GitLabは、所詮「ソースコード管理」だと思っていた私が、つい先日、パイセンから教わったGitLabの秘密についてご紹介したい。

# DASTって知ってますか？

DAST、というのは、「ダスト」、「Dynamic Application Testing」の略。
よくわからない人は、セキュリティの脆弱性を見つけてくれるツールと思えばよい。
もちろん、世の中はもっと細分化しているが、難しく書くと眠くなるので、簡単にそうお伝えしておく。

# 使い方

## GitLab Ultimate必須

使い方は、GitLabのCE版(Community Edition)ではなく、GitLabのUltimate版(最上位版)を使う。お持ちじゃない人は、GitLabのUltimateのトライアルを申し込むとよい。

## 1. GitLab Ultimateを手に入れる / もしくは Ultimate トライアル版

## 2. テスト用のWebサイトを見つける

ここは、ある意味重要で、他人のWebサイトをいきなりスキャンすると、諸々の処罰の対象になる可能性があり。いわゆる、ハッキング攻撃をしているということになるので、やってはいけない。

そのかわり、世の中には、セキュリティテスト用のWebサイトを用意してくれている方がいる。そのうち、今回ご紹介&使うのは、「OWASP Juice Shop」という、セキュリティツールで有名な「OWASP」プロジェクトが用意してくれているサイトにする。

URLは、 https://owasp.org/www-project-juice-shop/ の、画面右下の「Online Demo ( https://juice-shop.herokuapp.com/ )」。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/08ea671a-5b11-0364-2393-9a01ad1a8dbb.png)


## 3. さて、GitLabの設定開始。まずはプロジェクトを作る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/0279119e-27b7-7e9a-0d96-6e7a14b67e1b.png)

ここで、「Create blank project」を作る。
名前はなんでもよい。適当につくる。

こんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/28d65f3c-1ee8-62cd-082e-b8e76b16a8ed.png)

## 4. まっすぐに「Secure」-「Security configuration」に進む

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/24867fb9-d969-e377-5c81-95cf25791acb.png)

左のメニューから、この「Security configuration」に進む。

## 5. 「Enable DAST」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/18cb796b-8167-9da2-ff2f-aebfd4d8db04.png)

すると次の画面が表示されるので、「Select scanner profile」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/a4e05c61-9266-a8e5-7d2c-bb0e32ee5e21.png)

## 6. プロファイルを作る

次のように、画面右にポップアップ？がにょきっと出てくるので、そこの「New scanner profile」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/24800ef5-5609-0fcd-1cc1-5186373ca6cb.png)

もろもろカスタマイズできるが、ここは次のように選択。ここでは、「Profile name」に「test」とする。この名前は、なんでもよい。

「Scan mode」の「Active」「Passive」は、今回は説明を割愛します。Activeを選択しようとすると怒られる。この設定については、いずれまた今度ご説明する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/45876db4-2341-d6c9-900f-fbb913d2f3f7.png)

はい、では、ここでは「Save profile」をクリックして設定を完了させる。

## 7.サイトプロファイル、なるものを作る

あともう一箇所設定が残っている。次のように、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/4372d356-a90a-392d-0e46-c0542bb7ab87.png)

[Select site profile]をクリック。

ふたたび、右から以下のようなメニューがでてくるので、「New site profile」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/f4a7c007-3e79-b825-45b9-ad066f42978b.png)

ここで先程ご紹介した、やられサーバーのURL ( https://juice-shop.herokuapp.com/ ) を設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/9a66448e-35c2-8fd5-d1f7-0afc2fc879f5.png)

[Profile name]はなんでもよい。設定したら、[Save profile]をクリック。

## 8. あともう少し

画面左下の[Generate code snippet]が押せるようになっているはず。
このボタンを押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/3afe8ddd-24f6-fc60-4dfb-28d5f834cb24.png)

## 9. 定義ファイル( .gitlab-ci.yml ファイル )を作る

GitLabというのは、バッチシステムみたいな機能を持っていて(CI/CDとかはそれで実現されている)、その定義ファイルが「.gitlab-ci.yml」という固定のファイル名。

このファイルをつくって、このプロジェクトのgitレポジトリに突っ込んでおくと、GitLabはその中身を、問答無用で実行する、という仕組みになっている。

その中身を、この画面が作ってくれた、ということだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/6c02a2a9-fc99-8493-dfaf-49e213c7f1ea.png)

というわけで、画面右下の[Copy code and open .gitlab-ci.yml file]ボタンを押す。

すると次の画面が表示されるので、[Configure pipeline]をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/d5b3ce0f-51d7-ea6e-ebef-74fcfae7cf0f.png)

いきなり、ばっとソースコードっぽいのが書かれているが、これをすべて捨てる。
捨てるといっても、このコードの部分を全部選択して、(クリップボードにコピーされているはずの、先程生成した、.gitlab-ci.ymlのコード)上書きする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/c6e21212-a6a3-218e-994b-6bf27ccc6047.png)

上の画面が、下のようになるはず。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/99f59d62-1633-68c3-eab5-095719db28e0.png)

ついうっかり、なにかをコピーして、クリップボードを書き換えてしまった方は、ブラウザの戻るボタンで戻って、コピーをもう一回取りに行けばよい。

では、ここで[Commit changes]をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/1e599ce9-8c8e-c2c4-8b50-bcb9b495c8e2.png)

## 10. 設定終わり。もうスキャンがスタートしました

え・・・という感じだが、ここまで来たあなたは、いまちょうど、さっきの「やられサーバー」に攻撃しまくってる状態になっている。

左のメニューから[Pipeline]を選択すると、いまスキャン実行中の様子が確認できる。
(具体的には、これはGitLab Runner(共有)が仕事してくれているが、それはまた説明しよう)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/6e7b22db-fc78-3dbe-586d-44a14fd5cb0f.png)

おわるまで待つ。おっそー(遅い)という方、ご心配なく。GitLab Runnerをハイスペックのものに変更すれば、もっと速攻で終わる。ただ、今回はセキュリティのスキャンなので、はやく終わればなおよい、みたいな、そんな単純な世界ではない。

## 11. 様子を確認

無事終わると、次のように[Passed]という状態になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/64269deb-186f-f41e-ed40-34622c2f9f84.png)

ここをクリック。

## 12. スキャン結果の確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/d11bcc08-d5e7-66bf-e7e0-ccbade7c33ed.png)

Securityタブが表示され、そこをクリックすると、次のように脆弱性がダーッと出てきているはず。

今回 Activeじゃなく、Passiveだったので、この程度のものが検出されている。もっと激しく、さらにカスタマイズかけると、もっといろいろ検出できる。

ちなみに、左のメニューの[Secure]-[Vulnerability report]をクリックすれば、同じような画面をいつでも呼び出せる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665149/e65f855a-f957-4f4b-8d02-b56bad7a3391.png)

という感じで、任意のサイトをセキュリティスキャンすることができたことがわかったと思う。

当然、これは仕組みとして呼び出せるので、いろいろな使い方ができるはず。

みなさんもぜひどうぞ。