Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
dtls-fuzzer — dtls-fuzzer は、DTLS サーバー実装向けのプロトコル状態ファザーです。 | Kitploit
ツール/GitLabGitLab/pfg666/dtls-fuzzer
ファジングネットワークセキュリティ
GitLabpfg666/dtls-fuzzer

dtls-fuzzer

dtls-fuzzer は、DTLS サーバー実装向けのプロトコル状態ファザーです。

リポジトリを見る
795年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

dtls-fuzzer は、DTLSサーバのプロトコル状態ファジングを実行するJavaツールです。具体的には、以下の機能をサポートしています:

  1. アルファベットを指定すると、ローカルのDTLSサーバ実装のモデルを自動的に生成できます。
  2. テスト(入力のシーケンス)とアルファベットを指定すると、DTLSサーバ実装上でテストを実行できます。
  3. 複数の学習実行を含むバッチ学習タスクを実行できます。

dtls-fuzzer は [TLS-Attacker][tlsattacker] を使用して、DTLSメッセージの生成/解析と状態の維持を行います。
そのために、TLS-Attacker はDTLSサポートのために拡張されています。
dtls-fuzzer は、DTLS拡張を実装した TLS-Attacker の[バージョン3.0b][tlsattackerver] に依存しています。

アーティファクトの内容

アーティファクトには以下が含まれます:

  1. dtls-fuzzer のファイル構造の説明(ソースコードや、論文に表示されているものと一致する実験データを含む)。
  2. 選択したSUT(テスト対象システム)/ DTLSサーバ実装で dtls-fuzzer を評価するためのウォークスルー。

dtls-fuzzer のファイル構造

dtls-fuzzer のルートディレクトリで最も重要なフォルダは:

  1. 'src' — dtls-fuzzer のJavaソースコードを含むディレクトリ。
  2. 'examples' — アルファベット、テスト、仕様(モデル)、および学習実験を開始するために dtls-fuzzer に提供できる引数ファイルの例を含むディレクトリ。このディレクトリ内のファイルは学習実験の入力として使用されます。
  3. 'experiments' — 実験に関するデータを含むディレクトリ。このデータの一部は学習実験の入力としても使用されます。最も注目すべきフォルダは:
    1. 'suts' — Java SUTのバイナリを含む。これらのSUTはカスタムメイドのDTLSサーバプログラムであり、ソースコードは公開されています。
    2. 'patches' — ソースコードのコンパイル前に一部のSUT(特にユーティリティ)に適用されたパッチ。これらのパッチの主な目的は、学習中のタイミングによる動作の防止、SUTの機能の有効化/無効化、事前共有鍵などのパラメータの設定です。
    3. 'keystore' — 学習中に使用される鍵素材(公開鍵-秘密鍵ペア、Javaキーストアなど)。
    4. 'results' — 実験結果。

実験結果

'experiments/results' には実験結果が含まれており、これが作業の主な出力です。特に、

  • 'all_ciphers' には、実行されたすべての実験の出力フォルダが含まれています。
    • 'mapper' には、マッパーの決定の一部を正当化するのに役立つ実験結果が含まれています(セクション5.2を参照)。
  • 'included' には、収束した実験の出力フォルダが含まれています(収束とは、学習が正常にモデルを生成したことを意味します)。
    • 'all_ciphers' 内のすべての実験が成功したわけではなく、最終モデルで終了したわけでもないことに注意してください(そのような場合、学習は収束しなかったと言います)。

出力フォルダ

出力フォルダは実験構成に基づいて命名されています。すなわち:

  • テストされたSUT/実装。
  • 使用されたアルファベット(カバーされる鍵交換アルゴリズムの観点から)。'all' は4つの鍵交換アルゴリズムすべてが使用されたことを示します。
  • 該当する場合、クライアント認証が必要か(req)、オプションか(nreq)、無効か(none)。
  • テストアルゴリズム:ランダムウォーク(rwalk)またはその適応版(stests)。
    • 適応版を使用した実験は論文には含まれていません。
  • オプションで、再送信が出力に含まれているか除外されているか(incl または excl)。
    • デフォルトでは再送信が含まれています。

例として、フォルダ名 'jsse-12_rsa_cert_none_rwalk_incl' は、JSSE 12のDTLS実装での実験を示し、RSAハンドシェイクを実行するための入力を含むアルファベットを使用し、クライアント証明書認証は無効で、テストアルゴリズムはランダムウォーク、再送信が含まれています。

出力フォルダには以下が含まれます:

  • 'alphabet.xml' — 入力アルファベット。
  • 'command.args' — さまざまな実験パラメータを含む引数ファイル。最も注目すべきは:
    • queries — 仮説が最終とみなされるために合格する必要があるランダムウォークテストの数の上限。
    • equivalenceAlgorithms — 採用されたモデルベースのテストアルゴリズム。
    • runWait と timeout — それぞれ開始タイムアウトと応答タイムアウト(後述)。
  • 'sul.config' — TLS-Attacker のSUT依存の設定。同じ設定を使用して、TLS-Attacker 単独でSUT上でワークフロートレースを実行できます。
  • 'hyp[0-9]+.dot' — 中間仮説。
  • 'statistics.txt' — テストの総数、学習時間などの実験統計。
    • 表4にこのデータが表示されています。
  • 'nondet.log' — 遭遇した非決定的動作のログ。
  • 'learnedModel.dot' — 学習が収束した場合、学習されたモデル(最終仮説)。
  • 'error.msg' — 実験が失敗したか、学習が停止されたために最終モデルに収束しなかった場合に生成されるエラーメッセージ。
    • 主な原因は時間に関連する非決定性(同じ入力が異なる結果を引き起こす)です。

評価者は、たとえば 'included' 内の実験結果が表4に表示されているものと一致すること、または表2でテストされた構成が 'all_ciphers' にも現れることを確認できます。 論文に登場するモデルは大幅な枝刈り/トリミングの結果であるのに対し、出力フォルダに現れるモデルは未変更であることに注意してください。

dtls-fuzzer の評価手順

dtls-fuzzer を評価するためには、以下の手順を実行する必要があります:

  1. 前提条件が満たされていることを確認する。
  2. dtls-fuzzer をインストールする。
  3. SUTをセットアップする。
  4. dtls-fuzzer を使用してSUTのモデルを生成する。
  5. 結果を分析する。

この評価セクションの後には、dtls-fuzzer の主なユースケースを紹介する使用方法ガイドがあります。

前提条件の確認

dtls-fuzzer は Ubuntu 18.04 および Debian 9 のLinuxディストリビューションでテストされています。 最近のLinuxディストリビューションであれば動作するはずです。 他のプラットフォームのサポートはテストされていません。 このガイドでは、Debianベースのディストリビューション('apt-get' があるもの)を使用することを前提としています。

Java 8 JDK(Java Development Kit)仮想マシン(VM)が必要です。 実験の実行に使用されたバージョンは1.8.0_222ですが、それ以降のJava 8バージョンでも動作するはずです。 このツールはJava 9以降ではビルドできないことに注意してください。 また、依存関係管理/デプロイのために maven('mvn' ユーティリティ)にも依存しています。

十分に強力なマシンを使用することをお勧めします。そうしないと、応答待機時間などのタイミングパラメータが低すぎて、論文で得られたものと異なる出力が生成される可能性があります。 さらに悪い場合、学習実験が失敗する可能性があります。 元の実験はマルチコアサーバで実行されましたが、i7プロセッサを搭載したデスクトップでも学習が可能であると期待されます(徹底的にはテストされていませんが)。 タイミングパラメータを適切に調整すれば、より弱いシステムでも学習は可能です。 最後に、.dotモデルを.pdfにエクスポートして可視化するには、[graphvizライブラリ][graphviz]のインストールが必要です。 graphvizが提供する 'dot' ユーティリティがシステムのPATHに配置されていることを前提とします。

要約すると、推奨される前提条件は次のとおりです:

  • 最近のLinuxディストリビューション(できればDebianベース)
  • 実験の再現/信頼性の高い学習のためのデスクトップ/サーバマシン
  • (以上)4GB RAM
  • Java 8 JDK
  • maven
  • graphviz

環境のセットアップ

Java 8 JDK

dtls-fuzzer にはJava 8 JDK(Java Development Kit)が必要です。 Javaがインストールされていない場合は、OpenJDK実装を(Ubuntuでは 'apt-get' 経由で)インストールします。このサブセクションの残りはスキップできます。

> sudo apt-get install openjdk-8-jdk

Javaのバージョンがインストールされている場合、次のコマンドでバージョンを確認できます:

> java -version

バージョンコードは1.8で始まる必要があります(例:1.8.0_242)。仮想マシンは「Server VM」である必要があります(フルJDKがインストールされていることを示し、ランタイム環境のみではないことを示します)。 そうであれば、Javaに関しては完了です。 そうでない場合は、Java 8 JDKがプラットフォームにインストールされているが現在選択されていない可能性があります。インストールされているJava VMをリスト表示するには、次のコマンドを使用します:

> update-java-alternatives --list

Java 8 JDKが表示される場合は、同じコマンドを使用してJava 8 JDKをデフォルトのJava実装として構成できます。

> sudo update-java-alternatives --set java-1.8.0-openjdk-amd64

それ以外の場合は、冒頭で示した完全なインストールを実行する必要があります。 残念ながら、'update-java-alternatives' が成功しない場合があり、「error」メッセージが表示されます。 そのような場合は、'update-alternatives' を使用して、'java'(インタプリタ)と 'javac'(コンパイラ)で選択されるJava VMを対話的に構成できます。

> sudo update-alternatives --config java
> sudo update-alternatives --config javac

その他

Java 8が設定されたら、他の依存関係(maven、graphviz、およびいくつかの一般的なSUT依存関係)をインストールします。 次に、dtls-fuzzer のリポジトリを選択したフォルダにクローンし、アーティファクトブランチをチェックアウトします。 最後に、そのフォルダを現在のディレクトリにします。

> sudo apt-get install maven graphviz autotools-dev automake libtool
> git clone  -b usenix20-artifact https://github.com/assist-project/dtls-fuzzer.git ~/dtls-fuzzer
> cd ~/dtls-fuzzer

dtls-fuzzer のインストール

まず 'prepare.sh' スクリプトを実行します。これにより、dtls-fuzzer が依存するライブラリ(2つのローカル.jarとTLS-Attacker 3.0b)がインストールされます。 次に、ツール自体をインストールします。 POSIXシステムでの結果のコマンドは次のようになります:

> bash prepare.sh
> mvn clean install

これらの手順の後、'dtls-fuzzer.jar' を含む 'target' というディレクトリが構築されているはずです。 これが実行可能なライブラリです。 この時点以降、コマンドは dtls-fuzzer のルートディレクトリから実行されることを前提としています。

クイックラン

PSK(事前共有鍵)のみを使用してOpenSSL 1.1.1bのモデルを生成するとします。 dtls-fuzzer のクイックランは次のように進みます。

まず、'setup_sut.sh' スクリプトによって自動的にSUTをセットアップします。

> bash setup_sut.sh openssl-1.1.1b

次に、'args/openssl-1.1.1b' フォルダから引数ファイルを選択します。 いくつかの引数ファイルから選択できることに注意してください。具体的には:

learn_openssl-1.1.1b_all_cert_none_rwalk_incl  
learn_openssl-1.1.1b_all_cert_nreq_rwalk_incl  
learn_openssl-1.1.1b_all_cert_req_rwalk_incl  
learn_openssl-1.1.1b_psk_rwalk_incl

対象の引数ファイルは 'learn_openssl-1.1.1b_psk_rwalk_incl' です。ファイル名がPSKを示しているためです。 したがって、それを選択し、ファザーを実行します。 さらに、学習時間を短縮するために、テスト数を200に制限します。 最後に、OpenSSLの場合、LD_LIBRARY_PATH を実装のディレクトリ ('suts/openssl-1.1.1b/') に設定する必要があります。 学習を実行する前に、セットアップが機能していることを確認するために簡単なテストを実行するとよいでしょう。 適切なテストは、ハンドシェイクを完了することです。 引数ファイルと、'examples/tests' からの対応するテストをパラメータとして指定します。

>  LD_LIBRARY_PATH=suts/openssl-1.1.1b/ java -jar target/dtls-fuzzer.jar @args/openssl-1.1.1b/learn_openssl-1.1.1b_psk_rwalk_incl -test examples/tests/psk

すべてがうまくいけば、サーバは「This is a hello message」と出力するはずです。これはハンドシェイク完了後に送信するメッセージです。 セットアップが機能していることがわかったので、次のコマンドで学習を開始できます:

> LD_LIBRARY_PATH=suts/openssl-1.1.1b/ java -jar target/dtls-fuzzer.jar @args/openssl-1.1.1b/learn_openssl-1.1.1b_psk_rwalk_incl -queries 200

実験の出力ディレクトリ 'output/openssl-1.1.1b_psk_rwalk_incl/' が作成されたことに気づくでしょう。 このディレクトリを 'ls' して、実験の現在のステータス(生成された仮説の数など)を確認できます。

> ls output/openssl-1.1.1b_psk_rwalk_incl/

うまくいった場合

すべてがうまくいけば、20〜30分後に出力ディレクトリに 'learnedModel.dot' ファイルが含まれているはずです。 graphvizの 'dot' ユーティリティを使用してファイルを可視化し、.pdfにエクスポートして、お気に入りの.pdfビューアで開きます。

> dot -Tpdf output/openssl-1.1.1b_psk_rwalk_incl/learnedModel.dot > output/openssl-1.1.1b_psk_rwalk_incl/learnedModel.pdf
> evince output/openssl-1.1.1b_psk_rwalk_incl/learnedModel.pdf

最後に、'trim_model.sh' を使用して、より良い/トリミングされたバージョンのモデルを生成できます。次のように実行します:

> bash trim_model.sh --output output/openssl-1.1.1b_psk_rwalk_incl/nicerLearnedModel.dot output/openssl-1.1.1b_psk_rwalk_incl/learnedModel.dot 
> dot -Tpdf output/openssl-1.1.1b_psk_rwalk_incl/nicerLearnedModel.dot > output/openssl-1.1.1b_psk_rwalk_incl/nicerLearnedModel.pdf
> evince output/openssl-1.1.1b_psk_rwalk_incl/nicerLearnedModel.pdf

これで、モデルを仕様と照合してシステムの適合性を判断できます...

ツールをダウンロード