DDexec / EverythingExec

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

Context

๋ฆฌ๋ˆ…์Šค์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํŒŒ์ผ๋กœ ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ, ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ณ„์ธต์„ ํ†ตํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” execve()๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค). ์ด ํŒŒ์ผ์€ ๋””์Šคํฌ์— ์žˆ๊ฑฐ๋‚˜ ๋žจ(tmpfs, memfd)์— ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์œ„ํ˜‘ ๋ฐ ๊ณต๊ฒฉ์ž์˜ ๋„๊ตฌ๋ฅผ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜ ๊ทธ๋“ค์ด ์•„๋ฌด๊ฒƒ๋„ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค(_์˜ˆ: ๋น„ํŠน๊ถŒ ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ ํŒŒ์ผ์„ ์•„๋ฌด ๊ณณ์—๋‚˜ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ).

ํ•˜์ง€๋งŒ ์ด ๊ธฐ์ˆ ์€ ๋ชจ๋“  ๊ฒƒ์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๋‹ค๋ฉดโ€ฆ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํƒˆ์ทจํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ์ˆ ์€ ์ฝ๊ธฐ ์ „์šฉ, noexec, ํŒŒ์ผ ์ด๋ฆ„ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ, ํ•ด์‹œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ณดํ˜ธ ๊ธฐ์ˆ ์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

Dependencies

์ตœ์ข… ์Šคํฌ๋ฆฝํŠธ๋Š” ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋„๊ตฌ์— ์˜์กดํ•˜๋ฉฐ, ๊ณต๊ฒฉํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๊ณณ์—์„œ ์ด๋“ค์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค):

dd
bash | zsh | ash (busybox)
head
tail
cut
grep
od
readlink
wc
tr
base64

๊ธฐ์ˆ 

ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž„์˜๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฅ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€๋กœ์ฑ„๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ต์ฒดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ptrace() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ (์ด๋Š” ์‹œ์Šคํ…œ์—์„œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด๋‚˜ gdb๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค) ๋” ํฅ๋ฏธ๋กญ๊ฒŒ๋„ /proc/$pid/mem์— ์“ฐ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ /proc/$pid/mem์€ ํ”„๋กœ์„ธ์Šค์˜ ์ „์ฒด ์ฃผ์†Œ ๊ณต๊ฐ„์˜ 1:1 ๋งคํ•‘์ž…๋‹ˆ๋‹ค (_์˜ˆ: x86-64์—์„œ 0x0000000000000000์—์„œ 0x7ffffffffffff000๊นŒ์ง€). ์ด๋Š” ์˜คํ”„์…‹ x์—์„œ ์ด ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๊ฒƒ์ด ๊ฐ€์ƒ ์ฃผ์†Œ x์—์„œ ๋‚ด์šฉ์„ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์šฐ๋ฆฌ๋Š” ๋„ค ๊ฐ€์ง€ ๊ธฐ๋ณธ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฃจํŠธ์™€ ํŒŒ์ผ์˜ ํ”„๋กœ๊ทธ๋žจ ์†Œ์œ ์ž๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ASLR.
  • ํ”„๋กœ๊ทธ๋žจ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋งคํ•‘๋˜์ง€ ์•Š์€ ์ฃผ์†Œ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋ ค๊ณ  ํ•˜๋ฉด I/O ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋“ค์€ ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๋Œ€๋ถ€๋ถ„์˜ ์…ธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์†๋ฐ›์„ ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ์…ธ์˜ mem ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” fd๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹คโ€ฆ ๋”ฐ๋ผ์„œ ํ•ด๋‹น fd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์…ธ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ASLR์€ ๋ฌธ์ œ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์…ธ์˜ maps ํŒŒ์ผ์ด๋‚˜ procfs์˜ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ํ™•์ธํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํŒŒ์ผ์—์„œ lseek()๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์…ธ์—์„œ๋Š” ์•…๋ช… ๋†’์€ dd๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋” ์ž์„ธํžˆ

๋‹จ๊ณ„๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฝ๊ณ  ์ดํ•ดํ•˜๋Š” ๋ฐ ์–ด๋–ค ์ „๋ฌธ ์ง€์‹๋„ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

  • ์‹คํ–‰ํ•  ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๋กœ๋”๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํ•„์š”ํ•œ ๋งคํ•‘์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, ๋Œ€๋žต์ ์œผ๋กœ ์ปค๋„์ด execve()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” โ€œ์…ธโ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค:
  • ํ•ด๋‹น ๋งคํ•‘์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ทธ ์•ˆ์œผ๋กœ ์ฝ์–ด๋“ค์ž…๋‹ˆ๋‹ค.
  • ๊ถŒํ•œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์ˆ˜๋กœ ์Šคํƒ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋กœ๋”์— ํ•„์š”ํ•œ ๋ณด์กฐ ๋ฒกํ„ฐ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๋”๋กœ ์ ํ”„ํ•˜์—ฌ ๋‚˜๋จธ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค (ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค).
  • ์‹คํ–‰ ์ค‘์ธ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ›„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ˜ํ™˜ํ•  ์ฃผ์†Œ๋ฅผ syscall ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋ฎ์–ด์”Œ์šฐ๊ณ , ์ด๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์šฐ๋ฆฌ์˜ ์…ธ์ฝ”๋“œ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค (์šฐ๋ฆฌ๋Š” mem์„ ํ†ตํ•ด ์“ฐ๊ธฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).
  • ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์„ ํ”„๋กœ์„ธ์Šค์˜ stdin์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค (ํ•ด๋‹น โ€œ์…ธโ€ ์ฝ”๋“œ์— ์˜ํ•ด read()๋ฉ๋‹ˆ๋‹ค).
  • ์ด ์‹œ์ ์—์„œ ๋กœ๋”๋Š” ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๊ทธ ์•ˆ์œผ๋กœ ์ ํ”„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š” https://github.com/arget13/DDexec

EverythingExec

dd์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๋Œ€์•ˆ์ด ์žˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜์ธ tail์€ ํ˜„์žฌ mem ํŒŒ์ผ์„ ํ†ตํ•ด lseek()ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค (์ด๋Š” dd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์œ ์ผํ•œ ๋ชฉ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค). ์ด๋Ÿฌํ•œ ๋Œ€์•ˆ์€:

tail
hexdump
cmp
xxd

๋ณ€์ˆ˜ SEEKER๋ฅผ ์„ค์ •ํ•˜๋ฉด ์‚ฌ์šฉ๋˜๋Š” seeker๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค, ์˜ˆ::

SEEKER=cmp bash ddexec.sh ls -l <<< $(base64 -w0 /bin/ls)

์Šคํฌ๋ฆฝํŠธ์— ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ์œ ํšจํ•œ seeker๋ฅผ ์ฐพ์œผ๋ฉด SEEKER_ARGS ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

SEEKER=xxd SEEKER_ARGS='-s $offset' zsh ddexec.sh ls -l <<< $(base64 -w0 /bin/ls)

์ด๊ฒƒ์„ ์ฐจ๋‹จํ•˜์„ธ์š”, EDRs.

์ฐธ๊ณ ๋ฌธํ—Œ

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