prelude-sdk-beta 1447__py3-none-any.whl
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.
- prelude_sdk_beta/__init__.py +0 -0
- prelude_sdk_beta/controllers/__init__.py +0 -0
- prelude_sdk_beta/controllers/build_controller.py +315 -0
- prelude_sdk_beta/controllers/detect_controller.py +256 -0
- prelude_sdk_beta/controllers/export_controller.py +31 -0
- prelude_sdk_beta/controllers/generate_controller.py +40 -0
- prelude_sdk_beta/controllers/http_controller.py +83 -0
- prelude_sdk_beta/controllers/iam_controller.py +285 -0
- prelude_sdk_beta/controllers/jobs_controller.py +37 -0
- prelude_sdk_beta/controllers/partner_controller.py +154 -0
- prelude_sdk_beta/controllers/probe_controller.py +14 -0
- prelude_sdk_beta/controllers/scm_controller.py +664 -0
- prelude_sdk_beta/models/__init__.py +0 -0
- prelude_sdk_beta/models/account.py +269 -0
- prelude_sdk_beta/models/codes.py +654 -0
- prelude_sdk_beta-1447.dist-info/METADATA +46 -0
- prelude_sdk_beta-1447.dist-info/RECORD +20 -0
- prelude_sdk_beta-1447.dist-info/WHEEL +5 -0
- prelude_sdk_beta-1447.dist-info/licenses/LICENSE +9 -0
- prelude_sdk_beta-1447.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,654 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from enum import Enum, EnumMeta
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MissingItem(EnumMeta):
|
|
7
|
+
def __getitem__(cls, name):
|
|
8
|
+
try:
|
|
9
|
+
return super().__getitem__(name.upper())
|
|
10
|
+
except (AttributeError, KeyError):
|
|
11
|
+
try:
|
|
12
|
+
return cls(int(name))
|
|
13
|
+
except ValueError:
|
|
14
|
+
return cls(name)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class RunCode(Enum, metaclass=MissingItem):
|
|
18
|
+
INVALID = -1
|
|
19
|
+
DAILY = 1
|
|
20
|
+
WEEKLY = 2
|
|
21
|
+
MONTHLY = 3
|
|
22
|
+
SMART = 4
|
|
23
|
+
DEBUG = 5
|
|
24
|
+
RUN_ONCE = 6
|
|
25
|
+
MONDAY = 10
|
|
26
|
+
TUESDAY = 11
|
|
27
|
+
WEDNESDAY = 12
|
|
28
|
+
THURSDAY = 13
|
|
29
|
+
FRIDAY = 14
|
|
30
|
+
SATURDAY = 15
|
|
31
|
+
SUNDAY = 16
|
|
32
|
+
MONTH_1 = 20
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def _missing_(cls, value):
|
|
36
|
+
return RunCode.DAILY
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class Mode(Enum, metaclass=MissingItem):
|
|
40
|
+
MANUAL = 0
|
|
41
|
+
FROZEN = 1
|
|
42
|
+
AUTOPILOT = 2
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def _missing_(cls, value):
|
|
46
|
+
return Mode.MANUAL
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class Permission(Enum, metaclass=MissingItem):
|
|
50
|
+
INVALID = -1
|
|
51
|
+
ADMIN = 0
|
|
52
|
+
EXECUTIVE = 1
|
|
53
|
+
BUILD = 2
|
|
54
|
+
SERVICE = 3
|
|
55
|
+
SUPPORT = 5
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
def _missing_(cls, value):
|
|
59
|
+
return Permission.INVALID
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ExitCode(Enum):
|
|
63
|
+
MISSING = -1
|
|
64
|
+
UNKNOWN_ERROR = 1
|
|
65
|
+
MALFORMED_TEST = 2
|
|
66
|
+
UNREPORTED = 3
|
|
67
|
+
PROCESS_BLOCKED = 9
|
|
68
|
+
PROCESS_BLOCKED_GRACEFULLY = 15
|
|
69
|
+
PROTECTED = 100
|
|
70
|
+
UNPROTECTED = 101
|
|
71
|
+
TIMED_OUT = 102
|
|
72
|
+
FAILED_CLEANUP = 103
|
|
73
|
+
TEST_NOT_RELEVANT = 104
|
|
74
|
+
DYNAMIC_QUARANTINE = 105
|
|
75
|
+
BLOCKED_AT_PERIMETER = 106
|
|
76
|
+
EXPLOIT_PREVENTED = 107
|
|
77
|
+
ENDPOINT_NOT_RELEVANT = 108
|
|
78
|
+
INSUFFICIENT_PRIVILEGES = 109
|
|
79
|
+
INCORRECTLY_BLOCKED = 110
|
|
80
|
+
PREVENTED_EXECUTION = 126
|
|
81
|
+
STATIC_QUARANTINE = 127
|
|
82
|
+
BLOCKED = 137
|
|
83
|
+
UNEXPECTED_ERROR = 256
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def _missing_(cls, value):
|
|
87
|
+
if value and not isinstance(value, int):
|
|
88
|
+
return cls(int(value))
|
|
89
|
+
logging.warning("Unknown ExitCode: %s", str(value))
|
|
90
|
+
return ExitCode.MISSING
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def state(self):
|
|
94
|
+
for k, v in State.mapping().items():
|
|
95
|
+
if self in v:
|
|
96
|
+
return k
|
|
97
|
+
return State.NONE
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class State(Enum):
|
|
101
|
+
NONE = 0
|
|
102
|
+
PROTECTED = 1
|
|
103
|
+
UNPROTECTED = 2
|
|
104
|
+
ERROR = 3
|
|
105
|
+
NOT_RELEVANT = 4
|
|
106
|
+
|
|
107
|
+
@classmethod
|
|
108
|
+
def mapping(cls):
|
|
109
|
+
return {
|
|
110
|
+
State.ERROR: [
|
|
111
|
+
ExitCode.FAILED_CLEANUP,
|
|
112
|
+
ExitCode.INCORRECTLY_BLOCKED,
|
|
113
|
+
ExitCode.MALFORMED_TEST,
|
|
114
|
+
ExitCode.TIMED_OUT,
|
|
115
|
+
ExitCode.UNEXPECTED_ERROR,
|
|
116
|
+
ExitCode.UNKNOWN_ERROR,
|
|
117
|
+
ExitCode.UNREPORTED,
|
|
118
|
+
],
|
|
119
|
+
State.NONE: [ExitCode.MISSING],
|
|
120
|
+
State.NOT_RELEVANT: [
|
|
121
|
+
ExitCode.ENDPOINT_NOT_RELEVANT,
|
|
122
|
+
ExitCode.INSUFFICIENT_PRIVILEGES,
|
|
123
|
+
ExitCode.TEST_NOT_RELEVANT,
|
|
124
|
+
],
|
|
125
|
+
State.PROTECTED: [
|
|
126
|
+
ExitCode.BLOCKED,
|
|
127
|
+
ExitCode.BLOCKED_AT_PERIMETER,
|
|
128
|
+
ExitCode.DYNAMIC_QUARANTINE,
|
|
129
|
+
ExitCode.EXPLOIT_PREVENTED,
|
|
130
|
+
ExitCode.PREVENTED_EXECUTION,
|
|
131
|
+
ExitCode.PROCESS_BLOCKED,
|
|
132
|
+
ExitCode.PROCESS_BLOCKED_GRACEFULLY,
|
|
133
|
+
ExitCode.PROTECTED,
|
|
134
|
+
ExitCode.STATIC_QUARANTINE,
|
|
135
|
+
],
|
|
136
|
+
State.UNPROTECTED: [
|
|
137
|
+
ExitCode.UNPROTECTED,
|
|
138
|
+
],
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class DOS(Enum):
|
|
143
|
+
none = "none"
|
|
144
|
+
arm64 = "arm64"
|
|
145
|
+
x86_64 = "x86_64"
|
|
146
|
+
aarch64 = "arm64"
|
|
147
|
+
amd64 = "x86_64"
|
|
148
|
+
x86 = "x86_64"
|
|
149
|
+
|
|
150
|
+
@classmethod
|
|
151
|
+
def normalize(cls, dos: str):
|
|
152
|
+
try:
|
|
153
|
+
arch = dos.split("-", 1)[-1]
|
|
154
|
+
return dos[: -len(arch)].lower() + cls[arch.lower()].value
|
|
155
|
+
except (KeyError, IndexError, AttributeError):
|
|
156
|
+
return cls.none.value
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class Control(Enum, metaclass=MissingItem):
|
|
160
|
+
INVALID = -1
|
|
161
|
+
NONE = 0
|
|
162
|
+
CROWDSTRIKE = 1
|
|
163
|
+
DEFENDER = 2
|
|
164
|
+
SPLUNK = 3
|
|
165
|
+
SENTINELONE = 4
|
|
166
|
+
VECTR = 5
|
|
167
|
+
S3 = 6
|
|
168
|
+
INTUNE = 7
|
|
169
|
+
SERVICENOW = 8
|
|
170
|
+
OKTA = 9
|
|
171
|
+
M365 = 10
|
|
172
|
+
ENTRA = 11
|
|
173
|
+
JAMF = 12
|
|
174
|
+
GMAIL = 14
|
|
175
|
+
GOOGLE_IDENTITY = 15
|
|
176
|
+
DEFENDER_DISCOVERY = 16
|
|
177
|
+
TENABLE = 17
|
|
178
|
+
EC2 = 18
|
|
179
|
+
AWS_SSM = 19
|
|
180
|
+
AZURE_VM = 20
|
|
181
|
+
GITHUB = 21
|
|
182
|
+
TENABLE_DISCOVERY = 22
|
|
183
|
+
QUALYS = 23
|
|
184
|
+
QUALYS_DISCOVERY = 24
|
|
185
|
+
RAPID7 = 25
|
|
186
|
+
RAPID7_DISCOVERY = 26
|
|
187
|
+
INTEL_INTUNE = 28
|
|
188
|
+
CISCO_MERAKI = 29
|
|
189
|
+
CISCO_MERAKI_IDENTITY = 30
|
|
190
|
+
|
|
191
|
+
@classmethod
|
|
192
|
+
def _missing_(cls, value):
|
|
193
|
+
return Control.INVALID
|
|
194
|
+
|
|
195
|
+
@property
|
|
196
|
+
def control_category(self):
|
|
197
|
+
for k, v in ControlCategory.mapping().items():
|
|
198
|
+
if self in v:
|
|
199
|
+
return k
|
|
200
|
+
return ControlCategory.NONE
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def scm_category(self):
|
|
204
|
+
for k, v in SCMCategory.control_mapping().items():
|
|
205
|
+
if self in v:
|
|
206
|
+
return k
|
|
207
|
+
return SCMCategory.NONE
|
|
208
|
+
|
|
209
|
+
@property
|
|
210
|
+
def parent(self):
|
|
211
|
+
match self:
|
|
212
|
+
case Control.CISCO_MERAKI_IDENTITY:
|
|
213
|
+
return Control.CISCO_MERAKI
|
|
214
|
+
case Control.DEFENDER_DISCOVERY:
|
|
215
|
+
return Control.DEFENDER
|
|
216
|
+
case Control.QUALYS_DISCOVERY:
|
|
217
|
+
return Control.QUALYS
|
|
218
|
+
case Control.RAPID7_DISCOVERY:
|
|
219
|
+
return Control.RAPID7
|
|
220
|
+
case Control.TENABLE_DISCOVERY:
|
|
221
|
+
return Control.TENABLE
|
|
222
|
+
|
|
223
|
+
@property
|
|
224
|
+
def children(self):
|
|
225
|
+
match self:
|
|
226
|
+
case Control.CISCO_MERAKI:
|
|
227
|
+
return [Control.CISCO_MERAKI_IDENTITY]
|
|
228
|
+
case Control.DEFENDER:
|
|
229
|
+
return [Control.DEFENDER_DISCOVERY]
|
|
230
|
+
case Control.QUALYS:
|
|
231
|
+
return [Control.QUALYS_DISCOVERY]
|
|
232
|
+
case Control.RAPID7:
|
|
233
|
+
return [Control.RAPID7_DISCOVERY]
|
|
234
|
+
case Control.TENABLE:
|
|
235
|
+
return [Control.TENABLE_DISCOVERY]
|
|
236
|
+
case _:
|
|
237
|
+
return []
|
|
238
|
+
|
|
239
|
+
@property
|
|
240
|
+
def display_name(self):
|
|
241
|
+
match self:
|
|
242
|
+
case Control.CROWDSTRIKE:
|
|
243
|
+
return "CrowdStrike"
|
|
244
|
+
case Control.DEFENDER:
|
|
245
|
+
return "Microsoft Defender"
|
|
246
|
+
case Control.SPLUNK:
|
|
247
|
+
return "Splunk"
|
|
248
|
+
case Control.SENTINELONE:
|
|
249
|
+
return "SentinelOne"
|
|
250
|
+
case Control.VECTR:
|
|
251
|
+
return "VECTR"
|
|
252
|
+
case Control.S3:
|
|
253
|
+
return "Amazon S3"
|
|
254
|
+
case Control.INTUNE:
|
|
255
|
+
return "Microsoft Intune"
|
|
256
|
+
case Control.SERVICENOW:
|
|
257
|
+
return "ServiceNow"
|
|
258
|
+
case Control.OKTA:
|
|
259
|
+
return "Okta"
|
|
260
|
+
case Control.M365:
|
|
261
|
+
return "Microsoft 365"
|
|
262
|
+
case Control.ENTRA:
|
|
263
|
+
return "Microsoft Entra ID"
|
|
264
|
+
case Control.JAMF:
|
|
265
|
+
return "Jamf"
|
|
266
|
+
case Control.GMAIL:
|
|
267
|
+
return "Gmail"
|
|
268
|
+
case Control.GOOGLE_IDENTITY:
|
|
269
|
+
return "Google Cloud Identity Platform"
|
|
270
|
+
case Control.DEFENDER_DISCOVERY:
|
|
271
|
+
return "Microsoft Defender Discovery"
|
|
272
|
+
case Control.TENABLE:
|
|
273
|
+
return "Tenable"
|
|
274
|
+
case Control.EC2:
|
|
275
|
+
return "Amazon EC2"
|
|
276
|
+
case Control.AWS_SSM:
|
|
277
|
+
return "Amazon SSM"
|
|
278
|
+
case Control.AZURE_VM:
|
|
279
|
+
return "Azure VM"
|
|
280
|
+
case Control.GITHUB:
|
|
281
|
+
return "GitHub"
|
|
282
|
+
case Control.TENABLE_DISCOVERY:
|
|
283
|
+
return "Tenable Discovery"
|
|
284
|
+
case Control.QUALYS:
|
|
285
|
+
return "Qualys"
|
|
286
|
+
case Control.QUALYS_DISCOVERY:
|
|
287
|
+
return "Qualys Discovery"
|
|
288
|
+
case Control.RAPID7:
|
|
289
|
+
return "Rapid7"
|
|
290
|
+
case Control.RAPID7_DISCOVERY:
|
|
291
|
+
return "Rapid7 Discovery"
|
|
292
|
+
case Control.INTEL_INTUNE:
|
|
293
|
+
return "Intel"
|
|
294
|
+
case Control.CISCO_MERAKI:
|
|
295
|
+
return "Cisco Meraki"
|
|
296
|
+
case Control.CISCO_MERAKI_IDENTITY:
|
|
297
|
+
return "Cisco Meraki Identity"
|
|
298
|
+
case _:
|
|
299
|
+
return "Unknown Control"
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
class ControlCategory(Enum, metaclass=MissingItem):
|
|
303
|
+
INVALID = -1
|
|
304
|
+
NONE = 0
|
|
305
|
+
CLOUD = 1
|
|
306
|
+
EMAIL = 2
|
|
307
|
+
IDENTITY = 3
|
|
308
|
+
NETWORK = 4
|
|
309
|
+
XDR = 5
|
|
310
|
+
ASSET_MANAGER = 6
|
|
311
|
+
DISCOVERED_DEVICES = 7
|
|
312
|
+
VULN_MANAGER = 8
|
|
313
|
+
SIEM = 9
|
|
314
|
+
PRIVATE_REPO = 10
|
|
315
|
+
HARDWARE = 11
|
|
316
|
+
|
|
317
|
+
@classmethod
|
|
318
|
+
def _missing_(cls, value):
|
|
319
|
+
return ControlCategory.INVALID
|
|
320
|
+
|
|
321
|
+
@classmethod
|
|
322
|
+
def mapping(cls):
|
|
323
|
+
return {
|
|
324
|
+
ControlCategory.ASSET_MANAGER: [
|
|
325
|
+
Control.AWS_SSM,
|
|
326
|
+
Control.INTUNE,
|
|
327
|
+
Control.JAMF,
|
|
328
|
+
],
|
|
329
|
+
ControlCategory.CLOUD: [],
|
|
330
|
+
ControlCategory.DISCOVERED_DEVICES: [
|
|
331
|
+
Control.AZURE_VM,
|
|
332
|
+
Control.DEFENDER_DISCOVERY,
|
|
333
|
+
Control.EC2,
|
|
334
|
+
Control.QUALYS_DISCOVERY,
|
|
335
|
+
Control.RAPID7_DISCOVERY,
|
|
336
|
+
Control.SERVICENOW,
|
|
337
|
+
Control.TENABLE_DISCOVERY,
|
|
338
|
+
],
|
|
339
|
+
ControlCategory.EMAIL: [
|
|
340
|
+
Control.GMAIL,
|
|
341
|
+
Control.M365,
|
|
342
|
+
],
|
|
343
|
+
ControlCategory.HARDWARE: [
|
|
344
|
+
Control.INTEL_INTUNE,
|
|
345
|
+
],
|
|
346
|
+
ControlCategory.IDENTITY: [
|
|
347
|
+
Control.CISCO_MERAKI_IDENTITY,
|
|
348
|
+
Control.ENTRA,
|
|
349
|
+
Control.GOOGLE_IDENTITY,
|
|
350
|
+
Control.OKTA,
|
|
351
|
+
],
|
|
352
|
+
ControlCategory.NETWORK: [Control.CISCO_MERAKI],
|
|
353
|
+
ControlCategory.PRIVATE_REPO: [
|
|
354
|
+
Control.GITHUB,
|
|
355
|
+
],
|
|
356
|
+
ControlCategory.SIEM: [
|
|
357
|
+
Control.S3,
|
|
358
|
+
Control.SPLUNK,
|
|
359
|
+
Control.VECTR,
|
|
360
|
+
],
|
|
361
|
+
ControlCategory.VULN_MANAGER: [
|
|
362
|
+
Control.QUALYS,
|
|
363
|
+
Control.RAPID7,
|
|
364
|
+
Control.TENABLE,
|
|
365
|
+
],
|
|
366
|
+
ControlCategory.XDR: [
|
|
367
|
+
Control.CROWDSTRIKE,
|
|
368
|
+
Control.DEFENDER,
|
|
369
|
+
Control.SENTINELONE,
|
|
370
|
+
],
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
@property
|
|
374
|
+
def display_name(self):
|
|
375
|
+
match self:
|
|
376
|
+
case ControlCategory.CLOUD:
|
|
377
|
+
return "Cloud"
|
|
378
|
+
case ControlCategory.EMAIL:
|
|
379
|
+
return "Email"
|
|
380
|
+
case ControlCategory.IDENTITY:
|
|
381
|
+
return "Identity Provider"
|
|
382
|
+
case ControlCategory.NETWORK:
|
|
383
|
+
return "Network"
|
|
384
|
+
case ControlCategory.XDR:
|
|
385
|
+
return "EDR"
|
|
386
|
+
case ControlCategory.ASSET_MANAGER:
|
|
387
|
+
return "Endpoint Management"
|
|
388
|
+
case ControlCategory.DISCOVERED_DEVICES:
|
|
389
|
+
return "Discovered Devices"
|
|
390
|
+
case ControlCategory.VULN_MANAGER:
|
|
391
|
+
return "Vulnerability Management"
|
|
392
|
+
case ControlCategory.SIEM:
|
|
393
|
+
return "SIEM"
|
|
394
|
+
case ControlCategory.PRIVATE_REPO:
|
|
395
|
+
return "Private Repository"
|
|
396
|
+
case ControlCategory.HARDWARE:
|
|
397
|
+
return "Client Hardware Security"
|
|
398
|
+
case _:
|
|
399
|
+
return "Unknown Control Category"
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
class SCMCategory(Enum, metaclass=MissingItem):
|
|
403
|
+
INVALID = -1
|
|
404
|
+
NONE = 0
|
|
405
|
+
ENDPOINT = 1
|
|
406
|
+
INBOX = 2
|
|
407
|
+
USER = 3
|
|
408
|
+
NETWORK_DEVICE = 4
|
|
409
|
+
|
|
410
|
+
@classmethod
|
|
411
|
+
def _missing_(cls, value):
|
|
412
|
+
return SCMCategory.INVALID
|
|
413
|
+
|
|
414
|
+
@classmethod
|
|
415
|
+
def control_mapping(cls):
|
|
416
|
+
return {
|
|
417
|
+
SCMCategory.ENDPOINT: [
|
|
418
|
+
Control.AWS_SSM,
|
|
419
|
+
Control.AZURE_VM,
|
|
420
|
+
Control.CROWDSTRIKE,
|
|
421
|
+
Control.DEFENDER,
|
|
422
|
+
Control.DEFENDER_DISCOVERY,
|
|
423
|
+
Control.EC2,
|
|
424
|
+
Control.INTEL_INTUNE,
|
|
425
|
+
Control.INTUNE,
|
|
426
|
+
Control.JAMF,
|
|
427
|
+
Control.QUALYS,
|
|
428
|
+
Control.QUALYS_DISCOVERY,
|
|
429
|
+
Control.RAPID7,
|
|
430
|
+
Control.RAPID7_DISCOVERY,
|
|
431
|
+
Control.SENTINELONE,
|
|
432
|
+
Control.SERVICENOW,
|
|
433
|
+
Control.TENABLE,
|
|
434
|
+
Control.TENABLE_DISCOVERY,
|
|
435
|
+
],
|
|
436
|
+
SCMCategory.INBOX: [
|
|
437
|
+
Control.GMAIL,
|
|
438
|
+
Control.M365,
|
|
439
|
+
],
|
|
440
|
+
SCMCategory.NETWORK_DEVICE: [
|
|
441
|
+
Control.CISCO_MERAKI,
|
|
442
|
+
],
|
|
443
|
+
SCMCategory.USER: [
|
|
444
|
+
Control.CISCO_MERAKI_IDENTITY,
|
|
445
|
+
Control.ENTRA,
|
|
446
|
+
Control.GOOGLE_IDENTITY,
|
|
447
|
+
Control.OKTA,
|
|
448
|
+
],
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
@classmethod
|
|
452
|
+
def category_mapping(cls):
|
|
453
|
+
return {
|
|
454
|
+
SCMCategory.ENDPOINT: [
|
|
455
|
+
ControlCategory.ASSET_MANAGER,
|
|
456
|
+
ControlCategory.DISCOVERED_DEVICES,
|
|
457
|
+
ControlCategory.HARDWARE,
|
|
458
|
+
ControlCategory.VULN_MANAGER,
|
|
459
|
+
ControlCategory.XDR,
|
|
460
|
+
],
|
|
461
|
+
SCMCategory.INBOX: [ControlCategory.EMAIL],
|
|
462
|
+
SCMCategory.NETWORK_DEVICE: [ControlCategory.NETWORK],
|
|
463
|
+
SCMCategory.USER: [ControlCategory.IDENTITY],
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
class BackgroundJobTypes(Enum, metaclass=MissingItem):
|
|
468
|
+
INVALID = -1
|
|
469
|
+
UPDATE_SCM = 1
|
|
470
|
+
DEPLOY_PROBE = 2
|
|
471
|
+
OBSERVED_DETECTED = 3
|
|
472
|
+
PRELUDE_ENDPOINT_SYNC = 4
|
|
473
|
+
EXPORT_SCM = 5
|
|
474
|
+
PARTNER_GROUPS = 6
|
|
475
|
+
|
|
476
|
+
@classmethod
|
|
477
|
+
def _missing_(cls, value):
|
|
478
|
+
return BackgroundJobTypes.INVALID
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
class EDRResponse(Enum, metaclass=MissingItem):
|
|
482
|
+
INVALID = -1
|
|
483
|
+
OBSERVE = 1
|
|
484
|
+
DETECT = 2
|
|
485
|
+
PREVENT = 3
|
|
486
|
+
|
|
487
|
+
@classmethod
|
|
488
|
+
def _missing_(cls, value):
|
|
489
|
+
return EDRResponse.INVALID
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
class PartnerEvents(Enum, metaclass=MissingItem):
|
|
493
|
+
INVALID = -1
|
|
494
|
+
REDUCED_FUNCTIONALITY_MODE = 1
|
|
495
|
+
MISSING_EDR = 2
|
|
496
|
+
NO_EDR_POLICY = 3
|
|
497
|
+
NO_AV_POLICY = 4
|
|
498
|
+
MISSING_MFA = 5
|
|
499
|
+
MISSING_ASSET_MANAGER = 6
|
|
500
|
+
MISCONFIGURED_POLICY_SETTING = 7
|
|
501
|
+
MISSING_VULN_SCAN = 8
|
|
502
|
+
OUT_OF_DATE_SCAN = 9
|
|
503
|
+
MISSING_VULN_MANAGER = 10
|
|
504
|
+
USER_MISSING_ASSET_MANAGER = 11
|
|
505
|
+
USER_MISSING_EDR = 12
|
|
506
|
+
USER_MISSING_VULN_MANAGER = 13
|
|
507
|
+
MISSING_SERVER_MANAGER = 14
|
|
508
|
+
NO_HOST_FIREWALL_POLICY = 16
|
|
509
|
+
OUT_OF_DATE_FIRMWARE = 18
|
|
510
|
+
NO_DISK_ENCRYPTION_POLICY = 19
|
|
511
|
+
NO_DISK_ENCRYPTION = 20
|
|
512
|
+
NO_REGISTERED_DEVICES = 21
|
|
513
|
+
NO_DEVICE_COMPLIANCE_POLICY = 22
|
|
514
|
+
NONCOMPLIANT = 23
|
|
515
|
+
NO_ASR_POLICY = 24
|
|
516
|
+
|
|
517
|
+
@classmethod
|
|
518
|
+
def _missing_(cls, value):
|
|
519
|
+
return PartnerEvents.INVALID
|
|
520
|
+
|
|
521
|
+
@classmethod
|
|
522
|
+
def control_category_mapping(cls):
|
|
523
|
+
return {
|
|
524
|
+
PartnerEvents.MISCONFIGURED_POLICY_SETTING: [
|
|
525
|
+
ControlCategory.ASSET_MANAGER,
|
|
526
|
+
ControlCategory.EMAIL,
|
|
527
|
+
ControlCategory.IDENTITY,
|
|
528
|
+
ControlCategory.XDR,
|
|
529
|
+
],
|
|
530
|
+
PartnerEvents.MISSING_ASSET_MANAGER: [ControlCategory.ASSET_MANAGER],
|
|
531
|
+
PartnerEvents.MISSING_EDR: [ControlCategory.XDR],
|
|
532
|
+
PartnerEvents.MISSING_MFA: [ControlCategory.IDENTITY],
|
|
533
|
+
PartnerEvents.MISSING_SERVER_MANAGER: [ControlCategory.ASSET_MANAGER],
|
|
534
|
+
PartnerEvents.MISSING_VULN_MANAGER: [ControlCategory.VULN_MANAGER],
|
|
535
|
+
PartnerEvents.MISSING_VULN_SCAN: [ControlCategory.VULN_MANAGER],
|
|
536
|
+
PartnerEvents.NO_ASR_POLICY: [ControlCategory.ASSET_MANAGER],
|
|
537
|
+
PartnerEvents.NO_AV_POLICY: [ControlCategory.XDR],
|
|
538
|
+
PartnerEvents.NO_DEVICE_COMPLIANCE_POLICY: [ControlCategory.ASSET_MANAGER],
|
|
539
|
+
PartnerEvents.NO_DISK_ENCRYPTION: [ControlCategory.ASSET_MANAGER],
|
|
540
|
+
PartnerEvents.NO_DISK_ENCRYPTION_POLICY: [ControlCategory.ASSET_MANAGER],
|
|
541
|
+
PartnerEvents.NO_EDR_POLICY: [ControlCategory.XDR],
|
|
542
|
+
PartnerEvents.NO_HOST_FIREWALL_POLICY: [ControlCategory.ASSET_MANAGER],
|
|
543
|
+
PartnerEvents.NO_REGISTERED_DEVICES: [ControlCategory.IDENTITY],
|
|
544
|
+
PartnerEvents.NONCOMPLIANT: [ControlCategory.ASSET_MANAGER],
|
|
545
|
+
PartnerEvents.OUT_OF_DATE_FIRMWARE: [ControlCategory.NETWORK],
|
|
546
|
+
PartnerEvents.OUT_OF_DATE_SCAN: [ControlCategory.VULN_MANAGER],
|
|
547
|
+
PartnerEvents.REDUCED_FUNCTIONALITY_MODE: [ControlCategory.XDR],
|
|
548
|
+
PartnerEvents.USER_MISSING_ASSET_MANAGER: [ControlCategory.IDENTITY],
|
|
549
|
+
PartnerEvents.USER_MISSING_EDR: [ControlCategory.IDENTITY],
|
|
550
|
+
PartnerEvents.USER_MISSING_VULN_MANAGER: [ControlCategory.IDENTITY],
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
class AlertTypes(Enum, metaclass=MissingItem):
|
|
555
|
+
INVALID = -1
|
|
556
|
+
NEW_REDUCED_FUNCTIONALITY_MODE_ENDPOINTS = 1
|
|
557
|
+
NEW_MISSING_EDR_ENDPOINTS = 2
|
|
558
|
+
NEW_NO_EDR_POLICY_ENDPOINTS = 3
|
|
559
|
+
NEW_NO_AV_POLICY_ENDPOINTS = 4
|
|
560
|
+
NEW_MISSING_MFA_USERS = 5
|
|
561
|
+
NEW_MISSING_ASSET_MANAGER_ENDPOINTS = 6
|
|
562
|
+
NEW_POLICY_SETTING_FAILURE = 7
|
|
563
|
+
NEW_POLICY_SETTING_PASS = 8
|
|
564
|
+
NEW_MISSING_VULN_SCAN_ENDPOINTS = 9
|
|
565
|
+
NEW_MISSING_VULN_MANAGER_ENDPOINTS = 10
|
|
566
|
+
NEW_OUT_OF_DATE_SCAN_ENDPOINTS = 11
|
|
567
|
+
NEW_MISSING_ASSET_MANAGER_USERS = 12
|
|
568
|
+
NEW_MISSING_EDR_USERS = 13
|
|
569
|
+
NEW_MISSING_VULN_MANAGER_USERS = 14
|
|
570
|
+
NEW_MISSING_SERVER_MANAGER_ENDPOINTS = 15
|
|
571
|
+
NEW_NO_HOST_FIREWALL_POLICY_ENDPOINTS = 17
|
|
572
|
+
NEW_OUT_OF_DATE_FIRMWARE_NETWORK_DEVICES = 19
|
|
573
|
+
NEW_NO_DISK_ENCRYPTION_POLICY_ENDPOINTS = 20
|
|
574
|
+
NEW_NO_DISK_ENCRYPTION_ENDPOINTS = 21
|
|
575
|
+
NEW_NO_REGISTERED_DEVICES_USERS = 22
|
|
576
|
+
NEW_NO_DEVICE_COMPLIANCE_POLICY_ENDPOINTS = 23
|
|
577
|
+
NEW_NONCOMPLIANT_ENDPOINTS = 24
|
|
578
|
+
NEW_NO_ASR_POLICY_ENDPOINTS = 25
|
|
579
|
+
|
|
580
|
+
@classmethod
|
|
581
|
+
def _missing_(cls, value):
|
|
582
|
+
return AlertTypes.INVALID
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
class PolicyType(Enum, metaclass=MissingItem):
|
|
586
|
+
INVALID = 0
|
|
587
|
+
EDR = 1
|
|
588
|
+
AV = 2
|
|
589
|
+
IDENTITY_PASSWORD = 3
|
|
590
|
+
EMAIL_ANTIPHISH = 4
|
|
591
|
+
EMAIL_OUTBOUND = 5
|
|
592
|
+
EMAIL_CONTENT = 6
|
|
593
|
+
EMAIL_MALWARE = 7
|
|
594
|
+
EMAIL_ATTACHMENT = 8
|
|
595
|
+
EMAIL_LINKS = 9
|
|
596
|
+
EMAIL_DKIM = 10
|
|
597
|
+
DEVICE_COMPLIANCE = 11
|
|
598
|
+
IDENTITY_MFA = 12
|
|
599
|
+
HOST_FIREWALL = 13
|
|
600
|
+
NETWORK_FIREWALL = 15
|
|
601
|
+
INTEL_BELOW_OS = 16
|
|
602
|
+
INTEL_OS = 17
|
|
603
|
+
INTEL_TDT = 18
|
|
604
|
+
INTEL_CHIP = 19
|
|
605
|
+
DISK_ENCRYPTION = 20
|
|
606
|
+
ASR = 21
|
|
607
|
+
|
|
608
|
+
@classmethod
|
|
609
|
+
def _missing_(cls, value):
|
|
610
|
+
return PolicyType.INVALID
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
class Platform(Enum, metaclass=MissingItem):
|
|
614
|
+
INVALID = 0
|
|
615
|
+
WINDOWS = 1
|
|
616
|
+
DARWIN = 2
|
|
617
|
+
LINUX = 3
|
|
618
|
+
ALL = 4
|
|
619
|
+
|
|
620
|
+
@classmethod
|
|
621
|
+
def _missing_(cls, value):
|
|
622
|
+
return Platform.INVALID
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
class NotationType(Enum, metaclass=MissingItem):
|
|
626
|
+
INVALID = -1
|
|
627
|
+
OBJECT_EXCEPTION_CREATED = 1
|
|
628
|
+
OBJECT_EXCEPTION_DELETED = 2
|
|
629
|
+
OBJECT_EXCEPTION_UPDATED = 3
|
|
630
|
+
OBJECT_EXCEPTION_EXPIRED = 4
|
|
631
|
+
POLICY_EXCEPTION_CREATED = 10
|
|
632
|
+
POLICY_EXCEPTION_DELETED = 11
|
|
633
|
+
POLICY_EXCEPTION_UPDATED = 5
|
|
634
|
+
POLICY_EXCEPTION_EXPIRED = 6
|
|
635
|
+
PARTNER_ATTACHED = 7
|
|
636
|
+
PARTNER_DETACHED = 8
|
|
637
|
+
PARTNER_UPDATED = 9
|
|
638
|
+
# Next value: 12
|
|
639
|
+
|
|
640
|
+
@classmethod
|
|
641
|
+
def _missing_(cls, value):
|
|
642
|
+
return NotationType.INVALID
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
class ChartType(Enum, metaclass=MissingItem):
|
|
646
|
+
INVALID = -1
|
|
647
|
+
NUMBER = 1
|
|
648
|
+
COLUMN = 2
|
|
649
|
+
BAR = 3
|
|
650
|
+
PIE = 4
|
|
651
|
+
|
|
652
|
+
@classmethod
|
|
653
|
+
def _missing_(cls, value):
|
|
654
|
+
return ChartType.INVALID
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: prelude-sdk-beta
|
|
3
|
+
Version: 1447
|
|
4
|
+
Summary: For interacting with the Prelude API
|
|
5
|
+
Home-page: https://github.com/preludeorg
|
|
6
|
+
Author: Prelude Research
|
|
7
|
+
Author-email: support@preludesecurity.com
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: requests
|
|
15
|
+
Dynamic: license-file
|
|
16
|
+
|
|
17
|
+
# Prelude SDK
|
|
18
|
+
|
|
19
|
+
Interact with the Prelude Service API via Python.
|
|
20
|
+
|
|
21
|
+
> The prelude-cli utility wraps around this SDK to provide a rich command line experience.
|
|
22
|
+
|
|
23
|
+
Install this package to write your own tooling that works with Build or Detect functionality.
|
|
24
|
+
|
|
25
|
+
- IAM: manage your account
|
|
26
|
+
- Build: write and maintain your collection of security tests
|
|
27
|
+
- Detect: schedule security tests for your endpoints
|
|
28
|
+
|
|
29
|
+
## Quick start
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pip install prelude-sdk
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Documentation
|
|
36
|
+
|
|
37
|
+
TBD
|
|
38
|
+
|
|
39
|
+
## Testing
|
|
40
|
+
|
|
41
|
+
To test the Python SDK and Probes, run the following commands from the python/sdk/ directory:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install -r tests/requirements.txt
|
|
45
|
+
pytest tests --api https://api.preludesecurity.com --email <EMAIL>
|
|
46
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
prelude_sdk_beta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
prelude_sdk_beta/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
prelude_sdk_beta/controllers/build_controller.py,sha256=_O-pPkB22vnvT5nh40TUIv9VmRNX8qBMkS4wqtAdtxg,9099
|
|
4
|
+
prelude_sdk_beta/controllers/detect_controller.py,sha256=aBF_552-DLK6zGg49dNMzqBgtkPB0ksIWWGQr44Agh8,8121
|
|
5
|
+
prelude_sdk_beta/controllers/export_controller.py,sha256=sTbRGmMa0xa7pB8AjSlJgifpXzutPHWw4bJBGygoAc4,862
|
|
6
|
+
prelude_sdk_beta/controllers/generate_controller.py,sha256=gNSr2yV1o8kdTy7heJ9bI31efEKyTKdacIkKl_eRIRg,1319
|
|
7
|
+
prelude_sdk_beta/controllers/http_controller.py,sha256=zomZo8OCWcJ-8zQIlBtukXbnJeqM9PkQn303APojLSA,3160
|
|
8
|
+
prelude_sdk_beta/controllers/iam_controller.py,sha256=sbkq1xzAGefmUnRrAQ811fRBiNzyE7cwgHKFlpG7bd0,8203
|
|
9
|
+
prelude_sdk_beta/controllers/jobs_controller.py,sha256=cYsqXViDycVgUAjN0GuJrNUMaTFC-dUTJSpIYHcfUgs,1165
|
|
10
|
+
prelude_sdk_beta/controllers/partner_controller.py,sha256=bT4gSvGdikm1yMuqUXj_K747K6zJ5FUfwWBxEEtJmoE,4757
|
|
11
|
+
prelude_sdk_beta/controllers/probe_controller.py,sha256=d2Aa74Css1uMNgBKGWqavbkEbXtVcOkYIIWbhDxzLS0,411
|
|
12
|
+
prelude_sdk_beta/controllers/scm_controller.py,sha256=Eqy3PHKa0d6W1l51K4hCB3QT8I60OP06v2nxxqB48To,20246
|
|
13
|
+
prelude_sdk_beta/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
prelude_sdk_beta/models/account.py,sha256=dRKhX6_mrqDTyqyfIsvHFVavcedgZ5hZAIDYVF7YlZI,8962
|
|
15
|
+
prelude_sdk_beta/models/codes.py,sha256=owX-h3DNEU9buAQ8u4_GhgINOIgPNAG01o8E7eyZLuU,18672
|
|
16
|
+
prelude_sdk_beta-1447.dist-info/licenses/LICENSE,sha256=ttdT5omfN6LNmtQoIjUhkkFhz6i44SDMRNwKrbfyTf8,1069
|
|
17
|
+
prelude_sdk_beta-1447.dist-info/METADATA,sha256=XmgyM_ji9M0gWK_N7b2B9yQ6ClO_hcje82MFnLerQsM,1190
|
|
18
|
+
prelude_sdk_beta-1447.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
19
|
+
prelude_sdk_beta-1447.dist-info/top_level.txt,sha256=pqXTtEd5ElvJKoO6HAz232H9FW5j6X7gW4kEEakfSFM,17
|
|
20
|
+
prelude_sdk_beta-1447.dist-info/RECORD,,
|