macOS μ± - κ²μ¬, λλ²κΉ λ° νΌμ§
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 μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
μ μ λΆμ
otool & objdump & nm
otool -L /bin/ls #List dynamically linked libraries
otool -tv /bin/ps #Decompile application
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
objdump -m --syms /bin/ls # Check if the symbol table exists to get function names
objdump -m --full-contents /bin/ls # Dump every section
objdump -d /bin/ls # Dissasemble the binary
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
nm -m ./tccd # List of symbols
jtool2 & Disarm
You can download disarm from here.
ARCH=arm64e disarm -c -i -I --signature /path/bin # Get bin info and signature
ARCH=arm64e disarm -c -l /path/bin # Get binary sections
ARCH=arm64e disarm -c -L /path/bin # Get binary commands (dependencies included)
ARCH=arm64e disarm -c -S /path/bin # Get symbols (func names, strings...)
ARCH=arm64e disarm -c -d /path/bin # Get disasembled
jtool2 -d __DATA.__const myipc_server | grep MIG # Get MIG info
μ¬κΈ°μμ jtool2λ₯Ό λ€μ΄λ‘λνμΈμ λλ brewλ‘ μ€μΉν μ μμ΅λλ€.
# Install
brew install --cask jtool2
jtool2 -l /bin/ls # Get commands (headers)
jtool2 -L /bin/ls # Get libraries
jtool2 -S /bin/ls # Get symbol info
jtool2 -d /bin/ls # Dump binary
jtool2 -D /bin/ls # Decompile binary
# Get signature information
ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Automator
# Get MIG information
jtool2 -d __DATA.__const myipc_server | grep MIG
[!CAUTION] > jtoolμ disarmμΌλ‘ λ체λμμ΅λλ€.
Codesign / ldid
[!TIP] > **
Codesign**μ macOSμμ μ°Ύμ μ μμΌλ©°, **ldid**λ iOSμμ μ°Ύμ μ μμ΅λλ€.
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
# Check if the appβs contents have been modified
codesign --verify --verbose /Applications/Safari.app
# Get entitlements from the binary
codesign -d --entitlements :- /System/Applications/Automator.app # Check the TCC perms
# Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app
# Sign a binary
codesign -s <cert-name-keychain> toolsdemo
# Get signature info
ldid -h <binary>
# Get entitlements
ldid -e <binary>
# Change entilements
## /tmp/entl.xml is a XML file with the new entitlements to add
ldid -S/tmp/entl.xml <binary>
SuspiciousPackage
SuspiciousPackageλ .pkg νμΌ(μ€μΉ νλ‘κ·Έλ¨)μ κ²μ¬νκ³ μ€μΉνκΈ° μ μ λ΄λΆ λ΄μ©μ νμΈνλ λ° μ μ©ν λꡬμ
λλ€.
μ΄ μ€μΉ νλ‘κ·Έλ¨μλ μ
μ± μ½λ μμ±μκ° μΌλ°μ μΌλ‘ μ
μ± μ½λλ₯Ό μ§μμν€κΈ° μν΄ λ¨μ©νλ preinstall λ° postinstall bash μ€ν¬λ¦½νΈκ° ν¬ν¨λμ΄ μμ΅λλ€.
hdiutil
μ΄ λꡬλ Apple λμ€ν¬ μ΄λ―Έμ§(.dmg) νμΌμ λ§μ΄νΈνμ¬ μ€ννκΈ° μ μ κ²μ¬ν μ μλλ‘ ν©λλ€:
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
It will be mounted in /Volumes
Packed binaries
- λμ μνΈλ‘νΌ νμΈ
- λ¬Έμμ΄ νμΈ (μ΄ν΄ν μ μλ λ¬Έμμ΄μ΄ κ±°μ μμΌλ©΄, ν¨νΉλ¨)
- MacOSμ© UPX ν¨μ»€λ β__XHDRβλΌλ μΉμ μ μμ±ν©λλ€.
Static Objective-C analysis
Metadata
Caution
Objective-Cλ‘ μμ±λ νλ‘κ·Έλ¨μ Mach-O binariesλ‘ μ»΄νμΌλ λ ν΄λμ€ μ μΈμ μ μ§ν©λλ€. μ΄λ¬ν ν΄λμ€ μ μΈμλ λ€μμ΄ ν¬ν¨λ©λλ€:
- μ μλ μΈν°νμ΄μ€
- μΈν°νμ΄μ€ λ©μλ
- μΈν°νμ΄μ€ μΈμ€ν΄μ€ λ³μ
- μ μλ νλ‘ν μ½
μ΄ μ΄λ¦λ€μ μ΄μ§ νμΌμ 리λ²μ±μ λ μ΄λ ΅κ² λ§λ€κΈ° μν΄ λλ νλ μ μμ΅λλ€.
Function calling
Objective-Cλ₯Ό μ¬μ©νλ μ΄μ§ νμΌμμ ν¨μκ° νΈμΆλ λ, μ»΄νμΌλ μ½λλ ν΄λΉ ν¨μλ₯Ό νΈμΆνλ λμ **objc_msgSend**λ₯Ό νΈμΆν©λλ€. μ΄λ μ΅μ’
ν¨μλ₯Ό νΈμΆνκ² λ©λλ€:
.png)
μ΄ ν¨μκ° κΈ°λνλ λ§€κ°λ³μλ λ€μκ³Ό κ°μ΅λλ€:
- 첫 λ²μ§Έ λ§€κ°λ³μ (self)λ βλ©μμ§λ₯Ό λ°μ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ ν¬μΈν°βμ λλ€. λ κ°λ¨ν λ§νλ©΄, λ©μλκ° νΈμΆλλ κ°μ²΄μ λλ€. λ©μλκ° ν΄λμ€ λ©μλμΈ κ²½μ°, μ΄λ ν΄λμ€ κ°μ²΄μ μΈμ€ν΄μ€(μ 체)μ΄λ©°, μΈμ€ν΄μ€ λ©μλμ κ²½μ°, selfλ ν΄λμ€μ μΈμ€ν΄μ€νλ μΈμ€ν΄μ€λ₯Ό κ°μ²΄λ‘ κ°λ¦¬ν΅λλ€.
- λ λ²μ§Έ λ§€κ°λ³μ (op)λ βλ©μμ§λ₯Ό μ²λ¦¬νλ λ©μλμ μ νμβμ λλ€. λ€μ λ§ν΄, μ΄λ λ¨μν λ©μλμ μ΄λ¦μ λλ€.
- λλ¨Έμ§ λ§€κ°λ³μλ λ©μλ(op)μ μν΄ νμν κ°λ€μ λλ€.
μ΄ μ 보λ₯Ό ARM64μμ lldbλ‘ μ½κ² μ»λ λ°©λ²μ μ΄ νμ΄μ§μμ νμΈνμΈμ:
x64:
| Argument | Register | (for) objc_msgSend |
|---|---|---|
| 1st argument | rdi | self: methodκ° νΈμΆλλ κ°μ²΄ |
| 2nd argument | rsi | op: λ©μλμ μ΄λ¦ |
| 3rd argument | rdx | λ©μλμ λν 1st argument |
| 4th argument | rcx | λ©μλμ λν 2nd argument |
| 5th argument | r8 | λ©μλμ λν 3rd argument |
| 6th argument | r9 | λ©μλμ λν 4th argument |
| 7th+ argument |
rsp+ | λ©μλμ λν 5th+ argument |
Dump ObjectiveC metadata
Dynadump
Dynadumpλ Objective-C μ΄μ§ νμΌμ ν΄λμ€ λ€ννλ λꡬμ λλ€. GitHubμμλ dylibsλ₯Ό λͺ μνμ§λ§, μ€ν νμΌμλ μλν©λλ€.
./dynadump dump /path/to/bin
μμ± λΉμ, μ΄κ²μ΄ νμ¬ κ°μ₯ μ μλνλ κ²μ λλ€.
μΌλ° λꡬ
nm --dyldinfo-only /path/to/bin
otool -ov /path/to/bin
objdump --macho --objc-meta-data /path/to/bin
class-dump
class-dumpλ ObjectiveC νμ μ½λμμ ν΄λμ€, μΉ΄ν κ³ λ¦¬ λ° νλ‘ν μ½μ λν μ μΈμ μμ±νλ μλ λꡬμ λλ€.
μ€λλμκ³ μ μ§ κ΄λ¦¬λμ§ μμμ μ λλ‘ μλνμ§ μμ μ μμ΅λλ€.
ICDump
iCDumpλ νλμ μ΄κ³ ν¬λ‘μ€ νλ«νΌ Objective-C ν΄λμ€ λ€νμ λλ€. κΈ°μ‘΄ λꡬμ λΉκ΅ν λ, iCDumpλ Apple μνκ³μ λ 립μ μΌλ‘ μ€νλ μ μμΌλ©° Python λ°μΈλ©μ λ ΈμΆν©λλ€.
import icdump
metadata = icdump.objc.parse("/path/to/bin")
print(metadata.to_decl())
Static Swift λΆμ
Swift λ°μ΄λ리μ κ²½μ°, Objective-C νΈνμ± λλΆμ λλλ‘ class-dumpλ₯Ό μ¬μ©νμ¬ μ μΈμ μΆμΆν μ μμ§λ§ νμ κ·Έλ° κ²μ μλλλ€.
jtool -l λλ otool -l λͺ
λ Ήμ΄λ₯Ό μ¬μ©νλ©΄ __swift5 μ λμ¬λ‘ μμνλ μ¬λ¬ μΉμ
μ μ°Ύμ μ μμ΅λλ€:
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
LC 01: LC_SEGMENT_64 Mem: 0x100000000-0x100028000 __TEXT
[...]
Mem: 0x100026630-0x100026d54 __TEXT.__swift5_typeref
Mem: 0x100026d60-0x100027061 __TEXT.__swift5_reflstr
Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
[...]
μ΄ μΉμ μ μ μ₯λ μ 보μ λν μΆκ° μ 보λ μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμ νμΈν μ μμ΅λλ€.
κ²λ€κ°, Swift λ°μ΄λ리λ κΈ°νΈλ₯Ό κ°μ§ μ μμ΅λλ€ (μλ₯Ό λ€μ΄, λΌμ΄λΈλ¬λ¦¬λ ν¨μκ° νΈμΆλ μ μλλ‘ κΈ°νΈλ₯Ό μ μ₯ν΄μΌ ν©λλ€). **κΈ°νΈλ μΌλ°μ μΌλ‘ ν¨μ μ΄λ¦κ³Ό μμ±μ λν μ 보λ₯Ό 보기 μ’μ§ μκ² κ°μ§κ³ μμΌλ―λ‘ λ§€μ° μ μ©νλ©°, μλ μ΄λ¦μ μ»μ μ μλ βλλ§κΈλ¬βκ° μμ΅λλ€:
# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
# Swift cli
swift demangle
λμ λΆμ
Warning
μ΄μ§ νμΌμ λλ²κΉ νλ €λ©΄ SIPλ₯Ό λΉνμ±νν΄μΌ ν©λλ€ (
csrutil disableλλcsrutil enable --without debug) λλ μ΄μ§ νμΌμ μμ ν΄λλ‘ λ³΅μ¬νκ³ μλͺ μ μ κ±°ν΄μΌ ν©λλ€codesign --remove-signature <binary-path>λλ μ΄μ§ νμΌμ λλ²κΉ μ νμ©ν΄μΌ ν©λλ€ (μ΄ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©ν μ μμ΅λλ€).
Warning
macOSμμ μμ€ν μ΄μ§ νμΌ(μ:
cloudconfigurationd)μ κ³μΈ‘νλ €λ©΄ SIPλ₯Ό λΉνμ±νν΄μΌ ν©λλ€ (μλͺ λ§ μ κ±°νλ κ²μΌλ‘λ μλνμ§ μμ΅λλ€).
API
macOSλ νλ‘μΈμ€μ λν μ 보λ₯Ό μ 곡νλ λͺ κ°μ§ ν₯λ―Έλ‘μ΄ APIλ₯Ό λ ΈμΆν©λλ€:
proc_info: κ° νλ‘μΈμ€μ λν λ§μ μ 보λ₯Ό μ 곡νλ μ£Όμ APIμ λλ€. λ€λ₯Έ νλ‘μΈμ€ μ 보λ₯Ό μ»μΌλ €λ©΄ λ£¨νΈ κΆνμ΄ νμνμ§λ§ νΉλ³ν κΆνμ΄λ mach ν¬νΈλ νμνμ§ μμ΅λλ€.libsysmon.dylib: XPCλ‘ λ ΈμΆλ ν¨μλ₯Ό ν΅ν΄ νλ‘μΈμ€μ λν μ 보λ₯Ό μ»μ μ μκ² ν΄μ£Όμ§λ§,com.apple.sysmond.clientκΆνμ΄ νμν©λλ€.
μ€νμ· λ° λ§μ΄ν¬λ‘μ€νμ·
μ€νμ·ν
μ νλ‘μΈμ€μ μνλ₯Ό μΊ‘μ²νλ λ° μ¬μ©λλ κΈ°μ λ‘, λͺ¨λ μ€ν μ€μΈ μ€λ λμ νΈμΆ μ€νμ ν¬ν¨ν©λλ€. μ΄λ λλ²κΉ
, μ±λ₯ λΆμ λ° νΉμ μμ μμ μμ€ν
μ λμμ μ΄ν΄νλ λ° νΉν μ μ©ν©λλ€. iOS λ° macOSμμλ sample λ° **spindump**μ κ°μ μ¬λ¬ λꡬμ λ°©λ²μ μ¬μ©νμ¬ μ€νμ·ν
μ μνν μ μμ΅λλ€.
Sysdiagnose
μ΄ λꡬ (/usr/bini/ysdiagnose)λ κΈ°λ³Έμ μΌλ‘ ps, zprintμ κ°μ μμ κ°μ§ λͺ
λ Ήμ μ€ννμ¬ μ»΄ν¨ν°μμ λ§μ μ 보λ₯Ό μμ§ν©λλ€β¦
λ£¨νΈ κΆνμΌλ‘ μ€νν΄μΌ νλ©°, λ°λͺ¬ /usr/libexec/sysdiagnosedλ com.apple.system-task-ports λ° get-task-allowμ κ°μ λ§€μ° ν₯λ―Έλ‘μ΄ κΆνμ κ°μ§κ³ μμ΅λλ€.
κ·Έμ plistλ /System/Library/LaunchDaemons/com.apple.sysdiagnose.plistμ μμΉνλ©°, 3κ°μ MachServicesλ₯Ό μ μΈν©λλ€:
com.apple.sysdiagnose.CacheDelete: /var/rmpμ μ€λλ μμΉ΄μ΄λΈλ₯Ό μμ ν©λλ€.com.apple.sysdiagnose.kernel.ipc: νΉλ³ ν¬νΈ 23 (컀λ)com.apple.sysdiagnose.service.xpc:LibsysdiagnoseObj-C ν΄λμ€λ₯Ό ν΅ν μ¬μ©μ λͺ¨λ μΈν°νμ΄μ€. μ¬μ μ μλ μΈ κ°μ§ μΈμλ₯Ό λμ λλ¦¬λ‘ μ λ¬ν μ μμ΅λλ€ (compress,display,run)
ν΅ν© λ‘κ·Έ
MacOSλ μ ν리μΌμ΄μ μ μ€νν λ 무μμ νκ³ μλμ§ μ΄ν΄νλ λ° λ§€μ° μ μ©ν μ μλ λ§μ λ‘κ·Έλ₯Ό μμ±ν©λλ€.
κ²λ€κ°, <private> νκ·Έκ° ν¬ν¨λ λ‘κ·Έκ° μμ΄ μ¬μ©μ λλ μ»΄ν¨ν° μλ³ κ°λ₯ν μ 보λ₯Ό μ¨κΉλλ€. κ·Έλ¬λ μ΄ μ 보λ₯Ό 곡κ°νκΈ° μν΄ μΈμ¦μλ₯Ό μ€μΉν μ μμ΅λλ€. μ¬κΈ°μ μ€λͺ
μ λ°λ₯΄μΈμ.
Hopper
μΌμͺ½ ν¨λ
Hopperμ μΌμͺ½ ν¨λμμλ μ΄μ§ νμΌμ κΈ°νΈ(Labels), μ μ°¨ λ° ν¨μ λͺ©λ‘(Proc), λ¬Έμμ΄(Str)μ λ³Ό μ μμ΅λλ€. μ΄λ€μ λͺ¨λ λ¬Έμμ΄μ΄ μλλΌ Mac-O νμΌμ μ¬λ¬ λΆλΆμ μ μλ λ¬Έμμ΄μ
λλ€ (μ: cstring λλ objc_methname).
μ€κ° ν¨λ
μ€κ° ν¨λμμλ λμ€μ΄μ λΈλ μ½λλ₯Ό λ³Ό μ μμ΅λλ€. μμ λμ€μ΄μ λΈ, κ·Έλν, λμ»΄νμΌλ μ½λ λ° μ΄μ§ μ½λλ‘ κ°κ°μ μμ΄μ½μ ν΄λ¦νμ¬ λ³Ό μ μμ΅λλ€:
.png)
μ½λ κ°μ²΄λ₯Ό μ€λ₯Έμͺ½ ν΄λ¦νλ©΄ ν΄λΉ κ°μ²΄μ λν μ°Έμ‘°λ₯Ό 보거λ μ΄λ¦μ λ³κ²½ν μ μμ΅λλ€ (μ΄κ²μ λμ»΄νμΌλ μμ¬ μ½λμμλ μλνμ§ μμ΅λλ€):
.png)
λν, μ€κ° νλ¨μμ νμ΄μ¬ λͺ λ Ήμ μ λ ₯ν μ μμ΅λλ€.
μ€λ₯Έμͺ½ ν¨λ
μ€λ₯Έμͺ½ ν¨λμμλ νμ κΈ°λ‘(νμ¬ μν©μ λλ¬ν λ°©λ²μ μ μ μμ), νΈμΆ κ·Έλν(μ΄ ν¨μλ₯Ό νΈμΆνλ λͺ¨λ ν¨μμ μ΄ ν¨μκ° νΈμΆνλ λͺ¨λ ν¨μ), λ‘컬 λ³μ μ 보μ κ°μ ν₯λ―Έλ‘μ΄ μ 보λ₯Ό λ³Ό μ μμ΅λλ€.
dtrace
μ¬μ©μκ° μ ν리μΌμ΄μ μ λ§€μ° μ μμ€μΌλ‘ μ κ·Όν μ μκ² ν΄μ£Όλ©°, μ¬μ©μκ° νλ‘κ·Έλ¨μ μΆμ νκ³ μ€ν νλ¦μ λ³κ²½ν μ μλ λ°©λ²μ μ 곡ν©λλ€. Dtraceλ νλ‘λΈλ₯Ό μ¬μ©νλ©°, μ΄λ 컀λ μ μμ λ°°μΉλμ΄ μμ€ν νΈμΆμ μμκ³Ό λκ³Ό κ°μ μμΉμ μμ΅λλ€.
DTraceλ κ° μμ€ν
νΈμΆμ λν νλ‘λΈλ₯Ό μμ±νκΈ° μν΄ dtrace_probe_create ν¨μλ₯Ό μ¬μ©ν©λλ€. μ΄λ¬ν νλ‘λΈλ κ° μμ€ν
νΈμΆμ μ§μ
λ° μ’
λ£ μ§μ μμ λ°μ¬λ μ μμ΅λλ€. DTraceμμ μνΈμμ©μ /dev/dtraceλ₯Ό ν΅ν΄ μ΄λ£¨μ΄μ§λ©°, μ΄λ λ£¨νΈ μ¬μ©μλ§ μ¬μ©ν μ μμ΅λλ€.
Tip
SIP 보νΈλ₯Ό μμ ν λΉνμ±ννμ§ μκ³ Dtraceλ₯Ό νμ±ννλ €λ©΄ 볡ꡬ λͺ¨λμμ λ€μμ μ€νν μ μμ΅λλ€:
csrutil enable --without dtraceλν
dtraceλλdtrussμ΄μ§ νμΌμ μ»΄νμΌν κ²½μ° μ¬μ©ν μ μμ΅λλ€.
dtraceμ μ¬μ© κ°λ₯ν νλ‘λΈλ λ€μκ³Ό κ°μ΄ μ»μ μ μμ΅λλ€:
dtrace -l | head
ID PROVIDER MODULE FUNCTION NAME
1 dtrace BEGIN
2 dtrace END
3 dtrace ERROR
43 profile profile-97
44 profile profile-199
νλ‘λΈ μ΄λ¦μ μ 곡μ, λͺ¨λ, ν¨μ λ° μ΄λ¦μ λ€ λΆλΆμΌλ‘ ꡬμ±λ©λλ€: (fbt:mach_kernel:ptrace:entry). μ΄λ¦μ μΌλΆλ₯Ό μ§μ νμ§ μμΌλ©΄ Dtraceλ ν΄λΉ λΆλΆμ μμΌλμΉ΄λλ‘ μ μ©ν©λλ€.
DTraceλ₯Ό ꡬμ±νμ¬ νλ‘λΈλ₯Ό νμ±ννκ³ νλ‘λΈκ° μλν λ μνν μμ μ μ§μ νλ €λ©΄ D μΈμ΄λ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
μμΈν μ€λͺ κ³Ό λ λ§μ μμ λ https://illumos.org/books/dtrace/chp-intro.htmlμμ νμΈν μ μμ΅λλ€.
μμ
man -k dtraceλ₯Ό μ€ννμ¬ μ¬μ© κ°λ₯ν DTrace μ€ν¬λ¦½νΈλ₯Ό λμ΄ν©λλ€. μ: sudo dtruss -n binary
#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
- μ€ν¬λ¦½νΈ
syscall:::entry
/pid == $1/
{
}
#Log every syscall of a PID
sudo dtrace -s script.d 1234
syscall::open:entry
{
printf("%s(%s)", probefunc, copyinstr(arg0));
}
syscall::close:entry
{
printf("%s(%d)\n", probefunc, arg0);
}
#Log files opened and closed by a process
sudo dtrace -s b.d -c "cat /etc/hosts"
syscall:::entry
{
;
}
syscall:::return
{
printf("=%d\n", arg1);
}
#Log sys calls with values
sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
dtruss
dtruss -c ls #Get syscalls of ls
dtruss -c -p 1000 #get syscalls of PID 1000
kdebug
컀λ μΆμ κΈ°λ₯μ
λλ€. λ¬Έμνλ μ½λλ **/usr/share/misc/trace.codes**μμ μ°Ύμ μ μμ΅λλ€.
latency, sc_usage, fs_usage λ° traceμ κ°μ λꡬλ λ΄λΆμ μΌλ‘ μ΄λ₯Ό μ¬μ©ν©λλ€.
kdebugμ μΈν°νμ΄μ€νκΈ° μν΄ sysctlμ kern.kdebug λ€μμ€νμ΄μ€λ₯Ό ν΅ν΄ μ¬μ©λλ©°, μ¬μ©ν MIBλ bsd/kern/kdebug.cμ ꡬνλ ν¨μκ° μλ sys/sysctl.hμμ μ°Ύμ μ μμ΅λλ€.
컀μ€ν ν΄λΌμ΄μΈνΈλ‘ kdebugμ μνΈμμ©νκΈ° μν μΌλ°μ μΈ λ¨κ³λ λ€μκ³Ό κ°μ΅λλ€:
- KERN_KDSETREMOVEλ‘ κΈ°μ‘΄ μ€μ μ κ±°
- KERN_KDSETBUF λ° KERN_KDSETUPμΌλ‘ μΆμ μ€μ
- KERN_KDGETBUFλ‘ λ²νΌ νλͺ© μ κ°μ Έμ€κΈ°
- KERN_KDPINDEXλ‘ μΆμ μμ μμ μ ν΄λΌμ΄μΈνΈ κ°μ Έμ€κΈ°
- KERN_KDENABLEλ‘ μΆμ νμ±ν
- KERN_KDREADTR νΈμΆλ‘ λ²νΌ μ½κΈ°
- κ° μ€λ λλ₯Ό ν΄λΉ νλ‘μΈμ€μ μΌμΉμν€κΈ° μν΄ KERN_KDTHRMAP νΈμΆ.
μ΄ μ 보λ₯Ό μ»κΈ° μν΄ Apple λꡬ trace λλ 컀μ€ν
λꡬ kDebugView (kdv)λ₯Ό μ¬μ©ν μ μμ΅λλ€.
Kdebugλ ν λ²μ 1λͺ μ κ³ κ°μκ²λ§ μ 곡λλ€λ μ μ μ μνμμμ€. λ°λΌμ ν λ²μ νλμ k-debug κΈ°λ° λκ΅¬λ§ μ€νν μ μμ΅λλ€.
ktrace
ktrace_* APIλ libktrace.dylibμμ μ 곡λλ©°, μ΄λ Kdebugμ λνΌμ
λλ€. ν΄λΌμ΄μΈνΈλ ktrace_session_create λ° ktrace_events_[single/class]λ₯Ό νΈμΆνμ¬ νΉμ μ½λμ λν μ½λ°±μ μ€μ ν λ€μ ktrace_startλ‘ μμν μ μμ΅λλ€.
SIPκ° νμ±νλ μνμμλ μ΄ λꡬλ₯Ό μ¬μ©ν μ μμ΅λλ€.
ν΄λΌμ΄μΈνΈλ‘λ μ νΈλ¦¬ν° ktraceλ₯Ό μ¬μ©ν μ μμ΅λλ€:
ktrace trace -s -S -t c -c ls | grep "ls("
Or tailspin.
kperf
μ΄κ²μ 컀λ μμ€ νλ‘νμΌλ§μ μννλ λ° μ¬μ©λλ©° Kdebug νΈμΆμ μ¬μ©νμ¬ κ΅¬μΆλ©λλ€.
κΈ°λ³Έμ μΌλ‘, μ μ λ³μ kernel_debug_activeκ° νμΈλκ³ μ€μ λλ©΄ Kdebug μ½λμ νΈμΆνλ 컀λ νλ μμ μ£Όμλ‘ kperf_kdebug_handlerλ₯Ό νΈμΆν©λλ€. μ νλ Kdebug μ½λμ μΌμΉνλ©΄ λΉνΈλ§΅μΌλ‘ ꡬμ±λ βμμ
βμ κ°μ Έμ΅λλ€(μ΅μ
μ osfmk/kperf/action.hλ₯Ό νμΈνμμμ€).
Kperfμλ sysctl MIB ν
μ΄λΈλ μμ΅λλ€: (루νΈλ‘) sysctl kperf. μ΄ μ½λλ osfmk/kperf/kperfbsd.cμμ μ°Ύμ μ μμ΅λλ€.
κ²λ€κ°, Kperfμ κΈ°λ₯μ νμ μ§ν©μ kpcμ μ‘΄μ¬νλ©°, μ΄λ λ¨Έμ μ±λ₯ μΉ΄μ΄ν°μ λν μ 보λ₯Ό μ 곡ν©λλ€.
ProcessMonitor
ProcessMonitorλ νλ‘μΈμ€κ° μννλ νλ‘μΈμ€ κ΄λ ¨ μμ μ νμΈνλ λ° λ§€μ° μ μ©ν λꡬμ λλ€(μ: νλ‘μΈμ€κ° μμ±νλ μλ‘μ΄ νλ‘μΈμ€λ₯Ό λͺ¨λν°λ§).
SpriteTree
SpriteTreeλ νλ‘μΈμ€ κ°μ κ΄κ³λ₯Ό μΆλ ₯νλ λꡬμ
λλ€.
**sudo eslogger fork exec rename create > cap.json**μ κ°μ λͺ
λ ΉμΌλ‘ Macμ λͺ¨λν°λ§ν΄μΌ ν©λλ€(μ΄ μμ
μ μννλ ν°λ―Έλμ FDAκ° νμν©λλ€). κ·Έλ° λ€μ μ΄ λꡬμμ jsonμ λ‘λνμ¬ λͺ¨λ κ΄κ³λ₯Ό λ³Ό μ μμ΅λλ€:
.png)
FileMonitor
FileMonitorλ νμΌ μ΄λ²€νΈ(μμ±, μμ λ° μμ μ κ°μ)λ₯Ό λͺ¨λν°λ§νμ¬ μ΄λ¬ν μ΄λ²€νΈμ λν μμΈν μ 보λ₯Ό μ 곡ν©λλ€.
Crescendo
Crescendoλ Microsoft Sysinternalμ _Procmon_μμ Windows μ¬μ©μκ° μ μ μλ λͺ¨μκ³Ό λλμ κ°μ§ GUI λꡬμ λλ€. μ΄ λꡬλ λ€μν μ΄λ²€νΈ μ νμ κΈ°λ‘μ μμνκ³ μ€μ§ν μ μμΌλ©°, νμΌ, νλ‘μΈμ€, λ€νΈμν¬ λ±κ³Ό κ°μ μΉ΄ν κ³ λ¦¬λ³λ‘ μ΄λ¬ν μ΄λ²€νΈλ₯Ό νν°λ§ν μ μλ κΈ°λ₯μ μ 곡νκ³ , κΈ°λ‘λ μ΄λ²€νΈλ₯Ό json νμμΌλ‘ μ μ₯ν μ μλ κΈ°λ₯μ μ 곡ν©λλ€.
Apple Instruments
Apple Instrumentsλ Xcodeμ κ°λ°μ λꡬμ μΌλΆλ‘, μ ν리μΌμ΄μ μ±λ₯ λͺ¨λν°λ§, λ©λͺ¨λ¦¬ λμ μλ³ λ° νμΌ μμ€ν νλ μΆμ μ μ¬μ©λ©λλ€.
.png)
fs_usage
νλ‘μΈμ€κ° μννλ μμ μ μΆμ ν μ μμ΅λλ€:
fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
fs_usage -w -f network curl #This tracks network actions
TaskExplorer
Taskexplorerμ μ΄μ§ νμΌμμ μ¬μ©λλ λΌμ΄λΈλ¬λ¦¬, μ¬μ© μ€μΈ νμΌ λ° λ€νΈμν¬ μ°κ²°μ νμΈνλ λ° μ μ©ν©λλ€.
λν μ΄μ§ νλ‘μΈμ€λ₯Ό virustotalκ³Ό λμ‘°νμ¬ μ΄μ§ νμΌμ λν μ 보λ₯Ό 보μ¬μ€λλ€.
PT_DENY_ATTACH
μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ **PT_DENY_ATTACH**λ₯Ό μ¬μ©νμ¬ λλ²κΉ
μ λ°©μ§νλ μ€ν μ€μΈ λ°λͺ¬μ λλ²κΉ
νλ λ°©λ²μ λν μμ λ₯Ό μ°Ύμ μ μμ΅λλ€.
lldb
lldbλ macOS μ΄μ§ λλ²κΉ μ μν μ¬μ€μμ λꡬμ λλ€.
lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
ν ν΄λμ **.lldbinit**λΌλ νμΌμ μμ±νκ³ λ€μ μ€μ μΆκ°νμ¬ intel flavourλ₯Ό μ€μ ν μ μμ΅λλ€:
settings set target.x86-disassembly-flavor intel
Warning
lldb λ΄μμ
process save-coreλ‘ νλ‘μΈμ€λ₯Ό λ€νν©λλ€.
| (lldb) λͺ λ Ήμ΄ | μ€λͺ | ||||||||||||||||||||||
| run (r) | μ€νμ μμνλ©°, μ€λ¨μ μ΄ hitλκ±°λ νλ‘μΈμ€κ° μ’ λ£λ λκΉμ§ κ³μλ©λλ€. | ||||||||||||||||||||||
| process launch --stop-at-entry | μ§μ μ μμ μ€λ¨νλ©° μ€νμ μμν©λλ€. | ||||||||||||||||||||||
| continue (c) | λλ²κΉ μ€μΈ νλ‘μΈμ€μ μ€νμ κ³μν©λλ€. | ||||||||||||||||||||||
| nexti (n / ni) | λ€μ λͺ λ Ήμ΄λ₯Ό μ€νν©λλ€. μ΄ λͺ λ Ήμ΄λ ν¨μ νΈμΆμ 건λλλλ€. | ||||||||||||||||||||||
| stepi (s / si) | λ€μ λͺ λ Ήμ΄λ₯Ό μ€νν©λλ€. nexti λͺ λ Ήμ΄μ λ¬λ¦¬, μ΄ λͺ λ Ήμ΄λ ν¨μ νΈμΆλ‘ λ€μ΄κ°λλ€. | ||||||||||||||||||||||
| finish (f) | νμ¬ ν¨μ(βνλ μβ)μ λλ¨Έμ§ λͺ λ Ήμ΄λ₯Ό μ€ννκ³ λ°ν ν μ€λ¨ν©λλ€. | ||||||||||||||||||||||
| control + c | μ€νμ μΌμ μ€μ§ν©λλ€. νλ‘μΈμ€κ° run (r) λλ continue (c)λ‘ μ€νλ κ²½μ°, νμ¬ μ€ν μ€μΈ μμΉμμ νλ‘μΈμ€κ° μ€λ¨λ©λλ€. | ||||||||||||||||||||||
| breakpoint (b) |
breakpoint delete help breakpoint # μ€λ¨μ λͺ
λ Ήμ΄ λμλ§ help memory write # λ©λͺ¨λ¦¬μ μ°κΈ° μν λμλ§ reg read reg read $rax reg read $rax --format <format> reg write $rip 0x100035cc0 μ΄ λͺ
λ Ήμ΄λ λ§€κ°λ³μλ‘ μ°Έμ‘°λ κ°μ²΄λ₯Ό μΆλ ₯ν©λλ€. po $raw Appleμ λλΆλΆμ Objective-C API λλ λ©μλλ κ°μ²΄λ₯Ό λ°ννλ―λ‘, βprint objectβ (po) λͺ
λ Ήμ΄λ₯Ό ν΅ν΄ νμν΄μΌ ν©λλ€. poκ° μλ―Έ μλ μΆλ ₯μ μμ±νμ§ μμΌλ©΄ dis # νμ¬ ν¨μμ λμ€μ΄μ
λΈλ¦¬ dis -n dis -n Tip μ½μ΄ λ€νλ λ€μκ³Ό κ°μ κ²½μ°μ μμ±λ©λλ€: μ΄ κ²½μ° μ½μ΄ λ€νλ ReportCrashλ μΆ©λνλ νλ‘μΈμ€λ₯Ό λΆμνκ³ μΆ©λ λ³΄κ³ μλ₯Ό λμ€ν¬μ μ μ₯ν©λλ€. μΆ©λ λ³΄κ³ μμλ κ°λ°μκ° μΆ©λ μμΈμ μ§λ¨νλ λ° λμμ΄ λλ μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€. μΆ©λ λ³΄κ³ μκ° Appleλ‘ μ μ‘λλ κ²μ λν΄ κ±±μ λλ€λ©΄ μ΄λ₯Ό λΉνμ±νν μ μμ΅λλ€. κ·Έλ μ§ μμΌλ©΄, μΆ©λ λ³΄κ³ μλ μλ²κ° μ΄λ»κ² μΆ©λνλμ§ μμλ΄λ λ° μ μ©ν μ μμ΅λλ€. MacOSμμ νΌμ§ν λ Macμ΄ μλ©΄ μνμ λ€μ΄κ°μ§ μλλ‘ νλ κ²μ΄ μ€μν©λλ€: SSH μ°κ²°μ ν΅ν΄ νΌμ§νλ κ²½μ° μΈμ
μ΄ μ’
λ£λμ§ μλλ‘ νλ κ²μ΄ μ€μν©λλ€. λ°λΌμ sshd_config νμΌμ λ€μκ³Ό κ°μ΄ λ³κ²½νμμμ€: λ€μ νμ΄μ§λ₯Ό νμΈνμΈμ μ΄λ€ μ±μ΄ μ§μ λ μ€ν΄ λλ νλ‘ν μ½μ μ²λ¦¬νλμ§ μ°Ύλ λ°©λ²μ μμ보μΈμ: macOS File Extension & URL scheme app handlers λ€νΈμν¬ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ νλ‘μΈμ€λ₯Ό μ°Ύλ κ²μ ν₯λ―Έλ‘μ΅λλ€: λλ CLI λꡬμ λν΄ μλν©λλ€. macOS GUI λꡬμ βκ·Έλ₯ μλβ ν©λλ€. μΌλΆ macOS μ±μ κ³ μ ν νμΌ μ΄λ¦, μ¬λ°λ₯Έ νμ₯μμ κ°μ νΉμ μꡬ μ¬νμ΄ μμΌλ©°, μλλ°μ€μμ νμΌμ μ½μ΄μΌ ν©λλ€ ( λͺ κ°μ§ μ: Tip AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°: |



