0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのセキュリティを静的解析で殴る ― Bandit入門

0
Posted at

「いや、セキュリティ? ウチの案件にはそんな高度な攻撃とか来ないから大丈夫っすよ」

そう思ってる人、まだまだ多いですよね。

でも現実はどうでしょう。
普段書いているPythonコードに、うっかりセキュリティ事故が埋め込まれていることは珍しくありません。
eval()os.system() のような関数、レビューで気づける自信はありますか? 人間は忘れるし、見落とすこともあります。

そこで登場するのが Bandit です。


Banditとは?

  • OpenStack セキュリティチームが開発した Python用静的解析セキュリティツール
  • ソースコードを実行せずに解析し、「ここ危ないよ」と指摘してくれる
  • Linterのように見えるが、ターゲットは完全に「セキュリティ」

要するに セキュリティ専用のFlake8 みたいな存在です。


Banditが見つける脆弱性例

  • 危険な関数の利用
    • eval(), exec()
    • pickle.load() で任意コード実行される可能性
  • 弱い暗号・ハッシュ
    • md5, sha1 の使用
  • ハードコードされた秘密情報
    • パスワードや鍵をコードに直書き
  • OSコマンド実行
    • os.system()subprocess の危険な呼び出し
  • Webアプリ関連
    • Flask/Djangoでデバッグ設定がオン
    • 安全でないテンプレート呼び出し

使い方

インストール

pip install bandit

単一ファイルをチェック

bandit app.py

プロジェクト全体を再帰的にチェック

bandit -r .

JSON形式で出力(CI/CD用)

bandit -r . -f json -o result.json

出力例

>> Issue: [B303:blacklist] Use of insecure MD5 hash function.
   Severity: Medium   Confidence: High
   Location: app.py:42

app.py の42行目で「MD5使うな」と怒られています。


なぜBanditを使うべきか?

人間のレビューだけに頼ると、どうしても見落としが発生します。
Banditを使えば、危険な書き方を自動で検出し、CIが赤くなることで「レビュー前に気づく」仕組みが作れます。


pip-auditとの違い

  • pip-audit → 依存ライブラリの脆弱性をチェック
  • bandit → 自作コードの危険な書き方をチェック

つまり 外はpip-audit、内はBandit で守る構図です。


CI/CDへの組み込み例(GitHub Actions)

name: Security Scan

on: [push, pull_request]

jobs:
  bandit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install bandit
        run: pip install bandit
      - name: Run bandit
        run: bandit -r . -f json -o bandit-report.json

プルリクを出すたびにBanditが走り、「危険なコード混入」を自動監視できます。


まとめ

  • Bandit = Pythonコードの静的解析で脆弱性検知
  • eval, md5, os.system などを指摘
  • pip-auditと組み合わせると「外も内も守れる」
  • CIに組み込むとレビュー効率が大幅アップ
  • セキュリティは「気合い」ではなく「自動化」で守る

「Banditなんかいらない。俺のレビューで十分」

そう言う人ほど、次の障害の震源地です。

セキュリティは 思い込みを信用せず、仕組みで守る のが基本。
Banditを導入して、まずは自作コードの安全性を可視化しましょう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?