dissect.target 3.16.dev37__py3-none-any.whl → 3.16.dev39__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.
- dissect/target/loaders/velociraptor.py +14 -6
- dissect/target/plugins/apps/vpn/wireguard.py +31 -24
- {dissect.target-3.16.dev37.dist-info → dissect.target-3.16.dev39.dist-info}/METADATA +1 -1
- {dissect.target-3.16.dev37.dist-info → dissect.target-3.16.dev39.dist-info}/RECORD +9 -9
- {dissect.target-3.16.dev37.dist-info → dissect.target-3.16.dev39.dist-info}/COPYRIGHT +0 -0
- {dissect.target-3.16.dev37.dist-info → dissect.target-3.16.dev39.dist-info}/LICENSE +0 -0
- {dissect.target-3.16.dev37.dist-info → dissect.target-3.16.dev39.dist-info}/WHEEL +0 -0
- {dissect.target-3.16.dev37.dist-info → dissect.target-3.16.dev39.dist-info}/entry_points.txt +0 -0
- {dissect.target-3.16.dev37.dist-info → dissect.target-3.16.dev39.dist-info}/top_level.txt +0 -0
@@ -19,12 +19,6 @@ WINDOWS_ACCESSORS = ["mft", "ntfs", "lazy_ntfs", "ntfs_vss", "auto"]
|
|
19
19
|
|
20
20
|
|
21
21
|
def find_fs_directories(path: Path) -> tuple[Optional[OperatingSystem], Optional[list[Path]]]:
|
22
|
-
# As of Velociraptor version 0.7.0 the structure of the Velociraptor Offline Collector varies by operating system.
|
23
|
-
# Generic.Collectors.File (Unix) uses the accessors file and auto.
|
24
|
-
# Generic.Collectors.File (Windows) and Windows.KapeFiles.Targets (Windows) uses the accessors
|
25
|
-
# mft, ntfs, lazy_ntfs, ntfs_vss and auto. The loader only supports a collection where a single accessor is used.
|
26
|
-
# For Windows usage of the ntfs_vss accessor can be forced by configuring VSSAnalysisAge to be greater than 0.
|
27
|
-
|
28
22
|
fs_root = path.joinpath(FILESYSTEMS_ROOT)
|
29
23
|
|
30
24
|
# Unix
|
@@ -43,6 +37,9 @@ def find_fs_directories(path: Path) -> tuple[Optional[OperatingSystem], Optional
|
|
43
37
|
if accessor_root.exists():
|
44
38
|
# If the accessor directory exists, assume all the subdirectories are volumes
|
45
39
|
for volume in accessor_root.iterdir():
|
40
|
+
if not volume.is_dir():
|
41
|
+
continue
|
42
|
+
|
46
43
|
# https://github.com/Velocidex/velociraptor/blob/87368e7cc678144592a1614bb3bbd0a0f900ded9/accessors/ntfs/vss.go#L82
|
47
44
|
if "HarddiskVolumeShadowCopy" in volume.name:
|
48
45
|
vss_volumes.add(volume)
|
@@ -60,6 +57,17 @@ def find_fs_directories(path: Path) -> tuple[Optional[OperatingSystem], Optional
|
|
60
57
|
class VelociraptorLoader(DirLoader):
|
61
58
|
"""Load Rapid7 Velociraptor forensic image files.
|
62
59
|
|
60
|
+
As of Velociraptor version 0.7.0 the structure of the Velociraptor Offline Collector varies by operating system.
|
61
|
+
Generic.Collectors.File (Unix) uses the accessors file and auto. The loader supports the following configuration::
|
62
|
+
|
63
|
+
{"Generic.Collectors.File":{"Root":"/","collectionSpec":"Glob\\netc/**\\nvar/log/**"}}
|
64
|
+
|
65
|
+
Generic.Collectors.File (Windows) and Windows.KapeFiles.Targets (Windows) uses the accessors mft, ntfs, lazy_ntfs,
|
66
|
+
ntfs_vss and auto. The loader only supports a collection where a single accessor is used, which can be forced by
|
67
|
+
using the following configuration::
|
68
|
+
|
69
|
+
{"Windows.KapeFiles.Targets":{"VSSAnalysisAge":"1000","_SANS_Triage":"Y"}}
|
70
|
+
|
63
71
|
References:
|
64
72
|
- https://www.rapid7.com/products/velociraptor/
|
65
73
|
- https://docs.velociraptor.app/
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import re
|
2
2
|
from collections import OrderedDict
|
3
3
|
from configparser import ConfigParser
|
4
|
-
from
|
4
|
+
from functools import partial
|
5
5
|
from pathlib import Path
|
6
6
|
from typing import Iterator, Union
|
7
7
|
|
@@ -34,7 +34,7 @@ WireGuardPeerRecord = TargetRecordDescriptor(
|
|
34
34
|
("string", "name"),
|
35
35
|
("string", "public_key"),
|
36
36
|
("string", "pre_shared_key"),
|
37
|
-
("net.ipnetwork", "allowed_ips"),
|
37
|
+
("net.ipnetwork[]", "allowed_ips"),
|
38
38
|
("string", "endpoint"),
|
39
39
|
("varint", "persistent_keep_alive"),
|
40
40
|
("string", "source"),
|
@@ -102,37 +102,42 @@ class WireGuardPlugin(Plugin):
|
|
102
102
|
|
103
103
|
config = _parse_config(config_buf)
|
104
104
|
|
105
|
-
|
105
|
+
# Set up an iterator to go through all the sections and pre-set the fallback
|
106
|
+
config_iterator = ((section, partial(config.get, section, fallback=None)) for section in config.sections())
|
107
|
+
|
108
|
+
for section, config_dict in config_iterator:
|
106
109
|
if "Interface" in section:
|
107
|
-
if address :=
|
110
|
+
if address := config_dict("Address"):
|
108
111
|
address = address.split("/")[0]
|
109
|
-
|
110
|
-
name = self.TUNNEL_NAME_RE.sub("", name)
|
112
|
+
|
111
113
|
yield WireGuardInterfaceRecord(
|
112
|
-
name=
|
114
|
+
name=config_path.stem,
|
113
115
|
address=address,
|
114
|
-
listen_port=
|
115
|
-
private_key=
|
116
|
-
fw_mark=
|
117
|
-
dns=
|
118
|
-
table=
|
119
|
-
mtu=
|
120
|
-
preup=
|
121
|
-
postup=
|
122
|
-
predown=
|
123
|
-
postdown=
|
116
|
+
listen_port=config_dict("ListenPort"),
|
117
|
+
private_key=config_dict("PrivateKey"),
|
118
|
+
fw_mark=config_dict("FwMark"),
|
119
|
+
dns=config_dict("DNS"),
|
120
|
+
table=config_dict("Table"),
|
121
|
+
mtu=config_dict("MTU"),
|
122
|
+
preup=config_dict("PreUp"),
|
123
|
+
postup=config_dict("PostUp"),
|
124
|
+
predown=config_dict("PreDown"),
|
125
|
+
postdown=config_dict("PostDown"),
|
124
126
|
source=config_path,
|
125
127
|
_target=self.target,
|
126
128
|
)
|
127
129
|
|
128
130
|
if "Peer" in section:
|
131
|
+
if allowed_ips := config_dict("AllowedIPs"):
|
132
|
+
allowed_ips = [value.strip() for value in allowed_ips.split(",")]
|
133
|
+
|
129
134
|
yield WireGuardPeerRecord(
|
130
|
-
name=
|
131
|
-
public_key=
|
132
|
-
pre_shared_key=
|
133
|
-
allowed_ips=
|
134
|
-
endpoint=
|
135
|
-
persistent_keep_alive=
|
135
|
+
name=config_dict("Name"),
|
136
|
+
public_key=config_dict("PublicKey"),
|
137
|
+
pre_shared_key=config_dict("PreSharedKey"),
|
138
|
+
allowed_ips=allowed_ips,
|
139
|
+
endpoint=config_dict("Endpoint"),
|
140
|
+
persistent_keep_alive=config_dict("PersistentKeepAlive"),
|
136
141
|
source=config_path,
|
137
142
|
_target=self.target,
|
138
143
|
)
|
@@ -148,6 +153,8 @@ def _parse_config(content: str) -> ConfigParser:
|
|
148
153
|
"""
|
149
154
|
|
150
155
|
cp = ConfigParser(defaults=None, dict_type=MultiDict, strict=False)
|
156
|
+
# Set to use str so it doesn't do any lower operation on the keys.
|
157
|
+
cp.optionxform = str
|
151
158
|
cp.read_string(content)
|
152
159
|
return cp
|
153
160
|
|
@@ -158,7 +165,7 @@ class MultiDict(OrderedDict):
|
|
158
165
|
super().__init__(*args, **kwargs)
|
159
166
|
|
160
167
|
def __setitem__(self, key, val):
|
161
|
-
if isinstance(val, dict) and (key
|
168
|
+
if isinstance(val, dict) and (key in ["Peer", "Interface"]):
|
162
169
|
self._unique += 1
|
163
170
|
key += str(self._unique)
|
164
171
|
super().__setitem__(key, val)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dissect.target
|
3
|
-
Version: 3.16.
|
3
|
+
Version: 3.16.dev39
|
4
4
|
Summary: This module ties all other Dissect modules together, it provides a programming API and command line tools which allow easy access to various data sources inside disk images or file collections (a.k.a. targets)
|
5
5
|
Author-email: Dissect Team <dissect@fox-it.com>
|
6
6
|
License: Affero General Public License v3
|
@@ -102,7 +102,7 @@ dissect/target/loaders/targetd.py,sha256=sfbn2_j3il2G-rPywAoNT5YPtD5KmKkmBv1zrPD
|
|
102
102
|
dissect/target/loaders/utm.py,sha256=e5x5ZI3HeL0STh4S-CaQb68Rnug4SVZR9zlmHaGFj0M,978
|
103
103
|
dissect/target/loaders/vb.py,sha256=CnQcn7bAkMzIB1y-lWLtPPXdIVsyeDaT6hTZEurjkV4,2072
|
104
104
|
dissect/target/loaders/vbox.py,sha256=8JD7D8iAY9JRvTHsrosp5ZMsZezuLhZ10Zt8sEL7KBI,732
|
105
|
-
dissect/target/loaders/velociraptor.py,sha256=
|
105
|
+
dissect/target/loaders/velociraptor.py,sha256=WPnDIWANIIUPgc-kfXSjXptCQ2pkcy1jdkEydiOvs58,4613
|
106
106
|
dissect/target/loaders/vma.py,sha256=AAY5-s-nz6wgvmcFkptJD7nNXhpkdf6SqEKVOrJaIKs,644
|
107
107
|
dissect/target/loaders/vmwarevm.py,sha256=1MlKoIuWSwpYmpuLxDuVacvaYHUhAGO1KgZxzrc4fyg,428
|
108
108
|
dissect/target/loaders/vmx.py,sha256=o1rYYKu6ReleqqHf2aeRcNrmoRcngWZNhz1h7GlmggQ,962
|
@@ -137,7 +137,7 @@ dissect/target/plugins/apps/ssh/putty.py,sha256=N8ssjutUVN50JNA5fEIVISbP5sJ7bGTF
|
|
137
137
|
dissect/target/plugins/apps/ssh/ssh.py,sha256=uCaoWlT2bgKLUHA1aL6XymJDWJ8JmLsN8PB1C66eidY,1409
|
138
138
|
dissect/target/plugins/apps/vpn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
139
139
|
dissect/target/plugins/apps/vpn/openvpn.py,sha256=NZeFSFgGAifevGIQBusdbBRFOPxu0584Th8rKE-XSus,6875
|
140
|
-
dissect/target/plugins/apps/vpn/wireguard.py,sha256=
|
140
|
+
dissect/target/plugins/apps/vpn/wireguard.py,sha256=SoAMED_bwWJQ3nci5qEY-qV4wJKSSDZQ8K7DoJRYq0k,6521
|
141
141
|
dissect/target/plugins/apps/webhosting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
142
142
|
dissect/target/plugins/apps/webhosting/cpanel.py,sha256=OeFQnu9GmpffIlFyK-AR2Qf8tjyMhazWEAUyccDU5y0,2979
|
143
143
|
dissect/target/plugins/apps/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -332,10 +332,10 @@ dissect/target/volumes/luks.py,sha256=OmCMsw6rCUXG1_plnLVLTpsvE1n_6WtoRUGQbpmu1z
|
|
332
332
|
dissect/target/volumes/lvm.py,sha256=wwQVR9I3G9YzmY6UxFsH2Y4MXGBcKL9aayWGCDTiWMU,2269
|
333
333
|
dissect/target/volumes/md.py,sha256=j1K1iKmspl0C_OJFc7-Q1BMWN2OCC5EVANIgVlJ_fIE,1673
|
334
334
|
dissect/target/volumes/vmfs.py,sha256=-LoUbn9WNwTtLi_4K34uV_-wDw2W5hgaqxZNj4UmqAQ,1730
|
335
|
-
dissect.target-3.16.
|
336
|
-
dissect.target-3.16.
|
337
|
-
dissect.target-3.16.
|
338
|
-
dissect.target-3.16.
|
339
|
-
dissect.target-3.16.
|
340
|
-
dissect.target-3.16.
|
341
|
-
dissect.target-3.16.
|
335
|
+
dissect.target-3.16.dev39.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
|
336
|
+
dissect.target-3.16.dev39.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
337
|
+
dissect.target-3.16.dev39.dist-info/METADATA,sha256=ngLz4XeexsGKv4urTocePElt3tx1Jpc0yxVHs1FcGWU,11107
|
338
|
+
dissect.target-3.16.dev39.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
339
|
+
dissect.target-3.16.dev39.dist-info/entry_points.txt,sha256=tvFPa-Ap-gakjaPwRc6Fl6mxHzxEZ_arAVU-IUYeo_s,447
|
340
|
+
dissect.target-3.16.dev39.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
|
341
|
+
dissect.target-3.16.dev39.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
{dissect.target-3.16.dev37.dist-info → dissect.target-3.16.dev39.dist-info}/entry_points.txt
RENAMED
File without changes
|
File without changes
|