๋กœ์ปฌ์„ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜๊ธฐ

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 ์ง€์›ํ•˜๊ธฐ

์ด ํŽ˜์ด์ง€์˜ ๋ชฉํ‘œ๋Š” ์ ์–ด๋„ ๋กœ์ปฌ raw TCP ports์™€ ๋กœ์ปฌ ์›น(HTTP)์„ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์•„๋ฌด๊ฒƒ๋„ ์„ค์น˜ํ•  ํ•„์š” ์—†์ด(ํ•„์š”ํ•˜๋‹ค๋ฉด ๋กœ์ปฌ์—๋งŒ ์„ค์น˜) ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ์„ ์ œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Serveo

From https://serveo.net/, https://serveo.net/์—์„œ๋Š” ์—ฌ๋Ÿฌ http ๋ฐ port forwarding ๊ธฐ๋Šฅ์„ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

# Get a random port from serveo.net to expose local port 4444
ssh -R 0:localhost:4444 serveo.net

# Expose a web listening in localhost:300 in a random https URL
ssh -R 80:localhost:3000 serveo.net

SocketXP

https://www.socketxp.com/download์—์„œ tcp์™€ http๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Expose tcp port 22
socketxp connect tcp://localhost:22

# Expose http port 8080
socketxp connect http://localhost:8080

Ngrok

https://ngrok.com/์„ ํ†ตํ•ด http ๋ฐ tcp ํฌํŠธ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Expose web in 3000
ngrok http 8000

# Expose port in 9000 (it requires a credit card, but you won't be charged)
ngrok tcp 9000

Telebit

https://telebit.cloud/์—์„œ http ๋ฐ tcp ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Expose web in 3000
/Users/username/Applications/telebit/bin/telebit http 3000

# Expose port in 9000
/Users/username/Applications/telebit/bin/telebit tcp 9000

LocalXpose

https://localxpose.io/์—์„œ ์—ฌ๋Ÿฌ http ๋ฐ ํฌํŠธ ํฌ์›Œ๋”ฉ ๊ธฐ๋Šฅ์„ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

# Expose web in port 8989
loclx tunnel http -t 8989

# Expose tcp port in 4545 (requires pro)
loclx tunnel tcp --port 4545

Expose

https://expose.dev/๋Š” http ๋ฐ tcp ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Expose web in 3000
./expose share http://localhost:3000

# Expose tcp port in port 4444 (REQUIRES PREMIUM)
./expose share-port 4444

Localtunnel

https://github.com/localtunnel/localtunnel์—์„œ http๋ฅผ ๋ฌด๋ฃŒ๋กœ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Expose web in port 8000
npx localtunnel --port 8000

Cloudflare Tunnel (cloudflared)

Cloudflare์˜ cloudflared CLI๋Š” ๋น ๋ฅธ ๋ฐ๋ชจ๋ฅผ ์œ„ํ•œ ์ธ์ฆ ์—†๋Š” โ€œQuickโ€ ํ„ฐ๋„์ด๋‚˜ ๋ณธ์ธ์˜ ๋„๋ฉ”์ธ/ํ˜ธ์ŠคํŠธ๋ช…์— ๋ฐ”์ธ๋”ฉ๋œ ๋ช…๋ช…๋œ ํ„ฐ๋„์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTTP(S) reverse proxies์™€ Cloudflare์˜ edge๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…๋˜๋Š” raw TCP mappings๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

# Quick Tunnel exposing localhost:8080 (random trycloudflare subdomain)
cloudflared tunnel --url http://localhost:8080

# Named tunnel bound to a DNS record
cloudflared tunnel login                       # one-time device auth
cloudflared tunnel create my-tunnel
cloudflared tunnel route dns my-tunnel app.example.com
cloudflared tunnel run my-tunnel --config tunnel.yml

Named tunnels์„ ์‚ฌ์šฉํ•˜๋ฉด tunnel.yml ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ingress ๊ทœ์น™(HTTP, SSH, RDP ๋“ฑ)์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ , Cloudflare Access๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ณ„ ์ ‘๊ทผ ์ •์ฑ…์„ ์ง€์›ํ•˜๋ฉฐ ์˜์†์„ฑ์„ ์œ„ํ•ด systemd ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Quick Tunnels์€ ์ต๋ช…์ด๊ณ  ์ผ์‹œ์ ์ด์–ด์„œ phishing payload staging์ด๋‚˜ webhook ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•˜์ง€๋งŒ, Cloudflare๋Š” ๊ฐ€๋™ ์‹œ๊ฐ„์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Tailscale Funnel / Serve

Tailscale v1.52+๋Š” ํ†ตํ•ฉ๋œ tailscale serve(tailnet ๋‚ด๋ถ€์—์„œ ๊ณต์œ )์™€ tailscale funnel(์ธํ„ฐ๋„ท์— ๊ณต๊ฐœ) ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ช…๋ น ๋ชจ๋‘ ์ž๋™ TLS์™€ ์งง์€ *.ts.net ํ˜ธ์ŠคํŠธ๋ช…์„ ์‚ฌ์šฉํ•ด HTTP(S)๋ฅผ reverse proxyํ•˜๊ฑฐ๋‚˜ raw TCP๋ฅผ forwardํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# Share localhost:3000 within the tailnet
sudo tailscale serve 3000

# Publish it publicly on port 443 with Funnel
sudo tailscale funnel --https=443 localhost:3000

# Forward raw TCP (expose local SSH)
sudo tailscale funnel --tcp=10000 tcp://localhost:22

--bg๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฌ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ตฌ์„ฑ์„ ์ง€์†ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, tailscale funnel status๋กœ ๊ณต๊ฐœ ์ธํ„ฐ๋„ท์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋ฅผ ๊ฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Funnel์€ ๋กœ์ปฌ ๋…ธ๋“œ์—์„œ TLS๋ฅผ ์ข…๋ฃŒํ•˜๋ฏ€๋กœ ์ธ์ฆ ์ •๋ณด ์ž…๋ ฅ ์š”์ฒญ, ํ—ค๋”, ๋˜๋Š” mTLS ์ ์šฉ์€ ์—ฌ์ „ํžˆ ๊ท€ํ•˜์˜ ํ†ต์ œ ํ•˜์— ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Fast Reverse Proxy (frp)

frp๋Š” rendezvous ์„œ๋ฒ„(frps)์™€ ํด๋ผ์ด์–ธํŠธ(frpc)๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” self-hosted ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ VPS๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋„๋ฉ”์ธ/ํฌํŠธ๋ฅผ ์›ํ•˜๋Š” red teams์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ frps/frpc ๊ตฌ์„ฑ ```bash # Server: bind TCP/HTTP entry points and enable dashboard ./frps -c frps.toml

Client: forward local 22 to remote port 6000 and a web app to vhost

./frpc -c <<โ€˜EOFโ€™ serverAddr = โ€œc2.example.comโ€ serverPort = 7000

[[proxies]] name = โ€œsshโ€ type = โ€œtcpโ€ localIP = โ€œ127.0.0.1โ€ localPort = 22 remotePort = 6000

[[proxies]] name = โ€œpanelโ€ type = โ€œhttpโ€ localPort = 8080 customDomains = [โ€œpanel.example.comโ€] EOF

</details>

์ตœ๊ทผ ๋ฆด๋ฆฌ์Šค๋Š” QUIC transport, token/OIDC auth, bandwidth caps, health checks, ๋ฐ Go-template-based range mappings๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค โ€” ์„œ๋กœ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์˜ implants๋กœ ๋งคํ•‘๋˜๋Š” ์—ฌ๋Ÿฌ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‹ ์†ํžˆ ๋„์šฐ๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

## Pinggy (SSH-based)

Pinggy๋Š” TCP/443์„ ํ†ตํ•ด SSH-accessible ํ„ฐ๋„์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ HTTPS๋งŒ ํ—ˆ์šฉํ•˜๋Š” captive proxies ๋’ค์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜์€ ๋ฌด๋ฃŒ ํ‹ฐ์–ด์—์„œ 60๋ถ„ ๋™์•ˆ ์ง€์†๋˜๋ฉฐ, ๋น ๋ฅธ ๋ฐ๋ชจ๋‚˜ webhook relays์šฉ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```bash
# Random subdomain exposing localhost:3000 via SSH reverse tunnel
ssh -p 443 -R0:localhost:3000 a.pinggy.io

์œ ๋ฃŒ ํ‹ฐ์–ด์—์„œ๋Š” ์ปค์Šคํ…€ ๋„๋ฉ”์ธ๊ณผ ๋” ์˜ค๋ž˜ ์œ ์ง€๋˜๋Š” ํ„ฐ๋„์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ช…๋ น์„ ๋ฃจํ”„๋กœ ๊ฐ์‹ธ ํ„ฐ๋„์„ ์ž๋™์œผ๋กœ ์žฌํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„ํ˜‘ ์ธํ…” ๋ฐ OPSEC ๋…ธํŠธ

๊ณต๊ฒฉ์ž๋“ค์€ ์ ์  ๋” ์ผ์‹œ์  ํ„ฐ๋„๋ง(ephemeral tunneling), ํŠนํžˆ Cloudflare์˜ ์ธ์ฆ์ด ํ•„์š” ์—†๋Š” trycloudflare.com ์—”๋“œํฌ์ธํŠธ๋ฅผ ์•…์šฉํ•ด Remote Access Trojan ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  C2 ์ธํ”„๋ผ๋ฅผ ์€๋‹‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Proofpoint๋Š” 2024๋…„ 2์›” ์ดํ›„ ๋‹ค์šด๋กœ๋“œ ๋‹จ๊ณ„๋ฅผ ๋‹จ๊ธฐ TryCloudflare URL๋กœ ์ง€์ •ํ•ด AsyncRAT, Xworm, VenomRAT, GuLoader, Remcos๋ฅผ ์œ ํฌํ•œ ์บ ํŽ˜์ธ์„ ์ถ”์ ํ–ˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ธฐ์กด์˜ ์ •์  ์ฐจ๋‹จ ๋ชฉ๋ก(static blocklists)์€ ํ›จ์”ฌ ๋œ ํšจ๊ณผ์ ์ด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋„๊ณผ ๋„๋ฉ”์ธ์„ ์‚ฌ์ „์ ์œผ๋กœ ์ฃผ๊ธฐ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋˜, ์‚ฌ์šฉ ์ค‘์ธ tunneler๋กœ ํ–ฅํ•˜๋Š” ์™ธ๋ถ€ DNS ์กฐํšŒ ๊ฐ™์€ ์ง•ํ›„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ blue-team์˜ ํƒ์ง€๋‚˜ ์ธํ”„๋ผ ์ฐจ๋‹จ ์‹œ๋„๋ฅผ ์กฐ๊ธฐ์— ํฌ์ฐฉํ•˜์„ธ์š”.

์ฐธ๊ณ ์ž๋ฃŒ

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 ์ง€์›ํ•˜๊ธฐ