๋Œ€์นญ ์•”ํ˜ธ

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

CTF์—์„œ ์ฐพ์•„๋ณผ ๊ฒƒ

  • ๋ชจ๋“œ ์˜ค์šฉ: ECB ํŒจํ„ด, CBC ๋ณ€์กฐ ๊ฐ€๋Šฅ์„ฑ(malleability), CTR/GCM nonce reuse.
  • Padding oracles: ์ž˜๋ชป๋œ padding์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์˜ค๋ฅ˜/ํƒ€์ด๋ฐ์ด ๋‚˜ํƒ€๋‚จ.
  • MAC confusion: CBC-MAC์„ ๊ฐ€๋ณ€ ๊ธธ์ด ๋ฉ”์‹œ์ง€์— ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, MAC-then-encrypt ์‹ค์ˆ˜.
  • XOR everywhere: stream ciphers์™€ ์ปค์Šคํ…€ ๊ตฌ์„ฑ์€ ์ข…์ข… keystream๊ณผ์˜ XOR์œผ๋กœ ํ™˜์›๋จ.

AES ๋ชจ๋“œ์™€ ์˜ค์šฉ

ECB: Electronic Codebook

ECB leaks patterns: equal plaintext blocks โ†’ equal ciphertext blocks. ์ด๋Š” ๋‹ค์Œ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค:

  • Cut-and-paste / block reordering
  • Block deletion (if the format remains valid)

๋งŒ์•ฝ plaintext๋ฅผ ์ œ์–ดํ•˜๊ณ  ciphertext(๋˜๋Š” ์ฟ ํ‚ค)๋ฅผ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋ฐ˜๋ณต๋˜๋Š” ๋ธ”๋ก(์˜ˆ: ๋งŽ์€ As)์„ ๋งŒ๋“ค์–ด ๋ฐ˜๋ณต์„ ์ฐพ์•„๋ณด์„ธ์š”.

CBC: Cipher Block Chaining

  • CBC is malleable: C[i-1]์—์„œ ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์œผ๋ฉด P[i]์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋น„ํŠธ๊ฐ€ ๋’ค์ง‘ํžŒ๋‹ค.
  • ์‹œ์Šคํ…œ์ด ์œ ํšจํ•œ padding๊ณผ ์œ ํšจํ•˜์ง€ ์•Š์€ padding์„ ๊ตฌ๋ถ„ํ•ด ๋…ธ์ถœํ•œ๋‹ค๋ฉด, padding oracle์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

CTR

CTR๋Š” AES๋ฅผ stream cipher๋กœ ๋ฐ”๊พผ๋‹ค: C = P XOR keystream.

๋งŒ์•ฝ nonce/IV๊ฐ€ ๊ฐ™์€ ํ‚ค๋กœ ์žฌ์‚ฌ์šฉ๋˜๋ฉด:

  • C1 XOR C2 = P1 XOR P2 (classic keystream reuse)
  • ์•Œ๋ ค์ง„ plaintext๊ฐ€ ์žˆ์œผ๋ฉด keystream์„ ๋ณต์›ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฒƒ๋“ค์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

GCM

GCM๋„ nonce reuse ์‹œ ์‹ฌํ•˜๊ฒŒ ๊นจ์ง„๋‹ค. ๊ฐ™์€ key+nonce๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉ๋˜๋ฉด ๋ณดํ†ต ๋‹ค์Œ์ด ๋ฐœ์ƒํ•œ๋‹ค:

  • ์•”ํ˜ธํ™”์— ๋Œ€ํ•œ keystream ์žฌ์‚ฌ์šฉ(CTR๊ณผ ์œ ์‚ฌ), ์–ด๋–ค plaintext๊ฐ€ ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฉด ํ‰๋ฌธ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅ.
  • ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ์ด ์†์‹ค๋œ๋‹ค. ๋…ธ์ถœ๋œ ๋‚ด์šฉ(๊ฐ™์€ nonce ์•„๋ž˜์˜ ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€/ํƒœ๊ทธ ์Œ)์— ๋”ฐ๋ผ ๊ณต๊ฒฉ์ž๊ฐ€ ํƒœ๊ทธ๋ฅผ ์œ„์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์šด์˜ ์ง€์นจ:

  • AEAD์—์„œ โ€œnonce reuseโ€œ๋ฅผ ์น˜๋ช…์ ์ธ ์ทจ์•ฝ์ ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋ผ.
  • ๊ฐ™์€ nonce ์•„๋ž˜ ์—ฌ๋Ÿฌ ciphertext๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋จผ์ € C1 XOR C2 = P1 XOR P2 ํ˜•ํƒœ์˜ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•˜๋ผ.

๋„๊ตฌ

  • CyberChef for quick experiments: https://gchq.github.io/CyberChef/
  • Python: pycryptodome for scripting

ECB exploitation patterns

ECB (Electronic Code Book)๋Š” ๊ฐ ๋ธ”๋ก์„ ๋…๋ฆฝ์ ์œผ๋กœ ์•”ํ˜ธํ™”ํ•œ๋‹ค:

  • ๋™์ผํ•œ plaintext ๋ธ”๋ก โ†’ ๋™์ผํ•œ ciphertext ๋ธ”๋ก
  • ์ด๋Š” ๊ตฌ์กฐ๋ฅผ leaksํ•˜๋ฉฐ cut-and-paste ์Šคํƒ€์ผ ๊ณต๊ฒฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค

ํƒ์ง€ ์•„์ด๋””์–ด: ํ† ํฐ/์ฟ ํ‚ค ํŒจํ„ด

์—ฌ๋Ÿฌ ๋ฒˆ ๋กœ๊ทธ์ธํ–ˆ๋Š”๋ฐ ํ•ญ์ƒ ๊ฐ™์€ cookie๋ฅผ ๋ฐ›๋Š”๋‹ค๋ฉด, ciphertext๊ฐ€ ๊ฒฐ์ •๋ก ์ ์ผ ์ˆ˜ ์žˆ๋‹ค (ECB ๋˜๋Š” ๊ณ ์ • IV).

์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€๋ถ€๋ถ„ ๋™์ผํ•œ plaintext ๋ ˆ์ด์•„์›ƒ(์˜ˆ: ๊ธธ๊ฒŒ ๋ฐ˜๋ณต๋œ ๋ฌธ์ž)์„ ๊ฐ€์ง„ ๋‘ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ™์€ ์˜คํ”„์…‹์—์„œ ๋ฐ˜๋ณต๋œ ciphertext ๋ธ”๋ก์ด ๋ณด์ด๋ฉด, ECB๊ฐ€ ์œ ๋ ฅํ•œ ์˜์‹ฌ ๋Œ€์ƒ์ด๋‹ค.

์•…์šฉ ํŒจํ„ด

์ „์ฒด ๋ธ”๋ก ์ œ๊ฑฐ

ํ† ํฐ ํ˜•์‹์ด <username>|<password> ๊ฐ™์€ ๊ฒฝ์šฐ ๋ธ”๋ก ๊ฒฝ๊ณ„๊ฐ€ ๋งž์œผ๋ฉด, admin ๋ธ”๋ก์ด ์ •๋ ฌ๋˜๋„๋ก ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค๊ณ  ์•ž์˜ ๋ธ”๋ก์„ ์ œ๊ฑฐํ•˜์—ฌ admin์— ๋Œ€ํ•œ ์œ ํšจํ•œ ํ† ํฐ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๋ธ”๋ก ์ด๋™

๋ฐฑ์—”๋“œ๊ฐ€ padding/์—ฌ๋ถ„์˜ ๊ณต๋ฐฑ(admin vs admin )์„ ํ—ˆ์šฉํ•˜๋ฉด, ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค:

  • admin ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ธ”๋ก์„ ์ •๋ ฌํ•œ๋‹ค
  • ๊ทธ ciphertext ๋ธ”๋ก์„ ๋‹ค๋ฅธ ํ† ํฐ์— ๊ต์ฒด/์žฌ์‚ฌ์šฉํ•œ๋‹ค

Padding Oracle

๊ฐœ์š”

CBC ๋ชจ๋“œ์—์„œ ์„œ๋ฒ„๊ฐ€ ๋ณตํ˜ธํ™”๋œ ํ‰๋ฌธ์˜ valid PKCS#7 padding ์—ฌ๋ถ€๋ฅผ (์ง์ ‘ ๋˜๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ) ๋…ธ์ถœํ•˜๋ฉด, ์ข…์ข… ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค:

  • ํ‚ค ์—†์ด ciphertext๋ฅผ ๋ณตํ˜ธํ™”
  • ์„ ํƒํ•œ plaintext๋ฅผ ์•”ํ˜ธํ™”(์œ„์กฐ๋œ ciphertext ์ƒ์„ฑ)

์˜ค๋ผํด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ๋‹ค:

  • ํŠน์ • ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€
  • ๋‹ค๋ฅธ HTTP ์ƒํƒœ / ์‘๋‹ต ํฌ๊ธฐ
  • ํƒ€์ด๋ฐ ์ฐจ์ด

์‹ค์ „ ์•…์šฉ

PadBuster is the classic tool:

GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks

Example:

perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="

Notes:

  • ๋ธ”๋ก ํฌ๊ธฐ๋Š” AES์˜ ๊ฒฝ์šฐ ํ”ํžˆ 16์ž…๋‹ˆ๋‹ค.
  • -encoding 0๋Š” Base64๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ค๋ผํด์ด ํŠน์ • ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ -error๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

Why it works

CBC ๋ณตํ˜ธํ™”๋Š” P[i] = D(C[i]) XOR C[i-1]๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. C[i-1]์˜ ๋ฐ”์ดํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  padding์ด ์œ ํšจํ•œ์ง€ ๊ด€์ฐฐํ•จ์œผ๋กœ์จ, P[i]๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Bit-flipping in CBC

padding oracle ์—†์ด๋„ CBC๋Š” malleableํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธ๋ฌธ ๋ธ”๋ก์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณตํ˜ธํ™”๋œ ํ‰๋ฌธ์„ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ(์˜ˆ: role=user)๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ํŠน์ • ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์–ด ๋‹ค์Œ ๋ธ”๋ก์˜ ์„ ํƒํ•œ ์œ„์น˜์— ์žˆ๋Š” ํ‰๋ฌธ ๋ฐ”์ดํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Typical CTF pattern:

  • Token = IV || C1 || C2 || ...
  • You control bytes in C[i]
  • You target plaintext bytes in P[i+1] because P[i+1] = D(C[i+1]) XOR C[i]

์ด๊ฒƒ ์ž์ฒด๋กœ ๊ธฐ๋ฐ€์„ฑ(confidentiality)์„ ๊นจ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ฌด๊ฒฐ์„ฑ(integrity)์ด ์—†์„ ๋•Œ ์ผ๋ฐ˜์ ์ธ privilege-escalation ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ์ž…๋‹ˆ๋‹ค.

CBC-MAC

CBC-MAC๋Š” ํŠน์ • ์กฐ๊ฑด(ํŠนํžˆ ๊ณ ์ • ๊ธธ์ด ๋ฉ”์‹œ์ง€์™€ ์˜ฌ๋ฐ”๋ฅธ ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ)์ด ์žˆ์–ด์•ผ๋งŒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

Classic variable-length forgery pattern

CBC-MAC๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค:

  • IV = 0
  • tag = last_block( CBC_encrypt(key, message, IV=0) )

์„ ํƒํ•œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ํƒœ๊ทธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด, CBC๊ฐ€ ๋ธ”๋ก์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์„ ์•…์šฉํ•˜์—ฌ ํ‚ค๋ฅผ ๋ชจ๋ฅธ ์ฑ„๋กœ ๋ฉ”์‹œ์ง€์˜ ์—ฐ๊ฒฐ(concatenation) ๋“ฑ๊ณผ ๊ด€๋ จ๋œ ํƒœ๊ทธ๋ฅผ ์ž์ฃผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” CTF์—์„œ username์ด๋‚˜ role์„ CBC-MAC์œผ๋กœ MAC ์ฒ˜๋ฆฌํ•˜๋Š” ์ฟ ํ‚ค/ํ† ํฐ์—์„œ ์ž์ฃผ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Safer alternatives

  • HMAC (SHA-256/512)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • CMAC (AES-CMAC)๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ๋ฉ”์‹œ์ง€ ๊ธธ์ด ๋ฐ ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ๋ฅผ ํฌํ•จํ•˜์„ธ์š”.

Stream ciphers: XOR and RC4

The mental model

๋Œ€๋ถ€๋ถ„์˜ ์ŠคํŠธ๋ฆผ ์•”ํ˜ธ ์ƒํ™ฉ์€ ๋‹ค์Œ์œผ๋กœ ํ™˜์›๋ฉ๋‹ˆ๋‹ค:

ciphertext = plaintext XOR keystream

๋”ฐ๋ผ์„œ:

  • plaintext๋ฅผ ์•Œ๋ฉด keystream์„ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • keystream์ด ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ(๊ฐ™์€ key+nonce), C1 XOR C2 = P1 XOR P2.

XOR-based encryption

๋งŒ์•ฝ ์œ„์น˜ i์—์„œ์˜ ์–ด๋–ค plaintext ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, keystream ๋ฐ”์ดํŠธ๋ฅผ ๋ณต์›ํ•˜์—ฌ ํ•ด๋‹น ์œ„์น˜์˜ ๋‹ค๋ฅธ ์•”ํ˜ธ๋ฌธ๋“ค์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Autosolvers:

RC4

RC4๋Š” ์ŠคํŠธ๋ฆผ ์•”ํ˜ธ๋กœ, ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”๊ฐ€ ๋™์ผํ•œ ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ํ‚ค๋กœ ์•Œ๋ ค์ง„ plaintext์˜ RC4 ์•”ํ˜ธ๋ฌธ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด, keystream์„ ๋ณต์›ํ•˜์—ฌ ๋™์ผํ•œ ๊ธธ์ด/์˜คํ”„์…‹์˜ ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€๋“ค์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Reference writeup (HTB Kryptos):

Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog

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