
Cake Fuzzerは、特定のフレームワークに基づいて作成されたWebアプリケーションの脆弱性を、偽陽性を非常に抑えながら自動的かつ継続的に発見するのに役立つプロジェクトです。
最新リリース: 1.0
ライセンス: GNU GPL v3.0
Cake Fuzzer は、特定のフレームワークに基づいて作成された Web アプリケーションの脆弱性を、非常に少ない誤検知で自動的かつ継続的に発見することを目的としたプロジェクトです。現在は Cake PHP フレームワークをサポートするように実装されています。
調査プロセスの詳細については、次の記事シリーズをご覧ください: CakePHP アプリケーション サイバーセキュリティ調査
以下は、Cake Fuzzer によって発見されたバグの一部です:
| タイトル | 重要度 | リンク |
|---|---|---|
| Cerebrate のブラインド SQL インジェクション | 9.8 Critical | https://zigrin.com/advisories/cerebrate-blind-sql-injection/ |
| CRUD コンポーネントの SQL インジェクション | 8.8 High | https://zigrin.com/advisories/misp-sql-injection-in-crud-component/ |
| DOM ベース XSS | 6.1 Medium | https://zigrin.com/advisories/misp-dom-based-xss/ |
| order パラメータのブラインド SQL インジェクション | 8.8 High | https://zigrin.com/advisories/misp-blind-sql-injection-in-order-parameter/ |
| 配列入力パラメータのブラインド SQL インジェクション | 8.8 High | https://zigrin.com/advisories/misp-blind-sql-injection-in-array-input-parameters/ |
| /Logs/index の Time-based SQL インジェクション | 7.2 High | https://zigrin.com/advisories/misp-time-based-sql-injection-in-logs-index/ |
Webアプリケーションにおける自動ツールを使用した脆弱性発見の典型的なアプローチは次のとおりです:
どちらの方法にも欠点があります。SAST は誤検知率が高く、脆弱性ではないか、悪用可能ではない発見が多いです。DAST は誤検知は少ないものの、情報が限られているため発見される脆弱性は少なくなります。また、アプリケーションに関するある程度の知識と、スキャンを実行する人のセキュリティに関する背景が必要です。多くの場合、アプリケーションごとにカスタムスキャン設定が必要で、適切に動作させるにはそれが必要です。
Cake Fuzzer プロジェクトは、両方のアプローチの利点を組み合わせ、上記の欠点を排除することを目的としています。このアプローチは IAST (Interactive Application Security Testing) と呼ばれます。
プロジェクトの目標は次のとおりです:
注: 一部の脆弱性クラスは Cake Fuzzer の対象外であるため、Cake Fuzzer はそれらを検出できません。そのようなクラスの例としては、ビジネスロジックの脆弱性やアクセス制御の問題があります。

Drawio: Cake Fuzzer アーキテクチャ
Cake Fuzzer は 3 つの主要な (かなり独立した) サーバーで構成され、これらが連携して CakePHP アプリケーションの動的な脆弱性テストを可能にします。
その他のコンポーネントは次のとおりです:
Cake Fuzzer は IAST (Interactive Application Security Testing) の概念に基づいています。事前定義された攻撃セットを含み、実行前にランダムに変更されます。Cake Fuzzer は Cake PHP フレームワークのおかげでアプリケーション内部に関する知識を持っているため、攻撃はアプリケーションのすべての可能なエントリポイントに対して発射されます。
攻撃中、Cake Fuzzer はアプリケーションと基盤システムのさまざまな側面を監視します。たとえば:
これらの情報源により、Cake Fuzzer はより多くの脆弱性を特定し、より高い確実性で報告できます。
以下のセクションでは、ターゲットが CVE-2021-41326 に対して脆弱な古い MISP v2.4.146 である Cake Fuzzer 開発環境をセットアップする手順を説明します。
ホストオペレーティングシステムで以下のコマンドを実行し、古い MISP VM をダウンロードします:
cd ~/Downloads # MISP VM を保存したい場所があれば適宜変更
wget https://vm.misp-project.org/MISP_v2.4.146@0c25b72/[email protected] -O MISP.zip
unzip MISP.zip
rm MISP.zip
mv VMware/ MISP-2.4.146
VMWare GUI で以下の操作を行い、ホスト OS と MISP 間で Cake Fuzzer ファイルを共有できるようにします:
ホスト OS で以下のコマンドを実行します (MISP_IP_ADDRESS を先にメモした IP アドレスに置き換えてください):
ssh-copy-id misp@MISP_IP_ADDRESS
ssh misp@MISP_IP_ADDRESS
MISP に SSH で接続したら、以下のコマンド (MISP ターミナル内) を実行して、ホスト OS と MISP 間での Cake Fuzzer ファイル共有の設定を完了します:
sudo apt update
sudo apt-get -y install open-vm-tools open-vm-tools-desktop
sudo apt-get -y install build-essential module-assistant linux-headers-virtual linux-image-virtual && sudo dpkg-reconfigure open-vm-tools
sudo mkdir /cake_fuzzer # 注: このパスはインストルメンテーション (パッチの 1 つ) にハードコードされているため固定です
sudo vmhgfs-fuse .host:/cake_fuzzer /cake_fuzzer -o allow_other -o uid=1000 -o max_write=61440
# max_write は奇妙なファイルコピーバグを修正します: https://github.com/vmware/open-vm-tools/issues/437#issuecomment-669663891
ls -l /cake_fuzzer # すべてがうまくいけば、ホスト OS の Cake Fuzzer ディレクトリの内容が表示されるはずです。ホスト OS での変更は VM 内に反映され、その逆も同様です。
簡単なテストのために MISP を準備します (MISP ターミナル内):
CAKE=/var/www/MISP/app/Console/cake
SUDO='sudo -H -u www-data'
$CAKE userInit -q
$SUDO $CAKE Admin setSetting "Security.password_policy_length" 1
$SUDO $CAKE Admin setSetting "Security.password_policy_complexity" '/.*/'
$SUDO $CAKE Password [email protected] admin --override_password_change
最後に Cake Fuzzer の依存関係をインストールし、venv を準備します (MISP ターミナル内):
source /cake_fuzzer/precheck.sh
Cake Fuzzer は /cake_fuzzer/strategies フォルダ内の脆弱性をスキャンします。
新しい攻撃を追加するには、strategies フォルダに新しい new-attack.json ファイルを追加する必要があります。
各脆弱性には 2 つの主要フィールドがあります: Scenarios と Scanners。Scenarios は攻撃ペイロードの基本フォームを保存します。一方、Scanners は応答、stdout、stderr、ログ、結果を検出する正規表現やフレーズを保持します。
Scenarios のペイロード作成ペイロードを作成するには、まず脆弱性と、可能な限り少ないペイロードでそれを検出する方法を理解する必要があります。
__cakefuzzer__new-attack_§CAKEFUZZER_PAYLOAD_GUID§__ のようなカナリア値を使用することをお勧めします。
カナリア値には固定文字列 (例: __cakefuzzer__new-attack_) と、ファザーによって動的に変更される動的識別子 (GUID 部分 §CAKEFUZZER_PAYLOAD_GUID§) が含まれます。最初のカナリア部分は、ペイロードが Scanners によって検出されることを保証するために使用されます。2 番目のカナリア部分 (GUID) は、ペイロードが実行されるたびに擬似ランダム値に変換されます。したがって、ペイロードがアプリケーションで使用されるパラメータに注入されるたびに、カナリアは __cakefuzzer__new-attack_8383938__ のように変更され、8383938 は他のすべての攻撃間で一意になります。Scanners の検出と生成スキャナーを作成するには、まず脆弱性がトリガーされたときにアプリケーションがどのように動作するかを理解する必要があります。利用できるスキャナーの種類には、response、sterr、logs、files、processes などがあります。各スキャナーは異なる目的を果たします。
たとえば、XSS のスキャナーを構築する場合、アプリケーションの HTML 応答内で脆弱性の兆候を探します。ResultOutputScanner スキャナーを使用してカナリア値とペイロードを探すことができます。一方、SQL インジェクションの脆弱性はエラーログを介して検出できます。その目的には LogFilesContentsScanner と ResultErrorsScanner を使用できます。
Scanner 正規表現の最後の属性は、効率的な正規表現を生成することです。すべてのケースに一致する .* や .+ のような正規表現は避けてください。これらは非常に時間がかかり、スキャン全体の完了時間を大幅に増加させます。前述のように、効率性は脆弱性の重要な部分です。Scenarios と Scanners はどちらもできるだけ少ない要素を含む必要があります。これは、Cake Fuzzer がすべてのシナリオを検出されたすべての可能なパスで複数回実行するためです。一方、すべての応答、新しいログエントリなどがスキャナーによって常にチェックされます。多くのパラメータ、パス、エンドポイントが検出されるため、ペイロードや Scanner を多く使用すると効率にかなり影響します。
特定の脆弱性クラスをスキャンしたくない場合は、指定された json ファイルを strategies フォルダから削除し、データベースをクリーンアップして、ファザーを再度実行します。
たとえば、アプリケーションを SQL インジェクション脆弱性に対してスキャンしたくない場合は、次の手順を実行します:
まず、準備された攻撃シナリオを削除します。これを達成するには、/cake_fuzzer/databases フォルダ内のすべてのファイルを削除します:
rm /cake_fuzzer/databases/*
その後、/cake_fuzzer/strategies から sqlinj.json ファイルを削除します:
rm /cake_fuzzer/strategies/sqlinj.json
最後に、SQL インジェクション攻撃を実行せずにファザーとすべての cake_fuzzer 実行プロセスを再実行します。
git clone https://github.com/Zigrin-Security/CakeFuzzer /cake_fuzzer
警告 Cake Fuzzer が
/cake_fuzzer以外のパスにある場合、正しく動作しません。ファイルシステムのルートディレクトリの下、/root、/tmpなどの隣に配置する必要があることに注意してください。
cd /cake_fuzzer