Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/raytheonbbn/maude-hcs
ネットワークセキュリティステガノグラフィープライバシー論文と研究学習と教育DNS分析
GitHubraytheonbbn/maude-hcs

maude-hcs

隠れた通信システムのための形式的モデリングおよび解析フレームワーク。これにより、隠れチャネル、敵対者モデルの仕様記述、そして不可検出性とパフォーマンスのトレードオフに関する統計的モデル検査が可能になります。

リポジトリを見る
52171ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

Maude-HCS

Maude-HCSは、現実世界の規模で隠蔽通信システム(HCS)を形式的に仕様化し、推論するための、最初の汎用的かつモジュラーなツールチェーンの一つです。これにより、ネットワーク設計者は代替HCS設計を迅速かつ効果的に探求でき、設計を信頼するために必要な形式的なプライバシーとパフォーマンスの保証を提供します。

Introduction

隠蔽通信システム(HCS)は、通常のネットワーク活動内に秘密のメッセージを埋め込み、通信の存在を隠します。実際には、HCSの検出不能性は、通常、アドホックなトラフィック統計や特定の検出器を用いて評価されるため、セキュリティの主張は実験設定や暗黙の敵対的仮定に強く結びついています。

Maude-HCSは、複雑なHCS設計における検出不能性とパフォーマンスのトレードオフを推論するための、原則に基づいた実行可能な基盤を提供する実行可能なモデリングおよび解析フレームワークです。設計者は、プロトコルの動作、敵対者の観測可能量、環境の仮定を形式的に指定し、誘導されたトレース分布からモンテカルロサンプルを生成します。これらは、統計的検定の真陽性率と偽陽性率を推定し、これらの推定値を検出不能性尺度の下限に変換することで、検出不能性の主張を監査するために使用できます。これにより、明示的に述べられたモデリング仮定の下で、検出可能性とそのパフォーマンスとのトレードオフを体系的に評価することが可能になります。

HCSのモデリングと推論に関して支援が必要な場合は、お気軽にお問い合わせください。また、研究の一部として本ツールを使用される場合は、引用をご検討ください。```bibtex @article{khoury2026maude, title={Maude-HCS: Model Checking the Undetectability-Performance Tradeoffs of Hidden Communication Systems}, author={Khoury, Joud and Kim, Minyoung and Merlin, Christophe and Meseguer, Jos{'e} and Ratliff, Zachary and Talcott, Carolyn}, journal={arXiv preprint arXiv:2603.03369}, year={2026} }

root@kitploit:~
## 要件
Python バージョン `3.12.4` が必要です

お好みの環境を作成し、アクティベートしてください。例えば、

pyenv の場合```bash
pyenv install 3.12.4
pyenv local 3.12.4

conda の場合```bash conda create --name pwnd2 python=3.12.4 conda activate pwnd2

root@kitploit:~
仮想環境用```bash
python -m venv venv
source venv/bin/activate

インストール: git ソースから

リポジトリのソースコードは、次のように構成されています。 依存関係(サブモジュール)として dns-formalization-maude をインポートします。 この依存関係のフォークを作成して、 それへの変更を追跡できるようにしました。 スパースチェックアウトを使用して、依存関係のソース全体をチェックアウトする必要を回避します。 依存関係には、多くの無関係なファイル(Testbedなど)が含まれています。```shell git clone [email protected]:raytheonbbn/maude-hcs.git

root@kitploit:~
メインブランチには最新(不安定な可能性あり)のソースがあります。
`pwnd.cp1` などの古いブランチ/タグは、評価中に結果を生成するために使用された安定したスナップショットを指します。
(例:`pwnd.cp1` はチャレンジ問題1に使用され、同様に `pwnd.cp2` も同様です。)
古いスナップショットを使用するには、特定のブランチ(例:`pwnd.cp1`)をチェックアウトしてください。

コードのクローンを使用して dns サブモジュールをセットアップし、元のソースへの変更を追跡できるようにします。スパースチェックアウトを使用して関連するソースのみを保持します。```shell
cd maude-hcs
mkdir -p maude_hcs/deps
git submodule add -b <branch> -f [email protected]:raytheonbbn/dns-formalization-maude.git \
  maude_hcs/deps/dns_formalization
cd maude_hcs/deps/dns_formalization
git sparse-checkout init --cone
git sparse-checkout set "Maude/dns" "Maude/common" "Maude/test" "Maude/attack_exploration"
cd ../../../
git reset .gitmodules
git reset maude_hcs/deps/dns_formalization

上記のコマンドで、<branch> を pwnd.43.rb1 に設定するとチャレンジ問題1の結果を再現でき、 または pwnd に設定すると最新バージョンを使用できます。

上記の操作により、sparse-checkout という名前の新しいファイルが .git/modules/maude_hcs/deps/dns_formalization/info/ の下に作成され、Maude/src などの特定のディレクトリのみを含むように指示されます。

この時点で git status はクリーンな状態を示すはずです。

インストールするには、まず依存関係を dns というパッケージとしてインストールし(Maude.* としてインポート)、 次に maude_hcs を(dns に依存する)パッケージとしてインストールします。```shell cd maude_hcs/deps/dns_formalization pip install -e . cd ../../../ pip install -e .

root@kitploit:~
## ユーザーモデルの自動生成

ユーザーモデルは、ユーザーの行動を表現するためのマルコフモデルです。
これらはJSON形式で提供されます。
最初のステップは、これらを正式なMaude表現に変換することです。

そのためには、以下を指定します。
 - プロトコル:dns または mastodon
 - 変換したいすべてのJSONモデルを含む入力ディレクトリ
 - すべてのJSONモデルのMaude版を含む出力ディレクトリ

例として、```shell
# convert dns tgen user models
 maude-hcs --verbose \ 
    --protocol=dns markov \
    --json-dir=../pwnd-cp2/src/static/tgen_models/dns/ \ 
    --maude-dir=./maude_hcs/lib/tgen/maude/dnsprofiles/markov/
    
# convert mastodon tgen models
maude-hcs --verbose \
    --protocol=mastodon markov \
    --json-dir=../pwnd-cp2/src/static/tgen_models/mastodon \
    --maude-dir="./maude_hcs/lib/raceboat/maude/mastodonprofiles/"

./maude_hcs/lib/tgen/maude/dnsprofiles/markov/以下にあるマルコフJSON仕様の例(mastodonについても同様)と、それらから変換されたMaude仕様を参照してください。

HCS設定の自動生成

generateコマンドを使用して初期設定を生成します。 HCS設定は、HCS設定パラメータを使用してJSONで直接渡すか、Shadow実験設定ファイルを使用するか、YML設定ファイルを使用して渡すことができます。それぞれについては以下で説明します。

HCS json設定を使用する

maude-hcs json設定ファイルを以下のように渡します。

iodineを使用した確率的DNSモデル設定を生成し、出力ファイル名を指定するには、```shell maude-hcs --verbose generate
--run-args="./use-cases/challenge-problem-2/cp2_scenarios/cp2_scenario_1-hcsconfig.json"
--model=prob
--filename="cp2_scenario_1"
--output-dir="./use-cases/challenge-problem-2/cp2_scenarios/"

root@kitploit:~
`--model=nondet` を設定して、非決定論的バージョンを生成します。

これにより、出力ディレクトリに実行可能な maude ファイル(および対応する HCS 設定 json)が生成されます。
入力 JSON 設定ファイルは、すぐに理解できるはずです。以下の仕様が含まれています。
 * ネットワークトポロジ(リンクとその特性)
 * 敵対者(この場合、zeek 検出器プロファイル、移動平均検出器のベースラインデータ、およびそれらの設定)
 * チャンネル/プロトコル:各プロトコルは、奇妙なネットワークと基礎となるネットワークプロトコルを含みます。前者は後者にデータを隠蔽/埋め込みます。例えば、Iodine は DNS に埋め込みます(そのためチャンネルは iodine-dns と呼ばれます)、Destini は Mastodon に埋め込みます。

一部のパラメータの説明については、[HCSParamsGuide](https://github.com/raytheonbbn/maude-hcs/blob/HEAD/HCSParamsGuide.md) を参照してください。
確率的モデルは、非決定論的パラメータと確率的パラメータ(非決定論的パラメータを上書きする)を組み合わせることに注意してください。

### YML 設定の使用
#### 単一設定
YML 設定には、トンネルと基盤ネットワークの完全な設定が含まれています。
これから直接 HCS 設定を生成できます。```shell
 maude-hcs --verbose  generate --yml-filename=./use-cases/challenge-problem-2/cp2_setup_example.yml     --model=prob --filename=generated_test_yml

CP2のバッチ構成

CP2のようなバッチ構成の場合、複数のYMLファイルをMaudeシナリオファイルに変換します:```shell ./scripts/generate_cp2_maude.sh [scenario_dir]

root@kitploit:~
`scenario_dir`はオプションです(デフォルトは`../pwnd_cp2`)

### Shadow yaml設定を使用する
ネットワーク設定は、HCS設定JSONの代わりにshadowファイルを使用して指定できます。
(詳しいshadow仕様については、[Shadow](https://github.com/shadow/shadow)シミュレーターを参照してください)。

shadowファイルで定義された特性を使用するモデルを生成するには、以下を指定します。```shell
--shadow-filename <path_to_shadow_file.yaml>

shadow yaml ファイルは、ネットワーク、ホスト、プロセス構成を指定します。

shadow ネットワーク設定がディレクトリ ../pwnd-cp1 に配置されていると仮定して、実行```shell maude-hcs --verbose --protocol=dns generate --shadow-filename=../pwnd-cp1/shadow_files/examples/cp1_sim_config.yaml --model=prob --filename=generated_test_shadow

root@kitploit:~
## HCS設定の実行

### Maudeを使ったスタンドアロン実行

スタンドアロンのMaudeで設定を実行するには、まずお使いのシステムに[standalone maude](https://github.com/maude-lang/Maude)をインストールしてください(バージョン3.5.0以下を推奨します)

単一の設定を実行するには、ファイル名を指定してmaudeを起動します。例えば、`results`内で、```shell
maude ./use-cases/challenge-problem-2/cp2_scenarios/cp2_scenario_1.maude

Maude プロンプト内で、入力します```shell rew initConfig .

root@kitploit:~
これは、ルールが見つからなくなり、進行ができなくなるまで、すべての書き換えを実行します。

ログの追加により、実行の冗長性が増加します```shell
set print attribute on .

実行は以下のコマンドでステップ実行することもできます(maude マニュアルを参照)```shell rew[1] initConfig . cont 1 .

root@kitploit:~
### Statistical Model Checking

統計的モデル検査は、[QMaude](https://github.com/fadoss/umaudemc) の scheck サブコマンドを利用して行えます:```shell
maude-hcs scheck [-h] [--advise] 
                 [--protocol {dns}] [--file FILE] [--test TEST] [--initial INITIAL] [--query QUERY] 
                 [--assign METHOD] [--alpha ALPHA] [--delta DELTA] 
                 [--seed SEED] [--jobs JOBS] [--format {text,json}]

options:
  --help, -h              Show help message and exit
  --advise                Do not suppress debug messages from Maude  
  --protocol PR           The protocol module being analyzed e.g., dns, which points to an smc file specific to that protocol. 
  --file FILE             Maude source file specifying the model-checking problem. If --protocol is specified, this parameter becomes optional, and if specified overrides the protocol smc file.
  --test TEST             Test generated from maude-hcs, default=results/generated_test.maude
  --initial INITIAL       Initial term, default=initConfig
  --query QUERY           QuaTEx query, default=smc/query.quatex
  --assign METHOD         Assign probabilities to the successors according to the given method, default=pmaude
  --alpha ALPHA, -a ALPHA Required significance level for the confidence interval, default=0.05
  --delta DELTA, -d DELTA Maximum admissible radius for the confidence interval around the mean, default=0.5
  --seed SEED, -s SEED    Random seed
  --jobs JOBS, -j JOBS    Number of parallel simulation threads, default=1, -j 0 will start as many jobs as CPU units
  --format {text,json}    Output format for the simulation results, default=text
  --distribute WORKERS    Distribute the computation across multiple machines, specified as a list of workers for the simulation.
  --dump OUTPUTFILE       Dump query evaluations into the given file. Currently, it only works with the sequential version (-j 1).
                          For each simulation, a line is written with the result of all queries separated by space. 
  -D D                    Define a constant to be used in QuaTEx expressions.

上記のコマンドで生成されたファイルのSMC実行例は以下の通りです:```shell maude-hcs scheck --test ./use-cases/challenge-problem-2/cp2_scenarios/cp2_scenario_1.maude --query ./smc/cp2_eval_cp2_scenario_1.quatex -j 0 -n 30-120

root@kitploit:~
確率的モデルとその初期設定は、Maudeで指定し、``--test TEST`` オプション(デフォルト: ``results/generated_test.maude``)を介して提供する必要があります。  
Maudeの実行は、``--initail INITIAL`` オプション(デフォルト: ``TEST`` で指定された ``initConfig``)を介して提供された初期項から開始し、最終構成まで書き換えます。  
最終構成から、オブザーバブルは、モデル検査問題用のMaudeソースファイル(``--file FILE`` オプションで提供)または ``--protocol PR`` オプションで指定されたモニターと敵対者アクターを使用して抽出されます。  
例えば ``--protocol dns`` は、`lib/` の下でdnsプロトコル専用に作成されたモデル検査ファイルを参照します。

平均レイテンシの期待値などの量的特性は、QuaTEx式を使用して指定し、``--query QUERY`` オプション(デフォルト: ``smc/query.quatex``)を介して提供できます。  
流出ファイルの観点でのレイテンシおよびスケーラビリティ指標の例は、``smc/latency.quatex`` および ``smc/scalability_cp2_scenario_1.quatex`` で定義され、``smc/cp2_eval_cp2_scenario_1.quatex`` にインポートされ、次の形式のQuaTEx式で表現できます。```shell
Latency() = s.rval("getLatency(getMonitor(C))");
eval E[Latency()] with delta = 2;

ExfilFilesC2() = 
	if (s.rval("getToDCumulativeNQueryPostNAT(C,416)") == 0.0) then 
		discard
  else 
		s.rval("getExfilFiles(getMonitor(C), getToDCumulativeNQueryPostNAT(C,416))") 
	fi;
eval E[ExfilFilesC2()];

式 Latency() は、モニターからレイテンシ値を抽出し、delta = 2 でその期待値を評価します。
式 ExfilFilesC2() は、流出したファイルの数を条件付きで評価します。
NAT後のDNSクエリの累積数に基づく検出時間がゼロの場合(つまり、累積クエリ数がしきい値(上記の例では416など)を超えないために検出が発生しないことを意味します)、サンプルは破棄されます。それ以外の場合は、検出時点までの流出ファイル数が評価されます。

サンプリングは、指定されたサンプル数(すなわち、-n min-max オプション、例:-n 30-300)に達するか、すべてのクエリが所望の統計的有意性で回答されるまで続行されます。
以下の例では、2番目のクエリはデフォルト値のalpha=0.05およびdelta=0.5を使用して30サンプル後に回答され、一方、1番目のクエリは上記で指定された with delta = 2 を使用して270サンプル後に回答されます。

出力には以下が含まれます:

  • mu: 標本平均(期待値)
  • sigma: 標本標準偏差
  • r(信頼半径): 指定されたalphaに対するmuの誤差範囲、すなわち mu ± 半径、信頼度 (1-alpha)```shell step=30 n=30 30 μ=191.13112908653187 8.066666666666666 σ=20.074331354964382 1.048260737942926 r=7.495878519259243 0.391426992470463 step=60 n=60 30 μ=191.73987197380484 8.066666666666666 σ=18.784008301748255 1.048260737942926 r=4.852423885397848 0.391426992470463 step=90 n=90 30 μ=191.0827655561146 8.066666666666666 σ=17.597893935302075 1.048260737942926 r=3.6858075268606814 0.391426992470463 step=120 n=120 30 μ=191.28516943859958 8.066666666666666 σ=16.712118022094398 1.048260737942926 r=3.0208416995911134 0.391426992470463 step=150 n=150 30 μ=191.81314662826944 8.066666666666666 σ=16.539151183097196 1.048260737942926 r=2.6684398888965446 0.391426992470463 step=180 n=180 30 μ=190.8746803932425 8.066666666666666 σ=16.936122821805657 1.048260737942926 r=2.4909903998666914 0.391426992470463 step=210 n=210 30 μ=191.46358580546917 8.066666666666666 σ=16.52110171477275 1.048260737942926 r=2.24749940416632 0.391426992470463 step=240 n=240 30 μ=191.56944900796088 8.066666666666666 σ=16.513730454991496 1.048260737942926 r=2.0998701423425232 0.391426992470463 step=270 n=270 30 μ=191.8095651355114 8.066666666666666 σ=16.62555049424396 1.048260737942926 r=1.9920516750753852 0.391426992470463 Number of simulations = 270 Query 1 (./smc/readme.quatex:5:1) μ = 191.8095651355114 σ = 16.62555049424396 r = 1.9920516750753852 Query 2 (./smc/readme.quatex:6:1) (30 simulations) μ = 8.066666666666666 σ = 1.048260737942926 r = 0.391426992470463
root@kitploit:~
上記のQuaTExの式のしきい値を500に変更すると、一部のサンプルが破棄されます。  
結果は破棄されたサンプル数とともに報告され、統計的保証は以下のように残りのサンプルを使用して計算されます。```shell
Number of simulations = 270
Query 1 (./smc/readme.quatex:7:1)
  μ = 191.80187664851906        σ = 16.429217228790975        r = 1.9685272804723886
Query 2 (./smc/readme.quatex:8:1) (39 simulations)
  μ = 9.76923076923077          σ = 0.48458003855418535       r = 0.1570826767676969
  where 21 executions out of 60 (35.0%) have been discarded

同じ並列化設定(つまり、-j の同じ値)で同じ実験を再現するには、同じ乱数シードを指定して --seed オプションを使用します。デフォルトまたは ‑1 を渡すと、現在時刻がシードとして使用されます。```shell

maude-hcs scheck --seed 0

Number of simulations = 30 μ = 1.5301530777180123 σ = 3.9683630959745835e-05 r = 1.481811132921282e-05

maude-hcs scheck --seed 0

Number of simulations = 30 μ = 1.5301530777180123 σ = 3.9683630959745835e-05 r = 1.481811132921282e-05

maude-hcs scheck --seed 0 -j 4

Number of simulations = 30 μ = 1.5301436629475402 σ = 5.0836982397393854e-05 r = 1.8982841201450367e-05

maude-hcs scheck --seed 0 -j 4

Number of simulations = 30 μ = 1.5301436629475402 σ = 5.0836982397393854e-05 r = 1.8982841201450367e-05

root@kitploit:~
### テスト自動化
runexp.shは、生成とSMC分析を組み合わせた自動化スクリプトです。必須の引数を2つ取ります:```shell
runexp.sh CONFIG_FILENAME METRIC

where 
  CONFIG_FILENAME is the name of the .yaml shadow file defining the experiment
  METRIC is the quatex property and can be latency, throughput, goodput, or all

分散SMCの実行

SMCは、マシン上のすべてのコアを使用して高度に並列化可能であり、前述の-j 0オプションを使用することでモンテカルロサンプリングにおいてほぼ線形の速度向上が得られます。 QMaudeは、分散SMCを使用することでマシン間でのさらに高い並列性を可能にします(この機能は現在も活発にテスト中です)。

分散SMCを実行するには、以下のようにして1つ以上のワーカーを起動する必要があります。

root@kitploit:~
$ umaudemc sworker -a 127.0.0.1 -p 1234
👂 Listening on 127.0.0.1:1234...

新しいsworkerコマンドの唯一のオプションは、アドレス(-a)とポート(-p)です。コントローラからの接続を待機し続けます。

コントローラ側では、通常のscheckコマンドに追加オプション--distribute <file>を付けて実行できます。例えば、

root@kitploit:~
$ maude-hcs scheck --distribute workers.json

workers.jsonファイル(TOMLまたはYAMLも可能)は、シミュレーションのワーカーリストを指定します。このファイルは、workersキーを持つ辞書で、その値は{ "workers": [ {"address": "127.0.0.1", "port": 1234} ] }という形式のリスト、または単に{ "workers": [ "127.0.0.1:1234" ] }という形式でなければなりません。それ以外の点では、オプションと出力は通常のscheckコマンドと同じです。

scheckコマンドはリモートワーカーに接続し、必要な情報をすべて渡してアクティベートし、規定の信頼水準に達するまで結果を処理します。ワーカーが動作する各マシンに手動でファイルをコピーする代わりに、ファイルは接続を通じて送信されます。Maudeのインクルードは解決され、フラット化されたバージョンのMaudeソースが送信されます。

QMaudeをスタンドアロンテストで実行する

QMaudeは、同一形式のモデルに対する統計的モデル検査(SMC)を提供します。 latency.quatexとsmc.maudeを実験ディレクトリにコピーしてください(resultsにそのままでも構いません)。 前者を修正して、対象の(確率的)実験を読み込ませてください。 実行```shell umaudemc --no-advise scheck smc initConfig latency.quatex -a 0.05 --assign pmaude -j 50

root@kitploit:~
QMaudeは、quatexクエリ(μ)の期待値を返し、その値に達するまでに要したモンテカルロシミュレーションの回数を返します。

## テスト

テストを実行するには、まず環境にpytestをインストールしてください。```
pip install -e .[test]

次に、単体テストを実行します。``` python -m pytest

root@kitploit:~
## その他のユーティリティ

実験で使用するjsonメタデータファイルに画像のディレクトリを変換するには、

例えば、mastodon tgenクライアントで使用される画像を生成する場合(同様にdestiniのカバー画像)```shell
 maude-hcs --verbose --protocol dnsmastodon images --image-dir ../pwnd-cp2/src/static/images/ --image-out-dir results/

テストベッドとSMC間のシナリオごとのquatexクエリに関する比較プロットを生成するには

plotfinal.py を引数 smc_directory, tne_directory, quatex_directory とともに使用します。```shell python scripts/plotfinal.py use-cases/challenge-problem-2/results-aligned/ use-cases/challenge-problem-2/cp2_scenarios_tne/cp2_te_results/ smc/

root@kitploit:~
同じスクリプトがCDFプロットを生成します。```shell
python scripts/gather\_samples.py use-cases/challenge-problem-2/results-aligned/samples/ use-cases/challenge-problem-2/results-aligned/cdfs use-cases/challenge-problem-2/cp2_scenarios_tne/cp2_te_results/

参考文献

以下のプロジェクトはMaude-HCSで直接使用されています。

  • Maude
  • QMaude
  • DNSプロトコルの形式化(Maudeを使用)
  • Actors2PMaude tool
ツールをダウンロード