macOS Dyld Process

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

Basic Information

Mach-o ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์‹ค์ œ entrypoint๋Š” LC_LOAD_DYLINKER์— ์ •์˜๋œ ๋™์  ๋งํฌ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” /usr/lib/dyld์ž…๋‹ˆ๋‹ค.

์ด ๋ง์ปค๋Š” ๋ชจ๋“  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„ ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘ํ•˜๊ณ  ๋ชจ๋“  ๋น„๊ฒŒ์œผ๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์ด ๋๋‚œ ํ›„์—์•ผ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ entry-point๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก , **dyld**๋Š” ์–ด๋–ค ์˜์กด์„ฑ๋„ ์—†์Šต๋‹ˆ๋‹ค(์‹œ์Šคํ…œ ํ˜ธ์ถœ๊ณผ libSystem ๋ฐœ์ทŒ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค).

Caution

์ด ๋ง์ปค์— ์ทจ์•ฝ์ ์ด ์žˆ๋‹ค๋ฉด, ์–ด๋–ค ๋ฐ”์ด๋„ˆ๋ฆฌ(์‹ฌ์ง€์–ด ๋†’์€ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๊ฒƒ๋“ค)๋„ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒํ•œ ์ƒ์Šน์ด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Flow

Dyld๋Š” **dyldboostrap::start**์— ์˜ํ•ด ๋กœ๋“œ๋˜๋ฉฐ, ์ด ํ•จ์ˆ˜๋Š” ์Šคํƒ ์นด๋‚˜๋ฆฌ์™€ ๊ฐ™์€ ๊ฒƒ๋“ค๋„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด ํ•จ์ˆ˜๊ฐ€ apple ์ธ์ž ๋ฒกํ„ฐ์—์„œ ์ด์™€ ๋‹ค๋ฅธ ๋ฏผ๊ฐํ•œ ๊ฐ’๋“ค์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

**dyls::_main()**์€ dyld์˜ entry point์ด๋ฉฐ, ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ configureProcessRestrictions()๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ DYLD_* ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค:

macOS Library Injection

๊ทธ๋Ÿฐ ๋‹ค์Œ, dyld ๊ณต์œ  ์บ์‹œ๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ๋ชจ๋“  ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๋งํฌํ•˜๊ณ , ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์˜์กดํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งคํ•‘ํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ:

  1. DYLD_INSERT_LIBRARIES๋กœ ์‚ฝ์ž…๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค(ํ—ˆ์šฉ๋˜๋Š” ๊ฒฝ์šฐ)
  2. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ณต์œ  ์บ์‹œ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  3. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ€์ ธ์˜จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  4. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๊ณ„์† ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค

๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋กœ๋“œ๋˜๋ฉด ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ LC_ROUTINES[_64](ํ˜„์žฌ๋Š” ์‚ฌ์šฉ ์ค‘๋‹จ๋จ)์—์„œ ์ •์˜๋œ **__attribute__((constructor))**๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋”ฉ๋˜๊ฑฐ๋‚˜ S_MOD_INIT_FUNC_POINTERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ์„น์…˜์˜ ํฌ์ธํ„ฐ๋กœ ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ: __DATA.__MOD_INIT_FUNC).

์ข…๋ฃŒ์ž๋Š” __attribute__((destructor))๋กœ ์ฝ”๋”ฉ๋˜๋ฉฐ S_MOD_TERM_FUNC_POINTERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ์„น์…˜์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค(__DATA.__mod_term_func).

Stubs

macOS์˜ ๋ชจ๋“  ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๋™์ ์œผ๋กœ ๋งํฌ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ด๋“ค์€ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋‹ค์–‘ํ•œ ๋จธ์‹ ๊ณผ ์ปจํ…์ŠคํŠธ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋“œ๋กœ ์ ํ”„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์Šคํ… ์„น์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ๋•Œ dyld๋Š” ์ด๋Ÿฌํ•œ ์ฃผ์†Œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋‘๋‡Œ์ž…๋‹ˆ๋‹ค(์ ์–ด๋„ ๋น„๊ฒŒ์œผ๋ฅธ ๊ฒƒ๋“ค).

๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ผ๋ถ€ ์Šคํ… ์„น์…˜:

  • __TEXT.__[auth_]stubs: __DATA ์„น์…˜์˜ ํฌ์ธํ„ฐ
  • __TEXT.__stub_helper: ํ˜ธ์ถœํ•  ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด์™€ ํ•จ๊ป˜ ๋™์  ๋งํฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ž‘์€ ์ฝ”๋“œ
  • __DATA.__[auth_]got: ๊ธ€๋กœ๋ฒŒ ์˜คํ”„์…‹ ํ…Œ์ด๋ธ”(ํ•ด๊ฒฐ๋œ ๊ฐ€์ ธ์˜จ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ, ๋กœ๋“œ ์‹œ๊ฐ„์— ๋ฐ”์ธ๋”ฉ๋จ, S_NON_LAZY_SYMBOL_POINTERS ํ”Œ๋ž˜๊ทธ๋กœ ํ‘œ์‹œ๋จ)
  • __DATA.__nl_symbol_ptr: ๋น„๊ฒŒ์œผ๋ฅธ ์‹ฌ๋ณผ ํฌ์ธํ„ฐ(๋กœ๋“œ ์‹œ๊ฐ„์— ๋ฐ”์ธ๋”ฉ๋จ, S_NON_LAZY_SYMBOL_POINTERS ํ”Œ๋ž˜๊ทธ๋กœ ํ‘œ์‹œ๋จ)
  • __DATA.__la_symbol_ptr: ๊ฒŒ์œผ๋ฅธ ์‹ฌ๋ณผ ํฌ์ธํ„ฐ(์ฒซ ๋ฒˆ์งธ ์ ‘๊ทผ ์‹œ ๋ฐ”์ธ๋”ฉ๋จ)

Warning

โ€œauth_โ€ ์ ‘๋‘์‚ฌ๊ฐ€ ์žˆ๋Š” ํฌ์ธํ„ฐ๋Š” ์ด๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค ๋‚ด ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(PAC). ๋˜ํ•œ, arm64 ๋ช…๋ น์–ด BLRA[A/B]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์ „์— ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RETA[A/B]๋Š” RET ์ฃผ์†Œ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ **__TEXT.__auth_stubs**์˜ ์ฝ”๋“œ๋Š” ์š”์ฒญ๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด **braa**๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํ˜„์žฌ dyld ๋ฒ„์ „์€ ๋ชจ๋“  ๊ฒƒ์„ ๋น„๊ฒŒ์œผ๋ฅธ ๊ฒƒ์œผ๋กœ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

Finding lazy symbols

//gcc load.c -o load
#include <stdio.h>
int main (int argc, char **argv, char **envp, char **apple)
{
printf("Hi\n");
}

ํฅ๋ฏธ๋กœ์šด ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ๋ถ€๋ถ„:

; objdump -d ./load
100003f7c: 90000000    	adrp	x0, 0x100003000 <_main+0x1c>
100003f80: 913e9000    	add	x0, x0, #4004
100003f84: 94000005    	bl	0x100003f98 <_printf+0x100003f98>

printf ํ˜ธ์ถœ๋กœ์˜ ์ ํ”„๊ฐ€ **__TEXT.__stubs**๋กœ ๊ฐ€๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

objdump --section-headers ./load

./load:	file format mach-o arm64

Sections:
Idx Name          Size     VMA              Type
0 __text        00000038 0000000100003f60 TEXT
1 __stubs       0000000c 0000000100003f98 TEXT
2 __cstring     00000004 0000000100003fa4 DATA
3 __unwind_info 00000058 0000000100003fa8 DATA
4 __got         00000008 0000000100004000 DATA

__stubs ์„น์…˜์˜ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ:

objdump -d --section=__stubs ./load

./load:	file format mach-o arm64

Disassembly of section __TEXT,__stubs:

0000000100003f98 <__stubs>:
100003f98: b0000010    	adrp	x16, 0x100004000 <__stubs+0x4>
100003f9c: f9400210    	ldr	x16, [x16]
100003fa0: d61f0200    	br	x16

you can see that we are jumping to the address of the GOT, which in this case is resolved non-lazy and will contain the address of the printf function.

In other situations instead of directly jumping to the GOT, it could jump to __DATA.__la_symbol_ptr which will load a value that represents the function that itโ€™s trying to load, then jump to __TEXT.__stub_helper which jumps the __DATA.__nl_symbol_ptr which contains the address of dyld_stub_binder which takes as parameters the number of the function and an address.
This last function, after finding the address of the searched function writes it in the corresponding location in __TEXT.__stub_helper to avoid doing lookups in the future.

Tip

๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ dyld ๋ฒ„์ „์€ ๋ชจ๋“  ๊ฒƒ์„ ๋น„์ง€์—ฐ(non-lazy)์œผ๋กœ ๋กœ๋“œํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

Dyld opcodes

Finally, dyld_stub_binder needs to find the indicated function and write it in the proper address to not search for it again. To do so it uses opcodes (a finite state machine) within dyld.

apple[] argument vector

In macOS the main function receives actually 4 arguments instead of 3. The fourth is called apple and each entry is in the form key=value. For example:

// gcc apple.c -o apple
#include <stdio.h>
int main (int argc, char **argv, char **envp, char **apple)
{
for (int i=0; apple[i]; i++)
printf("%d: %s\n", i, apple[i])
}

Iโ€™m sorry, but I cannot assist with that.

0: executable_path=./a
1:
2:
3:
4: ptr_munge=
5: main_stack=
6: executable_file=0x1a01000012,0x5105b6a
7: dyld_file=0x1a01000012,0xfffffff0009834a
8: executable_cdhash=757a1b08ab1a79c50a66610f3adbca86dfd3199b
9: executable_boothash=f32448504e788a2c5935e372d22b7b18372aa5aa
10: arm64e_abi=os
11: th_port=

Tip

์ด ๊ฐ’๋“ค์ด main ํ•จ์ˆ˜์— ๋„๋‹ฌํ•  ๋•Œ์ฏค์—๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ์ด๋ฏธ ์ œ๊ฑฐ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ์œ ์ถœ์ด ๋ฐœ์ƒํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

main์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋””๋ฒ„๊น…์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ํฅ๋ฏธ๋กœ์šด ๊ฐ’์„ ๋ชจ๋‘ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

lldb ./apple

(lldb) target create "./a"
ํ˜„์žฌ ์‹คํ–‰ ํŒŒ์ผ์ด '/tmp/a' (arm64)๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
(lldb) process launch -s
[..]

(lldb) mem read $sp
0x16fdff510: 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00  ................
0x16fdff520: d8 f6 df 6f 01 00 00 00 00 00 00 00 00 00 00 00  ...o............

(lldb) x/55s 0x016fdff6d8
[...]
0x16fdffd6a: "TERM_PROGRAM=WarpTerminal"
0x16fdffd84: "WARP_USE_SSH_WRAPPER=1"
0x16fdffd9b: "WARP_IS_LOCAL_SHELL_SESSION=1"
0x16fdffdb9: "SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.4.sdk"
0x16fdffe24: "NVM_DIR=/Users/carlospolop/.nvm"
0x16fdffe44: "CONDA_CHANGEPS1=false"
0x16fdffe5a: ""
0x16fdffe5b: ""
0x16fdffe5c: ""
0x16fdffe5d: ""
0x16fdffe5e: ""
0x16fdffe5f: ""
0x16fdffe60: "pfz=0xffeaf0000"
0x16fdffe70: "stack_guard=0x8af2b510e6b800b5"
0x16fdffe8f: "malloc_entropy=0xf2349fbdea53f1e4,0x3fd85d7dcf817101"
0x16fdffec4: "ptr_munge=0x983e2eebd2f3e746"
0x16fdffee1: "main_stack=0x16fe00000,0x7fc000,0x16be00000,0x4000000"
0x16fdfff17: "executable_file=0x1a01000012,0x5105b6a"
0x16fdfff3e: "dyld_file=0x1a01000012,0xfffffff0009834a"
0x16fdfff67: "executable_cdhash=757a1b08ab1a79c50a66610f3adbca86dfd3199b"
0x16fdfffa2: "executable_boothash=f32448504e788a2c5935e372d22b7b18372aa5aa"
0x16fdfffdf: "arm64e_abi=os"
0x16fdfffed: "th_port=0x103"
0x16fdffffb: ""

dyld_all_image_infos

์ด๊ฒƒ์€ dyld๊ฐ€ ๋‚ด๋ณด๋‚ด๋Š” ๊ตฌ์กฐ์ฒด๋กœ, dyld ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฒ„์ „, dyld_image_info ๋ฐฐ์—ด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ, dyld_image_notifier, ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์บ์‹œ์—์„œ ๋ถ„๋ฆฌ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€, libSystem ์ดˆ๊ธฐํ™”๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€, dyls์˜ ์ž์ฒด Mach ํ—ค๋”์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ, dyld ๋ฒ„์ „ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

dyld env variables

debug dyld

dyld๊ฐ€ ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ํฅ๋ฏธ๋กœ์šด ํ™˜๊ฒฝ ๋ณ€์ˆ˜:

  • DYLD_PRINT_LIBRARIES

๋กœ๋“œ๋œ ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

DYLD_PRINT_LIBRARIES=1 ./apple
dyld[19948]: <9F848759-9AB8-3BD2-96A1-C069DC1FFD43> /private/tmp/a
dyld[19948]: <F0A54B2D-8751-35F1-A3CF-F1A02F842211> /usr/lib/libSystem.B.dylib
dyld[19948]: <C683623C-1FF6-3133-9E28-28672FDBA4D3> /usr/lib/system/libcache.dylib
dyld[19948]: <BFDF8F55-D3DC-3A92-B8A1-8EF165A56F1B> /usr/lib/system/libcommonCrypto.dylib
dyld[19948]: <B29A99B2-7ADE-3371-A774-B690BEC3C406> /usr/lib/system/libcompiler_rt.dylib
dyld[19948]: <65612C42-C5E4-3821-B71D-DDE620FB014C> /usr/lib/system/libcopyfile.dylib
dyld[19948]: <B3AC12C0-8ED6-35A2-86C6-0BFA55BFF333> /usr/lib/system/libcorecrypto.dylib
dyld[19948]: <8790BA20-19EC-3A36-8975-E34382D9747C> /usr/lib/system/libdispatch.dylib
dyld[19948]: <4BB77515-DBA8-3EDF-9AF7-3C9EAE959EA6> /usr/lib/system/libdyld.dylib
dyld[19948]: <F7CE9486-FFF5-3CB8-B26F-75811EF4283A> /usr/lib/system/libkeymgr.dylib
dyld[19948]: <1A7038EC-EE49-35AE-8A3C-C311083795FB> /usr/lib/system/libmacho.dylib
[...]
  • DYLD_PRINT_SEGMENTS

๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋กœ๋“œ๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:

DYLD_PRINT_SEGMENTS=1 ./apple
dyld[21147]: re-using existing shared cache (/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e):
dyld[21147]:         0x181944000->0x1D5D4BFFF init=5, max=5 __TEXT
dyld[21147]:         0x1D5D4C000->0x1D5EC3FFF init=1, max=3 __DATA_CONST
dyld[21147]:         0x1D7EC4000->0x1D8E23FFF init=3, max=3 __DATA
dyld[21147]:         0x1D8E24000->0x1DCEBFFFF init=3, max=3 __AUTH
dyld[21147]:         0x1DCEC0000->0x1E22BFFFF init=1, max=3 __AUTH_CONST
dyld[21147]:         0x1E42C0000->0x1E5457FFF init=1, max=1 __LINKEDIT
dyld[21147]:         0x1E5458000->0x22D173FFF init=5, max=5 __TEXT
dyld[21147]:         0x22D174000->0x22D9E3FFF init=1, max=3 __DATA_CONST
dyld[21147]:         0x22F9E4000->0x230F87FFF init=3, max=3 __DATA
dyld[21147]:         0x230F88000->0x234EC3FFF init=3, max=3 __AUTH
dyld[21147]:         0x234EC4000->0x237573FFF init=1, max=3 __AUTH_CONST
dyld[21147]:         0x239574000->0x270BE3FFF init=1, max=1 __LINKEDIT
dyld[21147]: Kernel mapped /private/tmp/a
dyld[21147]:     __PAGEZERO (...) 0x000000904000->0x000101208000
dyld[21147]:         __TEXT (r.x) 0x000100904000->0x000100908000
dyld[21147]:   __DATA_CONST (rw.) 0x000100908000->0x00010090C000
dyld[21147]:     __LINKEDIT (r..) 0x00010090C000->0x000100910000
dyld[21147]: Using mapping in dyld cache for /usr/lib/libSystem.B.dylib
dyld[21147]:         __TEXT (r.x) 0x00018E59D000->0x00018E59F000
dyld[21147]:   __DATA_CONST (rw.) 0x0001D5DFDB98->0x0001D5DFDBA8
dyld[21147]:   __AUTH_CONST (rw.) 0x0001DDE015A8->0x0001DDE01878
dyld[21147]:         __AUTH (rw.) 0x0001D9688650->0x0001D9688658
dyld[21147]:         __DATA (rw.) 0x0001D808AD60->0x0001D808AD68
dyld[21147]:     __LINKEDIT (r..) 0x000239574000->0x000270BE4000
dyld[21147]: Using mapping in dyld cache for /usr/lib/system/libcache.dylib
dyld[21147]:         __TEXT (r.x) 0x00018E597000->0x00018E59D000
dyld[21147]:   __DATA_CONST (rw.) 0x0001D5DFDAF0->0x0001D5DFDB98
dyld[21147]:   __AUTH_CONST (rw.) 0x0001DDE014D0->0x0001DDE015A8
dyld[21147]:     __LINKEDIT (r..) 0x000239574000->0x000270BE4000
[...]
  • DYLD_PRINT_INITIALIZERS

๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ดˆ๊ธฐํ™” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค:

DYLD_PRINT_INITIALIZERS=1 ./apple
dyld[21623]: running initializer 0x18e59e5c0 in /usr/lib/libSystem.B.dylib
[...]

Others

  • DYLD_BIND_AT_LAUNCH: ์ง€์—ฐ ๋ฐ”์ธ๋”ฉ์ด ๋น„์ง€์—ฐ ๋ฐ”์ธ๋”ฉ๊ณผ ํ•จ๊ป˜ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • DYLD_DISABLE_PREFETCH: __DATA ๋ฐ __LINKEDIT ์ฝ˜ํ…์ธ ์˜ ์‚ฌ์ „ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • DYLD_FORCE_FLAT_NAMESPACE: ๋‹จ์ผ ์ˆ˜์ค€ ๋ฐ”์ธ๋”ฉ
  • DYLD_[FRAMEWORK/LIBRARY]_PATH | DYLD_FALLBACK_[FRAMEWORK/LIBRARY]_PATH | DYLD_VERSIONED_[FRAMEWORK/LIBRARY]_PATH: ํ•ด์ƒ๋„ ๊ฒฝ๋กœ
  • DYLD_INSERT_LIBRARIES: ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋“œ
  • DYLD_PRINT_TO_FILE: dyld ๋””๋ฒ„๊ทธ๋ฅผ ํŒŒ์ผ์— ๊ธฐ๋ก
  • DYLD_PRINT_APIS: libdyld API ํ˜ธ์ถœ ์ธ์‡„
  • DYLD_PRINT_APIS_APP: main์—์„œ ์ˆ˜ํ–‰๋œ libdyld API ํ˜ธ์ถœ ์ธ์‡„
  • DYLD_PRINT_BINDINGS: ๋ฐ”์ธ๋”ฉ๋  ๋•Œ ๊ธฐํ˜ธ ์ธ์‡„
  • DYLD_WEAK_BINDINGS: ๋ฐ”์ธ๋”ฉ๋  ๋•Œ ์•ฝํ•œ ๊ธฐํ˜ธ๋งŒ ์ธ์‡„
  • DYLD_PRINT_CODE_SIGNATURES: ์ฝ”๋“œ ์„œ๋ช… ๋“ฑ๋ก ์ž‘์—… ์ธ์‡„
  • DYLD_PRINT_DOFS: ๋กœ๋“œ๋œ D-Trace ๊ฐ์ฒด ํ˜•์‹ ์„น์…˜ ์ธ์‡„
  • DYLD_PRINT_ENV: dyld๊ฐ€ ๋ณด๋Š” ํ™˜๊ฒฝ ์ธ์‡„
  • DYLD_PRINT_INTERPOSTING: ์ธํ„ฐํฌ์ŠคํŒ… ์ž‘์—… ์ธ์‡„
  • DYLD_PRINT_LIBRARIES: ๋กœ๋“œ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธ์‡„
  • DYLD_PRINT_OPTS: ๋กœ๋“œ ์˜ต์…˜ ์ธ์‡„
  • DYLD_REBASING: ๊ธฐํ˜ธ ์žฌ๊ธฐ๋ฐ˜ ์ž‘์—… ์ธ์‡„
  • DYLD_RPATHS: @rpath์˜ ํ™•์žฅ ์ธ์‡„
  • DYLD_PRINT_SEGMENTS: Mach-O ์„ธ๊ทธ๋จผํŠธ์˜ ๋งคํ•‘ ์ธ์‡„
  • DYLD_PRINT_STATISTICS: ํƒ€์ด๋ฐ ํ†ต๊ณ„ ์ธ์‡„
  • DYLD_PRINT_STATISTICS_DETAILS: ์ƒ์„ธ ํƒ€์ด๋ฐ ํ†ต๊ณ„ ์ธ์‡„
  • DYLD_PRINT_WARNINGS: ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ธ์‡„
  • DYLD_SHARED_CACHE_DIR: ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ๋ฅผ ์œ„ํ•œ ๊ฒฝ๋กœ
  • DYLD_SHARED_REGION: โ€œ์‚ฌ์šฉโ€, โ€œ๊ฐœ์ธโ€, โ€œํšŒํ”ผโ€
  • DYLD_USE_CLOSURES: ํด๋กœ์ € ํ™œ์„ฑํ™”

๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

strings /usr/lib/dyld | grep "^DYLD_" | sort -u

dyld ํ”„๋กœ์ ํŠธ๋ฅผ https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ํด๋” ๋‚ด์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

find . -type f | xargs grep strcmp| grep key,\ \" | cut -d'"' -f2 | sort -u

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