dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
Zeek·Suricata 로그를 활용한 네트워크 위협 탐색
Network threat hunting for Zeek and Suricata logs. Explainable per-host risk scores with evidence chains and MITRE ATT&CK mapping. Reads your logs, never touches your network.
보안Python · TypeScriptGitHub @lidless-labs온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Network threat hunting for Zeek and Suricata logs. Explainable per-host risk scoring with evidence chains and MITRE ATT&CK mapping. Reads your logs, never touches your network.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Vervet reads your Zeek and Suricata logs and tells you which hosts are compromised and why.
Website
·
Live demoREADME 전문 보기 ↗Point Vervet at a directory of Zeek and Suricata logs and it surfaces the threats hiding in them: C2 beacons phoning home on a fixed interval, DNS tunneling and DGA domains, data exfiltration, lateral movement, and long-lived connections that shouldn't exist. Every flagged host gets a transparent risk score with the evidence chain that produced it and the MITRE ATT&CK techniques it maps to, so an analyst sees not just what fired but why. It runs as a single container on your own hardware. No cloud, no telemetry, no live tap required, and it never touches your network, it only reads logs you already collect.
Vervet is for blue teams, SOC analysts, and MSSPs who run Zeek or Suricata and want the analyst layer that hunts the logs for them, the way RITA and AC-Hunter do for beaconing, but UI-first, MITRE-mapped, and speaking both sensors.
Vervet is a self-hosted network threat hunting platform for Zeek and Suricata logs. It parses existing log files into a common event model, runs deterministic detection engines for beaconing, DNS abuse, DGA domains, fast-flux, lateral movement, long connections, and Suricata alerts, then rolls findings into per-host risk scores with evidence chains and MITRE ATT&CK mappings.
It serves a FastAPI backend and React UI from one container, supports demo data for evaluation, accepts batch directory ingestion, and exposes REST endpoints for cases, reports, rules, exports, live ingest, and integrations with TheHive, Wazuh, and MISP.
Demo mode loads a realistic sample environment so the dashboard shows scored, explained threats immediately:
git clone https://github.com/lidless-labs/vervet.git
cd vervet
docker compose up -d --build
curl http://localhost:8000/health
Expected output:
{"status":"healthy"}
The container serves the API and the web UI on the same port and seeds the demo data on startup. Stop it with docker compose down.
# Point it at your Zeek/Suricata log directory instead of the demo data
docker compose run --rm -e VERVET_DEMO_MODE=false \
-v /var/log/zeek:/logs:ro vervet
Then upload or ingest logs from the UI, or via the REST API:
# Zeek conn/dns/http/ssl logs and Suricata eve.json are all accepted
curl -X POST http://localhost:8000/api/v1/ingest/directory \
-H "X-API-Key: $VERVET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"path": "/logs"}'
# Backend (FastAPI) on :8000
pip install -r requirements.txt
VERVET_DEMO_MODE=true uvicorn api.main:app --host 0.0.0.0 --port 8000
# Frontend (Vite dev server) on :5174, in another terminal
npm install && npm run dev
make dev starts both at once. See the Makefile for individual targets.
To run the backend tests, install the test dependencies:
pip install -r requirements-test.txt
python -m pytest -q
requirements-test.txt includes the existing backend requirements and the
pinned evidence-record schema validator. Docker installs requirements.txt.
| Detection | What it finds | Maps to |
|---|---|---|
| Beaconing / C2 | Periodic callbacks by interval regularity, jitter, and data-size consistency | T1071, T1571 |
| DNS tunneling | High-entropy subdomains and oversized TXT/NULL records used as a covert channel | T1071.004, T1048 |
| DGA domains | Algorithmically generated domains via n-gram and lexical analysis | T1568.002 |
| Fast-flux | Domains rotating through many IPs to hide infrastructure | T1568 |
| Lateral movement | Internal-to-internal connection patterns that suggest pivoting | T1021 |
| Long connections | Unusually persistent flows by duration, protocol, and direction | T1071, T1572 |
| Suricata alerts | Severity-weighted IDS alerts folded into the same per-host score | varies |
Each detection contributes to a unified per-host risk score (0-100) with a full reasoning chain. Scoring is deterministic and explainable, not a black box: you can read exactly which signals raised a host's score and by how much.
Zeek logs (conn/dns/http/ssl/x509/notice) Suricata eve.json
\ /
+--> unified parsers -------------+
|
detection engines (beacon, DNS threat,
lateral movement, long-conn, Suricata)
|
unified threat engine -> per-host score
+ MITRE ATT&CK mapping + evidence chain
|
web UI + REST API <---+---> case management / IOC export
(TheHive / Wazuh / MISP)
Logs are parsed into a common connection/event model, run through each detection engine, and aggregated by the unified threat engine into per-host scores with MITRE mappings and evidence chains. Findings can be promoted to cases, exported as IOCs, and pushed to TheHive, correlated against Wazuh, or enriched from MISP.
Note on persistence (current limitation): the OSS edition keeps its analysis index in memory. It is built for log-batch hunting and triage sessions, not yet as a long-running system of record. Restarting clears loaded logs and analysis (cases, hunt notes, and trends are file-backed). A durable store is the top roadmap item, see below.
Initial endpoints exist for exporting cases to TheHive, correlating IOCs against Wazuh alerts, and enriching IOCs from MISP. Configure via environment variables (THEHIVE_URL/THEHIVE_API_KEY, WAZUH_URL/WAZUH_API_KEY, MISP_URL/MISP_API_KEY) and drive from /api/v1/integrations/*.
VERVET_API_KEY to require a key on every request. Without it, the server runs in open dev mode and says so loudly at startup.VERVET_LOG_ROOT to restrict directory ingestion to a single tree, so the API can't be coaxed into reading arbitrary paths.VERVET_RATE_LIMIT_*) to protect public deployments.Apache-2.0. See LICENSE.