コードを手動で読むのは時間のかかる作業です。また、重要な詳細を見逃しやすいため、エラーが発生しやすくなります。開発者や侵入テスト担当者は、このプロセスを自動化する方法を見つける必要があります。SAST は、この作業に役立つ技術です。
SAST は万能薬ではありません。オープンソース プロジェクトのソース コードにアクセスできるユース ケースやホワイト ボックスの侵入テストでのみ使用できます。ただし、簡単に実行できる解決策を見つけて時間を節約するのに役立ちます。
静的アプリケーション セキュリティ テスト (SAST) は、コードのセキュリティと信頼性を高めるために使用される静的コード分析のサブセットです。SAST は、古い依存関係、シークレット検出、脆弱性につながる論理エラーなどを検出します。SAST には、視覚的なコードの複雑さ、コードのあいまいさ、脆弱性につながる可能性のある直感的でないプラクティスなど、サイバーセキュリティに二次的に影響を与えるテストが含まれます。
SAST ツールは通常、コード内の既知の脆弱性を探す強化版の正規表現パターン マッチャーです。たとえば、SAST ツールは Python コード内のeval
、 exec
、 pickle
の使用を探すことがありますが、これらの関数は任意のコードを実行するために使用できます。
SAST に対する私のアプローチは、次の 3 つのカテゴリに分類できます。
脆弱性検出: Semgrep 、 Bandit 、 Nodejsscanなどのツールを使用して、コード内の攻撃ベクトルを見つけます。通常、サニタイズされていない入力、不適切な暗号化、脆弱なライブラリなど、簡単に見つけられるものを見つけることができます。ちなみに、Semgrep PRO バージョンにはより多くのルールがあり、プロジェクトの開発者が 10 人以下の場合は無料です。
シークレット検出: Gitleaks 、 Trufflehog 、またはGrep を使用すると、コード内のシークレットを見つけることができます。シークレットは権限の昇格や機密データへのアクセスに使用される可能性があるため、これは重要です。通常、データベース接続文字列、API キー、またはパスワードがコードに保存されます。
誤った設定: CheckovやTrivyなどのツールは誤った設定を見つけるのに役立ちます。誤った設定は通常、「インフラストラクチャ アズ コード」(IaC) ファイルにありますが、コード自体にある場合もあります。例としては、データベースをインターネットに公開する誤った設定の docker-compose ファイルがあります。Dockerfiles をスキャンするには、 hadolintとgrypeの組み合わせをお勧めします。
SAST ツールは完璧ではありません。誤検知や誤検知が発生します。**ただし、一部のアプリケーションをランダムに悪用するのに比べると、大幅に時間を節約できます。私は侵入テストの取り組みやコンテストで SAST ツールを使用しました。コードベースの開始に役立ち、脆弱性を探す場所についてのヒントも得られました。
Hack The Boxから始めることをお勧めします。このプラットフォームでは、ソースコードの取得や脆弱性の発見などの課題が用意されています。その後、実際のマシンで脆弱性を悪用します。これは、SAST ツールを実際に使用する方法を学ぶのに最適な方法です。
あるいは、開発者であれば、CI/CD パイプラインで SAST ツールを使用できます。こうすることで、ツールとその出力に慣れることができます。同時に、アプリケーションのセキュリティも向上します。
SAST とシークレット検出を始めるのに役立つガイドのリストを用意しました。これらのガイドは私の論文の一部として書かれたもので、SAST ツールに興味のある人にとって素晴らしい出発点となります。
秘密を検出するときは、ハッカーが知っていれば秘密ではないということを覚えておいてください。熟練した開発者でも、誤ってパスワードや接続文字列をリモート ソース管理にプッシュしてしまう可能性があります。このガイドでは、さまざまなツールを使用して、このリスクを軽減するための迅速かつ簡単な方法を紹介します。
このガイドでは、コミット前のフックと CI/CD パイプラインを使用したシークレット検出の理解に焦点を当てています。コードは主に GitLab に焦点を当てていますが、最後のセクションでは GitHub についても説明します。
このガイドでは、GitLab で静的アプリケーション セキュリティ テスト (SAST) を開始するための手順を効率的に概説します。SAST は、静的コード分析を使用して潜在的な脆弱性を特定するプロセスです。
このチートシートでは、Infrastructure as Code (IaC) 成果物をスキャンするための便利なツールを紹介し、それらを CI/CD パイプラインに統合する方法の例を示します。
私は、巨大なコードベースに対して正規表現を素早く照合するのに役立つカスタム ツールを Golang で作成しました。
精度と分散の間には無限のトレードオフがあります。
より多くのバリエーションが必要で、手動によるレビューが増えても構わないとします。その場合、 RegFinder を試すことができます。これはgrep
に似ていますが、秘密の検出により適しています (大きなリポジトリでより高速、出力が明確、一部のファイル拡張子が無視されます)。または、 grep を直接使用することもできます。最も価値があるのはリポジトリ内の正規表現であり、使用するツールではありません。
grep -n -r your_app/ -Ef regex_dir/general.txt
を実行します。または
./regfinder.elf -d your_app/ -f regex_dir/general.txt
を実行します。既存の正規表現パターンを拡張するのは簡単です。このツールは自動化されたパイプラインには適していません。ただし、標準以外のシークレットを見つける必要がある場合や、セキュリティ レビューなど、より多くの手作業が予想されるその他の評価では便利です。
他のツールで素晴らしい経験をお持ちの場合はコメントしてください。読んでいただきありがとうございます。