GitHub Code Scanningを試してみた | 脆弱性の自動検出

# GitHub Code Scanningとは
コードをスキャンして隠された脆弱性を検出してくれる機能です。
GitHub Actionsで実行できる。
今朝twitterで知った。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Code scanning is here! 🎉 <br><br>Prevent issues in code by automating security as a part of your workflow.<br>✔️ Free for public repositories<br>✔️ Developer-first, GitHub native<br>✔️ Enabled for GitHub Enterprise Cloud<br><br>Learn more! <a href="https://t.co/2SSCjb09Il">https://t.co/2SSCjb09Il</a></p>&mdash; GitHub (@github) <a href="https://twitter.com/github/status/1311350218735194113?ref_src=twsrc%5Etfw">September 30, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 導入
いつものこの一覧から`Security`を選びます。
![Screenshot from 2020-10-02 15-01-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/8b34c382-44e7-eab5-39ca-08a32120abab.png)

`Security overview`の中に`Code scanning alerts`がありますが、`Contact sales`となっています。
この機能を使用するにはパブリックレポジトリにする必要があります。
![Screenshot from 2020-10-02 15-01-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/83067006-9c92-f62e-85b2-d782b64bded7.png)

`Set up code scanning`というボタンが現れました。これを押します。
![Screenshot from 2020-10-02 15-06-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/bf54891f-2472-75ad-b414-15ec3e601e56.png)

`CodeQL Analysis`の`Set up this workflow`を押します。
![Screenshot from 2020-10-02 15-07-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/7044a7db-b6be-740c-5e6e-600691b1aa2e.png)

次のようにymlファイルを書いてくれるので右上の`Start commit`からcommitします。
![Screenshot from 2020-10-02 15-16-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/229c8c08-9c78-c4a5-fdc4-846fb0498555.png)


workflowにCodeQLが追加されました。
![Screenshot from 2020-10-02 15-16-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/44b765d2-9c51-f41a-0d91-7f415fa16bf9.png)

# 脆弱性の確認
ここからActionsを選びます。
![Screenshot from 2020-10-02 15-01-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/8b34c382-44e7-eab5-39ca-08a32120abab.png)

CodeQLが`in progress`になっています。実行には少し時間がかかります。`Create codeql-analysis.yml`をクリックして詳細を確認しましょう。
![Screenshot from 2020-10-02 15-17-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/3c92e55e-a739-ab93-5289-6b02ab367d82.png)


次のように順番にjobが実行されていることが確認できます。
![Screenshot from 2020-10-02 15-17-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/fbb9cb9a-3b15-27c4-deb4-c00c41c96487.png)

実行後、再度ここからSecurityを選びます。
![Screenshot from 2020-10-02 15-01-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/8b34c382-44e7-eab5-39ca-08a32120abab.png)

Code scanningが5つ警告を出しています。
![Screenshot from 2020-10-02 14-37-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/290b572a-de93-f2c9-2a97-7adf4973e0d0.png)

どんなことが懸念されるかを教えてくれます。
今回はregexが特定のパターンでは処理が指数関数的に重くなっていくことを指摘しDoS攻撃のための手段になる可能性があると警告しています。
ReDoSというらしい。初めて知った。
![Screenshot from 2020-10-02 14-40-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/3a922cb3-ac8b-1883-f041-8cef6825b105.png)
上の続き
![Screenshot from 2020-10-02 14-40-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/00098c0b-845a-dc80-1f6f-ad49e5eaa37e.png)

どういうことかわからんならここを見ろとばかりにReferencesまで用意されています。

# プルリクエスト
試しにプルリクを作ってみたら自動でスキャンしてくれた。
スキャンが遅いのが少し気になるけれど...

![Screenshot from 2020-10-02 15-40-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397212/ed03b1a4-3f6e-cf10-4fc3-22bf07f941d3.png)


なおCodeQLが走っている途中でもマージはできる模様。

# Learn More
公式ドキュメントです。
CodeQLをCIに組み込んだりもできるらしい。
[GitHub Docs/Finding security vulnerabilities and errors in your code](https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/automatically-scanning-your-code-for-vulnerabilities-and-errors)