ArcherySecにSAST、SCA、DASTの結果を読み込ませたら

# はじめに

最近セキュリティ系のツールに興味があり、脆弱性管理ツールの一つに[ArcherySec](https://www.archerysec.com/)というオープンソースのツールがあったので試してみました。
この領域だとOWASP DefectDojoがオープンソースでは有名ですが、見た目がこっちの方が好みだったので、こっちを最初に試してみました。
 
## ArcherySecとは

DevSecOpsでSAST / SCA / DASTなどさまざまなスキャナーを使ったときに検知結果を集約して管理できるオープンソースのツール。
また、DASTなどいくつかのツールに対しては`ArcherySec`からスキャンを実行することができます。
公式ページは[こちら](https://www.archerysec.com/)。

# やりたいこと

- `ArcherySec`をローカル環境で起動
- SASTやSCAツールの結果をCLIで`ArcherySec`に登録
- どう表示されるのか確認


# 環境

```
% sw_vers      
ProductName:	macOS
ProductVersion:	12.6.2
BuildVersion:	21G320

% docker --version
Docker version 20.10.12, build e91ed57
```


# やったこと

## `ArcherySec`の起動

dockerでさくっと起動できます。

```
$ docker pull archerysec/archerysec
$ docker run \
    -e NAME=user \
    -e EMAIL=user@user.com \
    -e PASSWORD=admin@123A  \
    -it -p 8000:8000 archerysec/archerysec:latest
```

`localhost:8000`にブラウザでアクセスして、ログインすると、こんなページが表示される。

![スクリーンショット 2023-02-24 22.57.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/e97098e8-b734-8443-ac80-e6fe3b245ac9.png)


## SASTやSCAツールの結果をCLIで`ArcherySec`に登録

[公式サイト](https://docs.archerysec.com/docs/scan_upload)にさまざまなスキャナーの検知結果サンプルがあるので、SAST, SCA, DASTから以下を使用。

- Gitlab SAST Scanner
- Gitlab SCA Scanner
- OWASP ZAP

Scans > Dynamic Scans（あるいはStatic Scans） > Upload Reportsからファイルをアップロード。

![スクリーンショット 2023-02-24 23.16.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/8a133f08-d000-a45c-e313-a62ddacb4553.png)


## どう表示されるのか確認

### Static Scansの画面

![スクリーンショット 2023-02-24 23.18.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/18e7f4fe-e710-6817-6f47-3e38967370f0.png)

まず最初に「Project Name」には、アップロード時の「Project」ではなく「Target」の項目が表示される ... バグ？

それ以外は、どういうレベルの問題が検知されているのかぱっとわかりやすいなという印象。

### Vulnerability Listの画面

これもどういう脆弱性があって、それがOpenなのかシンプルに表示されていて、わかりやすい。

![スクリーンショット 2023-02-24 23.22.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/a0052cf9-59f9-1246-87bf-7aca84f9031c.png)

JIRAチケットの状況もわかるのだと思うのですが、わかりやすい。

![スクリーンショット 2023-02-24 23.25.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/d7b7c7a2-b158-8fc4-9f37-5052955fd780.png)

　### 脆弱性詳細画面

#### SAST

ここが惜しいのですが、
- Description ... まあ内容が記載されているのでOK
- Instance ... コードの行番号が表示されない（アップロードされたファイルの中には行番号あり）
という状況で、SASTなので、コードの行番号は欲しかったです。

![スクリーンショット 2023-02-24 23.25.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/05dec291-78d5-fb50-2977-ca0ba1d0df61.png)

#### SCA

SCAの場合は、対象のライブラリーとバージョン、CVE IDとか、どのバージョンに上げればいいのかを知りたいところ。
GitLab SCAのファイルの中身は↓のように情報が記載されている。
```
    "category": "dependency_scanning",
      "name": "Improper Input Validation",
      "message": "Improper Input Validation in pip",
      "description": "An issue was discovered in pip (all versions) because it installs the version with the highest version number, even if the user had intended to obtain a private package from a private index. This only affects use of the `--extra-index-url` option, and exploitation requires that the package does not already exist in the public index (and thus the attacker can put the package there with an arbitrary version number).",
      "cve": "requirements.txt:pip:gemnasium:f42440cc-317f-449c-87c3-016bee39ecbe",
      "severity": "High",
      "solution": "Unfortunately, there is no solution available yet.",
      "scanner": {
        "id": "gemnasium",
        "name": "Gemnasium"
      },
      "location": {
        "file": "requirements.txt",
        "dependency": {
          "package": {
            "name": "pip"
          },
          "version": "20.2.2"
        }
      },
      "identifiers": [
        {
          "type": "gemnasium",
          "name": "Gemnasium-f42440cc-317f-449c-87c3-016bee39ecbe",
          "value": "f42440cc-317f-449c-87c3-016bee39ecbe",
          "url": "https://gitlab.com/gitlab-org/security-products/gemnasium-db/-/blob/master/pypi/pip/CVE-2018-20225.yml"
        },
        {
          "type": "cve",
          "name": "CVE-2018-20225",
          "value": "CVE-2018-20225",
          "url": "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20225"
        }
      ],
      "links": [
        {
          "url": "https://nvd.nist.gov/vuln/detail/CVE-2018-20225"
        },
        {
          "url": "https://pip.pypa.io/en/stable/news/"
        }
      ]
```

ただ、`ArcherySec`だと、対象のライブラリーとバージョン、CVE IDとか、どのバージョンに上げればいいのかは全く表示されず、使えないな〜という印象でした。

![スクリーンショット 2023-02-24 23.31.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/00307096-3585-4d01-9f2d-aeeb9afdeaed.png)

#### DAST

DASTだと、Description, Request/Responseの情報、SolutionやReferenceまで一通り情報が表示されていて、使える印象でした。

![スクリーンショット 2023-02-24 23.37.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/ec6f06c3-608f-b7e2-a003-67b47cecd901.png)

# まとめ

脆弱性管理ツールのArcherySecを試してみました。
ArcherySecがもつ機能の一部のみ試してみましたが、DAST系であれば使えそうな感じでした。
Static Scansについてもきちんと表示されれば使えるなという印象でしたが、プルリクを見る限りしばらく直らなそうでした。
次回はDefectDojoかな〜。