From 65d585569be3ff61359aaa7df7bdf58add976159 Mon Sep 17 00:00:00 2001 From: anti Date: Sun, 12 Apr 2026 00:34:45 -0400 Subject: [PATCH] fix(telnet): replace Cowrie with real busybox telnetd + rsyslog logging Cowrie was exposing an SSH daemon on port 22 alongside the telnet service even when COWRIE_SSH_ENABLED=false, contaminating deployments that did not request an SSH service. New implementation mirrors the SSH service pattern: - busybox telnetd in foreground mode on port 23 - /bin/login for real PAM authentication (brute-force attempts logged) - rsyslog RFC 5424 bridge piped to stdout for Docker log capture - Configurable root password and hostname via env vars - No Cowrie dependency --- decnet.db-shm | Bin 32768 -> 0 bytes decnet.db-wal | Bin 939392 -> 0 bytes decnet/services/telnet.py | 46 +++++++++++------ templates/telnet/Dockerfile | 48 ++++++++++++++++++ templates/telnet/entrypoint.sh | 40 +++++++++++++++ tests/.hypothesis/constants/071376f7808c803b | 4 -- tests/.hypothesis/constants/0ba82ca4ea63f3bc | 4 -- tests/.hypothesis/constants/0ddcef3521551894 | 4 -- tests/.hypothesis/constants/15d50d1e53b9b5c3 | 4 -- tests/.hypothesis/constants/19d5adc9efd5ec68 | 4 -- tests/.hypothesis/constants/1f005a833d034313 | 4 -- tests/.hypothesis/constants/1f12b014d4fe2068 | 4 -- tests/.hypothesis/constants/219a36e8b671f84b | 4 -- tests/.hypothesis/constants/2220ccbe8a25f02d | 4 -- tests/.hypothesis/constants/2db3d63e8d96a289 | 4 -- tests/.hypothesis/constants/2f0b53ebdb35c4e1 | 4 -- tests/.hypothesis/constants/30a7ffe86227f7f1 | 4 -- tests/.hypothesis/constants/349ec22a74b50191 | 4 -- tests/.hypothesis/constants/37d6bf6c6c0b58e6 | 4 -- tests/.hypothesis/constants/3cc47bb868bcb8f4 | 4 -- tests/.hypothesis/constants/42a1dcb5c22b1ac1 | 4 -- tests/.hypothesis/constants/507a3145954fca93 | 4 -- tests/.hypothesis/constants/53a42446f9f19b20 | 4 -- tests/.hypothesis/constants/574dbe54f9b23d3e | 4 -- tests/.hypothesis/constants/5a5554db0771f35b | 4 -- tests/.hypothesis/constants/5feefba3d1c668ca | 4 -- tests/.hypothesis/constants/62e387790ed5b79f | 4 -- tests/.hypothesis/constants/66bd79275cd609e8 | 4 -- tests/.hypothesis/constants/76302489300fdc45 | 4 -- tests/.hypothesis/constants/77b4b42ea3b9c9bf | 4 -- tests/.hypothesis/constants/79661beef79449a5 | 4 -- tests/.hypothesis/constants/7f9302a54093ce41 | 4 -- tests/.hypothesis/constants/8029f0494746966f | 4 -- tests/.hypothesis/constants/87dce71ef389d477 | 4 -- tests/.hypothesis/constants/8b9368be0f77a253 | 4 -- tests/.hypothesis/constants/8c8bf0135bf44b74 | 4 -- tests/.hypothesis/constants/8c9335cb8231944a | 4 -- tests/.hypothesis/constants/8e330e30c399dccc | 4 -- tests/.hypothesis/constants/9193e12e937c9da2 | 4 -- tests/.hypothesis/constants/952b61539a326753 | 4 -- tests/.hypothesis/constants/95eb634544ca6000 | 4 -- tests/.hypothesis/constants/996aa9c745349122 | 4 -- tests/.hypothesis/constants/9f85e820bb1eb903 | 4 -- tests/.hypothesis/constants/a115dde40ee13bf8 | 4 -- tests/.hypothesis/constants/a3207e9522fed10c | 4 -- tests/.hypothesis/constants/a36433a7a8a46f4d | 4 -- tests/.hypothesis/constants/a36bdeb88e27cda2 | 4 -- tests/.hypothesis/constants/a4b0cd024dec37b3 | 4 -- tests/.hypothesis/constants/a92a9b5d6ef7fbda | 4 -- tests/.hypothesis/constants/ad18d933a368774b | 4 -- tests/.hypothesis/constants/b0cdd7ca461ac3a7 | 4 -- tests/.hypothesis/constants/b3ae76f264e289ba | 4 -- tests/.hypothesis/constants/b4fbfe7d71d1fde1 | 4 -- tests/.hypothesis/constants/c1bae63b725863f0 | 4 -- tests/.hypothesis/constants/cac20128001ccd85 | 4 -- tests/.hypothesis/constants/ceb1d0465029fa83 | 4 -- tests/.hypothesis/constants/cf9d3e39a6bf6308 | 4 -- tests/.hypothesis/constants/d479b632891acb05 | 4 -- tests/.hypothesis/constants/da39a3ee5e6b4b0d | 4 -- tests/.hypothesis/constants/da43cd4d80a43169 | 4 -- tests/.hypothesis/constants/df40fa14165138c7 | 4 -- tests/.hypothesis/constants/e04c4b026eeb7e26 | 4 -- tests/.hypothesis/constants/f9f2aace37ce402b | 4 -- tests/.hypothesis/constants/fb7b3bbd8bd7b0f3 | 4 -- .../unicode_data/16.0.0/charmap.json.gz | Bin 22308 -> 0 bytes .../unicode_data/16.0.0/codec-utf-8.json.gz | Bin 60 -> 0 bytes tests/test_composer.py | 4 +- tests/test_services.py | 39 +++++++------- 68 files changed, 142 insertions(+), 271 deletions(-) delete mode 100644 decnet.db-shm delete mode 100644 decnet.db-wal create mode 100644 templates/telnet/Dockerfile create mode 100644 templates/telnet/entrypoint.sh delete mode 100644 tests/.hypothesis/constants/071376f7808c803b delete mode 100644 tests/.hypothesis/constants/0ba82ca4ea63f3bc delete mode 100644 tests/.hypothesis/constants/0ddcef3521551894 delete mode 100644 tests/.hypothesis/constants/15d50d1e53b9b5c3 delete mode 100644 tests/.hypothesis/constants/19d5adc9efd5ec68 delete mode 100644 tests/.hypothesis/constants/1f005a833d034313 delete mode 100644 tests/.hypothesis/constants/1f12b014d4fe2068 delete mode 100644 tests/.hypothesis/constants/219a36e8b671f84b delete mode 100644 tests/.hypothesis/constants/2220ccbe8a25f02d delete mode 100644 tests/.hypothesis/constants/2db3d63e8d96a289 delete mode 100644 tests/.hypothesis/constants/2f0b53ebdb35c4e1 delete mode 100644 tests/.hypothesis/constants/30a7ffe86227f7f1 delete mode 100644 tests/.hypothesis/constants/349ec22a74b50191 delete mode 100644 tests/.hypothesis/constants/37d6bf6c6c0b58e6 delete mode 100644 tests/.hypothesis/constants/3cc47bb868bcb8f4 delete mode 100644 tests/.hypothesis/constants/42a1dcb5c22b1ac1 delete mode 100644 tests/.hypothesis/constants/507a3145954fca93 delete mode 100644 tests/.hypothesis/constants/53a42446f9f19b20 delete mode 100644 tests/.hypothesis/constants/574dbe54f9b23d3e delete mode 100644 tests/.hypothesis/constants/5a5554db0771f35b delete mode 100644 tests/.hypothesis/constants/5feefba3d1c668ca delete mode 100644 tests/.hypothesis/constants/62e387790ed5b79f delete mode 100644 tests/.hypothesis/constants/66bd79275cd609e8 delete mode 100644 tests/.hypothesis/constants/76302489300fdc45 delete mode 100644 tests/.hypothesis/constants/77b4b42ea3b9c9bf delete mode 100644 tests/.hypothesis/constants/79661beef79449a5 delete mode 100644 tests/.hypothesis/constants/7f9302a54093ce41 delete mode 100644 tests/.hypothesis/constants/8029f0494746966f delete mode 100644 tests/.hypothesis/constants/87dce71ef389d477 delete mode 100644 tests/.hypothesis/constants/8b9368be0f77a253 delete mode 100644 tests/.hypothesis/constants/8c8bf0135bf44b74 delete mode 100644 tests/.hypothesis/constants/8c9335cb8231944a delete mode 100644 tests/.hypothesis/constants/8e330e30c399dccc delete mode 100644 tests/.hypothesis/constants/9193e12e937c9da2 delete mode 100644 tests/.hypothesis/constants/952b61539a326753 delete mode 100644 tests/.hypothesis/constants/95eb634544ca6000 delete mode 100644 tests/.hypothesis/constants/996aa9c745349122 delete mode 100644 tests/.hypothesis/constants/9f85e820bb1eb903 delete mode 100644 tests/.hypothesis/constants/a115dde40ee13bf8 delete mode 100644 tests/.hypothesis/constants/a3207e9522fed10c delete mode 100644 tests/.hypothesis/constants/a36433a7a8a46f4d delete mode 100644 tests/.hypothesis/constants/a36bdeb88e27cda2 delete mode 100644 tests/.hypothesis/constants/a4b0cd024dec37b3 delete mode 100644 tests/.hypothesis/constants/a92a9b5d6ef7fbda delete mode 100644 tests/.hypothesis/constants/ad18d933a368774b delete mode 100644 tests/.hypothesis/constants/b0cdd7ca461ac3a7 delete mode 100644 tests/.hypothesis/constants/b3ae76f264e289ba delete mode 100644 tests/.hypothesis/constants/b4fbfe7d71d1fde1 delete mode 100644 tests/.hypothesis/constants/c1bae63b725863f0 delete mode 100644 tests/.hypothesis/constants/cac20128001ccd85 delete mode 100644 tests/.hypothesis/constants/ceb1d0465029fa83 delete mode 100644 tests/.hypothesis/constants/cf9d3e39a6bf6308 delete mode 100644 tests/.hypothesis/constants/d479b632891acb05 delete mode 100644 tests/.hypothesis/constants/da39a3ee5e6b4b0d delete mode 100644 tests/.hypothesis/constants/da43cd4d80a43169 delete mode 100644 tests/.hypothesis/constants/df40fa14165138c7 delete mode 100644 tests/.hypothesis/constants/e04c4b026eeb7e26 delete mode 100644 tests/.hypothesis/constants/f9f2aace37ce402b delete mode 100644 tests/.hypothesis/constants/fb7b3bbd8bd7b0f3 delete mode 100644 tests/.hypothesis/unicode_data/16.0.0/charmap.json.gz delete mode 100644 tests/.hypothesis/unicode_data/16.0.0/codec-utf-8.json.gz diff --git a/decnet.db-shm b/decnet.db-shm deleted file mode 100644 index 7c166666a99a7637ebc10bb57b45bb316d59a9d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI*RZtaS7{>8GA|M?WHg;kMirtE0ccEf;cemIrHe#SCc6WD+UFfCWc;%h$>N?|v zTzGNzoEe{Q=9_oV?wR*_=eK*k8=4l5xiT8t4T3%yHN@C4@e$FVqmoh+;=X(fNsLU6 z4GsI6QqC=V=s*77X!UcMeZT*)tkc}F4vcIv7~9?0=CL&o9@cM9t9n^AlU2Q~>SI-3 ztNK~h->Lyt4YX>IQGe%|S!RxzVfHtBn|;lmI`5he<};Gsy$Lq1na}Xw?x%U)yzl8< z)A?U^29cHoBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|Drd zBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}r;u0XO446Q0KV9(?d4 zfFR?o0a?gKC^^Z^Vw+}Aj0Bt`kb%5xbWXHVCE#QMck(%T0>w+fSppt}IV)PZ5^%DB z7x^hlI2EW$EgBF-D>~4P-V9(EW0=GY=CQ=dQz~8pju7ys0L3UxMXFJohBTu!9qCRi z0~yX(CNq=yEM*Ow*iI5D9OX0@xz1f4^MZGd7)m`QV2gk+1u0G$DiKK?8qu6KbfO1+ z7{mz1F@;$yU>R%KOd@+Yz%kBni5uMG2`_nX%ajU{fFlI_DMSg%Qkm-1r7_X8r86<~ zWiTTd&s1i!kmamn3p?1$L5_2l%iQEXPkF@$M+~K&60k)ekiwLt995`6J(|#hc66a9 z{TRY1CNPaT#Ib_)Y-K0O9O4A$xWX+SkjiV)Y?)Fa5^#h-FhwXuc_OGueVWpe_H?Be z{Ta$=CNiD5EMg_`Y-1PuILt}TbCugX&0@sYMtv=#8Z!y2dswDvlNI(J-kbndv@IMOt0DA|O<^TWy diff --git a/decnet.db-wal b/decnet.db-wal deleted file mode 100644 index 143b25b38e26c5e4fbeab362e9ea84a707185819..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939392 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 diff --git a/decnet/services/telnet.py b/decnet/services/telnet.py index 9395d34..f022fac 100644 --- a/decnet/services/telnet.py +++ b/decnet/services/telnet.py @@ -1,31 +1,47 @@ +from pathlib import Path + from decnet.services.base import BaseService +TEMPLATES_DIR = Path(__file__).parent.parent.parent / "templates" / "telnet" + class TelnetService(BaseService): + """ + Real telnetd using busybox telnetd + rsyslog logging pipeline. + + Replaced Cowrie emulation (which also started an SSH daemon on port 22) + with a real busybox telnetd so only port 23 is exposed and auth events + are logged as RFC 5424 via the same rsyslog bridge used by the SSH service. + + service_cfg keys: + password Root password (default: "admin") + hostname Override container hostname + """ + name = "telnet" ports = [23] - default_image = "cowrie/cowrie" + default_image = "build" - def compose_fragment(self, decky_name: str, log_target: str | None = None, service_cfg: dict | None = None) -> dict: + def compose_fragment( + self, + decky_name: str, + log_target: str | None = None, + service_cfg: dict | None = None, + ) -> dict: + cfg = service_cfg or {} env: dict = { - "COWRIE_HONEYPOT_HOSTNAME": decky_name, - "COWRIE_TELNET_ENABLED": "true", - "COWRIE_TELNET_LISTEN_ENDPOINTS": "tcp:23:interface=0.0.0.0", - # Disable SSH so this container is telnet-only - "COWRIE_SSH_ENABLED": "false", + "TELNET_ROOT_PASSWORD": cfg.get("password", "admin"), } - if log_target: - host, port = log_target.rsplit(":", 1) - env["COWRIE_OUTPUT_TCP_ENABLED"] = "true" - env["COWRIE_OUTPUT_TCP_HOST"] = host - env["COWRIE_OUTPUT_TCP_PORT"] = port + if "hostname" in cfg: + env["TELNET_HOSTNAME"] = cfg["hostname"] + return { - "image": "cowrie/cowrie", + "build": {"context": str(TEMPLATES_DIR)}, "container_name": f"{decky_name}-telnet", "restart": "unless-stopped", "cap_add": ["NET_BIND_SERVICE"], "environment": env, } - def dockerfile_context(self): - return None + def dockerfile_context(self) -> Path: + return TEMPLATES_DIR diff --git a/templates/telnet/Dockerfile b/templates/telnet/Dockerfile new file mode 100644 index 0000000..155af04 --- /dev/null +++ b/templates/telnet/Dockerfile @@ -0,0 +1,48 @@ +ARG BASE_IMAGE=debian:bookworm-slim +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + busybox \ + rsyslog \ + procps \ + net-tools \ + && rm -rf /var/lib/apt/lists/* + +# rsyslog: forward auth.* and user.* to named pipe in RFC 5424 format +RUN printf '%s\n' \ + '# DECNET log bridge — auth + user events → named pipe as RFC 5424' \ + '$template RFC5424fmt,"<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n"' \ + 'auth,authpriv.* |/var/run/decnet-logs;RFC5424fmt' \ + 'user.* |/var/run/decnet-logs;RFC5424fmt' \ + > /etc/rsyslog.d/99-decnet.conf + +# Silence default catch-all rules +RUN sed -i \ + -e 's|^\(\*\.\*;auth,authpriv\.none\)|#\1|' \ + -e 's|^auth,authpriv\.\*|#auth,authpriv.*|' \ + /etc/rsyslog.conf + +# Realistic motd and issue banner +RUN echo "Ubuntu 20.04.6 LTS" > /etc/issue.net && \ + echo "Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-150-generic x86_64)" > /etc/motd && \ + echo "" >> /etc/motd && \ + echo " * Documentation: https://help.ubuntu.com" >> /etc/motd + +# Fake lived-in files +RUN mkdir -p /root/scripts /root/backups && \ + printf '#!/bin/bash\n# DB backup script\nmysqldump -u root -padmin prod_db > /root/backups/db.sql\n' > /root/scripts/backup.sh && \ + printf 'DB_HOST=10.0.0.5\nDB_USER=admin\nDB_PASS=changeme123\n' > /root/.env && \ + printf 'alias ll="ls -alF"\nalias la="ls -A"\nexport HISTSIZE=1000\n' >> /root/.bashrc + +# Log bash commands via syslog +RUN echo 'PROMPT_COMMAND='"'"'logger -p user.info -t bash "CMD uid=$UID pwd=$PWD cmd=$(history 1 | sed "s/^ *[0-9]* *//")";'"'" >> /root/.bashrc + +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +EXPOSE 23 + +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD kill -0 1 || exit 1 + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/templates/telnet/entrypoint.sh b/templates/telnet/entrypoint.sh new file mode 100644 index 0000000..f9b7376 --- /dev/null +++ b/templates/telnet/entrypoint.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -e + +# Configure root password (default: admin) +ROOT_PASSWORD="${TELNET_ROOT_PASSWORD:-admin}" +echo "root:${ROOT_PASSWORD}" | chpasswd + +# Optional: override hostname inside container +if [ -n "$TELNET_HOSTNAME" ]; then + echo "$TELNET_HOSTNAME" > /etc/hostname + hostname "$TELNET_HOSTNAME" +fi + +# Fake bash history so the box looks used +if [ ! -f /root/.bash_history ]; then + cat > /root/.bash_history <<'HIST' +apt update && apt upgrade -y +systemctl status mysql +tail -f /var/log/syslog +df -h +ps aux +cd /root/scripts +bash backup.sh +crontab -e +ls /root/backups +cat /root/.env +HIST +fi + +# Logging pipeline: named pipe → rsyslogd (RFC 5424) → stdout +mkfifo /var/run/decnet-logs + +# Relay pipe to stdout so Docker captures all syslog events +cat /var/run/decnet-logs & + +# Start rsyslog +rsyslogd + +# busybox telnetd: foreground mode, real /bin/login for PAM auth logging +exec busybox telnetd -F -l /bin/login -p 23 diff --git a/tests/.hypothesis/constants/071376f7808c803b b/tests/.hypothesis/constants/071376f7808c803b deleted file mode 100644 index 2f6bf44..0000000 --- a/tests/.hypothesis/constants/071376f7808c803b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/cli.py -# hypothesis_version: 6.151.11 - -[8000, ',', ', ', '--all', '--api', '--api-port', '--archetype', '--config', '--deckies', '--decky', '--distro', '--dry-run', '--emit-syslog', '--host', '--id', '--interface', '--ip-start', '--ipvlan', '--log-file', '--log-target', '--min-deckies', '--mode', '--mutate-interval', '--no-cache', '--output', '--port', '--randomize-distros', '--randomize-services', '--services', '--subnet', '--watch', '--web-port', '-a', '-c', '-d', '-f', '-i', '-m', '-n', '-o', '-w', '/index.html', 'Available Services', 'Default Services', 'Description', 'Display Name', 'Docker Image', 'Image', 'Machine Archetypes', 'Name', 'Ports', 'Slug', 'archetypes', 'bold cyan', 'correlate', 'decnet', 'decnet.cli', 'decnet.log', 'decnet.web.api:app', 'decnet_web', 'dim', 'dist', 'distros', 'green', 'json', 'linux', 'mutate', 'services', 'swarm', 'syslog', 'table', 'unihost', 'uvicorn', 'web'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/0ba82ca4ea63f3bc b/tests/.hypothesis/constants/0ba82ca4ea63f3bc deleted file mode 100644 index b7a563c..0000000 --- a/tests/.hypothesis/constants/0ba82ca4ea63f3bc +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/.venv/bin/pytest -# hypothesis_version: 6.151.12 - -['__main__'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/0ddcef3521551894 b/tests/.hypothesis/constants/0ddcef3521551894 deleted file mode 100644 index 25e79e5..0000000 --- a/tests/.hypothesis/constants/0ddcef3521551894 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/env.py -# hypothesis_version: 6.151.11 - -['.env', '.env.local', '0.0.0.0', '8000', '8080', 'DECNET_ADMIN_USER', 'DECNET_API_HOST', 'DECNET_API_PORT', 'DECNET_DEVELOPER', 'DECNET_JWT_SECRET', 'DECNET_WEB_HOST', 'DECNET_WEB_PORT', 'False', 'admin', 'true'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/15d50d1e53b9b5c3 b/tests/.hypothesis/constants/15d50d1e53b9b5c3 deleted file mode 100644 index ac4f157..0000000 --- a/tests/.hypothesis/constants/15d50d1e53b9b5c3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/tftp.py -# hypothesis_version: 6.151.12 - -['LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'restart', 'templates', 'tftp', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/19d5adc9efd5ec68 b/tests/.hypothesis/constants/19d5adc9efd5ec68 deleted file mode 100644 index 372bfa2..0000000 --- a/tests/.hypothesis/constants/19d5adc9efd5ec68 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/ingester.py -# hypothesis_version: 6.151.11 - -['.json', 'decnet.web.ingester', 'r', 'replace', 'utf-8'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/1f005a833d034313 b/tests/.hypothesis/constants/1f005a833d034313 deleted file mode 100644 index 5c6b47c..0000000 --- a/tests/.hypothesis/constants/1f005a833d034313 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/logging/forwarder.py -# hypothesis_version: 6.151.12 - -[2.0, ':'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/1f12b014d4fe2068 b/tests/.hypothesis/constants/1f12b014d4fe2068 deleted file mode 100644 index 177de92..0000000 --- a/tests/.hypothesis/constants/1f12b014d4fe2068 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/mongodb.py -# hypothesis_version: 6.151.12 - -[27017, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'mongodb', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/219a36e8b671f84b b/tests/.hypothesis/constants/219a36e8b671f84b deleted file mode 100644 index 275bac0..0000000 --- a/tests/.hypothesis/constants/219a36e8b671f84b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/repository.py -# hypothesis_version: 6.151.11 - -[] \ No newline at end of file diff --git a/tests/.hypothesis/constants/2220ccbe8a25f02d b/tests/.hypothesis/constants/2220ccbe8a25f02d deleted file mode 100644 index 5a64088..0000000 --- a/tests/.hypothesis/constants/2220ccbe8a25f02d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/snmp.py -# hypothesis_version: 6.151.12 - -[161, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'restart', 'snmp', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/2db3d63e8d96a289 b/tests/.hypothesis/constants/2db3d63e8d96a289 deleted file mode 100644 index 0b1c8a9..0000000 --- a/tests/.hypothesis/constants/2db3d63e8d96a289 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/deployer.py -# hypothesis_version: 6.151.12 - -[5.0, ', ', '--build', '--no-cache', '--watch', '-d', '-f', 'DECNET Deckies', 'Decky', 'Deployed Deckies', 'Hostname', 'IP', 'IPvlan', 'IPvlan L2', 'MACVLAN', 'Services', 'Status', '[green]up[/]', '[red]degraded[/]', 'absent', 'bold', 'build', 'cmdline', 'compose', 'decnet-compose.yml', 'decnet.cli', 'decnet.web.api:app', 'docker', 'down', 'green', 'manifest for', 'manifest unknown', 'mutate', 'name', 'not found', 'pid', 'pull access denied', 'red', 'rm', 'running', 'stop', 'up', 'uvicorn'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/2f0b53ebdb35c4e1 b/tests/.hypothesis/constants/2f0b53ebdb35c4e1 deleted file mode 100644 index 0596e50..0000000 --- a/tests/.hypothesis/constants/2f0b53ebdb35c4e1 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/sip.py -# hypothesis_version: 6.151.12 - -[5060, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'restart', 'sip', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/30a7ffe86227f7f1 b/tests/.hypothesis/constants/30a7ffe86227f7f1 deleted file mode 100644 index fa8fcbe..0000000 --- a/tests/.hypothesis/constants/30a7ffe86227f7f1 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/mssql.py -# hypothesis_version: 6.151.12 - -[1433, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'mssql', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/349ec22a74b50191 b/tests/.hypothesis/constants/349ec22a74b50191 deleted file mode 100644 index 8399e32..0000000 --- a/tests/.hypothesis/constants/349ec22a74b50191 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/composer.py -# hypothesis_version: 6.151.11 - -['/var/log/decnet', '3.8', 'BASE_IMAGE', 'DECNET_LOG_FILE', 'HOSTNAME', 'NET_ADMIN', 'args', 'bridge', 'build', 'cap_add', 'command', 'container_name', 'decnet_logs', 'depends_on', 'driver', 'environment', 'external', 'hostname', 'image', 'infinity', 'internal', 'ipv4_address', 'network_mode', 'networks', 'restart', 'services', 'sleep', 'sysctls', 'unless-stopped', 'version', 'volumes'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/37d6bf6c6c0b58e6 b/tests/.hypothesis/constants/37d6bf6c6c0b58e6 deleted file mode 100644 index be031d6..0000000 --- a/tests/.hypothesis/constants/37d6bf6c6c0b58e6 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/elasticsearch.py -# hypothesis_version: 6.151.12 - -[9200, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'elasticsearch', 'environment', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/3cc47bb868bcb8f4 b/tests/.hypothesis/constants/3cc47bb868bcb8f4 deleted file mode 100644 index 8f6a0ca..0000000 --- a/tests/.hypothesis/constants/3cc47bb868bcb8f4 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/telnet.py -# hypothesis_version: 6.151.12 - -[':', 'COWRIE_SSH_ENABLED', 'NET_BIND_SERVICE', 'cap_add', 'container_name', 'cowrie/cowrie', 'environment', 'false', 'image', 'restart', 'telnet', 'true', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/42a1dcb5c22b1ac1 b/tests/.hypothesis/constants/42a1dcb5c22b1ac1 deleted file mode 100644 index 3aba509..0000000 --- a/tests/.hypothesis/constants/42a1dcb5c22b1ac1 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/ini_loader.py -# hypothesis_version: 6.151.11 - -[100, 512, 1024, ',', '.', '1', '[', ']', 'amount', 'archetype', 'binary', 'custom-', 'exceeds maximum', 'exec', 'general', 'gw', 'interface', 'ip', 'log-target', 'log_target', 'mutate-interval', 'mutate_interval', 'net', 'nmap-os', 'nmap_os', 'ports', 'services'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/507a3145954fca93 b/tests/.hypothesis/constants/507a3145954fca93 deleted file mode 100644 index 7f18d0d..0000000 --- a/tests/.hypothesis/constants/507a3145954fca93 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/http.py -# hypothesis_version: 6.151.12 - -[443, '/opt/html_files', 'CUSTOM_BODY', 'EXTRA_HEADERS', 'FAKE_APP', 'FILES_DIR', 'LOG_TARGET', 'NODE_NAME', 'RESPONSE_CODE', 'SERVER_HEADER', 'build', 'container_name', 'context', 'custom_body', 'environment', 'extra_headers', 'fake_app', 'files', 'http', 'response_code', 'restart', 'server_header', 'templates', 'unless-stopped', 'volumes'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/53a42446f9f19b20 b/tests/.hypothesis/constants/53a42446f9f19b20 deleted file mode 100644 index b54bca1..0000000 --- a/tests/.hypothesis/constants/53a42446f9f19b20 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/ftp.py -# hypothesis_version: 6.151.12 - -['LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'ftp', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/574dbe54f9b23d3e b/tests/.hypothesis/constants/574dbe54f9b23d3e deleted file mode 100644 index 0d41063..0000000 --- a/tests/.hypothesis/constants/574dbe54f9b23d3e +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/correlation/engine.py -# hypothesis_version: 6.151.11 - -[3600, ',', 'Attacker IP', 'Deckies', 'Duration', 'Events', 'First Seen', 'Traversal Path', 'bold red', 'correlator', 'cyan', 'decnet-correlator', 'dim', 'events_indexed', 'lines_parsed', 'right', 'stats', 'traversal_detected', 'traversals', 'unique_ips', 'yellow'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/5a5554db0771f35b b/tests/.hypothesis/constants/5a5554db0771f35b deleted file mode 100644 index 275bac0..0000000 --- a/tests/.hypothesis/constants/5a5554db0771f35b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/repository.py -# hypothesis_version: 6.151.11 - -[] \ No newline at end of file diff --git a/tests/.hypothesis/constants/5feefba3d1c668ca b/tests/.hypothesis/constants/5feefba3d1c668ca deleted file mode 100644 index 0a65034..0000000 --- a/tests/.hypothesis/constants/5feefba3d1c668ca +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/ingester.py -# hypothesis_version: 6.151.11 - -['.json', 'attacker_ip', 'bounty_type', 'credential', 'decky', 'decnet.web.ingester', 'fields', 'password', 'payload', 'r', 'replace', 'service', 'username', 'utf-8'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/62e387790ed5b79f b/tests/.hypothesis/constants/62e387790ed5b79f deleted file mode 100644 index e16b095..0000000 --- a/tests/.hypothesis/constants/62e387790ed5b79f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/vnc.py -# hypothesis_version: 6.151.12 - -[5900, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'restart', 'templates', 'unless-stopped', 'vnc'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/66bd79275cd609e8 b/tests/.hypothesis/constants/66bd79275cd609e8 deleted file mode 100644 index 21e2f78..0000000 --- a/tests/.hypothesis/constants/66bd79275cd609e8 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/correlation/parser.py -# hypothesis_version: 6.151.11 - -['"', '-', '\\', '\\"', '\\\\', '\\]', ']', 'client_ip', 'ip', 'remote_ip', 'src', 'src_ip'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/76302489300fdc45 b/tests/.hypothesis/constants/76302489300fdc45 deleted file mode 100644 index 68be2a1..0000000 --- a/tests/.hypothesis/constants/76302489300fdc45 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/config.py -# hypothesis_version: 6.151.11 - -[0.0, ':', 'compose_path', 'config', 'debian', 'debian:bookworm-slim', 'decnet-state.json', 'linux', 'log_target', 'services', 'swarm', 'unihost'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/77b4b42ea3b9c9bf b/tests/.hypothesis/constants/77b4b42ea3b9c9bf deleted file mode 100644 index 30a4e5c..0000000 --- a/tests/.hypothesis/constants/77b4b42ea3b9c9bf +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/llmnr.py -# hypothesis_version: 6.151.12 - -[5353, 5355, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'llmnr', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/79661beef79449a5 b/tests/.hypothesis/constants/79661beef79449a5 deleted file mode 100644 index 427d19f..0000000 --- a/tests/.hypothesis/constants/79661beef79449a5 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/registry.py -# hypothesis_version: 6.151.11 - -['base', 'decnet.services.', 'registry'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/7f9302a54093ce41 b/tests/.hypothesis/constants/7f9302a54093ce41 deleted file mode 100644 index 18fa665..0000000 --- a/tests/.hypothesis/constants/7f9302a54093ce41 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/correlation/__init__.py -# hypothesis_version: 6.151.11 - -['AttackerTraversal', 'CorrelationEngine', 'LogEvent', 'TraversalHop', 'parse_line'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/8029f0494746966f b/tests/.hypothesis/constants/8029f0494746966f deleted file mode 100644 index 13d9382..0000000 --- a/tests/.hypothesis/constants/8029f0494746966f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/ldap.py -# hypothesis_version: 6.151.12 - -[389, 636, 'LOG_TARGET', 'NET_BIND_SERVICE', 'NODE_NAME', 'build', 'cap_add', 'container_name', 'context', 'environment', 'ldap', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/87dce71ef389d477 b/tests/.hypothesis/constants/87dce71ef389d477 deleted file mode 100644 index df14e34..0000000 --- a/tests/.hypothesis/constants/87dce71ef389d477 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/mqtt.py -# hypothesis_version: 6.151.12 - -[1883, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'mqtt', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/8b9368be0f77a253 b/tests/.hypothesis/constants/8b9368be0f77a253 deleted file mode 100644 index d9b1a47..0000000 --- a/tests/.hypothesis/constants/8b9368be0f77a253 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/custom_service.py -# hypothesis_version: 6.151.12 - -['-', 'LOG_TARGET', 'NODE_NAME', '_', 'command', 'container_name', 'environment', 'image', 'restart', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/8c8bf0135bf44b74 b/tests/.hypothesis/constants/8c8bf0135bf44b74 deleted file mode 100644 index 3b82b7f..0000000 --- a/tests/.hypothesis/constants/8c8bf0135bf44b74 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/api.py -# hypothesis_version: 6.151.11 - -[0.5, 400, 404, 500, 512, 1000, 1024, '*', '/api/v1/auth/login', '/api/v1/bounty', '/api/v1/deckies', '/api/v1/logs', '/api/v1/stats', '/api/v1/stream', '/docs', '/openapi.json', '/redoc', '1.0.0', 'Authentication', 'Authorization', 'Bearer', 'Bearer ', 'Bounty Vault', 'Decky not found', 'Fleet Management', 'Logs', 'No active deployment', 'Observability', 'WWW-Authenticate', 'access_token', 'admin', 'bearer', 'data', 'decnet.web.api', 'histogram', 'id', 'lastEventId', 'limit', 'logs', 'message', 'must_change_password', 'offset', 'password_hash', 'role', 'stats', 'text/event-stream', 'token', 'token_type', 'total', 'type', 'unihost', 'username', 'uuid'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/8c9335cb8231944a b/tests/.hypothesis/constants/8c9335cb8231944a deleted file mode 100644 index c0bb5ec..0000000 --- a/tests/.hypothesis/constants/8c9335cb8231944a +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/docker_api.py -# hypothesis_version: 6.151.12 - -[2375, 2376, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'docker_api', 'environment', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/8e330e30c399dccc b/tests/.hypothesis/constants/8e330e30c399dccc deleted file mode 100644 index cb5504a..0000000 --- a/tests/.hypothesis/constants/8e330e30c399dccc +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/real_ssh.py -# hypothesis_version: 6.151.12 - -['NET_BIND_SERVICE', 'SSH_HOSTNAME', 'SSH_ROOT_PASSWORD', 'admin', 'build', 'cap_add', 'container_name', 'context', 'environment', 'hostname', 'password', 'real_ssh', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/9193e12e937c9da2 b/tests/.hypothesis/constants/9193e12e937c9da2 deleted file mode 100644 index 3481ac4..0000000 --- a/tests/.hypothesis/constants/9193e12e937c9da2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/logging/syslog_formatter.py -# hypothesis_version: 6.151.11 - -[255, '"', '-', '1', '\\', '\\"', '\\\\', '\\]', ']', 'decnet@55555'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/952b61539a326753 b/tests/.hypothesis/constants/952b61539a326753 deleted file mode 100644 index 938b69d..0000000 --- a/tests/.hypothesis/constants/952b61539a326753 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/ssh.py -# hypothesis_version: 6.151.12 - -[2222, ':', 'COWRIE_HOSTNAME', 'COWRIE_SSH_VERSION', 'NET_BIND_SERVICE', 'NODE_NAME', 'build', 'cap_add', 'container_name', 'context', 'cowrie', 'environment', 'hardware_platform', 'kernel_build_string', 'kernel_version', 'restart', 'ssh', 'ssh_banner', 'templates', 'true', 'unless-stopped', 'users'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/95eb634544ca6000 b/tests/.hypothesis/constants/95eb634544ca6000 deleted file mode 100644 index 2400f5d..0000000 --- a/tests/.hypothesis/constants/95eb634544ca6000 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/smb.py -# hypothesis_version: 6.151.12 - -[139, 445, 'LOG_TARGET', 'NET_BIND_SERVICE', 'NODE_NAME', 'build', 'cap_add', 'container_name', 'context', 'environment', 'restart', 'smb', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/996aa9c745349122 b/tests/.hypothesis/constants/996aa9c745349122 deleted file mode 100644 index 5f2dc31..0000000 --- a/tests/.hypothesis/constants/996aa9c745349122 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/base.py -# hypothesis_version: 6.151.11 - -[] \ No newline at end of file diff --git a/tests/.hypothesis/constants/9f85e820bb1eb903 b/tests/.hypothesis/constants/9f85e820bb1eb903 deleted file mode 100644 index a0c1c88..0000000 --- a/tests/.hypothesis/constants/9f85e820bb1eb903 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/distros.py -# hypothesis_version: 6.151.11 - -['Alpine Linux 3.19', 'Arch Linux', 'CentOS 7', 'Debian 12 (Bookworm)', 'Fedora 39', 'Kali Linux (Rolling)', 'Rocky Linux 9', 'alpha', 'alpine', 'alpine:3.19', 'arch', 'archlinux:latest', 'backup', 'bravo', 'centos7', 'centos:7', 'charlie', 'db', 'debian', 'debian:bookworm-slim', 'delta', 'dev', 'echo', 'fedora', 'fedora:39', 'files', 'foxtrot', 'generic', 'golf', 'hotel', 'india', 'juliet', 'kali', 'kilo', 'lima', 'mail', 'mike', 'minimal', 'monitor', 'nova', 'oscar', 'prod', 'proxy', 'rhel', 'rocky9', 'rockylinux:9-minimal', 'rolling', 'stage', 'ubuntu20', 'ubuntu22', 'ubuntu:20.04', 'ubuntu:22.04', 'web'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/a115dde40ee13bf8 b/tests/.hypothesis/constants/a115dde40ee13bf8 deleted file mode 100644 index 26d7257..0000000 --- a/tests/.hypothesis/constants/a115dde40ee13bf8 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/mysql.py -# hypothesis_version: 6.151.12 - -[3306, 'LOG_TARGET', 'MYSQL_VERSION', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'mysql', 'restart', 'templates', 'unless-stopped', 'version'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/a3207e9522fed10c b/tests/.hypothesis/constants/a3207e9522fed10c deleted file mode 100644 index 03b8a88..0000000 --- a/tests/.hypothesis/constants/a3207e9522fed10c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/api.py -# hypothesis_version: 6.151.11 - -[1000, '*', '/api/v1/auth/login', '/api/v1/logs', '/api/v1/stats', '1.0.0', 'Bearer', 'WWW-Authenticate', 'access_token', 'admin', 'bearer', 'data', 'limit', 'message', 'must_change_password', 'offset', 'password_hash', 'role', 'token_type', 'total', 'username', 'uuid'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/a36433a7a8a46f4d b/tests/.hypothesis/constants/a36433a7a8a46f4d deleted file mode 100644 index 1d89ce3..0000000 --- a/tests/.hypothesis/constants/a36433a7a8a46f4d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/smtp.py -# hypothesis_version: 6.151.12 - -[587, 'LOG_TARGET', 'NET_BIND_SERVICE', 'NODE_NAME', 'SMTP_BANNER', 'SMTP_MTA', 'banner', 'build', 'cap_add', 'container_name', 'context', 'environment', 'mta', 'restart', 'smtp', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/a36bdeb88e27cda2 b/tests/.hypothesis/constants/a36bdeb88e27cda2 deleted file mode 100644 index be4d537..0000000 --- a/tests/.hypothesis/constants/a36bdeb88e27cda2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/postgres.py -# hypothesis_version: 6.151.12 - -[5432, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'postgres', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/a4b0cd024dec37b3 b/tests/.hypothesis/constants/a4b0cd024dec37b3 deleted file mode 100644 index c8e44e0..0000000 --- a/tests/.hypothesis/constants/a4b0cd024dec37b3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/pop3.py -# hypothesis_version: 6.151.12 - -[110, 995, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'pop3', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/a92a9b5d6ef7fbda b/tests/.hypothesis/constants/a92a9b5d6ef7fbda deleted file mode 100644 index 11589ce..0000000 --- a/tests/.hypothesis/constants/a92a9b5d6ef7fbda +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/os_fingerprint.py -# hypothesis_version: 6.151.11 - -['128', '2', '255', '3', '6', '64', 'bsd', 'cisco', 'embedded', 'linux', 'windows'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/ad18d933a368774b b/tests/.hypothesis/constants/ad18d933a368774b deleted file mode 100644 index 16932ef..0000000 --- a/tests/.hypothesis/constants/ad18d933a368774b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/archetypes.py -# hypothesis_version: 6.151.11 - -[', ', 'Database Server', 'DevOps Host', 'Domain Controller', 'File Server', 'IoT Device', 'Linux Server', 'Mail Server', 'Monitoring Node', 'Network Printer', 'VoIP Server', 'Web Server', 'Windows Server', 'Windows Workstation', 'alpine', 'conpot', 'database-server', 'deaddeck', 'debian', 'devops-host', 'docker_api', 'domain-controller', 'embedded', 'fedora', 'file-server', 'ftp', 'http', 'imap', 'industrial-control', 'iot-device', 'k8s', 'ldap', 'linux', 'linux-server', 'llmnr', 'mail-server', 'monitoring-node', 'mqtt', 'mysql', 'pop3', 'postgres', 'printer', 'rdp', 'real_ssh', 'redis', 'rocky9', 'sip', 'smb', 'smtp', 'snmp', 'ssh', 'telnet', 'ubuntu20', 'ubuntu22', 'voip-server', 'web-server', 'windows', 'windows-server', 'windows-workstation'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/b0cdd7ca461ac3a7 b/tests/.hypothesis/constants/b0cdd7ca461ac3a7 deleted file mode 100644 index f37dbd3..0000000 --- a/tests/.hypothesis/constants/b0cdd7ca461ac3a7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/k8s.py -# hypothesis_version: 6.151.12 - -[6443, 8080, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'k8s', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/b3ae76f264e289ba b/tests/.hypothesis/constants/b3ae76f264e289ba deleted file mode 100644 index 1fba6d8..0000000 --- a/tests/.hypothesis/constants/b3ae76f264e289ba +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/redis.py -# hypothesis_version: 6.151.12 - -[6379, 'LOG_TARGET', 'NODE_NAME', 'REDIS_OS', 'REDIS_VERSION', 'build', 'container_name', 'context', 'environment', 'os_string', 'redis', 'restart', 'templates', 'unless-stopped', 'version'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/b4fbfe7d71d1fde1 b/tests/.hypothesis/constants/b4fbfe7d71d1fde1 deleted file mode 100644 index 2250f94..0000000 --- a/tests/.hypothesis/constants/b4fbfe7d71d1fde1 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/correlation/graph.py -# hypothesis_version: 6.151.11 - -[' → ', 'attacker_ip', 'deckies', 'decky', 'decky_count', 'duration_seconds', 'event_type', 'first_seen', 'hop_count', 'hops', 'last_seen', 'path', 'service', 'timestamp'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/c1bae63b725863f0 b/tests/.hypothesis/constants/c1bae63b725863f0 deleted file mode 100644 index 34ff1c8..0000000 --- a/tests/.hypothesis/constants/c1bae63b725863f0 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/imap.py -# hypothesis_version: 6.151.12 - -[143, 993, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'imap', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/cac20128001ccd85 b/tests/.hypothesis/constants/cac20128001ccd85 deleted file mode 100644 index 5f7d4fe..0000000 --- a/tests/.hypothesis/constants/cac20128001ccd85 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/network.py -# hypothesis_version: 6.151.11 - -['/', 'add', 'addr', 'bridge', 'decnet_ipvlan0', 'decnet_lan', 'decnet_macvlan0', 'default', 'del', 'dev', 'inet ', 'inet6', 'ip', 'ipvlan', 'ipvlan_mode', 'l2', 'link', 'macvlan', 'mode', 'parent', 'route', 'set', 'show', 'type', 'up', 'via'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/ceb1d0465029fa83 b/tests/.hypothesis/constants/ceb1d0465029fa83 deleted file mode 100644 index 962a59c..0000000 --- a/tests/.hypothesis/constants/ceb1d0465029fa83 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/.local/bin/pytest -# hypothesis_version: 6.151.11 - -['__main__'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/cf9d3e39a6bf6308 b/tests/.hypothesis/constants/cf9d3e39a6bf6308 deleted file mode 100644 index 886a15d..0000000 --- a/tests/.hypothesis/constants/cf9d3e39a6bf6308 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/sqlite_repository.py -# hypothesis_version: 6.151.11 - -[' AND ', ' WHERE ', ':', '[^a-zA-Z0-9_]', 'active_deckies', 'attacker', 'attacker-ip', 'attacker_ip', 'bounty_type', 'bounty_type = ?', 'bucket_time', 'count', 'decky', 'decnet.db', 'deployed_deckies', 'event', 'event_type', 'fields', 'id > ?', 'max_id', 'msg', 'must_change_password', 'password_hash', 'payload', 'raw_line', 'role', 'service', 'time', 'timestamp', 'timestamp <= ?', 'timestamp >= ?', 'total', 'total_logs', 'unique_attackers', 'username', 'uuid'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/d479b632891acb05 b/tests/.hypothesis/constants/d479b632891acb05 deleted file mode 100644 index 5254387..0000000 --- a/tests/.hypothesis/constants/d479b632891acb05 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/logging/file_handler.py -# hypothesis_version: 6.151.11 - -[1024, '%(message)s', 'DECNET_LOG_FILE', 'decnet.syslog', 'utf-8'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/da39a3ee5e6b4b0d b/tests/.hypothesis/constants/da39a3ee5e6b4b0d deleted file mode 100644 index 62b7279..0000000 --- a/tests/.hypothesis/constants/da39a3ee5e6b4b0d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/__init__.py -# hypothesis_version: 6.151.11 - -[] \ No newline at end of file diff --git a/tests/.hypothesis/constants/da43cd4d80a43169 b/tests/.hypothesis/constants/da43cd4d80a43169 deleted file mode 100644 index 47f0424..0000000 --- a/tests/.hypothesis/constants/da43cd4d80a43169 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/sqlite_repository.py -# hypothesis_version: 6.151.11 - -['SELECT * FROM logs', 'active_deckies', 'attacker_ip', 'decky', 'decnet.db', 'event_type', 'fields', 'msg', 'must_change_password', 'password_hash', 'raw_line', 'role', 'service', 'timestamp', 'total', 'total_logs', 'unique_attackers', 'username', 'uuid'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/df40fa14165138c7 b/tests/.hypothesis/constants/df40fa14165138c7 deleted file mode 100644 index f63366f..0000000 --- a/tests/.hypothesis/constants/df40fa14165138c7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/auth.py -# hypothesis_version: 6.151.11 - -[1440, 'DECNET_SECRET_KEY', 'HS256', 'exp', 'iat', 'utf-8'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/e04c4b026eeb7e26 b/tests/.hypothesis/constants/e04c4b026eeb7e26 deleted file mode 100644 index 8ec51c6..0000000 --- a/tests/.hypothesis/constants/e04c4b026eeb7e26 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/rdp.py -# hypothesis_version: 6.151.12 - -[3389, 'LOG_TARGET', 'NODE_NAME', 'build', 'container_name', 'context', 'environment', 'rdp', 'restart', 'templates', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/f9f2aace37ce402b b/tests/.hypothesis/constants/f9f2aace37ce402b deleted file mode 100644 index 18ba47e..0000000 --- a/tests/.hypothesis/constants/f9f2aace37ce402b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/web/auth.py -# hypothesis_version: 6.151.11 - -[1440, 'HS256', 'exp', 'iat', 'utf-8'] \ No newline at end of file diff --git a/tests/.hypothesis/constants/fb7b3bbd8bd7b0f3 b/tests/.hypothesis/constants/fb7b3bbd8bd7b0f3 deleted file mode 100644 index 3561039..0000000 --- a/tests/.hypothesis/constants/fb7b3bbd8bd7b0f3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/anti/Tools/DECNET/decnet/services/conpot.py -# hypothesis_version: 6.151.12 - -[161, 502, 'CONPOT_TEMPLATE', 'conpot', 'container_name', 'default', 'environment', 'honeynet/conpot', 'image', 'restart', 'unless-stopped'] \ No newline at end of file diff --git a/tests/.hypothesis/unicode_data/16.0.0/charmap.json.gz b/tests/.hypothesis/unicode_data/16.0.0/charmap.json.gz deleted file mode 100644 index 7e6808eb11841aab2a3f04cb6c9e57f3f58c46ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22308 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 bool: # Tier 1: upstream-image services (non-build) # --------------------------------------------------------------------------- -UPSTREAM_SERVICES = { - "telnet": ("cowrie/cowrie", [23]), -} +UPSTREAM_SERVICES: dict = {} # --------------------------------------------------------------------------- # Tier 2: custom-build services (including ssh, which now uses build) @@ -41,6 +39,7 @@ UPSTREAM_SERVICES = { BUILD_SERVICES = { "ssh": ([22], "ssh"), + "telnet": ([23], "telnet"), "http": ([80, 443], "http"), "rdp": ([3389], "rdp"), "smb": ([445, 139], "smb"), @@ -155,7 +154,8 @@ def test_build_service_restart_policy(name): assert frag.get("restart") == "unless-stopped" -_NODE_NAME_SERVICES = [n for n in BUILD_SERVICES if n not in ("ssh", "real_ssh")] +_RSYSLOG_SERVICES = {"ssh", "real_ssh", "telnet"} +_NODE_NAME_SERVICES = [n for n in BUILD_SERVICES if n not in _RSYSLOG_SERVICES] @pytest.mark.parametrize("name", _NODE_NAME_SERVICES) @@ -166,8 +166,8 @@ def test_build_service_node_name_env(name): assert env["NODE_NAME"] == "test-decky" -# ssh and real_ssh do not use LOG_TARGET (rsyslog handles log forwarding inside the container) -_LOG_TARGET_SERVICES = [n for n in BUILD_SERVICES if n not in ("ssh", "real_ssh")] +# ssh, real_ssh, and telnet do not use LOG_TARGET (rsyslog handles log forwarding inside the container) +_LOG_TARGET_SERVICES = [n for n in BUILD_SERVICES if n not in _RSYSLOG_SERVICES] @pytest.mark.parametrize("name", _LOG_TARGET_SERVICES) @@ -339,21 +339,24 @@ def test_redis_default_no_extra_env(): # Telnet --------------------------------------------------------------------- -def test_telnet_log_target_uses_cowrie_tcp_output(): - """Telnet forwards logs via Cowrie TCP output, same pattern as SSH.""" - env = _fragment("telnet", log_target="10.0.0.1:5140").get("environment", {}) - assert env.get("COWRIE_OUTPUT_TCP_ENABLED") == "true" - assert env.get("COWRIE_OUTPUT_TCP_HOST") == "10.0.0.1" - assert env.get("COWRIE_OUTPUT_TCP_PORT") == "5140" +def test_telnet_uses_build_context(): + """Telnet uses a build context (no Cowrie image).""" + frag = _fragment("telnet") + assert "build" in frag + assert "image" not in frag -def test_telnet_no_log_target_omits_tcp_output(): +def test_telnet_default_password(): env = _fragment("telnet").get("environment", {}) - assert "COWRIE_OUTPUT_TCP_ENABLED" not in env - assert "COWRIE_OUTPUT_TCP_HOST" not in env + assert env.get("TELNET_ROOT_PASSWORD") == "admin" -def test_telnet_ssh_disabled_in_telnet_only_container(): +def test_telnet_custom_password(): + env = _fragment("telnet", service_cfg={"password": "s3cr3t"}).get("environment", {}) + assert env.get("TELNET_ROOT_PASSWORD") == "s3cr3t" + + +def test_telnet_no_cowrie_env_vars(): + """Ensure no Cowrie env vars bleed into the real telnet service.""" env = _fragment("telnet").get("environment", {}) - assert env.get("COWRIE_SSH_ENABLED") == "false" - assert env.get("COWRIE_TELNET_ENABLED") == "true" + assert not any(k.startswith("COWRIE_") for k in env)