nox-openclaw-hunter 1.0.0

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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -0
  3. package/bin/nox.js +2 -0
  4. package/dist/branding.d.ts +39 -0
  5. package/dist/branding.d.ts.map +1 -0
  6. package/dist/branding.js +66 -0
  7. package/dist/branding.js.map +1 -0
  8. package/dist/cli.d.ts +15 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +94 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/export.d.ts +21 -0
  13. package/dist/commands/export.d.ts.map +1 -0
  14. package/dist/commands/export.js +616 -0
  15. package/dist/commands/export.js.map +1 -0
  16. package/dist/commands/index.d.ts +8 -0
  17. package/dist/commands/index.d.ts.map +1 -0
  18. package/dist/commands/index.js +8 -0
  19. package/dist/commands/index.js.map +1 -0
  20. package/dist/commands/isolate.d.ts +30 -0
  21. package/dist/commands/isolate.d.ts.map +1 -0
  22. package/dist/commands/isolate.js +547 -0
  23. package/dist/commands/isolate.js.map +1 -0
  24. package/dist/commands/purge.d.ts +22 -0
  25. package/dist/commands/purge.d.ts.map +1 -0
  26. package/dist/commands/purge.js +295 -0
  27. package/dist/commands/purge.js.map +1 -0
  28. package/dist/commands/scan.d.ts +23 -0
  29. package/dist/commands/scan.d.ts.map +1 -0
  30. package/dist/commands/scan.js +155 -0
  31. package/dist/commands/scan.js.map +1 -0
  32. package/dist/detector/app-bundle.d.ts +13 -0
  33. package/dist/detector/app-bundle.d.ts.map +1 -0
  34. package/dist/detector/app-bundle.js +27 -0
  35. package/dist/detector/app-bundle.js.map +1 -0
  36. package/dist/detector/cli-binary.d.ts +12 -0
  37. package/dist/detector/cli-binary.d.ts.map +1 -0
  38. package/dist/detector/cli-binary.js +66 -0
  39. package/dist/detector/cli-binary.js.map +1 -0
  40. package/dist/detector/config.d.ts +21 -0
  41. package/dist/detector/config.d.ts.map +1 -0
  42. package/dist/detector/config.js +337 -0
  43. package/dist/detector/config.js.map +1 -0
  44. package/dist/detector/detection-config.d.ts +24 -0
  45. package/dist/detector/detection-config.d.ts.map +1 -0
  46. package/dist/detector/detection-config.js +242 -0
  47. package/dist/detector/detection-config.js.map +1 -0
  48. package/dist/detector/docker.d.ts +10 -0
  49. package/dist/detector/docker.d.ts.map +1 -0
  50. package/dist/detector/docker.js +94 -0
  51. package/dist/detector/docker.js.map +1 -0
  52. package/dist/detector/index.d.ts +50 -0
  53. package/dist/detector/index.d.ts.map +1 -0
  54. package/dist/detector/index.js +155 -0
  55. package/dist/detector/index.js.map +1 -0
  56. package/dist/detector/network.d.ts +34 -0
  57. package/dist/detector/network.d.ts.map +1 -0
  58. package/dist/detector/network.js +205 -0
  59. package/dist/detector/network.js.map +1 -0
  60. package/dist/detector/process.d.ts +16 -0
  61. package/dist/detector/process.d.ts.map +1 -0
  62. package/dist/detector/process.js +47 -0
  63. package/dist/detector/process.js.map +1 -0
  64. package/dist/detector/service.d.ts +17 -0
  65. package/dist/detector/service.d.ts.map +1 -0
  66. package/dist/detector/service.js +51 -0
  67. package/dist/detector/service.js.map +1 -0
  68. package/dist/enforcer/docker-cleaner.d.ts +30 -0
  69. package/dist/enforcer/docker-cleaner.d.ts.map +1 -0
  70. package/dist/enforcer/docker-cleaner.js +163 -0
  71. package/dist/enforcer/docker-cleaner.js.map +1 -0
  72. package/dist/enforcer/file-remover.d.ts +34 -0
  73. package/dist/enforcer/file-remover.d.ts.map +1 -0
  74. package/dist/enforcer/file-remover.js +137 -0
  75. package/dist/enforcer/file-remover.js.map +1 -0
  76. package/dist/enforcer/index.d.ts +33 -0
  77. package/dist/enforcer/index.d.ts.map +1 -0
  78. package/dist/enforcer/index.js +142 -0
  79. package/dist/enforcer/index.js.map +1 -0
  80. package/dist/enforcer/process-killer.d.ts +18 -0
  81. package/dist/enforcer/process-killer.d.ts.map +1 -0
  82. package/dist/enforcer/process-killer.js +80 -0
  83. package/dist/enforcer/process-killer.js.map +1 -0
  84. package/dist/enforcer/service-stopper.d.ts +23 -0
  85. package/dist/enforcer/service-stopper.d.ts.map +1 -0
  86. package/dist/enforcer/service-stopper.js +95 -0
  87. package/dist/enforcer/service-stopper.js.map +1 -0
  88. package/dist/index.d.ts +6 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +10 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/isolator/firewall.d.ts +25 -0
  93. package/dist/isolator/firewall.d.ts.map +1 -0
  94. package/dist/isolator/firewall.js +114 -0
  95. package/dist/isolator/firewall.js.map +1 -0
  96. package/dist/isolator/index.d.ts +63 -0
  97. package/dist/isolator/index.d.ts.map +1 -0
  98. package/dist/isolator/index.js +201 -0
  99. package/dist/isolator/index.js.map +1 -0
  100. package/dist/isolator/lockdown.d.ts +22 -0
  101. package/dist/isolator/lockdown.d.ts.map +1 -0
  102. package/dist/isolator/lockdown.js +401 -0
  103. package/dist/isolator/lockdown.js.map +1 -0
  104. package/dist/isolator/quarantine.d.ts +39 -0
  105. package/dist/isolator/quarantine.d.ts.map +1 -0
  106. package/dist/isolator/quarantine.js +364 -0
  107. package/dist/isolator/quarantine.js.map +1 -0
  108. package/dist/mdm/index.d.ts +93 -0
  109. package/dist/mdm/index.d.ts.map +1 -0
  110. package/dist/mdm/index.js +414 -0
  111. package/dist/mdm/index.js.map +1 -0
  112. package/dist/mdm/intune.d.ts +69 -0
  113. package/dist/mdm/intune.d.ts.map +1 -0
  114. package/dist/mdm/intune.js +409 -0
  115. package/dist/mdm/intune.js.map +1 -0
  116. package/dist/mdm/jamf.d.ts +58 -0
  117. package/dist/mdm/jamf.d.ts.map +1 -0
  118. package/dist/mdm/jamf.js +441 -0
  119. package/dist/mdm/jamf.js.map +1 -0
  120. package/dist/mdm/jumpcloud.d.ts +73 -0
  121. package/dist/mdm/jumpcloud.d.ts.map +1 -0
  122. package/dist/mdm/jumpcloud.js +470 -0
  123. package/dist/mdm/jumpcloud.js.map +1 -0
  124. package/dist/mdm/templates/detect.ps1.d.ts +30 -0
  125. package/dist/mdm/templates/detect.ps1.d.ts.map +1 -0
  126. package/dist/mdm/templates/detect.ps1.js +463 -0
  127. package/dist/mdm/templates/detect.ps1.js.map +1 -0
  128. package/dist/mdm/templates/detect.sh.d.ts +30 -0
  129. package/dist/mdm/templates/detect.sh.d.ts.map +1 -0
  130. package/dist/mdm/templates/detect.sh.js +474 -0
  131. package/dist/mdm/templates/detect.sh.js.map +1 -0
  132. package/dist/mdm/templates/enforce.ps1.d.ts +33 -0
  133. package/dist/mdm/templates/enforce.ps1.d.ts.map +1 -0
  134. package/dist/mdm/templates/enforce.ps1.js +681 -0
  135. package/dist/mdm/templates/enforce.ps1.js.map +1 -0
  136. package/dist/mdm/templates/enforce.sh.d.ts +33 -0
  137. package/dist/mdm/templates/enforce.sh.d.ts.map +1 -0
  138. package/dist/mdm/templates/enforce.sh.js +591 -0
  139. package/dist/mdm/templates/enforce.sh.js.map +1 -0
  140. package/dist/platform/darwin.d.ts +6 -0
  141. package/dist/platform/darwin.d.ts.map +1 -0
  142. package/dist/platform/darwin.js +192 -0
  143. package/dist/platform/darwin.js.map +1 -0
  144. package/dist/platform/index.d.ts +43 -0
  145. package/dist/platform/index.d.ts.map +1 -0
  146. package/dist/platform/index.js +27 -0
  147. package/dist/platform/index.js.map +1 -0
  148. package/dist/platform/linux.d.ts +6 -0
  149. package/dist/platform/linux.d.ts.map +1 -0
  150. package/dist/platform/linux.js +134 -0
  151. package/dist/platform/linux.js.map +1 -0
  152. package/dist/platform/windows.d.ts +6 -0
  153. package/dist/platform/windows.d.ts.map +1 -0
  154. package/dist/platform/windows.js +134 -0
  155. package/dist/platform/windows.js.map +1 -0
  156. package/dist/reporter/console.d.ts +27 -0
  157. package/dist/reporter/console.d.ts.map +1 -0
  158. package/dist/reporter/console.js +431 -0
  159. package/dist/reporter/console.js.map +1 -0
  160. package/dist/reporter/index.d.ts +11 -0
  161. package/dist/reporter/index.d.ts.map +1 -0
  162. package/dist/reporter/index.js +13 -0
  163. package/dist/reporter/index.js.map +1 -0
  164. package/dist/reporter/json.d.ts +61 -0
  165. package/dist/reporter/json.d.ts.map +1 -0
  166. package/dist/reporter/json.js +75 -0
  167. package/dist/reporter/json.js.map +1 -0
  168. package/dist/reporter/webhook.d.ts +57 -0
  169. package/dist/reporter/webhook.d.ts.map +1 -0
  170. package/dist/reporter/webhook.js +230 -0
  171. package/dist/reporter/webhook.js.map +1 -0
  172. package/dist/types/config.d.ts +116 -0
  173. package/dist/types/config.d.ts.map +1 -0
  174. package/dist/types/config.js +6 -0
  175. package/dist/types/config.js.map +1 -0
  176. package/dist/types/detection.d.ts +85 -0
  177. package/dist/types/detection.d.ts.map +1 -0
  178. package/dist/types/detection.js +5 -0
  179. package/dist/types/detection.js.map +1 -0
  180. package/dist/types/enforcement.d.ts +33 -0
  181. package/dist/types/enforcement.d.ts.map +1 -0
  182. package/dist/types/enforcement.js +5 -0
  183. package/dist/types/enforcement.js.map +1 -0
  184. package/dist/types/index.d.ts +8 -0
  185. package/dist/types/index.d.ts.map +1 -0
  186. package/dist/types/index.js +8 -0
  187. package/dist/types/index.js.map +1 -0
  188. package/dist/types/isolation.d.ts +55 -0
  189. package/dist/types/isolation.d.ts.map +1 -0
  190. package/dist/types/isolation.js +5 -0
  191. package/dist/types/isolation.js.map +1 -0
  192. package/dist/utils/exec.d.ts +48 -0
  193. package/dist/utils/exec.d.ts.map +1 -0
  194. package/dist/utils/exec.js +103 -0
  195. package/dist/utils/exec.js.map +1 -0
  196. package/dist/utils/fs.d.ts +34 -0
  197. package/dist/utils/fs.d.ts.map +1 -0
  198. package/dist/utils/fs.js +111 -0
  199. package/dist/utils/fs.js.map +1 -0
  200. package/dist/utils/index.d.ts +7 -0
  201. package/dist/utils/index.d.ts.map +1 -0
  202. package/dist/utils/index.js +7 -0
  203. package/dist/utils/index.js.map +1 -0
  204. package/dist/utils/logger.d.ts +14 -0
  205. package/dist/utils/logger.d.ts.map +1 -0
  206. package/dist/utils/logger.js +48 -0
  207. package/dist/utils/logger.js.map +1 -0
  208. package/docs/intune.md +390 -0
  209. package/docs/jamf.md +400 -0
  210. package/docs/jumpcloud.md +510 -0
  211. package/package.json +65 -0
package/docs/intune.md ADDED
@@ -0,0 +1,390 @@
1
+ # Microsoft Intune Integration Guide
2
+
3
+ Deploy Nox OpenClaw detection and enforcement scripts across your Windows and macOS fleet using Microsoft Intune.
4
+
5
+ ## Overview
6
+
7
+ This guide explains how to:
8
+
9
+ 1. Deploy PowerShell scripts for Windows detection and enforcement
10
+ 2. Deploy shell scripts for macOS detection and enforcement
11
+ 3. Set up Proactive Remediation for automated detection and enforcement
12
+ 4. Create compliance policies
13
+ 5. Monitor results via Intune reporting and Log Analytics
14
+
15
+ ## Prerequisites
16
+
17
+ - Microsoft Intune subscription (standalone or part of Microsoft 365)
18
+ - Azure AD joined or hybrid joined devices
19
+ - Windows 10/11 or macOS 10.15+ managed devices
20
+ - Intune admin access
21
+ - (Optional) Azure Log Analytics workspace for advanced reporting
22
+
23
+ ## Quick Start
24
+
25
+ 1. Generate scripts:
26
+ ```bash
27
+ nox export --platform intune --mode detect --output ./intune-scripts
28
+ nox export --platform intune --mode enforce --output ./intune-scripts
29
+ ```
30
+
31
+ 2. Upload scripts to Intune
32
+ 3. Configure Proactive Remediation (recommended)
33
+ 4. Monitor via Endpoint Analytics
34
+
35
+ ## Script Setup
36
+
37
+ ### Step 1: Generate Scripts
38
+
39
+ Generate Intune-optimized scripts using the CLI:
40
+
41
+ ```bash
42
+ # Detection scripts
43
+ nox export --platform intune --mode detect --output ./intune-scripts
44
+
45
+ # Enforcement scripts
46
+ nox export --platform intune --mode enforce --output ./intune-scripts
47
+
48
+ # With webhook integration
49
+ nox export --platform intune --mode detect \
50
+ --webhook https://siem.example.com/webhook \
51
+ --webhook-token YOUR_TOKEN \
52
+ --output ./intune-scripts
53
+ ```
54
+
55
+ This generates:
56
+ - `Detect-OpenClaw.ps1` - Windows detection script
57
+ - `Remediate-OpenClaw.ps1` - Windows enforcement script
58
+ - `detect-openclaw.sh` - macOS detection script (if applicable)
59
+ - `remediate-openclaw.sh` - macOS enforcement script (if applicable)
60
+
61
+ ### Step 2: Upload Windows Scripts
62
+
63
+ #### Platform Scripts Method
64
+
65
+ 1. Navigate to **Devices > Windows > Scripts**
66
+ 2. Click **+ Add**
67
+ 3. Configure **Basics**:
68
+ - **Name:** Nox OpenClaw Detection
69
+ - **Description:** Detects OpenClaw AI agent installations
70
+ 4. Configure **Script settings**:
71
+ - **Script location:** Upload `Detect-OpenClaw.ps1`
72
+ - **Run this script using the logged on credentials:** No
73
+ - **Enforce script signature check:** No
74
+ - **Run script in 64-bit PowerShell:** Yes
75
+ 5. Configure **Assignments**:
76
+ - Add target groups
77
+ 6. Click **Create**
78
+
79
+ Repeat for the enforcement script.
80
+
81
+ ### Step 3: Upload macOS Scripts
82
+
83
+ 1. Navigate to **Devices > macOS > Shell scripts**
84
+ 2. Click **+ Add**
85
+ 3. Configure **Basics**:
86
+ - **Name:** Nox OpenClaw Detection (macOS)
87
+ 4. Configure **Script settings**:
88
+ - Upload `detect-openclaw.sh`
89
+ - **Run script as signed-in user:** No
90
+ - **Hide script notifications on devices:** Yes
91
+ - **Script frequency:** Every 1 day
92
+ - **Max number of times to retry if script fails:** 3
93
+ 5. Configure **Assignments**:
94
+ - Add target groups
95
+ 6. Click **Create**
96
+
97
+ ## Proactive Remediation (Recommended)
98
+
99
+ Proactive Remediation automatically detects and fixes issues. This is the recommended deployment method for Windows.
100
+
101
+ ### Create Remediation Package
102
+
103
+ 1. Navigate to **Devices > Remediations**
104
+ 2. Click **+ Create script package**
105
+ 3. Configure **Basics**:
106
+ - **Name:** Nox OpenClaw Detection and Remediation
107
+ - **Description:** Automatically detects and removes OpenClaw AI agent
108
+ - **Publisher:** Nox Security
109
+ 4. Configure **Settings**:
110
+ - **Detection script file:** Upload `Detect-OpenClaw.ps1`
111
+ - **Remediation script file:** Upload `Remediate-OpenClaw.ps1`
112
+ - **Run this script using the logged on credentials:** No
113
+ - **Enforce script signature check:** No
114
+ - **Run script in 64-bit PowerShell:** Yes
115
+ 5. Configure **Scope tags** (optional)
116
+ 6. Configure **Assignments**:
117
+ - Select target groups
118
+ - **Schedule:**
119
+ - **Run frequency:** Daily (recommended)
120
+ - Or: Every 6 hours (for high-security environments)
121
+ 7. Click **Create**
122
+
123
+ ### How Proactive Remediation Works
124
+
125
+ 1. **Detection phase:** Runs `Detect-OpenClaw.ps1`
126
+ - Exit code 0 = Compliant (no OpenClaw found)
127
+ - Exit code 1 = Non-compliant (OpenClaw detected)
128
+
129
+ 2. **Remediation phase:** If detection returns exit code 1
130
+ - Runs `Remediate-OpenClaw.ps1`
131
+ - Removes OpenClaw components
132
+ - Reports success/failure
133
+
134
+ 3. **Reporting:** Results visible in Endpoint Analytics
135
+
136
+ ## Compliance Policy
137
+
138
+ Create a compliance policy to mark devices with OpenClaw as non-compliant.
139
+
140
+ ### Windows Compliance Policy
141
+
142
+ 1. Navigate to **Devices > Compliance policies**
143
+ 2. Click **+ Create Policy**
144
+ 3. Select **Windows 10 and later**
145
+ 4. Configure **Basics**:
146
+ - **Name:** OpenClaw Detection Compliance
147
+ 5. Configure **Compliance settings**:
148
+ - Use custom compliance script or rely on Proactive Remediation results
149
+ 6. Configure **Actions for noncompliance**:
150
+
151
+ | Action | Schedule |
152
+ |--------|----------|
153
+ | Mark device noncompliant | Immediately |
154
+ | Send email to end user | After 1 day |
155
+ | Retire the noncompliant device | After 14 days (optional) |
156
+
157
+ 7. Configure **Assignments**
158
+ 8. Click **Create**
159
+
160
+ ### Conditional Access Integration
161
+
162
+ Block non-compliant devices from corporate resources:
163
+
164
+ 1. Navigate to **Azure AD > Security > Conditional Access**
165
+ 2. Create or edit policy
166
+ 3. Configure **Conditions**:
167
+ - Device compliance: Require device to be marked as compliant
168
+ 4. Configure **Access controls**:
169
+ - Block access for non-compliant devices
170
+
171
+ ## Monitoring and Reporting
172
+
173
+ ### Script Status Dashboard
174
+
175
+ 1. Navigate to **Devices > Monitor > Device script status**
176
+ 2. Select your script
177
+ 3. View execution results per device
178
+
179
+ ### Proactive Remediation Reports
180
+
181
+ 1. Navigate to **Reports > Endpoint analytics > Proactive remediations**
182
+ 2. Click on your remediation package
183
+ 3. View:
184
+ - **Overview:** Detection and remediation rates
185
+ - **Device status:** Per-device results
186
+ - **Issue breakdown:** Common failure reasons
187
+
188
+ ### Log Analytics Integration
189
+
190
+ Export data to Azure Log Analytics for custom dashboards.
191
+
192
+ #### Configure Diagnostic Settings
193
+
194
+ 1. Navigate to **Tenant administration > Diagnostics settings**
195
+ 2. Click **+ Add diagnostic setting**
196
+ 3. Configure:
197
+ - **Name:** Intune to Log Analytics
198
+ - **Log categories:** Scripts, Device compliance, etc.
199
+ - **Destination:** Send to Log Analytics workspace
200
+ 4. Click **Save**
201
+
202
+ #### Example Queries
203
+
204
+ Devices with OpenClaw detected:
205
+
206
+ ```kusto
207
+ IntuneDevices
208
+ | where TimeGenerated > ago(7d)
209
+ | where DeviceId in (
210
+ IntuneDeviceComplianceOrg
211
+ | where ComplianceState == "Noncompliant"
212
+ | where PolicyName contains "OpenClaw"
213
+ | project DeviceId
214
+ )
215
+ | project DeviceName, UserPrincipalName, OS, OSVersion, LastContact
216
+ | sort by LastContact desc
217
+ ```
218
+
219
+ Proactive Remediation summary:
220
+
221
+ ```kusto
222
+ IntuneProactiveRemediations
223
+ | where TimeGenerated > ago(30d)
224
+ | where PolicyName == "Nox OpenClaw Detection and Remediation"
225
+ | summarize
226
+ Detected = countif(DetectionStatus == "NonCompliant"),
227
+ Remediated = countif(RemediationStatus == "Success"),
228
+ Failed = countif(RemediationStatus == "Failed")
229
+ by bin(TimeGenerated, 1d)
230
+ | render timechart
231
+ ```
232
+
233
+ ## Exit Codes
234
+
235
+ ### Detection Script
236
+
237
+ | Code | Meaning | Intune Status |
238
+ |------|---------|---------------|
239
+ | 0 | OpenClaw not detected | Compliant |
240
+ | 1 | OpenClaw detected | Non-compliant (triggers remediation) |
241
+ | 2 | Script error | Error |
242
+
243
+ ### Remediation Script
244
+
245
+ | Code | Meaning | Intune Status |
246
+ |------|---------|---------------|
247
+ | 0 | Remediation successful | Success |
248
+ | 1 | Partial failure | With issues |
249
+ | 2 | Script error | Failed |
250
+ | 3 | Nothing to remediate | Success |
251
+
252
+ ## Webhook Integration
253
+
254
+ ### Configure Webhooks in Scripts
255
+
256
+ Edit scripts before uploading to include webhook configuration:
257
+
258
+ ```powershell
259
+ # At the top of the script
260
+ $WebhookUrl = "https://siem.example.com/api/v1/events"
261
+ $WebhookToken = "YOUR_API_TOKEN"
262
+ ```
263
+
264
+ Or generate scripts with webhooks built-in:
265
+
266
+ ```bash
267
+ nox export --platform intune --mode detect \
268
+ --webhook https://siem.example.com/webhook \
269
+ --webhook-token YOUR_TOKEN
270
+ ```
271
+
272
+ ### Webhook Payload
273
+
274
+ ```json
275
+ {
276
+ "event": "openclaw.detection",
277
+ "version": "1.0",
278
+ "timestamp": "2026-02-03T10:30:00Z",
279
+ "status": "detected",
280
+ "severity": "high",
281
+ "host": {
282
+ "hostname": "DESKTOP-ABC123",
283
+ "os": "Windows",
284
+ "osVersion": "Microsoft Windows NT 10.0.19045.0",
285
+ "arch": "AMD64",
286
+ "user": "jsmith",
287
+ "domain": "CONTOSO"
288
+ },
289
+ "details": "CLI found at C:\\Users\\jsmith\\AppData\\Local\\Programs\\openclaw",
290
+ "source": {
291
+ "tool": "nox-openclaw-detector",
292
+ "version": "1.0.0",
293
+ "vendor": "Nox Security"
294
+ }
295
+ }
296
+ ```
297
+
298
+ ### Microsoft Sentinel Integration
299
+
300
+ Create a Logic App to ingest webhooks into Sentinel:
301
+
302
+ 1. Create Logic App with HTTP trigger
303
+ 2. Parse JSON payload
304
+ 3. Send to Log Analytics Custom Log
305
+ 4. Create Sentinel Analytics Rule for detection events
306
+
307
+ ## Advanced Configurations
308
+
309
+ ### Staged Deployment
310
+
311
+ 1. Create Azure AD groups for pilot users
312
+ 2. Assign Proactive Remediation to pilot group
313
+ 3. Monitor for 2 weeks
314
+ 4. Expand to all users
315
+
316
+ ### High-Security Mode
317
+
318
+ For environments requiring immediate detection:
319
+
320
+ 1. Set Proactive Remediation schedule to every 6 hours
321
+ 2. Enable Conditional Access to block non-compliant devices
322
+ 3. Configure email alerts for immediate notification
323
+ 4. Set remediation to auto-run without user interaction
324
+
325
+ ### Multi-OS Deployment
326
+
327
+ Deploy to both Windows and macOS fleets:
328
+
329
+ 1. Create device groups:
330
+ - "All Windows Devices"
331
+ - "All macOS Devices"
332
+ 2. Create separate scripts for each platform
333
+ 3. Assign Windows scripts to Windows group
334
+ 4. Assign macOS scripts to macOS group
335
+
336
+ ## Troubleshooting
337
+
338
+ ### Script Not Running
339
+
340
+ 1. Verify device is enrolled and checking in
341
+ 2. Check device group assignment
342
+ 3. Verify Intune Management Extension is installed:
343
+ - Path: `C:\Program Files (x86)\Microsoft Intune Management Extension`
344
+ 4. Review IME logs:
345
+ - Path: `%ProgramData%\Microsoft\IntuneManagementExtension\Logs`
346
+
347
+ ### Access Denied Errors
348
+
349
+ 1. Verify script runs as SYSTEM (not user)
350
+ 2. Check for UAC restrictions
351
+ 3. Ensure device is properly enrolled
352
+ 4. Verify MDM authority is Intune
353
+
354
+ ### Remediation Not Triggering
355
+
356
+ 1. Verify detection script returns exit code 1 for detection
357
+ 2. Check remediation script is assigned to package
358
+ 3. Review Proactive Remediation schedule
359
+ 4. Check device is within scope of assignments
360
+
361
+ ### PowerShell Execution Policy
362
+
363
+ If scripts fail due to execution policy:
364
+
365
+ 1. Scripts run via Intune bypass local execution policy
366
+ 2. If issues persist, check group policy for overrides
367
+ 3. Ensure 64-bit PowerShell option is selected
368
+
369
+ ### macOS Script Issues
370
+
371
+ 1. Check script has correct line endings (LF, not CRLF)
372
+ 2. Verify bash syntax is compatible
373
+ 3. Check for permission issues with System Integrity Protection
374
+
375
+ ## Best Practices
376
+
377
+ 1. **Use Proactive Remediation**: Automates detection and enforcement
378
+ 2. **Start with Detection Only**: Understand scope before enabling remediation
379
+ 3. **Test in Pilot Group**: Validate before fleet-wide deployment
380
+ 4. **Enable Log Analytics**: Essential for long-term reporting and trend analysis
381
+ 5. **Set Appropriate Schedules**: Daily is sufficient for most environments
382
+ 6. **Monitor Remediation Success**: Investigate any failures promptly
383
+ 7. **Document Exceptions**: Track approved OpenClaw installations in Azure AD notes
384
+ 8. **Regular Updates**: Update scripts when new versions are available
385
+
386
+ ## Support
387
+
388
+ - Email: support@nox.security
389
+ - Documentation: https://docs.nox.security/intune
390
+ - Microsoft Endpoint Manager Admin Center: https://endpoint.microsoft.com