はじめに
最近セキュリティ系のツールに興味があり、脆弱性管理ツールの一つにArcherySecというオープンソースのツールがあったので試してみました。
この領域だとOWASP DefectDojoがオープンソースでは有名ですが、見た目がこっちの方が好みだったので、こっちを最初に試してみました。
ArcherySecとは
DevSecOpsでSAST / SCA / DASTなどさまざまなスキャナーを使ったときに検知結果を集約して管理できるオープンソースのツール。
また、DASTなどいくつかのツールに対してはArcherySec
からスキャンを実行することができます。
公式ページはこちら。
やりたいこと
-
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
にブラウザでアクセスして、ログインすると、こんなページが表示される。
SASTやSCAツールの結果をCLIでArcherySec
に登録
公式サイトにさまざまなスキャナーの検知結果サンプルがあるので、SAST, SCA, DASTから以下を使用。
- Gitlab SAST Scanner
- Gitlab SCA Scanner
- OWASP ZAP
Scans > Dynamic Scans(あるいはStatic Scans) > Upload Reportsからファイルをアップロード。
どう表示されるのか確認
Static Scansの画面
まず最初に「Project Name」には、アップロード時の「Project」ではなく「Target」の項目が表示される ... バグ?
それ以外は、どういうレベルの問題が検知されているのかぱっとわかりやすいなという印象。
Vulnerability Listの画面
これもどういう脆弱性があって、それがOpenなのかシンプルに表示されていて、わかりやすい。
JIRAチケットの状況もわかるのだと思うのですが、わかりやすい。
### 脆弱性詳細画面
SAST
ここが惜しいのですが、
- Description ... まあ内容が記載されているのでOK
- Instance ... コードの行番号が表示されない(アップロードされたファイルの中には行番号あり)
という状況で、SASTなので、コードの行番号は欲しかったです。
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とか、どのバージョンに上げればいいのかは全く表示されず、使えないな〜という印象でした。
DAST
DASTだと、Description, Request/Responseの情報、SolutionやReferenceまで一通り情報が表示されていて、使える印象でした。
まとめ
脆弱性管理ツールのArcherySecを試してみました。
ArcherySecがもつ機能の一部のみ試してみましたが、DAST系であれば使えそうな感じでした。
Static Scansについてもきちんと表示されれば使えるなという印象でしたが、プルリクを見る限りしばらく直らなそうでした。
次回はDefectDojoかな〜。