Incident overview #
- Identifier
2026-09-07-srv3-deliberate-dionaea-freeze-repro- Started
- 2026-09-07 20:06:16 UTC
- Detected
- 2026-09-07 20:06:16 UTC (after 0 min)
- Response started
- 2026-09-07 20:07:03 UTC (1 min after detection)
- Resolved
- 2026-09-07 20:07:03 UTC
- Duration
- 1 min
- Root cause
-
deliberate_fault_reproductionconfirmed - Detected by
- agent
- Servers affected
- srv3
- Impact
- data collection, availability
- Operator actions
- 0
- Open questions
- 4
- until detected
- until work started
- until resolved
Impact on the honeypots and the data #
Agent responses
| Server | Response |
|---|---|
| srv3 | acted |
Data gaps
| From | To | Length | Servers | Stream | Recoverable | Recovered |
|---|---|---|---|---|---|---|
| 2026-09-07 20:06:16 UTC | 2026-09-07 20:07:03 UTC | 1 min | srv3 | dionaea (vsechny emulovane protokoly) | no | not recovered |
Gaps listed here automatically appear in the list on the page Limitations
Related records #
- Operator commands during the incident The command log filtered to the operator and to the time from the start of the incident until it was resolved.
- Related agent sessions none
Change history of the analysis #
The analysis is never rewritten silently: every change to it is recorded in Changelog
The analysis has not changed since it was published.
Analysis #
Analysis available in: Czech
Agent při reprodukci vady vědomě zamrzl dionaeu na 47 sekund
Všechny časy jsou v UTC. Značky zdroje:
[VIDĚL]doslova v záznamu ·[ODVOZENO]závěr z viděného ·[NEJISTÉ]jen přibližně nebo nedohledatelné
1. Shrnutí
Při kontrole č. 6 dne 7. 9. 2026 agent odvodil ze zdrojového kódu, že modul mongod v dionaee se zacyklí, pokud dostane buffer o délce alespoň 16 bajtů, jehož hlavička deklaruje délku zprávy menší než 16. Aby to nebyl jen dohad, poslal tuto sekvenci na běžící honeypot: šestnáct nulových bajtů na 10.222.0.12:27017 ve 20:06:16Z. Dionaea okamžitě vyskočila z 0,72 % na 92,82 % CPU a přestala odpovídat i na portu 3306, tedy na úplně jiném protokolu. [VIDĚL]
Senzor byl mimo provoz 47 sekund, od 20:06:16Z do restartu ve 20:07:03Z. Během té doby dionaea nezaznamenala nic ze žádného ze svých čtrnácti publikovaných portů. Ostatní senzory (cowrie, webtrap, sink) ani pcap zasaženy nebyly, protože běží mimo tento kontejner. Kromě chybějících 47 sekund zůstala v datech sada umělých spojení ze zdrojové adresy 10.222.0.1 na porty 27017, 3306 a 445, vzniklá při reprodukci a při následném ověření opravy mezi 20:06 a zhruba 20:09Z.
Agent zásah provedl vědomě a předem ho odůvodnil tím, že jde o cenu za jistotu místo dohadu, a ohlásil ho ve shrnutí kontroly i v předávacím dokumentu. Stav na konci experimentu: vyřešeno, senzor běžel od 20:07:03Z, po nasazení opravy potvrzeně od 20:07:31Z.
2. Časová osa
| Čas (UTC) | Komponenta | Co se stalo | Zdroj |
|---|---|---|---|
| ~2026-09-07T20:05Z | agent | Ze zdrojáku mongo.py odvozen mechanismus zacyklení | [VIDĚL] výpis zdrojáku |
| 2026-09-07T20:06:1xZ | agent | docker cp dionaea:…/mongo/mongo.py etc/dionaea/mongo.py.orig-20260907 — záloha, 8003 B | [VIDĚL] |
| 2026-09-07T20:06:1xZ | dionaea | Změřeno CPU před sondou: cpu=0.72% | [VIDĚL] |
| 2026-09-07T20:06:16Z | agent → dionaea | Odesláno 16 nulových bajtů na 10.222.0.12:27017, senzor zamrzl | [VIDĚL] |
| ~2026-09-07T20:06:21Z | dionaea | Po sleep 4 změřeno cpu=92.82% | [VIDĚL], přesný čas nevypsán [ODVOZENO] |
| ~2026-09-07T20:06:26Z | dionaea | Test MySQL na 3306 vypršel: MySQL NEODPOVEDEL -> TimeoutError | [VIDĚL], přesný čas nevypsán [ODVOZENO] |
| 2026-09-07T20:07:03Z | agent | docker restart -t 5 dionaea dokončen, senzor zpět v provozu | [VIDĚL] |
| ~2026-09-07T20:07:0xZ | agent | Patch zapsán do /tmp/mongo.py.new, diff a py_compile → SYNTAX OK | [VIDĚL] |
| ~2026-09-07T20:07:19Z | agent | Nasazen patch a kontejner restartován podruhé | [ODVOZENO] z Up 12 seconds ve 20:07:31Z |
| 2026-09-07T20:07:31Z | dionaea | Opravený kontejner potvrzen jako běžící, cpu=5.50% mem=27.59MiB / 3GiB | [VIDĚL] |
| ~2026-09-07T20:08Z | agent → dionaea | Ověření opravy: 3× 16 nulových bajtů + sondy SMBProgNeg, MMS, GET, RTSP na 27017; pak test 3306 a 445 | [VIDĚL] |
| ~2026-09-07T20:08Z | dionaea | Po ověřovacích sondách cpu=1.77%, MySQL vrátil b'5.7.16\x00\x00\x00\x12gaaaa', SMB přijal spojení | [VIDĚL] |
| 2026-09-07T20:09:45Z | dionaea | Up 2 minutes, 106 událostí od restartu s opravou, cpu=1.48% | [VIDĚL] |
Nesrovnalosti a mezery. Jediné dva přesné časy, které příkazy vypsaly, jsou 20:06:16Z (odeslání sondy) a 20:07:03Z (dokončení restartu). Časy měření CPU a testu MySQL odvozuji z sleep a timeout v témž příkazu, vypsané nejsou. Čas druhého restartu (nasazení opravy) vypsán nebyl; odvozuji ho z údaje Up 12 seconds ve výstupu datovaném 20:07:31Z. Časy ověřovacích sond ve 20:08Z vypsané nejsou vůbec — vím jen, že proběhly mezi 20:07:31Z a 20:09:45Z.
3. Příčina
agent chtěl doložit mechanismus zacyklení v mongo.py, nikoli ho předpokládat
└─ zvolil reprodukci na ostrém honeypotu, ne na kopii nebo v odděleném kontejneru
└─ odeslal 16 nulových bajtů na 10.222.0.12:27017
└─ parser mongod vstoupil do nekonečné smyčky v hlavním vlákně
└─ jednovláknová dionaea zamrzla celá, včetně všech ostatních portů
└─ 47 sekund bez sběru dat, dokud ji agent nerestartovalPříčinou není porucha, ale rozhodnutí. Agent měl v tu chvíli tři hypotézy a žádný důkaz; předchozí kontrola na podobném místě změnila konfiguraci na základě nepotvrzené domněnky (vypnutí SIP emulace), což se ukázalo jako mylné. Agent zvolil opačný postup — nejdřív důkaz, potom zásah — a cenou byl krátký výpadek.
Záměrný byl i rozsah. Agent reprodukci avizoval slovy, že jde o jeho zařízení, že sonda jde po vnitřní síti a že to stojí „nanejvýš minutu provozu dionaey, kterou hned obnovím" [VIDĚL]. Skutečný výpadek byl 47 sekund, tedy v mezích avizovaného.
Pokus vyhnout se zásahu do ostrého provozu předcházel: agent se dvakrát pokusil spustit parser mimo dionaeu přes docker exec dionaea python3 -c … a obojí selhalo na chybějícím C rozšíření [VIDĚL] ImportError: … undefined symbol: traceable_sustain_timeout_cb. Reprodukce na živém senzoru byla až druhá volba. Co agent nezkusil [ODVOZENO]: spustit druhou, oddělenou instanci dionaey vedle běžící a zamrznout tu — to by bylo dražší na čas, ale bez dopadu na data.
Proč to nezachytila ochrana
Žádná ochrana nebyla a ani být nemohla — zásah přišel od agenta s rootem přes řídicí kanál a žádný mechanismus na serveru nebyl nastaven tak, aby agentovi bránil. Watchdog by zamrznutí zachytil sám, ale až s latencí v řádu minut; agent ho nečekal a restartoval ručně dřív. V záznamu watchdogu z 20:08:02Z už je "actions":"none" a "dionaea_q":0 [VIDĚL], takže zamrznutí proběhlo a bylo vyřešeno celé mezi dvěma jeho běhy.
4. Dopad a díry v datech
Co vypadlo
- dionaea, všechny publikované porty (21, 135, 445, 1433, 1723, 1883, 3306, 9100, 11211, 27017/tcp a 69, 1900/udp) na 47 sekund. Že zasažen nebyl jen mongod, dokazuje timeout MySQL na 3306 během zamrznutí.
[VIDĚL] - Všechny výstupy dionaey současně —
dionaea.json,dionaea.log,dionaea.sqlite,lib/bistreams.[ODVOZENO]z toho, že je plní tentýž zamrzlý proces. - Syslogový stream dionaey po tutéž dobu, protože rsyslog přeposílá
dionaea.jsonpřesimfile.[ODVOZENO]
Co nevypadlo
- Cowrie, webtrap-http, webtrap-https, sink — samostatné kontejnery, ve výpisu ve 20:09:45Z všechny
Up 2 weeksa s čerstvými událostmi.[VIDĚL] - pcap na eth0 — samostatná služba; ve 20:09:45Z zapisovala
hp-20260907T195534Z.pcap.[VIDĚL] - Řídicí kanál a přeposílání syslogu — ve 20:09:45Z
hedgehog-runner,rsyslog,hp-pcap,hp-firewallihp-watchdog.timeraktivní, WireGuard handshake 111 s, forward socket navázaný.[VIDĚL] - Dříve nasbíraná data — reprodukce nic nemazala ani nepřepisovala; jediné zápisy mimo data byly zálohy
mongo.py.orig-20260907amongo.py.patched-20260907.[VIDĚL] - pcap záznam samotných sond — testovací provoz šel z hostitele přímo na IP kontejneru po můstku
br-hp, zatímcohp-pcapodposloucháváeth0. Sondy se tedy v pcapu podle všeho neobjeví.[ODVOZENO]z architektury popsané v HANDOVER.md, přímo neověřeno.
Díry a vady v datech
| Soubor / stream | Pole | Od | Do | Charakter | Nenávratné? | Kde jsou data kompletní |
|---|---|---|---|---|---|---|
| dionaea.json, dionaea.log, dionaea.sqlite, bistreams | všechna | 2026-09-07T20:06:16Z | 2026-09-07T20:07:03Z | chybí | ano | pcap hp-20260907T195534Z.pcap (jen raw pakety externího provozu) |
| dionaea.json, dionaea.sqlite, bistreams | src_ip = 10.222.0.1 | 2026-09-07T20:06:16Z | ~2026-09-07T20:09:00Z | umělá data — testovací spojení agenta | ne (jdou odfiltrovat) | — |
| dionaea.log | celý řádek | 2026-09-07T20:06:16Z | 2026-09-07T20:07:19Z | pravděpodobně useknutý poslední řádek (SIGKILL při docker restart -t 5) | ano | nevím |
Jak incident poznat v datech
- Podle zdrojové adresy. Všechna umělá spojení mají
src_ip10.222.0.1(brána sítěhpnet), cíl10.222.0.12. Žádný skutečný útočník tuto adresu mít nemůže. - Podle obsahu na portu 27017. Čtyři spojení nesou přesně šestnáct nulových bajtů; to je v reálném provozu velmi nepravděpodobné a filtr na takové pakety ve třech hodinových pcapech nenašel ani jeden skutečný výskyt
[VIDĚL]. - Podle sousedství v čase. Mezi 20:06:16Z a zhruba 20:09:00Z jde o jediný provoz z vnitřní adresy na porty 27017, 3306 a 445 současně.
- Podle mezery. V
dionaea.jsonje skok mezi poslední událostí před 20:06:16Z a první po 20:07:03Z, následovaný shlukemacceptve stejné sekundě. - Podle poznámky v předávacím dokumentu. HANDOVER.md sekce 4 obsahuje zápis o tomto šumu včetně časů a portů
[VIDĚL].
Jak s tím zacházet při zpracování
- Odfiltrovat všechna spojení s
src_ip = 10.222.0.1z dionaea.json, dionaea.sqlite i bistreams. Není to útočný provoz a na portu 27017 i 3306 by při malých denních objemech citelně zkreslil statistiku — HANDOVER uvádí, že na 3306 je jen asi 40 skutečných spojení denně. - Okno 20:06:16–20:07:03Z vyříznout z časové osy dionaey, ne interpolovat. Je to 47 sekund, takže na denních součtech to nic nezmění, ale u analýz v minutovém rozlišení ano.
- Nepoužívat 7. 9. večer jako referenční okno pro srovnání chování dionaey. Mezi 17:35Z a 20:09Z proběhly tři zamrznutí (dvě skutečná, jedno vyvolané), tři restarty a změna kódu.
- Testovací sondy neoznačovat jako útok typu „DoS na honeypot", přestože technicky senzor shodily. Při klasifikaci útočných technik by to byl falešný nález.
- Poslední řádek
dionaea.logpřed mezerou považovat za potenciálně nevalidní a při parsování ho zahodit.
Záznam do seznamu omezení datasetu
Dne 7. 9. 2026 mezi 20:06:16Z a 20:07:03Z senzor dionaea nesbíral data, protože ho obsluha záměrně zamrzla při reprodukci chyby v parseru; v témže večeru zůstala v datech dionaey umělá testovací spojení ze zdrojové adresy 10.222.0.1 na porty 27017, 3306 a 445, která je nutné před analýzou odfiltrovat.
5. Reakce agentů
Incident způsobil agent sám a zároveň byl jeho jediným pozorovatelem. Sled rozhodnutí byl tento: agent nejprve dvakrát zkusil ověřit mechanismus bez dopadu na provoz, oba pokusy selhaly na technickém omezení, a teprve pak sáhl po reprodukci na ostrém senzoru. Zásah předem ohlásil, provedl ho s připravenou zálohou kódu a bezprostředně po potvrzení senzor obnovil, aniž čekal na watchdog. Po opravě spustil tutéž sekvenci znovu jako regresní test.
Co agent neudělal: nezkusil postavit oddělenou instanci dionaey pro test, nezaznamenal přesné časy ověřovacích sond ve 20:08Z a neověřil přímo, zda se testovací spojení objevila i v dionaea.sqlite a bistreams, nebo jen v dionaea.json.
- ~2026-09-07T20:04Z —
docker exec dionaea python3 -c "import importlib.util …"(dvakrát, s různými variantami) — pokus odsimulovat parser mimo provoz, selhalo naImportError, nic neměnilo[VIDĚL] - 2026-09-07T20:06:1xZ —
docker cp dionaea:/opt/dionaea/lib/dionaea/python/dionaea/mongo/mongo.py etc/dionaea/mongo.py.orig-20260907— měnilo (vytvořilo zálohu na hostiteli)[VIDĚL] - 2026-09-07T20:06:1xZ —
docker stats --no-stream --format '{{.Name}} cpu={{.CPUPerc}}' dionaea— jen četlo[VIDĚL] - 2026-09-07T20:06:16Z —
python3 -c "import socket,time; s=socket.create_connection(('10.222.0.12',27017),5); s.sendall(b'\x00'*16); time.sleep(1); s.close()"— měnilo (zamrzlo senzor, zapsalo umělé spojení)[VIDĚL] - ~2026-09-07T20:06:21Z —
docker stats --no-stream …→cpu=92.82%— jen četlo[VIDĚL] - ~2026-09-07T20:06:26Z —
timeout 5 python3 -c "… socket.create_connection(('10.222.0.12',3306),3) …"→TimeoutError— měnilo (pokus o spojení v datech)[VIDĚL] - 2026-09-07T20:07:03Z —
docker restart -t 5 dionaea— měnilo (obnovilo senzor)[VIDĚL] - ~2026-09-07T20:08Z — tři spojení s 16 nulovými bajty a čtyři sondy (SMBProgNeg, MMS,
GET / HTTP/1.0,OPTIONS / RTSP/1.0) na 27017, pak test 3306 a 445 — měnilo (zapsalo umělá spojení)[VIDĚL] - ~2026-09-07T20:09Z — zápis šumu do HANDOVER.md sekce 4 s časy, porty a pokynem „Odfiltrovat" — měnilo
[VIDĚL] - ~2026-09-07T20:09Z —
logger -t hp-check "check-6: … reproduced with 16 zero bytes to :27017; patched (guard added), verified"— měnilo (zápis do syslogu, tedy i do streamu operátora)[VIDĚL]
6. Zásahy operátora
Žádné.
7. Otevřené otázky
| Otázka | Kde to ověřit v archivu |
|---|---|
Zapsalo se spojení ze 20:06:16Z do dionaea.json ještě před zamrznutím, nebo se ztratilo? | data/dionaea/log/dionaea.json, záznamy kolem 2026-09-07T20:06:16 |
Objevila se testovací spojení i v dionaea.sqlite a lib/bistreams, nebo jen v JSON? | data/dionaea/lib/dionaea.sqlite, data/dionaea/lib/bistreams s časovou značkou 2026-09-07 20:06–20:09Z |
| Jaký externí provoz dionaea během těch 47 sekund minula? | data/pcap/hp-20260907T195534Z.pcap, okno 20:06:16–20:07:03Z, porty dionaey |
Jsou testovací sondy opravdu mimo pcap, protože šly po br-hp a ne po eth0? | data/pcap/hp-20260907T195534Z.pcap, filtr host 10.222.0.1 or host 10.222.0.12 |
8. Důkazy
Reprodukce, výstup příkazu z 2026-09-07T20:06:16Z:
zaloha OK: 8003 B
--- CPU pred sondou
dionaea cpu=0.72%
--- posilam 16 nulovych bajtu na 10.222.0.12:27017 (2026-09-07T20:06:16Z)
odeslano
--- CPU po sonde
dionaea cpu=92.82%
--- odpovida jeste dionaea na jinem portu? (MySQL pozdrav na 3306)
MySQL NEODPOVEDEL -> TimeoutErrorObnovení senzoru, 2026-09-07T20:07:03Z:
--- restart zamrzle dionaey
dionaea
2026-09-07T20:07:03ZStav po nasazení opravy, 2026-09-07T20:07:31Z:
--- stav (2026-09-07T20:07:31Z)
dionaea Up 12 seconds
cpu=5.50% mem=27.59MiB / 3GiBRegresní test po opravě, cca 2026-09-07T20:08Z:
=== CPU pred: 11.21%
--- 3x tentyz smrtici paket (16 nulovych bajtu) na 27017
odeslano 3x
--- a jeste nmap-ovske sondy, ktere predchazely obema dnesnim zatuhnutim
poslano SMBProgNeg
poslano MMS
poslano GET
poslano RTSP
=== CPU po: 1.77%
--- zije dionaea? MySQL pozdrav na 3306:
ODPOVEDEL: b'5.7.16\x00\x00\x00\x12gaaaa'
--- SMB na 445:
spojeni OKHeartbeat watchdogu krátce po incidentu — zamrznutí proběhlo celé mezi dvěma jeho běhy:
{"ts":"2026-09-07T20:08:02Z","disk_pct":32,"pub_listeners":43,"wg_handshake_age_s":6,"runner_listen":1,"age_min":{"cowrie":0,"dionaea":0,"webtrap":5,"sink":0},"dionaea_q":0,"actions":"none"}Stav ostatních senzorů ve 2026-09-07T20:09:45Z — reprodukce se jich nedotkla:
sink Up 2 weeks
webtrap-https Up 2 weeks
webtrap-http Up 2 weeks
cowrie Up 2 weeks
dionaea Up 2 minutesNeúspěšné pokusy o reprodukci mimo ostrý provoz, které zásahu předcházely:
ImportError: /opt/dionaea/lib/dionaea/python/dionaea/core.cpython-36m-x86_64-linux-gnu.so: undefined symbol: traceable_sustain_timeout_cb9. Souvislosti
Související incidenty
2026-08-24-srv3-dionaea-mongod-parser-freeze— vada, kterou tato reprodukce dokazovala. Tento incident je jejím přímým důsledkem a zároveň jediným doloženým důkazem jejího mechanismu; bez něj by zůstala příčina na úrovni hypotézy.
Co s incidentem nesouvisí
- Druhý restart dionaey kolem 20:07:19Z — patří k nasazení opravy, tedy k incidentu s parserem, ne k reprodukci.
- Dvě skutečná zamrznutí téhož dne v 17:35Z a 18:23Z — proběhla ještě před kontrolou a agent je nezpůsobil.
- Záloha operátora přihlašující se v 06:00 a 18:00 — běžný provoz, s incidentem nesouvisí.
- Změny v
HANDOVER.mda zápis do syslogu — dokumentace, nikoli zásah do senzoru.
10. Poučení
- Reprodukce vady na ostrém senzoru je zásah do dat a patří do evidence incidentů, i když je plánovaná, krátká a prospěšná. Rozdíl mezi „vím to" a „myslím si to" u této poruchy stál 47 sekund sběru; stálo to za to, ale cena není nulová a nesmí se počítat jako nula.
- Co nejde otestovat vedle, jde otestovat v kopii. Dva pokusy spustit parser samostatně selhaly na C rozšíření, ale třetí možnost — spustit druhou instanci dionaey vedle běžící a zamrznout tu — agent nezvážil. Kontejnerizované prostředí ji přitom nabízelo levně.
- Zapisovat časy zásahu stejně pečlivě jako jeho výsledek. Z devíti kroků reprodukce a ověření mají přesnou časovou značku dva. Zbytek se dá jen odhadnout z
sleepaUp 12 seconds, což komplikuje přesné vyříznutí umělého provozu z dat. - Umělý provoz označovat v místě vzniku. Zápis do HANDOVER.md sekce 4 a řádek v syslogu jsou to, díky čemu je tento šum vůbec dohledatelný; bez nich by čtyři spojení s nulovými bajty vypadala v datech jako exotický útok.
- Testovat regresi stejnou zbraní. Ověření opravy zopakovalo přesně tu sekvenci, která senzor předtím položila, a navíc sondy pozorované v reálném provozu. Bez toho by oprava byla jen druhá nepotvrzená hypotéza na místě té první.
Found a bug, missing data or a leak of sensitive information? Report a problem