Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
maude-hcs — Estrutura de modelagem formal e análise para sistemas de comunicação oculta, permitindo especificação de canais secretos, modelos de adversários e verificação estatística de modelos dos compromissos entre indetectabilidade e desempenho. | Kitploit
Ferramentas/GitHubGitHub/raytheonbbn/maude-hcs
Segurança de RedeEsteganografiaPrivacidadePapers e PesquisaAprendizado e EducaçãoAnálise de DNS
GitHubraytheonbbn/maude-hcs

maude-hcs

Estrutura de modelagem formal e análise para sistemas de comunicação oculta, permitindo especificação de canais secretos, modelos de adversários e verificação estatística de modelos dos compromissos entre indetectabilidade e desempenho.

Ver Repositório
5217há 1 mêsRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Maude-HCS

Maude-HCS é uma das primeiras cadeias de ferramentas generalizadas e modulares para especificar formalmente e raciocinar sobre Sistemas de Comunicação Oculta (HCS) em escalas do mundo real. Ela permite que projetistas de redes explorem rapidamente e de forma eficaz designs alternativos de HCS e fornece garantias formais de privacidade-desempenho necessárias para confiar no design.

Introdução

Sistemas de comunicação oculta (HCS) embedem mensagens encobertas dentro da atividade de rede comum para ocultar a presença da comunicação. Na prática, a indetectabilidade de um HCS é tipicamente avaliada usando estatísticas de tráfego ad hoc ou detectores específicos, tornando as afirmações de segurança fortemente acopladas a configurações experimentais e suposições adversárias implícitas.

Maude-HCS é um framework de modelagem e análise executável que fornece uma base fundamentada e executável para raciocinar sobre tradeoffs de indetectabilidade–desempenho em designs complexos de HCS. Projetistas especificam formalmente o comportamento do protocolo, observáveis do adversário e suposições ambientais, e geram amostras de Monte Carlo a partir das distribuições de traços induzidas. Estas podem ser usadas para auditar afirmações de indetectabilidade estimando as taxas de verdadeiros e falsos positivos de um teste estatístico e convertendo essas estimativas em limites inferiores de medidas de indetectabilidade. Isso permite a avaliação sistemática da detectabilidade e seus tradeoffs com o desempenho sob suposições de modelagem explicitamente declaradas.

Por favor, entre em contato conosco se precisar de ajuda para modelar e raciocinar sobre seu HCS. E considere citar nosso trabalho se o utilizar como parte de sua pesquisa.```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:~
## Requirements
Requires python version `3.12.4`

Create your preferred environment and activate it, for example

For pyenv```bash
pyenv install 3.12.4
pyenv local 3.12.4

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

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

Instalação: a partir da fonte git

Estruturamos o código-fonte do repositório de forma que importamos dns-formalization-maude como uma dependência (um submódulo). Criamos um fork dessa dependência para podermos rastrear nossas alterações nela. Usamos sparse-checkout para evitar a necessidade de fazer checkout de todo o código-fonte da dependência, que inclui muitos arquivos irrelevantes (como Testbed).

Para clonar o repositório principal```shell git clone [email protected]:raytheonbbn/maude-hcs.git

root@kitploit:~
O branch principal contém a fonte mais recente (possivelmente instável).
Ramos/etiquetas mais antigos como `pwnd.cp1` referem-se a snapshots estáveis usados para produzir resultados durante avaliações 
(por exemplo, `pwnd.cp1` usado para o problema de desafio 1, e similarmente `pwnd.cp2`).
Para usar um snapshot mais antigo, faça checkout do branch específico (ex: `pwnd.cp1`).

Configure o submódulo dns usando nosso clone do código para que possamos rastrear alterações 
feitas na fonte original, use sparse-checkout para manter apenas as fontes relevantes```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

No comando acima, defina <branch> como pwnd.43.rb1 para reproduzir os resultados do problema 1 do desafio, ou como pwnd para a versão mais recente.

O comando acima deve criar um novo arquivo chamado sparse-checkout em .git/modules/maude_hcs/deps/dns_formalization/info/ e instruí-lo a incluir apenas certos diretórios, como Maude/src.

Neste ponto, git status deve mostrar um início limpo.

Para instalar, primeiro instale a dependência como um pacote chamado dns, que importamos como Maude.*, e depois instale o maude_hcs como um pacote (com dependência em dns).```shell cd maude_hcs/deps/dns_formalization pip install -e . cd ../../../ pip install -e .

root@kitploit:~
## Geração automática de modelos de usuário

Modelos de usuário são modelos markovianos destinados a representar como os usuários se comportam.
Eles são fornecidos no formato json.
O primeiro passo é convertê-los para representações formais em maude.

Para fazer isso, especifique o
 - protocolo: dns ou mastodon
 - diretório de entrada contendo todos os modelos json que você deseja converter
 - diretório de saída que conterá todas as versões maude dos modelos json

Por exemplo,```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/"

Veja exemplos de especificações json markov em ./maude_hcs/lib/tgen/maude/dnsprofiles/markov/ (e similarmente para mastodon), juntamente com suas especificações maude convertidas.

Gerar automaticamente configurações HCS

Geramos configurações iniciais usando o comando generate. As configurações HCS podem ser passadas diretamente em json usando parâmetros de configuração HCS, ou usando um arquivo de configuração de experimento Shadow, ou usando um arquivo de configuração YML. Cada um destes é descrito a seguir.

Usando Configuração json HCS

Passe um arquivo de configuração json maude-hcs da seguinte forma,

Para gerar uma configuração de modelo DNS probabilístico com iodine e especificar o nome do arquivo de saída,```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:~
Defina `--model=nondet` para gerar uma versão não determinística.

Isso produz o arquivo maude executável (e o correspondente json de configuração HCS) no diretório de saída.
O arquivo de configuração json de entrada deve ser direto de seguir. Ele inclui especificação de
 * topologia de rede (links e suas características)
 * adversário (neste caso, perfis de detector zeek, dados de linha de base para detectores de média móvel e suas configurações)
 * canais/protocolos: cada protocolo inclui uma rede estranha e um protocolo de rede subjacente. O primeiro oculta/incorpora dados no segundo. Por exemplo, Iodine incorpora em DNS (então o canal é chamado iodine-dns) e Destini incorpora em Mastodon

Consulte [HCSParamsGuide](https://github.com/raytheonbbn/maude-hcs/blob/HEAD/HCSParamsGuide.md) para uma descrição de alguns dos parâmetros.
Note que o modelo probabilístico combinará os parâmetros não determinísticos, bem como os parâmetros probabilísticos (que substituem os não determinísticos).

### Usando uma configuração YML
#### Configurações únicas
Uma configuração YML contém a configuração completa dos túneis e redes subjacentes.
Podemos gerar uma configuração HCS diretamente a partir dela.```shell
 maude-hcs --verbose  generate --yml-filename=./use-cases/challenge-problem-2/cp2_setup_example.yml     --model=prob --filename=generated_test_yml

Configurações em lote do CP2

Para configurações em lote como as do CP2, converta vários arquivos YML em arquivos de cenário Maude:```shell ./scripts/generate_cp2_maude.sh [scenario_dir]

root@kitploit:~
Onde `scenario_dir` é opcional (padrão é `../pwnd_cp2`)

### Usando configuração yaml do Shadow
A configuração de rede pode ser especificada usando um arquivo shadow em vez do nosso json de configuração HCS
(Veja o simulador [Shadow](https://github.com/shadow/shadow) para mais informações sobre especificações shadow).

Para gerar um modelo que usa características definidas em um arquivo shadow, especifique:```shell
--shadow-filename <path_to_shadow_file.yaml>

O arquivo shadow yaml especifica as configurações de rede, host e processos.

Assumindo que a configuração de rede shadow está localizada no diretório ../pwnd-cp1, execute```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:~
## Executar Configurações HCS

### Execução standalone com Maude
Para executar uma configuração no maude standalone, primeiro instale o [maude standalone](https://github.com/maude-lang/Maude) para o seu sistema (recomendamos a versão 3.5.0 ou inferior)

Para executar uma única configuração, invoque o maude com o nome do arquivo, por exemplo, em `results`,```shell
maude ./use-cases/challenge-problem-2/cp2_scenarios/cp2_scenario_1.maude

Dentro do prompt do Maude, digite```shell rew initConfig .

root@kitploit:~
Isso executará todas as reescritas até que não sejam encontradas mais regras e nenhum progresso possa ser feito.

A adição de logging aumentará a verbosidade da execução com```shell
set print attribute on .

A execução também pode ser percorrida passo a passo com os seguintes comandos (consulte o manual do Maude)```shell rew[1] initConfig . cont 1 .

root@kitploit:~
### Verificação Estatística de Modelos

Verificação estatística de modelos está disponível por meio do subcomando scheck no [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.

Um exemplo de execução SMC para o arquivo gerado pelo comando acima é:```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:~
O modelo probabilístico e sua configuração inicial devem ser especificados em Maude e fornecidos via a opção ``--test TEST`` (padrão: ``results/generated_test.maude``).  
A execução Maude começa a partir do termo inicial fornecido via a opção ``--initail INITIAL`` (padrão: ``initConfig`` especificado em ``TEST``) e reescreve até a configuração final.  
A partir da configuração final, os observáveis são extraídos usando os atores monitor e adversário especificados no arquivo fonte Maude para o problema de verificação de modelo, fornecido via opção ``--file FILE``, ou pela opção ``--protocol PR``. 
Por exemplo ``--protocol dns`` refere-se a um arquivo de verificação de modelo criado especificamente para o protocolo dns em `lib/`.

Propriedades quantitativas, como o valor esperado da latência média, podem ser especificadas usando uma fórmula QuaTEx e fornecidas via opção ``--query QUERY`` (padrão: ``smc/query.quatex``).  
Nossas métricas de exemplo de latência e escalabilidade em termos de arquivos exfiltrados são definidas em ``smc/latency.quatex`` e ``smc/scalability_cp2_scenario_1.quatex``, e importadas para ``smc/cp2_eval_cp2_scenario_1.quatex``, e podem ser expressas com uma fórmula QuaTEx da seguinte forma:```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()];

onde a expressão Latency() extrai o valor de latência do monitor e avalia sua expectativa com delta = 2. A expressão ExfilFilesC2() avalia condicionalmente o número de arquivos exfiltrados: Se o tempo de detecção baseado no número cumulativo de consultas DNS pós-NAT for zero - significando que nenhuma detecção ocorre porque a contagem cumulativa de consultas nunca excede seu limite (por exemplo, 416 no exemplo acima) - a amostra é descartada; caso contrário, o número de arquivos exfiltrados até o momento da detecção é avaliado.

A amostragem continua até que o número especificado de amostras seja atingido (ou seja, opção -n min-max, como -n 30-300) ou todas as consultas sejam respondidas com a significância estatística desejada. No exemplo abaixo, a segunda consulta é respondida após 30 amostras usando os valores padrão alpha=0.05 e delta=0.5, enquanto a primeira consulta é respondida após 270 amostras usando com delta = 2, conforme especificado acima.

A saída inclui:

  • mu: a média amostral (valor esperado)
  • sigma: o desvio padrão amostral
  • r (raio de confiança): a margem de erro em torno de mu para o alpha dado, ou seja, mu ± raio com confiança (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 modificarmos o valor limite na fórmula QuaTEx acima para 500, algumas amostras são descartadas.  
Os resultados são então reportados juntamente com o número de amostras descartadas, e as garantias estatísticas são calculadas usando as amostras restantes conforme mostrado abaixo.```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

Para reproduzir os mesmos experimentos dentro da mesma configuração de paralelização (ou seja, o mesmo valor de -j), use a opção --seed com a mesma semente aleatória. Por padrão ou ao passar ‑1, o tempo atual é usado como semente.```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:~
### Automação de testes
runexp.sh é um script de automação que combina geração e análise SMC. Requer dois argumentos obrigatórios:```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

Executar SMC Distribuída

O SMC é altamente paralelizável usando todos os núcleos da máquina para obter aceleração quase linear na amostragem de Monte Carlo, utilizando a opção -j 0 conforme indicado acima. O QMaude permite ainda mais paralelismo entre máquinas usando SMC distribuída (funcionalidade ainda em teste ativo).

Para executar a SMC distribuída, deve haver um ou mais workers que são iniciados com

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

As únicas opções para o novo comando sworker são o endereço (-a) e a porta (-p). Ele fica aguardando conexões do controlador.

No lado do controlador, um comando scheck comum pode ser executado com uma opção adicional --distribute . Por exemplo,

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

O arquivo workers.json (também pode ser TOML ou YAML) especifica a lista de workers para a simulação. Este arquivo deve ser um dicionário com uma chave workers contendo uma lista de valores da forma { "workers": [ {"address": "127.0.0.1", "port": 1234} ] } ou simplesmente { "workers": [ "127.0.0.1:1234" ] }. Fora isso, as opções e a saída devem ser as mesmas do comando scheck regular.

O comando scheck irá conectar-se aos workers remotos, passar a eles todas as informações necessárias, ativá-los e processar seus resultados até que o nível de confiança prescrito seja alcançado. Em vez de copiar manualmente os arquivos para cada máquina que executa um worker, os arquivos são enviados através da conexão. As inclusões do Maude são resolvidas e uma versão simplificada dos fontes do Maude é enviada.

Executar QMaude para um teste independente

O QMaude oferece Verificação Estatística de Modelos (SMC) do modelo no mesmo formalismo. Copie latency.quatex e smc.maude para o diretório do seu experimento (ou mantenha-os em results).
Modifique o primeiro para carregar o experimento alvo (probabilístico). Execute```shell umaudemc --no-advise scheck smc initConfig latency.quatex -a 0.05 --assign pmaude -j 50

root@kitploit:~
QMaude retorna o valor esperado para as consultas quatex (μ) e o número de simulações de Monte Carlo que foram necessárias para atingir esse valor.

## Testes

Para executar os testes, instale primeiro o pytest no seu ambiente.```
pip install -e .[test]

Em seguida, execute os testes unitários``` python -m pytest

root@kitploit:~
## Outros utilitários

Para converter um diretório de imagens em um arquivo de metadados json usado no experimento,

Por exemplo, para gerar as imagens usadas pelo cliente mastodon tgen (similarmente, imagens de capa para destini)```shell
 maude-hcs --verbose --protocol dnsmastodon images --image-dir ../pwnd-cp2/src/static/images/ --image-out-dir results/

Para gerar os gráficos de comparação por consulta quatex entre cenários entre testbed e SMC

Use plotfinal.py com os argumentos 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:~
O mesmo script gerará os gráficos 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/

References

Os seguintes projetos são diretamente utilizados pelo Maude-HCS

  • Maude
  • QMaude
  • Formalização do protocolo DNS usando Maude
  • Ferramenta Actors2PMaude
Baixar ferramenta