cartography 0.101.1rc1__py3-none-any.whl → 0.101.1rc2__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.
Potentially problematic release.
This version of cartography might be problematic. Click here for more details.
- cartography/_version.py +1 -1
- cartography/data/indexes.cypher +0 -3
- cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json +0 -5
- cartography/intel/aws/ec2/launch_templates.py +35 -21
- cartography/intel/crowdstrike/__init__.py +17 -5
- cartography/intel/crowdstrike/endpoints.py +12 -44
- cartography/intel/kandji/devices.py +27 -3
- cartography/models/crowdstrike/__init__.py +0 -0
- cartography/models/crowdstrike/hosts.py +49 -0
- cartography/stats.py +1 -1
- {cartography-0.101.1rc1.dist-info → cartography-0.101.1rc2.dist-info}/METADATA +1 -1
- {cartography-0.101.1rc1.dist-info → cartography-0.101.1rc2.dist-info}/RECORD +16 -14
- {cartography-0.101.1rc1.dist-info → cartography-0.101.1rc2.dist-info}/WHEEL +0 -0
- {cartography-0.101.1rc1.dist-info → cartography-0.101.1rc2.dist-info}/entry_points.txt +0 -0
- {cartography-0.101.1rc1.dist-info → cartography-0.101.1rc2.dist-info}/licenses/LICENSE +0 -0
- {cartography-0.101.1rc1.dist-info → cartography-0.101.1rc2.dist-info}/top_level.txt +0 -0
cartography/_version.py
CHANGED
cartography/data/indexes.cypher
CHANGED
|
@@ -65,9 +65,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:AccountAccessKey) ON (n.accesskeyid);
|
|
|
65
65
|
CREATE INDEX IF NOT EXISTS FOR (n:AccountAccessKey) ON (n.lastupdated);
|
|
66
66
|
CREATE INDEX IF NOT EXISTS FOR (n:AutoScalingGroup) ON (n.arn);
|
|
67
67
|
CREATE INDEX IF NOT EXISTS FOR (n:AutoScalingGroup) ON (n.lastupdated);
|
|
68
|
-
CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.id);
|
|
69
|
-
CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.instance_id);
|
|
70
|
-
CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.lastupdated);
|
|
71
68
|
CREATE INDEX IF NOT EXISTS FOR (n:CVE) ON (n.id);
|
|
72
69
|
CREATE INDEX IF NOT EXISTS FOR (n:CVE) ON (n.lastupdated);
|
|
73
70
|
CREATE INDEX IF NOT EXISTS FOR (n:Dependency) ON (n.id);
|
|
@@ -5,11 +5,6 @@
|
|
|
5
5
|
"iterative": true,
|
|
6
6
|
"iterationsize": 100
|
|
7
7
|
},
|
|
8
|
-
{
|
|
9
|
-
"query": "MATCH (h:CrowdstrikeHost) WHERE h.lastupdated <> $UPDATE_TAG WITH h LIMIT $LIMIT_SIZE DETACH DELETE (h)",
|
|
10
|
-
"iterative": true,
|
|
11
|
-
"iterationsize": 100
|
|
12
|
-
},
|
|
13
8
|
{
|
|
14
9
|
"query": "MATCH (:CrowdstrikeFinding)<-[hc:HAS_CVE]-(:SpotlightVulnerability) WHERE hc.lastupdated <> $UPDATE_TAG WITH hc LIMIT $LIMIT_SIZE DELETE (hc)",
|
|
15
10
|
"iterative": true,
|
|
@@ -37,18 +37,37 @@ def get_launch_template_versions(
|
|
|
37
37
|
boto3_session: boto3.session.Session,
|
|
38
38
|
region: str,
|
|
39
39
|
launch_templates: list[dict[str, Any]],
|
|
40
|
-
) -> list[dict[str, Any]]:
|
|
41
|
-
|
|
40
|
+
) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
|
|
41
|
+
found_versions: list[dict[str, Any]] = []
|
|
42
|
+
found_templates: list[dict[str, Any]] = []
|
|
42
43
|
for template in launch_templates:
|
|
43
44
|
launch_template_id = template['LaunchTemplateId']
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
try:
|
|
46
|
+
versions = get_launch_template_versions_by_template(
|
|
47
|
+
boto3_session,
|
|
48
|
+
launch_template_id,
|
|
49
|
+
region,
|
|
50
|
+
)
|
|
51
|
+
# If the call succeeded, the template still exists.
|
|
52
|
+
# Add it and its versions (list might be empty if no versions exist).
|
|
53
|
+
found_templates.append(template)
|
|
54
|
+
found_versions.extend(versions)
|
|
55
|
+
except botocore.exceptions.ClientError as e:
|
|
56
|
+
if e.response['Error']['Code'] == 'InvalidLaunchTemplateId.NotFound':
|
|
57
|
+
logger.warning(
|
|
58
|
+
"Launch template %s no longer exists in region %s, skipping.",
|
|
59
|
+
launch_template_id, region,
|
|
60
|
+
)
|
|
61
|
+
# Skip this template, don't add it or its versions
|
|
62
|
+
continue
|
|
63
|
+
else:
|
|
64
|
+
# Re-raise any other client error
|
|
65
|
+
raise
|
|
66
|
+
|
|
67
|
+
return found_versions, found_templates
|
|
48
68
|
|
|
49
69
|
|
|
50
70
|
@timeit
|
|
51
|
-
@aws_handle_regions
|
|
52
71
|
def get_launch_template_versions_by_template(
|
|
53
72
|
boto3_session: boto3.session.Session,
|
|
54
73
|
launch_template_id: str,
|
|
@@ -57,15 +76,8 @@ def get_launch_template_versions_by_template(
|
|
|
57
76
|
client = boto3_session.client('ec2', region_name=region, config=get_botocore_config())
|
|
58
77
|
v_paginator = client.get_paginator('describe_launch_template_versions')
|
|
59
78
|
template_versions = []
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
template_versions.extend(versions['LaunchTemplateVersions'])
|
|
63
|
-
except botocore.exceptions.ClientError as e:
|
|
64
|
-
error_code = e.response['Error']['Code']
|
|
65
|
-
if error_code == 'InvalidLaunchTemplateId.NotFound':
|
|
66
|
-
logger.warning("Launch template %s no longer exists in region %s", launch_template_id, region)
|
|
67
|
-
else:
|
|
68
|
-
raise
|
|
79
|
+
for versions_page in v_paginator.paginate(LaunchTemplateId=launch_template_id):
|
|
80
|
+
template_versions.extend(versions_page['LaunchTemplateVersions'])
|
|
69
81
|
return template_versions
|
|
70
82
|
|
|
71
83
|
|
|
@@ -164,10 +176,12 @@ def sync_ec2_launch_templates(
|
|
|
164
176
|
for region in regions:
|
|
165
177
|
logger.info(f"Syncing launch templates for region '{region}' in account '{current_aws_account_id}'.")
|
|
166
178
|
templates = get_launch_templates(boto3_session, region)
|
|
167
|
-
versions = get_launch_template_versions(boto3_session, region, templates)
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
179
|
+
versions, found_templates = get_launch_template_versions(boto3_session, region, templates)
|
|
180
|
+
|
|
181
|
+
# Transform and load only the templates that were found to exist
|
|
182
|
+
transformed_templates = transform_launch_templates(found_templates)
|
|
183
|
+
load_launch_templates(neo4j_session, transformed_templates, region, current_aws_account_id, update_tag)
|
|
184
|
+
transformed_versions = transform_launch_template_versions(versions)
|
|
185
|
+
load_launch_template_versions(neo4j_session, transformed_versions, region, current_aws_account_id, update_tag)
|
|
172
186
|
|
|
173
187
|
cleanup(neo4j_session, common_job_parameters)
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
from typing import Any
|
|
2
3
|
|
|
3
4
|
import neo4j
|
|
4
5
|
|
|
5
6
|
from cartography.config import Config
|
|
7
|
+
from cartography.graph.job import GraphJob
|
|
6
8
|
from cartography.intel.crowdstrike.endpoints import sync_hosts
|
|
7
9
|
from cartography.intel.crowdstrike.spotlight import sync_vulnerabilities
|
|
8
10
|
from cartography.intel.crowdstrike.util import get_authorization
|
|
11
|
+
from cartography.models.crowdstrike.hosts import CrowdstrikeHostSchema
|
|
9
12
|
from cartography.stats import get_stats_client
|
|
10
13
|
from cartography.util import merge_module_sync_metadata
|
|
11
14
|
from cartography.util import run_cleanup_job
|
|
@@ -50,11 +53,7 @@ def start_crowdstrike_ingestion(
|
|
|
50
53
|
config.update_tag,
|
|
51
54
|
authorization,
|
|
52
55
|
)
|
|
53
|
-
|
|
54
|
-
"crowdstrike_import_cleanup.json",
|
|
55
|
-
neo4j_session,
|
|
56
|
-
common_job_parameters,
|
|
57
|
-
)
|
|
56
|
+
cleanup(neo4j_session, common_job_parameters)
|
|
58
57
|
|
|
59
58
|
group_id = "public"
|
|
60
59
|
if config.crowdstrike_api_url:
|
|
@@ -67,3 +66,16 @@ def start_crowdstrike_ingestion(
|
|
|
67
66
|
update_tag=config.update_tag,
|
|
68
67
|
stat_handler=stat_handler,
|
|
69
68
|
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@timeit
|
|
72
|
+
def cleanup(neo4j_session: neo4j.Session, common_job_parameters: dict[str, Any]) -> None:
|
|
73
|
+
logger.info("Running Crowdstrike cleanup")
|
|
74
|
+
GraphJob.from_node_schema(CrowdstrikeHostSchema(), common_job_parameters).run(neo4j_session)
|
|
75
|
+
|
|
76
|
+
# Cleanup other crowdstrike assets not handled by the data model
|
|
77
|
+
run_cleanup_job(
|
|
78
|
+
"crowdstrike_import_cleanup.json",
|
|
79
|
+
neo4j_session,
|
|
80
|
+
common_job_parameters,
|
|
81
|
+
)
|
|
@@ -6,6 +6,8 @@ import neo4j
|
|
|
6
6
|
from falconpy.hosts import Hosts
|
|
7
7
|
from falconpy.oauth2 import OAuth2
|
|
8
8
|
|
|
9
|
+
from cartography.client.core.tx import load
|
|
10
|
+
from cartography.models.crowdstrike.hosts import CrowdstrikeHostSchema
|
|
9
11
|
from cartography.util import timeit
|
|
10
12
|
|
|
11
13
|
logger = logging.getLogger(__name__)
|
|
@@ -24,55 +26,21 @@ def sync_hosts(
|
|
|
24
26
|
load_host_data(neo4j_session, host_data, update_tag)
|
|
25
27
|
|
|
26
28
|
|
|
29
|
+
@timeit
|
|
27
30
|
def load_host_data(
|
|
28
|
-
neo4j_session: neo4j.Session,
|
|
31
|
+
neo4j_session: neo4j.Session,
|
|
32
|
+
data: List[Dict],
|
|
33
|
+
update_tag: int,
|
|
29
34
|
) -> None:
|
|
30
35
|
"""
|
|
31
|
-
|
|
32
|
-
"""
|
|
33
|
-
ingestion_cypher_query = """
|
|
34
|
-
UNWIND $Hosts AS host
|
|
35
|
-
MERGE (h:CrowdstrikeHost{id: host.device_id})
|
|
36
|
-
ON CREATE SET h.cid = host.cid,
|
|
37
|
-
h.instance_id = host.instance_id,
|
|
38
|
-
h.serial_number = host.serial_number,
|
|
39
|
-
h.firstseen = timestamp()
|
|
40
|
-
SET h.status = host.status,
|
|
41
|
-
h.hostname = host.hostname,
|
|
42
|
-
h.machine_domain = host.machine_domain,
|
|
43
|
-
h.crowdstrike_first_seen = host.first_seen,
|
|
44
|
-
h.crowdstrike_last_seen = host.last_seen,
|
|
45
|
-
h.local_ip = host.local_ip,
|
|
46
|
-
h.external_ip = host.external_ip,
|
|
47
|
-
h.cpu_signature = host.cpu_signature,
|
|
48
|
-
h.bios_manufacturer = host.bios_manufacturer,
|
|
49
|
-
h.bios_version = host.bios_version,
|
|
50
|
-
h.mac_address = host.mac_address,
|
|
51
|
-
h.os_version = host.os_version,
|
|
52
|
-
h.os_build = host.os_build,
|
|
53
|
-
h.platform_id = host.platform_id,
|
|
54
|
-
h.platform_name = host.platform_name,
|
|
55
|
-
h.service_provider = host.service_provider,
|
|
56
|
-
h.service_provider_account_id = host.service_provider_account_id,
|
|
57
|
-
h.agent_version = host.agent_version,
|
|
58
|
-
h.system_manufacturer = host.system_manufacturer,
|
|
59
|
-
h.system_product_name = host.system_product_name,
|
|
60
|
-
h.product_type = host.product_type,
|
|
61
|
-
h.product_type_desc = host.product_type_desc,
|
|
62
|
-
h.provision_status = host.provision_status,
|
|
63
|
-
h.reduced_functionality_mode = host.reduced_functionality_mode,
|
|
64
|
-
h.kernel_version = host.kernel_version,
|
|
65
|
-
h.major_version = host.major_version,
|
|
66
|
-
h.minor_version = host.minor_version,
|
|
67
|
-
h.tags = host.tags,
|
|
68
|
-
h.modified_timestamp = host.modified_timestamp,
|
|
69
|
-
h.lastupdated = $update_tag
|
|
36
|
+
Load Crowdstrike host data into Neo4j.
|
|
70
37
|
"""
|
|
71
38
|
logger.info(f"Loading {len(data)} crowdstrike hosts.")
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
39
|
+
load(
|
|
40
|
+
neo4j_session,
|
|
41
|
+
CrowdstrikeHostSchema(),
|
|
42
|
+
data,
|
|
43
|
+
lastupdated=update_tag,
|
|
76
44
|
)
|
|
77
45
|
|
|
78
46
|
|
|
@@ -25,10 +25,34 @@ def get(kandji_base_uri: str, kandji_token: str) -> List[Dict[str, Any]]:
|
|
|
25
25
|
'Authorization': f'Bearer {kandji_token}',
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
offset = 0
|
|
29
|
+
limit = 300
|
|
30
|
+
params: dict[str, str | int] = {
|
|
31
|
+
"sort": "serial_number",
|
|
32
|
+
"limit": limit,
|
|
33
|
+
"offset": offset,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
devices: List[Dict[str, Any]] = []
|
|
28
37
|
session = Session()
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
38
|
+
while True:
|
|
39
|
+
logger.debug("Kandji device offset: %s", offset)
|
|
40
|
+
|
|
41
|
+
params["offset"] = offset
|
|
42
|
+
response = session.get(api_endpoint, headers=headers, timeout=_TIMEOUT, params=params)
|
|
43
|
+
response.raise_for_status()
|
|
44
|
+
|
|
45
|
+
result = response.json()
|
|
46
|
+
# If no more result, we are done
|
|
47
|
+
if len(result) == 0:
|
|
48
|
+
break
|
|
49
|
+
|
|
50
|
+
devices.extend(result)
|
|
51
|
+
|
|
52
|
+
offset += limit
|
|
53
|
+
|
|
54
|
+
logger.debug("Kandji device count: %d", len(devices))
|
|
55
|
+
return devices
|
|
32
56
|
|
|
33
57
|
|
|
34
58
|
@timeit
|
|
File without changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from cartography.models.core.common import PropertyRef
|
|
4
|
+
from cartography.models.core.nodes import CartographyNodeProperties
|
|
5
|
+
from cartography.models.core.nodes import CartographyNodeSchema
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass(frozen=True)
|
|
9
|
+
class CrowdstrikeHostNodeProperties(CartographyNodeProperties):
|
|
10
|
+
id: PropertyRef = PropertyRef('device_id')
|
|
11
|
+
cid: PropertyRef = PropertyRef('cid')
|
|
12
|
+
instance_id: PropertyRef = PropertyRef('instance_id', extra_index=True)
|
|
13
|
+
serial_number: PropertyRef = PropertyRef('serial_number', extra_index=True)
|
|
14
|
+
status: PropertyRef = PropertyRef('status')
|
|
15
|
+
hostname: PropertyRef = PropertyRef('hostname')
|
|
16
|
+
machine_domain: PropertyRef = PropertyRef('machine_domain')
|
|
17
|
+
crowdstrike_first_seen: PropertyRef = PropertyRef('first_seen')
|
|
18
|
+
crowdstrike_last_seen: PropertyRef = PropertyRef('last_seen')
|
|
19
|
+
local_ip: PropertyRef = PropertyRef('local_ip')
|
|
20
|
+
external_ip: PropertyRef = PropertyRef('external_ip')
|
|
21
|
+
cpu_signature: PropertyRef = PropertyRef('cpu_signature')
|
|
22
|
+
bios_manufacturer: PropertyRef = PropertyRef('bios_manufacturer')
|
|
23
|
+
bios_version: PropertyRef = PropertyRef('bios_version')
|
|
24
|
+
mac_address: PropertyRef = PropertyRef('mac_address')
|
|
25
|
+
os_version: PropertyRef = PropertyRef('os_version')
|
|
26
|
+
os_build: PropertyRef = PropertyRef('os_build')
|
|
27
|
+
platform_id: PropertyRef = PropertyRef('platform_id')
|
|
28
|
+
platform_name: PropertyRef = PropertyRef('platform_name')
|
|
29
|
+
service_provider: PropertyRef = PropertyRef('service_provider')
|
|
30
|
+
service_provider_account_id: PropertyRef = PropertyRef('service_provider_account_id')
|
|
31
|
+
agent_version: PropertyRef = PropertyRef('agent_version')
|
|
32
|
+
system_manufacturer: PropertyRef = PropertyRef('system_manufacturer')
|
|
33
|
+
system_product_name: PropertyRef = PropertyRef('system_product_name')
|
|
34
|
+
product_type: PropertyRef = PropertyRef('product_type')
|
|
35
|
+
product_type_desc: PropertyRef = PropertyRef('product_type_desc')
|
|
36
|
+
provision_status: PropertyRef = PropertyRef('provision_status')
|
|
37
|
+
reduced_functionality_mode: PropertyRef = PropertyRef('reduced_functionality_mode')
|
|
38
|
+
kernel_version: PropertyRef = PropertyRef('kernel_version')
|
|
39
|
+
major_version: PropertyRef = PropertyRef('major_version')
|
|
40
|
+
minor_version: PropertyRef = PropertyRef('minor_version')
|
|
41
|
+
tags: PropertyRef = PropertyRef('tags')
|
|
42
|
+
modified_timestamp: PropertyRef = PropertyRef('modified_timestamp')
|
|
43
|
+
lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@dataclass(frozen=True)
|
|
47
|
+
class CrowdstrikeHostSchema(CartographyNodeSchema):
|
|
48
|
+
label: str = 'CrowdstrikeHost'
|
|
49
|
+
properties: CrowdstrikeHostNodeProperties = CrowdstrikeHostNodeProperties()
|
cartography/stats.py
CHANGED
|
@@ -97,7 +97,7 @@ def set_stats_client(stats_client: StatsClient) -> None:
|
|
|
97
97
|
"""
|
|
98
98
|
This is used to set the module level stats client configured to talk with a statsd host
|
|
99
99
|
"""
|
|
100
|
-
global _scoped_stats_client
|
|
100
|
+
global _scoped_stats_client # noqa: F824
|
|
101
101
|
_scoped_stats_client.set_stats_client(stats_client)
|
|
102
102
|
|
|
103
103
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
cartography/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
cartography/__main__.py,sha256=JftXT_nUPkqcEh8uxCCT4n-OyHYqbldEgrDS-4ygy0U,101
|
|
3
|
-
cartography/_version.py,sha256=
|
|
3
|
+
cartography/_version.py,sha256=lOruTfTM2wWzcS6Tb58hcXZGJqOXqfj431-1AWYroHk,518
|
|
4
4
|
cartography/cli.py,sha256=-77DOKUQn3N-TDIi55V4RHLb3k36ZGZ64o1XgiT0qmE,33370
|
|
5
5
|
cartography/config.py,sha256=ZcadsKmooAkti9Kv0eDl8Ec1PcZDu3lWobtNaCnwY3k,11872
|
|
6
6
|
cartography/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
cartography/stats.py,sha256
|
|
7
|
+
cartography/stats.py,sha256=-KiqrNfUe_39z9TKAQamJwKs5XePnzXscEJocAuNiJs,4420
|
|
8
8
|
cartography/sync.py,sha256=ziD63T_774gXSuD5zdz6fLGvv1Kt2ntQySSVbmcCZb8,9708
|
|
9
9
|
cartography/util.py,sha256=VZgiHcAprn3nGzItee4_TggfsGWxWPTkLN-2MIhYUqM,14999
|
|
10
10
|
cartography/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -13,7 +13,7 @@ cartography/client/aws/iam.py,sha256=dYsGikc36DEsSeR2XVOVFFUDwuU9yWj_EVkpgVYCFgM
|
|
|
13
13
|
cartography/client/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
14
|
cartography/client/core/tx.py,sha256=55Cf9DJGHHXQk4HmPOdFwr1eh9Pr1nzmIvs4XoCVr0g,10892
|
|
15
15
|
cartography/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
cartography/data/indexes.cypher,sha256=
|
|
16
|
+
cartography/data/indexes.cypher,sha256=t5HfeNoMRswsOEaZN3vy8XuJEbbXWOQ06l-94vTnHCo,26742
|
|
17
17
|
cartography/data/permission_relationships.yaml,sha256=RuKGGc_3ZUQ7ag0MssB8k_zaonCkVM5E8I_svBWTmGc,969
|
|
18
18
|
cartography/data/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
19
|
cartography/data/jobs/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -85,7 +85,7 @@ cartography/data/jobs/cleanup/azure_sql_server_cleanup.json,sha256=97I2jIMBkqR3a
|
|
|
85
85
|
cartography/data/jobs/cleanup/azure_storage_account_cleanup.json,sha256=XZdjKDOjTcvn9XYScFzHts6cbtYvXETaU142N_R2qlY,5431
|
|
86
86
|
cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json,sha256=bowUBCjHYlC4Xd60lv33sxRi-bv1wiT5gAOStaHMX4k,430
|
|
87
87
|
cartography/data/jobs/cleanup/azure_tenant_cleanup.json,sha256=jcjmZH6kfVGZ9q68rfvnroF0kNNHZ2uTZQ17Rmd4FH0,220
|
|
88
|
-
cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json,sha256=
|
|
88
|
+
cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json,sha256=mkC96aKS_m7THGQ3LOE_ROXxIk11moK6Fd5cSPkcYsA,1239
|
|
89
89
|
cartography/data/jobs/cleanup/digitalocean_droplet_cleanup.json,sha256=f26TdPUPYnIp45ipPys5M6VVfConUZySIbkgSr3iQno,703
|
|
90
90
|
cartography/data/jobs/cleanup/digitalocean_project_cleanup.json,sha256=5mo9vPshCdUZfgTWd_22_TLSyfe6hd41u7z-B8H1qgY,702
|
|
91
91
|
cartography/data/jobs/cleanup/gcp_compute_firewall_cleanup.json,sha256=FVNJ8EPaPhmQ_sh4vyTdMyEgs6Y-DIoFTdWJaELgz44,1904
|
|
@@ -174,7 +174,7 @@ cartography/intel/aws/ec2/images.py,sha256=SLoxcy_PQgNomVMDMdutm0zXJCOLosiHJlN63
|
|
|
174
174
|
cartography/intel/aws/ec2/instances.py,sha256=uI8eVJmeEybS8y_T8CVKAkwxJyVDCH7sbuEJYeWGSWY,12468
|
|
175
175
|
cartography/intel/aws/ec2/internet_gateways.py,sha256=dI-4-85_3DGGZZBcY_DN6XqESx9P26S6jKok314lcnQ,2883
|
|
176
176
|
cartography/intel/aws/ec2/key_pairs.py,sha256=g4imIo_5jk8upq9J4--erg-OZXG2i3cJMe6SnNCYj9s,2635
|
|
177
|
-
cartography/intel/aws/ec2/launch_templates.py,sha256=
|
|
177
|
+
cartography/intel/aws/ec2/launch_templates.py,sha256=Bv1mD5-44X1MkCh1Hif-uteozadfdgdQtnr9eX_kzjQ,6910
|
|
178
178
|
cartography/intel/aws/ec2/load_balancer_v2s.py,sha256=95FfQQn740gexINIHDJizOM4OKzRtQT_y2XQMipQ5Dg,8661
|
|
179
179
|
cartography/intel/aws/ec2/load_balancers.py,sha256=1GwErzGqi3BKCARqfGJcD_r_D84rFKVy5kNMas9jAok,6756
|
|
180
180
|
cartography/intel/aws/ec2/network_acls.py,sha256=_UiOx79OxcqH0ecRjcVMglAzz5XJ4aVYLlv6dl_ism4,6809
|
|
@@ -202,8 +202,8 @@ cartography/intel/azure/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
202
202
|
cartography/intel/azure/util/credentials.py,sha256=99PjTs0vZ2iu0tHD7TohN1VJYjuXYstfMg27F4CE0xU,7416
|
|
203
203
|
cartography/intel/bigfix/__init__.py,sha256=3LoDCm01VNNaDRGsRiykJm1GJgUQ8zI1HO6NodLFVIA,1058
|
|
204
204
|
cartography/intel/bigfix/computers.py,sha256=HAwA-muDBLu2xkFFL2Ae-xjCH1gxKKwxGMZM4BE_Qdo,5909
|
|
205
|
-
cartography/intel/crowdstrike/__init__.py,sha256=
|
|
206
|
-
cartography/intel/crowdstrike/endpoints.py,sha256=
|
|
205
|
+
cartography/intel/crowdstrike/__init__.py,sha256=qDFCtNzUSnvMZFFoLjRAPK3pbKpIO6BaerY3bDyEASc,2397
|
|
206
|
+
cartography/intel/crowdstrike/endpoints.py,sha256=MVuUw7yXesJmQL79lbPxOnHjO48lD3WCH5WzL5asKUU,2144
|
|
207
207
|
cartography/intel/crowdstrike/spotlight.py,sha256=yNhj44-RYF6ubck-hHMKhKiNU0fCfhQf4Oagopc31EM,4754
|
|
208
208
|
cartography/intel/crowdstrike/util.py,sha256=gfJ6Ptr6YdbBS9Qj9a_-Jc-IJroADDRcXqjh5TW0qXE,277
|
|
209
209
|
cartography/intel/cve/__init__.py,sha256=u9mv5O_qkSLmdhLhLm1qbwmhoeLQ3A3fQTjNyLQpEyI,3656
|
|
@@ -238,7 +238,7 @@ cartography/intel/jamf/__init__.py,sha256=Nof-LrUeevoieo6oP2GyfTwx8k5TUIgreW6hSj
|
|
|
238
238
|
cartography/intel/jamf/computers.py,sha256=EfjlupQ-9HYTjOrmuwrGuJDy9ApAnJvk8WrYcp6_Jkk,1673
|
|
239
239
|
cartography/intel/jamf/util.py,sha256=EAyP8VpOY2uAvW3HtX6r7qORNjGa1Tr3fuqezuLQ0j4,1017
|
|
240
240
|
cartography/intel/kandji/__init__.py,sha256=Y38bVRmrGVJRy0mSof8xU-cuEyJ7N_oI7KekYjYyuiQ,1076
|
|
241
|
-
cartography/intel/kandji/devices.py,sha256=
|
|
241
|
+
cartography/intel/kandji/devices.py,sha256=bRePUC0xFeaST3PQdJ6Af2MdTeFZuIVq4r7CY5YEid0,2797
|
|
242
242
|
cartography/intel/kubernetes/__init__.py,sha256=jaOTEanWnTrYvcBN1XUC5oqBhz1AJbFmzoT9uu_VBSg,1481
|
|
243
243
|
cartography/intel/kubernetes/namespaces.py,sha256=6o-FgAX_Ai5NCj2xOWM-RNWEvn0gZjVQnZSGCJlcIhw,2710
|
|
244
244
|
cartography/intel/kubernetes/pods.py,sha256=aX3pP_vs6icMe2vK4vgMak6HZ64okhRzoihpkPHscGU,4502
|
|
@@ -329,6 +329,8 @@ cartography/models/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
329
329
|
cartography/models/core/common.py,sha256=Bk0dCBkO9Udj9v4e8WE9mgBGaZTI170m9QpoiiYoz48,6206
|
|
330
330
|
cartography/models/core/nodes.py,sha256=h5dwBOk_a2uCHZWeQz3pidr7gkqMKf7buIZgl6M1Ox4,3699
|
|
331
331
|
cartography/models/core/relationships.py,sha256=6AwXvk0dq48BxqyxBpHyBXZ3dJNm65t1y4vNg4n25uA,5103
|
|
332
|
+
cartography/models/crowdstrike/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
333
|
+
cartography/models/crowdstrike/hosts.py,sha256=5PiDAhCPWDUd9kE61FliaPzsuIQBZRIQ87eHMgQF_M4,2672
|
|
332
334
|
cartography/models/cve/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
333
335
|
cartography/models/cve/cve.py,sha256=zaCLcGuEL2EnScExjbmpPBNVBivMBKnnRajCYL0LJFE,3720
|
|
334
336
|
cartography/models/cve/cve_feed.py,sha256=A_h9ET2vQYGpgMr8_--iqdQfF5ZyUNM6aQDruUuA5OU,740
|
|
@@ -360,9 +362,9 @@ cartography/models/snipeit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
|
360
362
|
cartography/models/snipeit/asset.py,sha256=FyRAaeXuZjMy0eUQcSDFcgEAF5lbLMlvqp1Tv9d3Lv4,3238
|
|
361
363
|
cartography/models/snipeit/tenant.py,sha256=p4rFnpNNuF1W5ilGBbexDaETWTwavfb38RcQGoImkQI,679
|
|
362
364
|
cartography/models/snipeit/user.py,sha256=MsB4MiCVNTH6JpESime7cOkB89autZOXQpL6Z0l7L6o,2113
|
|
363
|
-
cartography-0.101.
|
|
364
|
-
cartography-0.101.
|
|
365
|
-
cartography-0.101.
|
|
366
|
-
cartography-0.101.
|
|
367
|
-
cartography-0.101.
|
|
368
|
-
cartography-0.101.
|
|
365
|
+
cartography-0.101.1rc2.dist-info/licenses/LICENSE,sha256=kvLEBRYaQ1RvUni6y7Ti9uHeooqnjPoo6n_-0JO1ETc,11351
|
|
366
|
+
cartography-0.101.1rc2.dist-info/METADATA,sha256=EJwfITVKkdw-MJYwpKuAVYQ9uBgh3RECunXMu3GiyK8,11909
|
|
367
|
+
cartography-0.101.1rc2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
368
|
+
cartography-0.101.1rc2.dist-info/entry_points.txt,sha256=GVIAWD0o0_K077qMA_k1oZU4v-M0a8GLKGJR8tZ-qH8,112
|
|
369
|
+
cartography-0.101.1rc2.dist-info/top_level.txt,sha256=BHqsNJQiI6Q72DeypC1IINQJE59SLhU4nllbQjgJi9g,12
|
|
370
|
+
cartography-0.101.1rc2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|