Open15

アプリケーションのセキュリティ調査の自動化

shimakaze_softshimakaze_soft

safety

safetyというサービスがあり、そちらが提供している脆弱性診断のツール。
有料版でAPI-KEYが取得できて、API-KEYをオプションとして指定することで、最新の脆弱性データベースを元に脆弱性診断が行える。

無料で使用することもできるが、脆弱性情報が最新版から一ヶ月は遅れている。

https://github.com/pyupio/safety

https://pyup.io/safety/

ローカルで使用するには、safety-dbが必要です。
--full-reportオプションを付与することで、、脆弱性の詳細情報を出力することができる。

$ pip install safety-db
$ pip install safety

$ safety check
$ safety check --full-report

実行してみると、以下のように表示されるはずです。以下ではfastapiの0.88.0のバージョンに脆弱性があることを検知しています。

表示されているリンク(https://pyup.io/v/53310/f17/)を見てみると、詳細が出てきます。

$ safety check --full-report
+=======================================================================================================================================================================================================+

                               /$$$$$$            /$$
                              /$$__  $$          | $$
           /$$$$$$$  /$$$$$$ | $$  \__//$$$$$$  /$$$$$$   /$$   /$$
          /$$_____/ |____  $$| $$$$   /$$__  $$|_  $$_/  | $$  | $$
         |  $$$$$$   /$$$$$$$| $$_/  | $$$$$$$$  | $$    | $$  | $$
          \____  $$ /$$__  $$| $$    | $$_____/  | $$ /$$| $$  | $$
          /$$$$$$$/|  $$$$$$$| $$    |  $$$$$$$  |  $$$$/|  $$$$$$$
         |_______/  \_______/|__/     \_______/   \___/   \____  $$
                                                          /$$  | $$
                                                         |  $$$$$$/
  by pyup.io                                              \______/

+=======================================================================================================================================================================================================+

 REPORT

  Safety v2.3.5 is scanning for Vulnerabilities...
  Scanning dependencies in your files:

  -> requirements.txt

  Using non-commercial database
  Found and scanned 10 packages
  Timestamp 2023-03-25 12:40:02
  1 vulnerabilities found
  0 vulnerabilities ignored

+=======================================================================================================================================================================================================+
 VULNERABILITIES FOUND
+=======================================================================================================================================================================================================+

-> Vulnerability found in fastapi version 0.88.0
   Vulnerability ID: 53310
   Affected spec: <0.92.0
   ADVISORY: Fastapi 0.92.0 updates its dependency 'Starlette' to v0.25.0 to include a security fix.
   PVE-2023-53332
   For more information, please visit https://pyup.io/v/53310/f17

-rオプションでパッケージファイルを絞って診断を行うことも可能です。

$ safety check -r requirements.txt --full-report
shimakaze_softshimakaze_soft

Trivyによるコンテナの自動スキャン

Trivyは、コンテナイメージの脆弱性診断ツールです。コンテナイメージとなると主にDockerイメージの中身をみて、脆弱性診断を行なってくれます。他にもRemoteのGit Repository等の脆弱性やシークレット情報をスキャンできるツール。

Trivyの脆弱性スキャンの対象は以下の通りです。

  • コンテナイメージ
  • ファイルシステム
  • GIt Repo

GitHub ActionsなどのCIにも簡単に組み込めるように作られている。

https://github.com/aquasecurity/trivy#installation

Trivyの脆弱性スキャンは、trivy-dbと呼ばれているツールで作成されている脆弱性DBを参照して行われる。
6時間おきに脆弱性DBが更新されていく。

最新の脆弱性情報で脆弱性スキャンをかけることができます。

https://github.com/aquasecurity/trivy-db

Trivyがどのようなデータソースから情報を収集しているかは、Trivyドキュメントの Data Sourcestrivy-db のソースコードから読み解ける。

主なデータソースは以下の通りです。

  • GitHub Advisory Database
  • Open Source Vulnerabilities
  • GitLab Advisories Community
  • NVD
  • 各種OS/言語の脆弱性DB

インストール

https://github.com/aquasecurity/trivy#installation

Usage

コンテナイメージをスキャンする際は、trivy image [image名]でスキャンすることができる。

以下の例は Alpine Linux 3.4のPythonイメージに対するスキャン。

$ trivy image python:3.4-alpine

参考資料

https://engineering.nifty.co.jp/blog/14208

shimakaze_softshimakaze_soft

trivyの出力結果の例

Total: 37 (UNKNOWN: 0, LOW: 4, MEDIUM: 16, HIGH: 13, CRITICAL: 4)

┌──────────────┬────────────────┬──────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────────┐
│   Library    │ Vulnerability  │ Severity │ Installed Version │ Fixed Version │                            Title                             │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ expat        │ CVE-2018-20843 │ HIGH     │ 2.2.6-r0          │ 2.2.7-r0      │ expat: large number of colons in input makes parser consume  │
│              │                │          │                   │               │ high amount...                                               │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2018-20843                   │
│              ├────────────────┤          │                   ├───────────────┼──────────────────────────────────────────────────────────────┤
│              │ CVE-2019-15903 │          │                   │ 2.2.7-r1      │ expat: heap-based buffer over-read via crafted XML input     │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2019-15903                   │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ libbz2       │ CVE-2019-12900 │ CRITICAL │ 1.0.6-r6          │ 1.0.6-r7      │ bzip2: out-of-bounds write in function BZ2_decompress        │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2019-12900                   │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤

上記の例では出力結果が37件であることが表示されています。
Severityという項目が脆弱性の内訳です。

  • CRITICAL : 9.0~10.0
  • HIGH : 7.0~8.9
  • MEDIUM : 4.0 ~ 6.9
  • LOW : 0.1 ~ 3.9
  • UNKNOWN : 未確認

共通脆弱性評価システムCVSS(Common Vulnerability Scoring System)というものによって評価された脆弱性のスコアをもとに設定されているとのこと。

--severityオプションを使用することで、上記の出力結果から脆弱性のレベルで絞ることもできる。

$ trivy image --severity CRITICAL,HIGH python:3.4-alpine
python:3.4-alpine (alpine 3.9.2)

Total: 17 (HIGH: 13, CRITICAL: 4)

┌──────────────┬────────────────┬──────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────────┐
│   Library    │ Vulnerability  │ Severity │ Installed Version │ Fixed Version │                            Title                             │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ expat        │ CVE-2018-20843 │ HIGH     │ 2.2.6-r0          │ 2.2.7-r0      │ expat: large number of colons in input makes parser consume  │
│              │                │          │                   │               │ high amount...                                               │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2018-20843                   │
│              ├────────────────┤          │                   ├───────────────┼──────────────────────────────────────────────────────────────┤
│              │ CVE-2019-15903 │          │                   │ 2.2.7-r1      │ expat: heap-based buffer over-read via crafted XML input     │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2019-15903                   │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ libbz2       │ CVE-2019-12900 │ CRITICAL │ 1.0.6-r6          │ 1.0.6-r7      │ bzip2: out-of-bounds write in function BZ2_decompress        │
│              │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2019-12900                   │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤

https://blog.nflabs.jp/entry/2021/12/24/091803

shimakaze_softshimakaze_soft

tfsec

Terraformの静的なセキュリティスキャナーです。
ローカル、CIパイプライン環境で実行できるように設計されている。

$ brew install tfsec

.tfファイルを保管している、ディレクトリ内に移動して、以下のコマンドを実行する。

$ tfsec .

....

────────────────────────────────────────────────

  timings
  ──────────────────────────────────────────
  disk i/o             676.749µs
  parsing              69.330377ms
  adaptation           3.278459ms
  checks               11.331875ms
  total                84.61746ms

  counts
  ──────────────────────────────────────────
  modules downloaded   0
  modules processed    8
  blocks processed     248
  files read           27

  results
  ──────────────────────────────────────────
  passed               46
  ignored              0
  critical             14
  high                 16
  medium               2
  low                  11

  46 passed, 43 potential problem(s) detected.

重要度について

tfsecでは、検知結果を4つの重要度でカテゴライズしている。

  • CRITICAL
  • HIGH
  • MEDIUM
  • LOW

-mのオプションで重要度を絞ることができる。

$ tfsec -m CRITICAL

https://dev.classmethod.jp/articles/tfsec-overview-scanning/#toc-6

GitHub Actions

github-actionsにも組み込むことも可能。

name: tfsec
on:
  pull_request:

jobs:
  tfsec:
    runs-on: ubuntu-latest

    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: Run tfsec with reviewdog 
        uses: reviewdog/action-tfsec@master
        with:
          github_token: ${{ secrets.github_token }}
          level: info
          working_directory: my_directory
          reporter: github-pr-review 
          fail_on_error: true
          filter_mode: nofilter

https://sadayoshi-tada.hatenablog.com/entry/2022/03/06/153013

shimakaze_softshimakaze_soft

Grype

Trivyより後発のセキュリティスキャンツール。
SBOMツールであるSyftと連携して動作し、スキャン結果のSBOMファイルへの出力や、SBOMファイルを利用した脆弱性スキャンが可能。

基本的にはTrivyと類似したデータソースになっている。

  • GitHub Advisory Database
  • Open Source Vulnerabilities
  • GitLab Advisories Community
  • NVD
  • 各種OSの脆弱性データベース

Gypeは以下のスキャンに対応している。

  • コンテナイメージ
  • OSパッケージ
  • 言語のパッケージ
  • SBOMファイルのスキャン
    • CycloneDX, SBOM, syft形式のスキャンが可能

https://engineers.ntt.com/entry/2022/12/07/113602

shimakaze_softshimakaze_soft

SQLインジェクション

SQLインジェクションの調査としては、sqlmapというツールがある。実際の攻撃にも使えてしまうため、使い方に注意が必要になる。

https://sqlmap.org

以下で記事も書いた。

https://zenn.dev/shimakaze_soft/articles/0cfab83adf0f71

burp suiteを用いての調査もできる
https://whitemarkn.com/penetrationtest/burpsuite-sqlinjection/#SQLインジェクション セキュリティ_レベルLowの確認