
Ferramenta de análise comportamental em tempo de execução que isola pacotes suspeitos em Docker, rastreia chamadas de sistema com strace, mapeia cascatas de processos em grafos direcionados e detecta ataques à cadeia de suprimentos usando assinaturas YARA, detecção de anomalias por ML e análise de padrões temporais.

Demonstração TraceTree
TraceTree (cascade-analyzer) é um organismo de segurança autônomo projetado para a era agentiva. Ele vai além da simples verificação, tornando-se um ecossistema de detecção robusto, endurecido e escalável. Como seu mascote, a aranha, o TraceTree tece uma teia abrangente de proteção ao redor do seu fluxo de trabalho de desenvolvimento, usando suas oito 'pernas' especializadas.
TraceTree pode ser usado como uma porta de revisão antes que agentes ou humanos confiem na instalação de um pacote. Veja Exportação de recibo de comportamento para um formato de recibo pequeno e compatível com JSON/SARIF que resume hash do alvo, política de sandbox, comportamento observado, hashes de artefatos, veredito e padrões de privacidade sem expor logs brutos de chamadas de sistema.
TraceTree/ ├── api/ # API stubs ├── codebase-analysis-docs/ # Architecture documents and knowledge guides ├── data/ # Behavioral signatures, rules, and training datasets ├── docs/ # Documentation assets ├── examples/ # Demo scripts and usage examples ├── frontend/ # Next.js/React web dashboard ├── graph/ # NetworkX directed graph builder ├── hooks/ # Git/Shell hooks for background monitoring ├── logs/ # Execution trace logs and strace outputs ├── macapp/ # Native macOS menu bar app ├── mascot/ # Console ASCII spider mascot ├── mcp/ # MCP server security testing module ├── ml/ # Machine learning classification and anomaly detection ├── monitor/ # Core syscall parser, YARA matching, and timelines ├── orchestrator/ # TypeScript multi-agent coordination server ├── repocheckai/ # Repository analysis engine (TypeScript/Node) ├── samples/ # Malware and benign files for sandbox tests ├── sandbox/ # Docker container manager and strace sandbox ├── test_targets/ # Mock packages/servers for detection testing ├── tests/ # Unit, integration, and system tests ├── watcher/ # File system change listener daemon └── worker/ # Background task execution worker
## As 8 Pernas da Aranha TraceTree
1. **Perna 1: Isolamento em Sandbox (A Armadilha)** — Executa alvos em contêineres Docker isolados (ou um modo `direct` de alto desempenho) onde as ameaças são fisicamente contidas.
2. **Perna 2: Análise de Syscalls (O Sistema Nervoso)** — Um motor de alta precisão que monitora cada "vibração" (chamada de sistema) que um processo faz ao SO.
3. **Perna 3: Gráfico Comportamental (A Teia)** — Mapeia a "Cascata" de como processos, arquivos e nós de rede interagem usando grafos direcionados do NetworkX.
4. **Perna 4: Detecção de Anomalias por ML (A Intuição)** — Um modelo Random Forest treinado sob medida (treinado em um pequeno conjunto de dados representativo de pacotes limpos/maliciosos, mais feeds opcionais ao vivo do MalwareBazaar) que prevê intenção maliciosa com alta confiança.
5. **Perna 5: Correspondência de Assinaturas YARA (A Memória)** — Uma biblioteca integrada de DNA de malware conhecido e padrões de exploração (Reverse Shells, Cryptominers, etc.).
6. **Perna 6: Protocolo de Segurança MCP (O Escudo do Agente)** — Proteção especializada para servidores do Model Context Protocol, defendendo as ferramentas que os agentes de IA usam.
7. **Perna 7: AI Guardiã de Segurança (A Teia Proativa)** — Um "Smart Scanner" pré-commit usando LLMs locais (Qwen-Coder) para capturar vazamentos e injeções antes que cheguem ao seu histórico.
8. **Perna 8: Análise Temporal e de N-gramas (A Varredura de DNA)** — Identifica ameaças pelo *ritmo* e *sequência* de suas ações ao longo do tempo.
## Como Funciona```
target ──► Docker sandbox (network dropped) ──► strace -t -f
│
▼
strace log
│
┌────────────────┼────────────────┐
▼ ▼ ▼
strace parser signature temporal
(parser.py) matcher (sigs) analyzer
│ │ │
└───────┬────────┴────────────────┘
▼
NetworkX graph
(builder.py)
│
▼
ML anomaly detection
(RandomForest / IsolationForest)
│
▼
verdict
ip link set eth0 down) antes do início da instalação/execução, portanto, quaisquer tentativas de conexão de saída são registadas, mas bloqueadas.strace -t -f -e trace=all. A flag -t adiciona carimbos de data/hora para análise temporal, -f segue os processos filhos.monitor/parser.py) — Parser baseado em regex que processa saída strace multilinha e ambos os formatos [pid] e pid simples. Extrai criação de processos, acesso a arquivos, conexões de rede e operações de memória. Cada syscall recebe um peso de gravidade (0–9) com base na sua relevância de segurança.monitor/signatures.py) — Compara o fluxo de eventos analisado com 8 padrões de assinatura comportamental definidos em data/signatures.json. Cada correspondência produz evidências listando os eventos específicos que a desencadearam.monitor/timeline.py) — Detecta 5 padrões comportamentais baseados no tempo a partir do fluxo de eventos com carimbo de data/hora (ex.: leitura de credencial seguida de conexão externa em 5 segundos).Definidas em data/signatures.json. Cada uma tem uma gravidade (1–10), syscalls necessárias, padrões de arquivo, condições de rede e uma sequência ordenada para correspondência.
Detectados a partir da saída do strace com carimbo de data/hora. Requer a flag -t do strace (ativada por padrão).
Cada um dos 24 tipos de syscall tem um peso de gravidade base. Exemplos:
mprotect com PROT_EXEC: 9.0dup2 após um connect: 9.0execve de binário inesperado: 7.0connect para metadados de nuvem (169.254.x.x): 8.0connect para PyPI/npm CDN: 0.0 (benigno)openat de /usr/lib/python/*: 0.0 (benigno)A pontuação total de gravidade alimenta o cálculo de confiança do ML.
Cada syscall connect é classificada em uma de quatro categorias:
git clone --depth 1 https://github.com/tejasprasad2008-afk/TraceTree.git cd TraceTree pip install -e .
### Executar uma Análise```bash
cascade-analyze --help
Saída:``` ┌──────────────────────────────────────┐ │ TraceTree Security Analyzer │ │ Target: requests │ │ Analyzer Type: PIP │ └──────────────────────────────────────┘ ✔ Sandboxing requests (pip)... ✔ Parsing requests... ✔ Graphing requests... ✔ Detecting requests...
┌─ Cascade Graph: requests ────────────┐ │ pip install requests │ │ └─ pip (root) │ │ └─ net_151.101.1.69:443 (connect)│ │ └─ file_/usr/lib/python3.11/... │ └──────────────────────────────────────┘
┌─ Flagged Behaviors ──────────────────┐ │ No suspicious footprints flagged. │ └──────────────────────────────────────┘
┌──────────┐
│ CLEAN │
└──────────
Confidence Score: 72.3%
Para um pacote malicioso (por exemplo, um typosquat conhecido):```
┌─ Behavioral Signatures Matched ──────┐
│ 🔴 credential_theft (severity 9/10) │
│ Step 1: openat /etc/shadow │
│ Step 2: connect 45.33.32.156:4444 │
└──────────────────────────────────────┘
┌─ Temporal Execution Patterns ────────┐
│ 🔴 connect_then_shell (severity 10/10)│
│ Window: 1500-4200 ms — External... │
└──────────────────────────────────────┘
┌───────────┐
│ MALICIOUS │
└───────────┘
Confidence Score: 99.9%
Signatures: credential_theft | Temporal: connect_then_shell
cascade-analyze <target>Analisar um único pacote, binário ou arquivo em massa.```bash
cascade-analyze requests cascade-analyze urllib33 # known typosquat
cascade-analyze package.json
cascade-analyze suspicious_app.dmg cascade-analyze payload.exe
cascade-analyze requirements.txt cascade-analyze package.json
cascade-analyze ./some_file --type pip cascade-analyze ./some_file --type npm cascade-analyze ./some_file --type dmg cascade-analyze ./some_file --type exe
**Subcommand: `cascade-analyze mcp`** — Análise de segurança do servidor MCP (veja a seção MCP abaixo).
**Subcommand: `cascade-analyze watch <repo>`** — Guardião de sessão (veja a seção Session Guardian).
**Subcommand: `cascade-analyze check <file>`** — Varredura rápida sob demanda.
### `cascade-watch <repo>`
Guardião de sessão independente. Monitora um diretório em busca de manifestos de pacotes e executa análise de sandbox em segundo plano.```bash
cascade-watch ./my-project
cascade-watch ./my-project --check setup.py # on-demand scan
cascade-watch https://github.com/user/repo.git # URL accepted but not cloned
Exibe um mascote de aranha no terminal e verifica o status em um loop. Pressione Ctrl+C para parar. Apenas um observador por diretório é permitido (arquivo de bloqueio em /tmp/tracetree_sessions/).
cascade-check <file>Análise única rápida de um arquivo específico. Inicia uma nova execução em sandbox e retorna um veredito.```bash cascade-check setup.py cascade-check ./payload.exe
### `cascade-install-hook`
Instala um hook de shell que executa `cascade-watch` automaticamente após cada `git clone`.```bash
cascade-install-hook
Isso adiciona uma linha source ao ~/.bashrc ou ~/.zshrc. O script de hook está localizado em ~/.local/share/tracetree/hooks/shell_hook.sh. Após a instalação, cada git clone iniciará um observador em segundo plano e registrará em /tmp/tracetree_<reponame>.log.
cascade-trainPipeline de treinamento interativo. Solicita uma chave de API do MalwareBazaar (opcional — pode ser ignorada para treinar apenas com conjuntos de dados locais), em seguida:
ml/model.skops e invalida o cache```bash
export MALWAREBAZAAR_AUTH_KEY="your-key"
cascade-train## Análise de Segurança do Servidor MCP
O subcomando `cascade-analyze mcp` analisa servidores do Protocolo de Contexto de Modelo (MCP) em busca de comportamentos maliciosos. Ele executa o servidor em um container isolado (sandbox), age como um cliente MCP simulado para descobrir e invocar todas as ferramentas, e então classifica o rastreamento de chamadas de sistema (syscall) resultante.```bash
# Analyze an npm MCP server
cascade-analyze mcp --npm @modelcontextprotocol/server-github
# Analyze a local MCP server project
cascade-analyze mcp --path ./my-mcp-server
# Allow network (for servers that legitimately need internet)
cascade-analyze mcp --npm @modelcontextprotocol/server-github --allow-network
# Force transport
cascade-analyze mcp --npm some-package --transport stdio
cascade-analyze mcp --npm some-package --transport http --port 3000
# JSON output
cascade-analyze mcp --npm some-package --output json
strace -f.initialize JSON-RPC 2.0, descoberta tools/list, invocação segura de cada ferramenta com argumentos sintéticos.; ls /etc, ../../../etc/passwd, <script>alert(1)</script>).filesystem, github, postgres, fetch, shell.sandbox/ — Gerenciamento do ciclo de vida de contêineres Docker. Constrói cascade-sandbox:latest a partir de um Dockerfile baseado em python:3.11-slim com strace, wine64, p7zip-full, cabextract, Node.js e npm. Desativa a interface de rede (ip link set eth0 down) antes da execução do alvo. Suporta alvos pip, npm, DMG e EXE. Retorna um caminho de log strace ou string vazia em caso de falha.
monitor/parser.py — Analisador de log strace baseado em regex. Lida com entradas de syscall de várias linhas, formatos [pid] e pid simples, e saída com timestamp (-t). Rastreia 24 tipos de syscall em 5 categorias (processo, rede, arquivo, memória, IPC). Atribui pesos de severidade por evento, classifica destinos de rede e sinaliza acessos a arquivos sensíveis. Retorna dados de evento estruturados com timestamps e deslocamentos relativos em milissegundos.
monitor/signatures.py — Correspondente de assinaturas comportamentais. Carrega 8 padrões de data/signatures.json. Suporta correspondência não ordenada (syscalls necessários + padrões de arquivo/rede devem estar presentes) e correspondência de sequência ordenada (pares de syscall-condição devem aparecer em ordem). Retorna assinaturas correspondentes com evidências listando os eventos específicos que dispararam cada correspondência.
monitor/timeline.py — Analisador de padrões temporais. Detecta 5 padrões comportamentais baseados em tempo a partir do fluxo de eventos ordenado e com timestamp. Cada padrão especifica uma severidade, uma janela de tempo e as condições de disparo. Retorna correspondências ordenadas por severidade decrescente. Ativo apenas quando strace foi executado com -t (que é o padrão).
graph/builder.py — Construção de grafo direcionado NetworkX. Cria nós para processos, arquivos e destinos de rede. Adiciona arestas para relacionamentos de clone, alvos de syscall e relacionamentos temporais (eventos consecutivos do mesmo PID dentro de 5 segundos). Nós e arestas são marcados com correspondências de assinaturas e pesos de severidade. Produz JSON compatível com Cytoscape e estatísticas internas.
ml/detector.py — Detecção de anomalias. Extrai um vetor de 10 características (contagem de nós, contagem de arestas, conexões de rede, leituras de arquivos, contagem de execve, severidade total, redes suspeitas, arquivos sensíveis, severidade máxima, contagem de padrões temporais). Usa RandomForestClassifier se um modelo treinado estiver disponível localmente ou puder ser baixado do GCS; recorre a IsolationForest treinado em 10 linhas de base de pacotes limpos fixos. Pontuações de severidade e contagens de padrões temporais aumentam a confiança final independentemente da previsão do ML.
mcp/ — Módulo de análise de servidores MCP. Seis arquivos: sandbox.py (sandbox Docker para servidores MCP), client.py (cliente JSON-RPC 2.0 com descoberta de ferramentas e sondas adversariais), features.py (extração de características específicas do MCP com detecção de tipo de servidor), classifier.py (classificação de ameaças baseada em regras), report.py (geração de relatório Rich console + JSON).
watcher/session.py — Guardião de sessão. A classe SessionWatcher é executada em uma thread daemon em segundo plano. Descobre pacotes escaneando por requirements.txt, package.json, setup.py e pyproject.toml. Executa cada um através do pipeline da sandbox. Expõe status via get_status() e resultados via uma Queue. Bloqueio de sessão via arquivo de bloqueio em /tmp/tracetree_sessions/.
mascot/spider.py — Classe SpiderMascot. Aranha ASCII com 5 estados (idle, success, warning, scanning, confused). Usada na CLI para feedback visual durante a análise.
hooks/ — Sistema de hook de shell. shell_hook.sh envolve o comando git para interceptar git clone e iniciar cascade-watch em segundo plano. install_hook.py é um instalador multiplataforma que detecta bash/zsh e anexa a linha de source ao arquivo RC apropriado.
cli.py — Ponto de entrada da CLI Typer. Registra todos os subcomandos. Orquestra o pipeline de análise com barras de progresso Rich e painéis de saída formatados.
cascade-train com um grande conjunto de dados rotulados. O fallback IsolationForest é uma linha de base heurística, não um modelo de qualidade de produção.ip link set eth0 down) antes de executar/instalar o pacote para evitar exfiltração ativa de dados durante a varredura. Embora seguro, isso significa que malware que requer handshakes de rede ou conexões C2 durante a instalação pode não executar seu payload, ou alguns instaladores legítimos que exigem conectividade com a internet falharão. Para contornar isso, passe a opção --controlled-network para habilitar o modo de rede controlada/ sinkhole.strace/ptrace (chamando ptrace(PTRACE_TRACEME, ...) ou verificando TracerPid em /proc/self/status). Se a evasão for acionada, o malware pode encerrar precocemente ou executar apenas ações benignas, escapando da detecção.Pull requests são bem-vindos. Por favor, mantenha novos recursos desacoplados dos módulos existentes.
MIT
graph/builder.py) — Constrói um grafo direcionado NetworkX com nós de processo, arquivo e rede. Adiciona arestas temporais entre eventos consecutivos do mesmo PID dentro de uma janela de 5 segundos.ml/detector.py) — Extrai um vetor de 10 características do grafo e dos dados analisados. Usa um RandomForestClassifier se um modelo treinado estiver disponível, recorrendo a um IsolationForest treinado em 10 bases de referência de pacotes limpos codificados. Pontuações de gravidade e contagens de padrões temporais aumentam a confiança final.| Assinatura | Gravidade | O que captura |
|---|
reverse_shell | 10 | connect externo → dup2 → execve /bin/sh |
container_escape | 10 | openat de /proc/1/, /sys/fs/cgroup, /var/run/docker.sock |
credential_theft | 9 | openat de /etc/shadow, .ssh/, .aws/ → connect externo |
typosquat_exfil | 9 | Leitura de segredo (.env, .npmrc) → connect para pastebin/file.io/transfer.sh |
process_injection | 9 | mprotect PROT_EXEC → execve de binário não padrão |
crypto_miner | 8 | clone → clone → connect para porta de pool de mineração (3333, 4444, 14444, 45700) |
dns_tunneling | 7 | getaddrinfo + sendto + socket na porta 53/5353 |
persistence_cron | 7 | openat do caminho crontab → write |
| Padrão | Gravidade | Condição de acionamento |
|---|
connect_then_shell | 10 | connect externo → execve /bin/sh em 3 segundos |
credential_scan_then_exfil | 9 | Leitura de arquivo sensível → connect externo em 5 segundos |
delayed_payload | 8 | Lacuna >10s seguida por explosão de atividade suspeita (comportamento de dropper) |
rapid_file_enumeration | 7 | 10+ aberturas de arquivo em 1 segundo (comportamento de varredura) |
burst_process_spawn | 7 | 5+ clone/execve em 2 segundos |
| Categoria | Critérios | Pontuação de risco |
|---|
safe_registry | IP corresponde a intervalos conhecidos de CDN PyPI/npm/GitHub | 0.0 |
known_benign | Porta web padrão (80/443) para host não classificado | 0.5 |
suspicious | Metadados de nuvem (169.254.x.x), IP privado do contêiner ou porta suspeita (4444, 1337, 31337, etc.) | 8.0–9.0 |
unknown | Padrão | 3.0 |
| Tipo de alvo | Como funciona | Observações |
|---|
| Pacotes PyPI | pip download (com rede), depois pip install --no-index (sem rede) sob strace | Mais confiável. A rede é desativada antes da instalação. |
| Pacotes npm | npm install sob strace, rede desativada após dry-run | Requer Node.js na imagem sandbox. |
| Arquivos DMG | Extraídos com 7z dentro do contêiner. Scripts encontrados (.sh, .py, .command), instaladores .pkg, pacotes .app e binários Mach-O puros são executados sob strace. | Requer p7zip-full na imagem sandbox. A extração de DMG pode falhar em formatos encriptados ou incomuns. Os scripts são executados em um contêiner Linux, portanto, comportamentos específicos do macOS não serão executados. |
| Arquivos EXE | Executados sob wine64 com strace -t -f e um timeout de 30 segundos. O ruído de inicialização do Wine é filtrado do log strace. | Requer wine64 na imagem sandbox. Aplicações GUI que aguardam entrada do usuário atingirão o timeout. A camada de tradução do Wine significa que as syscalls são syscalls Linux, não Windows nativas — alguns comportamentos específicos do Windows podem não ser visíveis. |
| Ameaça | Severidade | Descrição |
|---|
COMMAND_INJECTION | Crítica | Shell gerado em resposta a argumentos da ferramenta |
CREDENTIAL_EXFILTRATION | Crítica | Leitura de segredo seguida de conexão de rede |
COVERT_NETWORK_CALL | Alta | Conexão de saída durante chamada de ferramenta para destino inesperado |
PATH_TRAVERSAL | Alta | Leituras de arquivos fora do diretório de trabalho |
EXCESSIVE_PROCESS_SPAWNING | Média | Contagem desproporcional de processos filhos |
PROMPT_INJECTION_VECTOR | Alta | Descrições de ferramentas contêm caracteres de largura zero ou linguagem de injeção |
api/main.py está configurado para executar o pipeline de análise real do TraceTree dentro de tarefas em segundo plano. Usa um banco de dados em memória (mock_db) para rastreamento de jobs, e requer que a variável de ambiente TRACETREE_API_KEYS esteja definida para iniciar.cascade-watch aceita um argumento de URL, mas não realiza git clone. Ele monitora o diretório local ou recorre ao diretório de trabalho atual.