
自動的にアクティブスキャンとパッシブスキャンを使用して、Javaおよび.NETアプリケーションにおけるデシリアライゼーションの問題を特定します。
シリアライゼーションライブラリ/APIの検出および悪用を支援するBurp Suite拡張機能です。
この便利な拡張機能は、もともとNCC GroupのNick Bloor(@nickstadb)によって開発され、主にAlvaro MuñozとOleksandr Miroshの研究、Friday the 13th: JSON Attacks(Black Hat USA 2017およびDEF CON 25で発表)に基づいています。彼らの研究では、Javaおよび.NET向けのさまざまなJSONおよびXMLシリアライゼーションライブラリを調査し、その多くが任意のランタイムオブジェクトのシリアライゼーションをサポートしており、その結果、多くのシリアライゼーション技術と同様に脆弱であることが判明しました。デシリアライゼーション中またはその直後に実行されるコードスニペット(POPガジェット)は、シリアライズされたオブジェクトのプロパティを使用して制御可能であり、多くの場合、任意のコードまたはコマンド実行の可能性が開かれます。
さらに、YAMLやAMFを含むより多くのフォーマットをサポートするモジュールも含まれています。これらはMoritz Bechlerによる論文Java Unmarshaller Security - Turning your data into code executionおよびツールmarshalsecに基づいています。
このBurp Suite拡張機能は、脆弱なライブラリを特定して悪用するためのパッシブスキャンとアクティブスキャンの両方を実装しています。
Freddyは、HTTPリクエスト内の型指定子やその他のシグネチャを監視し、HTTPレスポンスで対象ライブラリによって発行された例外を監視することにより、危険な可能性のあるシリアライゼーションライブラリおよびAPIの使用をパッシブに検出できます。例えば、FastJsonライブラリは、JSONフィールド$typesを使用してシリアライズされたオブジェクトの型を指定します。
Freddyは、影響を受けるライブラリを検出し、可能な場合は悪用するアクティブスキャン機能を含んでいます。
アクティブスキャンは、3つの方法(例外ベース、時間ベース、Collaboratorベース)を使用して脆弱なライブラリの使用を検出しようとします。
例外ベースのアクティブスキャンでは、Freddyは既知のターゲット固有の例外またはエラーメッセージをトリガーするデータをHTTPリクエストに挿入します。このエラーメッセージがアプリケーションのレスポンスで観測された場合、問題が報告されます。
場合によっては、時間ベースのペイロードを検出に使用できます。これは、デシリアライゼーション中にオペレーティングシステムのコマンド実行がトリガーされ、このアクションがOSコマンドの実行が完了するまで実行をブロックするためです。Freddyは、これらのケースで時間遅延を誘発するために、ping [-n|-c] 21 127.0.0.1を含むペイロードを使用します。
Collaboratorベースのペイロードは、Burp Suite Collaboratorが生成したドメイン名を解決するためのnslookupコマンドを発行するか、またはそのドメイン名からJavaアプリケーションにリモートクラスをロードしようとすることで機能します。Freddyは60秒ごとに新しいCollaboratorの問題をチェックし、問題リストにRCE (Collaborator)としてマークします。
現在、以下のターゲットがサポートされています(斜体はv2.0の新機能です)。
Java
.NET
AGPL-3.0ライセンスの下で公開されています。詳細はLICENSEを参照してください。
Freddyはgradleビルドシステムを使用しています。jarをビルドするには、ルートディレクトリでgradle jarを実行するだけです。これによりテストが実行され、すべてが正しければbuild/libsディレクトリにjarファイルが作成されます。