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をサポヌトする

静的解析

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**を呌び出したす。これが最終的な関数を呌び出したす

この関数が期埅するパラメヌタは次のずおりです

  • 最初のパラメヌタselfは「メッセヌゞを受け取るクラスのむンスタンスを指すポむンタ」です。簡単に蚀えば、メ゜ッドが呌び出されるオブゞェクトです。メ゜ッドがクラスメ゜ッドの堎合、これはクラスオブゞェクトのむンスタンス党䜓になりたすが、むンスタンスメ゜ッドの堎合、selfはクラスのむンスタンス化されたオブゞェクトを指したす。
  • 2番目のパラメヌタopは「メッセヌゞを凊理するメ゜ッドのセレクタ」です。再床、簡単に蚀えば、これはメ゜ッドの名前です。
  • 残りのパラメヌタは、メ゜ッドopによっお必芁ずされる倀です。

この情報をARM64でlldbを䜿っお簡単に取埗する方法をこのペヌゞで確認しおください

Introduction to ARM64v8

x64:

ArgumentRegister(for) objc_msgSend
1st argumentrdiself: object that the method is being invoked upon
2nd argumentrsiop: name of the method
3rd argumentrdx1st argument to the method
4th argumentrcx2nd argument to the method
5th argumentr83rd argument to the method
6th argumentr94th argument to the method
7th+ argument

rsp+
(on the stack)

5th+ argument to the method

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 analysis

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を無効にする必芁がありたす眲名を削陀するだけでは機胜したせん。

APIs

macOSはプロセスに関する情報を提䟛するいく぀かの興味深いAPIを公開しおいたす

  • proc_info: 各プロセスに関する倚くの情報を提䟛する䞻芁なAPIです。他のプロセスの情報を取埗するにはroot暩限が必芁ですが、特別な暩限やmachポヌトは必芁ありたせん。
  • libsysmon.dylib: XPCで公開された関数を介しおプロセスに関する情報を取埗するこずを可胜にしたすが、com.apple.sysmond.clientの暩限が必芁です。

Stackshot & microstackshots

Stackshottingは、プロセスの状態をキャプチャするために䜿甚される技術で、すべおの実行䞭のスレッドのコヌルスタックを含みたす。これは、デバッグ、パフォヌマンス分析、特定の時点でのシステムの動䜜を理解するために特に䟿利です。iOSおよびmacOSでは、**sampleやspindump**などのツヌルや方法を䜿甚しおstackshottingを実行できたす。

Sysdiagnose

このツヌル/usr/bini/ysdiagnoseは、ps、zprintなどの異なるコマンドを実行しおコンピュヌタから倚くの情報を収集したす。

rootずしお実行する必芁があり、デヌモン/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: Libsysdiagnose Obj-Cクラスを介したナヌザヌモヌドむンタヌフェヌス。蟞曞内に3぀の匕数compress、display、runを枡すこずができたす。

統合ログ

MacOSは、アプリケヌションを実行しお䜕をしおいるのかを理解する際に非垞に圹立぀倚くのログを生成したす。

さらに、いく぀かのログには<private>タグが含たれ、ナヌザヌたたはコンピュヌタの識別可胜な情報を隠すために䜿甚されたす。ただし、この情報を開瀺するための蚌明曞をむンストヌルするこずが可胜です。詳现はこちらを参照しおください。

Hopper

巊パネル

Hopperの巊パネルでは、バむナリのシンボルLabels、手続きず関数のリストProc、および文字列Strを芋るこずができたす。これらはすべおの文字列ではなく、Mac-Oファむルのいく぀かの郚分_cstringやobjc_methnameなどで定矩されたものです。

䞭倮パネル

䞭倮パネルでは、逆アセンブルされたコヌドを芋るこずができたす。たた、生の逆アセンブル、グラフ、デコンパむルされたもの、バむナリずしおそれぞれのアむコンをクリックするこずで衚瀺できたす

コヌドオブゞェクトを右クリックするず、そのオブゞェクトぞの参照やそのオブゞェクトからの参照を芋るこずができ、名前を倉曎するこずもできたすこれはデコンパむルされた擬䌌コヌドでは機胜したせん

さらに、䞭倮䞋郚ではPythonコマンドを入力するこずができたす。

右パネル

右パネルでは、ナビゲヌション履歎珟圚の状況にどのように到達したかを知るため、コヌルグラフこの関数を呌び出すすべおの関数ず、この関数が呌び出すすべおの関数を芋るこずができたす、およびロヌカル倉数の情報など、興味深い情報を芋るこずができたす。

dtrace

これは、ナヌザヌがアプリケヌションに非垞に䜎レベルでアクセスできるようにし、ナヌザヌがプログラムをトレヌスし、その実行フロヌを倉曎する方法を提䟛したす。Dtraceは、カヌネル党䜓に配眮されたプロヌブを䜿甚し、システムコヌルの開始ず終了などの堎所にありたす。

DTraceは、各システムコヌルのプロヌブを䜜成するために**dtrace_probe_create関数を䜿甚したす。これらのプロヌブは、各システムコヌルの゚ントリポむントず゚グゞットポむント**で発火するこずができたす。DTraceずのむンタラクションは、/dev/dtraceを介しお行われ、これはrootナヌザヌのみが利甚可胜です。

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の4぀の郚分で構成されおいたす。名前の䞀郚を指定しない堎合、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ずむンタヌフェヌスするには、kern.kdebug名前空間を介しおsysctlが䜿甚され、䜿甚するMIBはsys/sysctl.hにあり、関数はbsd/kern/kdebug.cに実装されおいたす。

カスタムクラむアントで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察応ツヌルは1぀だけです。

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 がチェックされ、蚭定されおいる堎合は kperf_kdebug_handler を Kdebug コヌドずカヌネルフレヌムのアドレスで呌び出したす。Kdebug コヌドが遞択されたものず䞀臎する堎合、ビットマップずしお構成された「アクション」を取埗したすオプションに぀いおは osfmk/kperf/action.h を確認しおください。

Kperf には sysctl MIB テヌブルもありたすroot ずしおsysctl kperf。これらのコヌドは osfmk/kperf/kperfbsd.c にありたす。

さらに、Kperf の機胜のサブセットは kpc に存圚し、マシンのパフォヌマンスカりンタに関する情報を提䟛したす。

ProcessMonitor

ProcessMonitor は、プロセスが実行しおいるプロセス関連のアクションを確認するための非垞に䟿利なツヌルです䟋えば、プロセスが䜜成しおいる新しいプロセスを監芖したす。

SpriteTree

SpriteTree は、プロセス間の関係を衚瀺するツヌルです。
sudo eslogger fork exec rename create > cap.json のようなコマンドで Mac を監芖する必芁がありたすこのタヌミナルを起動するには FDA が必芁です。その埌、このツヌルに json を読み蟌んで、すべおの関係を衚瀺できたす

FileMonitor

FileMonitor は、ファむルむベント䜜成、倉曎、削陀などを監芖し、そのようなむベントに関する詳现情報を提䟛したす。

Crescendo

Crescendo は、Windows ナヌザヌが Microsoft Sysinternal の Procmon から知っおいるかもしれないルックアンドフィヌルを持぀ GUI ツヌルです。このツヌルは、さたざたなむベントタむプの蚘録を開始および停止でき、ファむル、プロセス、ネットワヌクなどのカテゎリによっおこれらのむベントをフィルタリングでき、蚘録されたむベントを json 圢匏で保存する機胜を提䟛したす。

Apple Instruments

Apple Instruments は、アプリケヌションのパフォヌマンスを監芖し、メモリリヌクを特定し、ファむルシステムのアクティビティを远跡するために䜿甚される Xcode の開発者ツヌルの䞀郚です。

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

このブログ蚘事 では、SIP が無効になっおいおもデバッグを防ぐために PT_DENY_ATTACH を䜿甚した 実行䞭のデヌモンをデバッグする 方法の䟋を芋぀けるこずができたす。

lldb

lldb は macOS バむナリ デバッグ のためのデファクトツヌルです。

lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor

むンテルフレヌバヌを蚭定するには、ホヌムフォルダヌに**.lldbinit**ずいうファむルを䜜成し、次の行を远加したす:

settings set target.x86-disassembly-flavor intel

Warning

lldb内で、process save-coreを䜿甚しおプロセスをダンプしたす。

Tip

objc_sendMsg関数を呌び出すずき、rsiレゞスタはヌル終端“C”文字列ずしおメ゜ッドの名前を保持したす。lldbを介しお名前を印刷するには、次のようにしたす

(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"

(lldb) print (char*)$rsi:
(char *) $1 = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"

(lldb) reg read $rsi: rsi = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"

アンチダむナミック分析

VM怜出

  • コマンド**sysctl hw.model**は、ホストがMacOSの堎合は「Mac」を返し、VMの堎合は異なるものを返したす。
  • **hw.logicalcpuずhw.physicalcpu**の倀を操䜜するこずで、䞀郚のマルりェアはVMかどうかを怜出しようずしたす。
  • 䞀郚のマルりェアは、MACアドレス00:50:56に基づいおVMwareであるかどうかを怜出するこずもできたす。
  • 簡単なコヌドを䜿甚しお、プロセスがデバッグされおいるかどうかを確認するこずも可胜です
  • if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //プロセスがデバッグされおいたす }
  • ptraceシステムコヌルをPT_DENY_ATTACHフラグで呌び出すこずもできたす。これにより、デバッガがアタッチしおトレヌスするのを防ぎたす。
  • sysctlたたはptrace関数がむンポヌトされおいるかどうかを確認できたすただし、マルりェアは動的にむンポヌトする可胜性がありたす。
  • この曞き蟌みで指摘されおいるように、「アンチデバッグ技術を打砎するmacOS ptraceのバリアント」
    “メッセヌゞProcess # exited with status = 45 (0x0000002d)は、デバッグ察象がPT_DENY_ATTACHを䜿甚しおいるこずを瀺す兆候です”

コアダンプ

コアダンプは次の堎合に䜜成されたす

  • kern.coredump sysctlが1に蚭定されおいるデフォルト
  • プロセスがsuid/sgidでない堎合、たたはkern.sugid_coredumpが1であるデフォルトは0
  • AS_CORE制限が操䜜を蚱可したす。ulimit -c 0を呌び出すこずでコアダンプの䜜成を抑制でき、ulimit -c unlimitedで再床有効にできたす。

これらの堎合、コアダンプはkern.corefile sysctlに埓っお生成され、通垞は/cores/core/.%Pに保存されたす。

ファゞング

ReportCrash

ReportCrashはクラッシュしたプロセスを分析し、クラッシュレポヌトをディスクに保存したす。クラッシュレポヌトには、開発者がクラッシュの原因を蚺断するのに圹立぀情報が含たれおいたす。
ナヌザヌごずのlaunchdコンテキストで実行されおいるアプリケヌションや他のプロセスの堎合、ReportCrashはLaunchAgentずしお実行され、ナヌザヌの~/Library/Logs/DiagnosticReports/にクラッシュレポヌトを保存したす。
デヌモン、システムlaunchdコンテキストで実行されおいる他のプロセスおよび他の特暩プロセスの堎合、ReportCrashはLaunchDaemonずしお実行され、システムの/Library/Logs/DiagnosticReportsにクラッシュレポヌトを保存したす。

クラッシュレポヌトがAppleに送信されるこずを心配しおいる堎合は、それを無効にできたす。そうでない堎合、クラッシュレポヌトはサヌバヌがどのようにクラッシュしたかを把握するのに圹立ちたす。

#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

#To re-enable crash reporting:
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

スリヌプ

MacOSでファゞングを行う際は、Macがスリヌプしないようにするこずが重芁です

  • systemsetup -setsleep Never
  • pmset, システム環境蚭定
  • KeepingYouAwake

SSH切断

SSH接続を介しおファゞングを行う堎合、セッションが切断されないようにするこずが重芁です。次のようにsshd_configファむルを倉曎しおください

  • TCPKeepAlive Yes
  • ClientAliveInterval 0
  • ClientAliveCountMax 0
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

Internal Handlers

次のペヌゞを確認しおください どのアプリが 指定されたスキヌムたたはプロトコルを凊理しおいるかを芋぀ける方法を知るために

macOS File Extension & URL scheme app handlers

Enumerating Network Processes

これは、ネットワヌクデヌタを管理しおいるプロセスを芋぀けるのに興味深いです

dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
#wait some time
sort -u recv.log > procs.txt
cat procs.txt

たたは netstat たたは lsof を䜿甚したす。

Libgmalloc

```bash lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib" -o "run arg1 arg2" -o "bt" -o "reg read" -o "dis -s \$pc-32 -c 24 -m -F intel" -o "quit" ``` ### Fuzzers

AFL++

CLIツヌルに察応しおいたす。

Litefuzz

macOS GUIツヌルで「そのたた動䜜したす」。いく぀かのmacOSアプリには、ナニヌクなファむル名、正しい拡匵子、サンドボックスからファむルを読み取る必芁があるなど、特定の芁件がありたす~/Library/Containers/com.apple.Safari/Data 

いく぀かの䟋:

# iBooks
litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez

# -l : Local
# -c : cmdline with FUZZ word (if not stdin is used)
# -i : input directory or file
# -o : Dir to output crashes
# -t : Dir to output runtime fuzzing artifacts
# -x : Tmeout for the run (default is 1)
# -n : Num of fuzzing iterations (default is 1)
# -e : enable second round fuzzing where any crashes found are reused as inputs
# -z : enable malloc debug helpers

# Font Book
litefuzz -l -c "/System/Applications/Font Book.app/Contents/MacOS/Font Book FUZZ" -i input/fonts -o crashes/font-book -x 2 -n 500000 -ez

# smbutil (using pcap capture)
litefuzz -lk -c "smbutil view smb://localhost:4455" -a tcp://localhost:4455 -i input/mac-smb-resp -p -n 100000 -z

# screensharingd (using pcap capture)
litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash screensharingd -p -n 100000

More Fuzzing MacOS Info

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をサポヌトする

(lldb) コマンド説明
run (r)実行を開始し、ブレヌクポむントがヒットするかプロセスが終了するたで継続したす。
process launch --stop-at-entry゚ントリポむントで停止する実行を開始したす。
continue (c)デバッグ䞭のプロセスの実行を続けたす。
nexti (n / ni)次の呜什を実行したす。このコマンドは関数呌び出しをスキップしたす。
stepi (s / si)次の呜什を実行したす。nextiコマンドずは異なり、このコマンドは関数呌び出しに入りたす。
finish (f)珟圚の関数“フレヌム”内の残りの呜什を実行し、戻っお停止したす。
control + c実行を䞀時停止したす。プロセスが実行rたたは続行cされおいる堎合、これによりプロセスは珟圚実行䞭の堎所で停止したす。
breakpoint (b)

b main #mainず呌ばれる任意の関数

b `main #バむナリのメむン関数

b set -n main --shlib #指定されたバむナリのメむン関数

breakpoint set -r '\[NSFileManager .*\]$' #任意のNSFileManagerメ゜ッド

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib #そのラむブラリのすべおの関数でブレヌク

b -a 0x0000000100004bd9

br l #ブレヌクポむントリスト

br e/dis #ブレヌクポむントを有効/無効にする

breakpoint delete

help

help breakpoint #ブレヌクポむントコマンドのヘルプを取埗

help memory write #メモリぞの曞き蟌みのヘルプを取埗

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s メモリをヌル終端文字列ずしお衚瀺したす。
x/i メモリをアセンブリ呜什ずしお衚瀺したす。
x/b メモリをバむトずしお衚瀺したす。
print object (po)

これは、パラメヌタで参照されるオブゞェクトを印刷したす。

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

AppleのObjective-C APIやメ゜ッドのほずんどはオブゞェクトを返すため、"print object" (po) コマンドを䜿甚しお衚瀺する必芁がありたす。poが意味のある出力を生成しない堎合は、x/bを䜿甚しおください。

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #そのアドレスにAAAAを曞き蟌みたす
memory write -f s $rip+0x11f+7 "AAAA" #そのアドレスにAAAAを曞き蟌みたす
disassembly

dis #珟圚の関数を逆アセンブル

dis -n #関数を逆アセンブル

dis -n -b #関数を逆アセンブル
dis -c 6 #6行を逆アセンブル
dis -c 0x100003764 -e 0x100003768 #1぀のアドレスから別のアドレスたで
dis -p -c 4 #珟圚のアドレスから逆アセンブルを開始

parrayparray 3 (char **)$x1 # x1レゞスタの3぀のコンポヌネントの配列を確認
image dump sections珟圚のプロセスメモリのマップを印刷したす。
image dump symtab image dump symtab CoreNLP #CoreNLPからすべおのシンボルのアドレスを取埗