Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
maude-hcs — Framework formale di modellazione e analisi per sistemi di comunicazione nascosti, che consente la specifica di canali occulti, modelli di avversari e la verifica statistica di modelli dei compromessi tra indetectabilità e prestazioni. | Kitploit
Strumenti/GitHubGitHub/raytheonbbn/maude-hcs
Sicurezza di ReteSteganografiaPrivacyPaper e RicercaApprendimento e FormazioneAnalisi DNS
GitHubraytheonbbn/maude-hcs

maude-hcs

Framework formale di modellazione e analisi per sistemi di comunicazione nascosti, che consente la specifica di canali occulti, modelli di avversari e la verifica statistica di modelli dei compromessi tra indetectabilità e prestazioni.

Vedi Repository
521762 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Maude-HCS

Maude-HCS è una delle prime toolchain generalizzate e modulari per specificare formalmente e ragionare sui Sistemi di Comunicazione Nascosta (HCS) su scala reale. Consente ai progettisti di rete di esplorare progetti HCS alternativi in modo rapido ed efficace e fornisce garanzie formali di privacy-performance necessarie per fidarsi del progetto.

Introduzione

I sistemi di comunicazione nascosta (HCS) incorporano messaggi nascosti all'interno dell'attività di rete ordinaria per nascondere la presenza della comunicazione. In pratica, l'indetettabilità di un HCS viene tipicamente valutata utilizzando statistiche di traffico ad hoc o rilevatori specifici, rendendo le affermazioni sulla sicurezza strettamente legate a configurazioni sperimentali e ipotesi avversarie implicite.

Maude-HCS è un framework eseguibile di modellazione e analisi che fornisce una base ragionata ed eseguibile per ragionare sui compromessi tra indetettabilità e prestazioni in progetti HCS complessi. I progettisti specificano formalmente il comportamento del protocollo, le osservabili dell'avversario e le ipotesi ambientali, e generano campioni Monte Carlo dalle distribuzioni delle tracce indotte. Questi possono essere utilizzati per verificare le affermazioni di indetettabilità stimando i tassi di veri e falsi positivi di un test statistico e convertendo queste stime in limiti inferiori per le misure di indetettabilità. Ciò consente una valutazione sistematica della rilevabilità e dei suoi compromessi con le prestazioni in base a ipotesi di modellazione esplicitamente dichiarate.

Contattaci se hai bisogno di assistenza per modellare e ragionare sul tuo HCS. E considera di citare il nostro lavoro se lo usi come parte della tua ricerca.```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:~
## Requisiti
Richiede python versione `3.12.4`

Crea il tuo ambiente preferito e attivalo, ad esempio

Per pyenv```bash
pyenv install 3.12.4
pyenv local 3.12.4

Per conda```bash conda create --name pwnd2 python=3.12.4 conda activate pwnd2

root@kitploit:~
Per ambiente virtuale```bash
python -m venv venv
source venv/bin/activate

Install: from git source

Abbiamo strutturato il codice sorgente del repository in modo da importare dns-formalization-maude come dipendenza (un sottomodulo). Abbiamo creato un fork di questa dipendenza per poter tenere traccia delle nostre modifiche ad essa. Usiamo sparse-checkout per evitare di dover fare checkout di tutto il codice sorgente della dipendenza, che include molti file irrilevanti (come Testbed).

Per clonare il repository principale```shell git clone [email protected]:raytheonbbn/maude-hcs.git

root@kitploit:~
Il ramo principale contiene la fonte più recente (possibilmente instabile).
I rami/tag più vecchi come `pwnd.cp1` si riferiscono a snapshot stabili utilizzati per produrre risultati durante le valutazioni 
(ad esempio, `pwnd.cp1` usato per il problema sfida 1, e similmente `pwnd.cp2`).
Per utilizzare uno snapshot più vecchio, estrai il ramo specifico (es. `pwnd.cp1`).

Configura il sottomodulo dns usando il nostro clone del codice in modo da poter tracciare le modifiche 
apportate al codice originale, usa sparse-checkout per mantenere solo le fonti rilevanti```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

Nel comando sopra imposta <branch> su pwnd.43.rb1 per riprodurre i risultati del problema della sfida 1, o su pwnd per l'ultima versione.

Il comando sopra dovrebbe creare un nuovo file chiamato sparse-checkout in .git/modules/maude_hcs/deps/dns_formalization/info/ e dirgli di includere solo certe directory come Maude/src.

A questo punto git status dovrebbe mostrare un avvio pulito.

Per installare, prima installa la dipendenza come pacchetto chiamato dns, che importiamo come Maude.* quindi installa maude_hcs come pacchetto (con dipendenza da dns).```shell cd maude_hcs/deps/dns_formalization pip install -e . cd ../../../ pip install -e .

root@kitploit:~
## Genera automaticamente modelli utente

I modelli utente sono modelli di Markov progettati per rappresentare come gli utenti si comportano.
Questi sono forniti in formato JSON.
Il primo passo è convertirli in rappresentazioni formali Maude.

Per farlo, specifica
 - protocollo: dns o mastodon
 - directory di input contenente tutti i modelli JSON che desideri convertire
 - directory di output che conterrà tutte le versioni Maude dei modelli JSON

Per esempio,```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/"

Vedi specifiche markov json di esempio in ./maude_hcs/lib/tgen/maude/dnsprofiles/markov/ (e similmente per mastodon), insieme alle loro specifiche maude convertite.

Genera automaticamente configurazioni HCS

Generiamo le configurazioni iniziali usando il comando generate. Le configurazioni HCS possono essere passate direttamente in json usando i parametri di configurazione HCS, o usando un file di configurazione dell'esperimento Shadow, o usando un file di configurazione YML. Ciascuna di queste è descritta di seguito.

Utilizzo della configurazione HCS json

Passa un file di configurazione json maude-hcs come segue,

Per generare una configurazione del modello DNS probabilistico con iodine e specificare il nome del file di output,```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:~
Set `--model=nondet` per generare una versione non deterministica.

Questo produce il file maude eseguibile (e il corrispondente file json di configurazione HCS) nella directory di output.
Il file di configurazione json di input dovrebbe essere facile da seguire. Include la specifica di
 * topologia di rete (collegamenti e loro caratteristiche)
 * avversario (in questo caso profili dei rilevatori zeek, dati di base per i rilevatori a media mobile e le loro configurazioni)
 * canali/protocolli: ogni protocollo include una rete weird e un protocollo di rete sottostante. Il primo nasconde/incorpora dati nel secondo. Ad esempio, Iodine si incorpora in DNS (quindi il canale si chiama iodine-dns) e Destini si incorpora in Mastodon

Fai riferimento a [HCSParamsGuide](https://github.com/raytheonbbn/maude-hcs/blob/main/HCSParamsGuide.md) per una descrizione di alcuni parametri.
Nota che il modello probabilistico combinerà i parametri non deterministici così come i parametri probabilistici (che sovrascrivono quelli non deterministici). 

### Utilizzo di una configurazione YML
#### Configurazioni singole
Una configurazione YML contiene la configurazione completa dei tunnel e delle reti sottostanti.
Possiamo generare direttamente una configurazione HCS da essa.```shell
 maude-hcs --verbose  generate --yml-filename=./use-cases/challenge-problem-2/cp2_setup_example.yml     --model=prob --filename=generated_test_yml

Configurazioni in batch di CP2

Per configurazioni in batch come quelle in CP2, converti più file YML in file di scenario Maude:```shell ./scripts/generate_cp2_maude.sh [scenario_dir]

root@kitploit:~
Dove `scenario_dir` è opzionale (predefinito su `../pwnd_cp2`)

### Utilizzo della configurazione yaml di Shadow
La configurazione di rete può essere specificata utilizzando un file shadow invece del nostro HCS config json
(Vedi il simulatore [Shadow](https://github.com/shadow/shadow) per maggiori informazioni sulle specifiche shadow).

Per generare un modello che utilizzi le caratteristiche definite in un file shadow, specifica:```shell
--shadow-filename <path_to_shadow_file.yaml>

Il file YAML shadow specifica le configurazioni di rete, host e processi.

Supponendo che la configurazione di rete shadow si trovi nella directory ../pwnd-cp1, esegui```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:~
## Esecuzione delle configurazioni HCS

### Esecuzione standalone con Maude
Per eseguire una configurazione in maude standalone, installa prima [standalone maude](https://github.com/maude-lang/Maude) per il tuo sistema (consigliamo la versione 3.5.0 o inferiore)

Per eseguire una singola configurazione, invoca maude con il nome del file, ad esempio, in `results`,```shell
maude ./use-cases/challenge-problem-2/cp2_scenarios/cp2_scenario_1.maude

All'interno del prompt di Maude, digita```shell rew initConfig .

root@kitploit:~
Questo eseguirà tutte le riscritture fino a quando non verranno trovate altre regole e non si potrà fare alcun progresso.

L'aggiunta della registrazione aumenterà la verbosità dell'esecuzione con```shell
set print attribute on .

L'esecuzione può anche essere effettuata passo dopo passo con i seguenti comandi (fare riferimento al manuale di maude)```shell rew[1] initConfig . cont 1 .

root@kitploit:~
### Model Checking Statistico

Il model checking statistico è disponibile tramite il sottocomando scheck in [QMaude](https://github.com/fadoss/umaudemc):```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.

Un esempio di esecuzione SMC per il file generato dal comando sopra è:```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:~
Il modello probabilistico e la sua configurazione iniziale devono essere specificati in Maude e forniti tramite l'opzione ``--test TEST`` (predefinita: ``results/generated_test.maude``).  
L'esecuzione di Maude parte dal termine iniziale fornito tramite l'opzione ``--initail INITIAL`` (predefinita: ``initConfig`` specificata in ``TEST``) e riscrive fino alla configurazione finale.  
Dalla configurazione finale, gli osservabili vengono estratti utilizzando gli attori monitor e adversary specificati nel file sorgente Maude per il problema di model checking, fornito tramite l'opzione ``--file FILE`` o dall'opzione ``--protocol PR``. 
Ad esempio ``--protocol dns`` si riferisce a un file di model checking creato appositamente per il protocollo dns in `lib/`.

Le proprietà quantitative, come il valore atteso della latenza media, possono essere specificate utilizzando una formula QuaTEx e fornite tramite l'opzione ``--query QUERY`` (predefinita: ``smc/query.quatex``).  
I nostri esempi di metriche di latenza e scalabilità in termini di file esfiltrati sono definiti in ``smc/latency.quatex`` e ``smc/scalability_cp2_scenario_1.quatex``, e importati in ``smc/cp2_eval_cp2_scenario_1.quatex``, e possono essere espressi con una formula QuaTEx della forma seguente:```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()];

where the expression Latency() estrae il valore di latenza dal monitor e ne valuta l'aspettativa con delta = 2. L'espressione ExfilFilesC2() valuta condizionalmente il numero di file esfiltrati: Se il tempo di rilevamento basato sul numero cumulativo di query DNS post-NAT è zero - il che significa che non si verifica alcuna rilevazione perché il conteggio cumulativo delle query non supera mai la sua soglia (ad esempio, 416 nell'esempio sopra) - il campione viene scartato; altrimenti, viene valutato il numero di file esfiltrati fino al momento della rilevazione.

Il campionamento continua fino a quando viene raggiunto il numero specificato di campioni (cioè l'opzione -n min-max, come -n 30-300) o tutte le query sono state risposte con la significatività statistica desiderata. Nell'esempio seguente, la seconda query viene risolta dopo 30 campioni utilizzando i valori predefiniti alpha=0.05 e delta=0.5, mentre la prima query viene risolta dopo 270 campioni utilizzando with delta = 2, come specificato sopra.

L'output include:

  • mu: la media campionaria (valore atteso)
  • sigma: la deviazione standard campionaria
  • r (raggio di confidenza): il margine di errore attorno a mu per l'alpha dato, cioè mu ± raggio con confidenza (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:~
Se modifichiamo il valore di soglia nella formula QuaTEx di cui sopra a 500, alcuni campioni vengono scartati.  
I risultati vengono quindi riportati insieme al numero di campioni scartati, e le garanzie statistiche vengono calcolate utilizzando i campioni rimanenti, come mostrato di seguito.```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

Per riprodurre gli stessi esperimenti nella stessa impostazione di parallelizzazione (cioè lo stesso valore di -j), usa l'opzione --seed con lo stesso seme casuale. Per impostazione predefinita oppure quando si passa ‑1, viene utilizzato il tempo corrente come seme.```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:~
### Automazione dei test
runexp.sh è uno script di automazione che combina generazione e analisi SMC. Prende due argomenti obbligatori:```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

Esegui SMC distribuito

SMC è altamente parallelizzabile utilizzando tutti i core della macchina per ottenere un'accelerazione quasi lineare nel campionamento Monte Carlo, usando l'opzione -j 0 come indicato sopra. QMaude consente un parallelismo ancora maggiore tra macchine utilizzando SMC distribuito (funzionalità ancora in fase di test attivo)

Per eseguire l'SMC distribuito, devono essere avviati uno o più worker con

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

Le uniche opzioni per il nuovo comando sworker sono l'indirizzo (-a) e la porta (-p). Rimane in attesa di connessioni dal controller.

Sul lato controller, un normale comando scheck può essere eseguito con un'opzione aggiuntiva --distribute . Per esempio,

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

Il file workers.json (può anche essere TOML o YAML) specifica la lista dei worker per la simulazione. Questo file deve essere un dizionario con una chiave workers contenente una lista di valori della forma { "workers": [ {"address": "127.0.0.1", "port": 1234} ] } o semplicemente { "workers": [ "127.0.0.1:1234" ] }. Per il resto, le opzioni e l'output dovrebbero essere gli stessi del normale comando scheck.

Il comando scheck si connetterà ai worker remoti, passerà loro tutte le informazioni necessarie, li attiverà e elaborerà i loro risultati fino al raggiungimento del livello di confidenza prescritto. Invece di copiare manualmente i file su ogni macchina che esegue un worker, i file vengono inviati tramite la connessione. Le inclusioni di Maude vengono risolte e viene inviata una versione appiattita delle sorgenti Maude.

Esegui QMaude per un test standalone

QMaude offre Statistical Model Checking (SMC) del modello nello stesso formalismo. Copia latency.quatex e smc.maude nella directory del tuo esperimento (o tienili in results).
Modifica il primo per caricare l'esperimento target (probabilistico). Esegui```shell umaudemc --no-advise scheck smc initConfig latency.quatex -a 0.05 --assign pmaude -j 50

root@kitploit:~
QMaude restituisce il valore atteso per le query quatex (μ), e il numero di simulazioni Monte Carlo necessarie per raggiungere quel valore.

## Test

Per eseguire i test, installa prima pytest nel tuo ambiente.```
pip install -e .[test]

Quindi esegui i test unitari``` python -m pytest

root@kitploit:~
## Altre utility

Per convertire una directory di immagini in un file di metadati json utilizzato nell'esperimento,

Per esempio per generare le immagini utilizzate dal client mastodon tgen (allo stesso modo cover images per destini)```shell
 maude-hcs --verbose --protocol dnsmastodon images --image-dir ../pwnd-cp2/src/static/images/ --image-out-dir results/

Per generare i grafici di confronto per query quatex tra gli scenari tra testbed e SMC

Usa plotfinal.py con gli argomenti 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:~
Lo stesso script genererà i CDF plots.```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/

Riferimenti

I seguenti progetti sono utilizzati direttamente da Maude-HCS

  • Maude
  • QMaude
  • Formalizzazione del protocollo DNS utilizzando Maude
  • Actors2PMaude tool
Scarica lo strumento