acquire 3.17.dev3__tar.gz → 3.17.dev6__tar.gz
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.
- {acquire-3.17.dev3/acquire.egg-info → acquire-3.17.dev6}/PKG-INFO +1 -1
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/acquire.py +45 -20
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/version.py +2 -2
- {acquire-3.17.dev3 → acquire-3.17.dev6/acquire.egg-info}/PKG-INFO +1 -1
- {acquire-3.17.dev3 → acquire-3.17.dev6}/COPYRIGHT +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/LICENSE +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/MANIFEST.in +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/README.md +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/__init__.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/collector.py +3 -3
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/crypt.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/dynamic/__init__.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/dynamic/windows/__init__.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/dynamic/windows/collect.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/dynamic/windows/exceptions.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/dynamic/windows/handles.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/dynamic/windows/named_objects.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/dynamic/windows/ntdll.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/dynamic/windows/types.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/esxi.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/gui/__init__.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/gui/base.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/gui/win32.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/hashes.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/log.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/outputs/__init__.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/outputs/base.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/outputs/dir.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/outputs/tar.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/outputs/zip.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/tools/__init__.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/tools/decrypter.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/uploaders/__init__.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/uploaders/minio.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/uploaders/plugin.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/uploaders/plugin_registry.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/utils.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire/volatilestream.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire.egg-info/SOURCES.txt +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire.egg-info/dependency_links.txt +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire.egg-info/entry_points.txt +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire.egg-info/requires.txt +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/acquire.egg-info/top_level.txt +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/pyproject.toml +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/setup.cfg +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/__init__.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/conftest.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/data/private_key.pem +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/data/public_key.pem +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/docs/Makefile +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/docs/conf.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/docs/index.rst +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_acquire_command.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_acquire_modules.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_collector.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_decryptor_funcs.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_esxi_memory.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_file_sorting.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_gui.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_minio_uploader.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_misc_users.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_outputs_dir.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_outputs_tar.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_outputs_zip.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_plugin.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tests/test_utils.py +0 -0
- {acquire-3.17.dev3 → acquire-3.17.dev6}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: acquire
|
|
3
|
-
Version: 3.17.
|
|
3
|
+
Version: 3.17.dev6
|
|
4
4
|
Summary: A tool to quickly gather forensic artifacts from disk images or a live system into a lightweight container
|
|
5
5
|
Author-email: Dissect Team <dissect@fox-it.com>
|
|
6
6
|
License: Affero General Public License v3
|
|
@@ -1372,6 +1372,26 @@ class SSH(Module):
|
|
|
1372
1372
|
super().run(target, cli_args, collector)
|
|
1373
1373
|
|
|
1374
1374
|
|
|
1375
|
+
@register_module("--docker")
|
|
1376
|
+
class Docker(Module):
|
|
1377
|
+
DESC = "various Docker logs and configuration files"
|
|
1378
|
+
SPEC = [
|
|
1379
|
+
# Container log files
|
|
1380
|
+
("glob", "/var/lib/docker/containers/*/*-json.log"),
|
|
1381
|
+
("glob", "/var/lib/docker/containers/*/*.json"),
|
|
1382
|
+
("glob", "/var/lib/docker/containers/*/hostname"),
|
|
1383
|
+
# Linux daemon configs
|
|
1384
|
+
("file", "/etc/docker/daemon.json"),
|
|
1385
|
+
("file", "/var/snap/docker/current/config/daemon.json"),
|
|
1386
|
+
# Windows daemon configs
|
|
1387
|
+
("file", "sysvol/ProgramData/docker/config/daemon.json"),
|
|
1388
|
+
# User-specific config files (MacOS/Linux/Windows)
|
|
1389
|
+
("file", ".docker/daemon.json", from_user_home),
|
|
1390
|
+
# Repositories
|
|
1391
|
+
("file", "/var/lib/docker/image/overlay2/repositories.json"),
|
|
1392
|
+
]
|
|
1393
|
+
|
|
1394
|
+
|
|
1375
1395
|
@register_module("--var")
|
|
1376
1396
|
class Var(Module):
|
|
1377
1397
|
SPEC = [
|
|
@@ -1676,17 +1696,20 @@ def print_acquire_warning(target: Target) -> None:
|
|
|
1676
1696
|
log.warning("========================================== WARNING ==========================================")
|
|
1677
1697
|
|
|
1678
1698
|
|
|
1679
|
-
def
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
return None
|
|
1699
|
+
def _get_modules_for_profile(
|
|
1700
|
+
profile_name: str,
|
|
1701
|
+
operating_system: str,
|
|
1702
|
+
profiles: dict[str, dict[str, list[type[Module]]]],
|
|
1703
|
+
err_msg: str,
|
|
1704
|
+
) -> dict[str, type[Module]]:
|
|
1705
|
+
modules_selected = {}
|
|
1687
1706
|
|
|
1688
|
-
|
|
1689
|
-
|
|
1707
|
+
if profile_name != "none":
|
|
1708
|
+
if (profile := profiles.get(profile_name, {}).get(operating_system)) is not None:
|
|
1709
|
+
for mod in profile:
|
|
1710
|
+
modules_selected[mod.__modname__] = mod
|
|
1711
|
+
else:
|
|
1712
|
+
log.error(err_msg, operating_system, profile_name)
|
|
1690
1713
|
|
|
1691
1714
|
return modules_selected
|
|
1692
1715
|
|
|
@@ -1755,24 +1778,23 @@ def acquire_target(target: Target, args: argparse.Namespace, output_ts: Optional
|
|
|
1755
1778
|
profile = "default"
|
|
1756
1779
|
log.info("")
|
|
1757
1780
|
|
|
1758
|
-
|
|
1759
|
-
profile, target.os, PROFILES, "No collection set for OS %s with profile %s"
|
|
1781
|
+
normal_modules = _get_modules_for_profile(
|
|
1782
|
+
profile, target.os, PROFILES, "No collection set for OS '%s' with profile '%s'"
|
|
1760
1783
|
)
|
|
1784
|
+
modules_selected.update(normal_modules)
|
|
1761
1785
|
|
|
1762
1786
|
if not (volatile_profile := args.volatile_profile):
|
|
1763
1787
|
volatile_profile = "none"
|
|
1764
1788
|
|
|
1765
|
-
volatile_modules =
|
|
1766
|
-
volatile_profile, target.os, VOLATILE, "No collection set for OS %s with volatile profile %s"
|
|
1789
|
+
volatile_modules = _get_modules_for_profile(
|
|
1790
|
+
volatile_profile, target.os, VOLATILE, "No collection set for OS '%s' with volatile profile '%s'"
|
|
1767
1791
|
)
|
|
1768
|
-
|
|
1769
|
-
if (profile_modules or volatile_modules) is None:
|
|
1770
|
-
return files
|
|
1771
|
-
|
|
1772
|
-
modules_selected.update(profile_modules)
|
|
1773
1792
|
modules_selected.update(volatile_modules)
|
|
1774
1793
|
|
|
1775
|
-
|
|
1794
|
+
if not modules_selected:
|
|
1795
|
+
log.warn("NO modules selected!")
|
|
1796
|
+
else:
|
|
1797
|
+
log.info("Modules selected: %s", ", ".join(sorted(modules_selected)))
|
|
1776
1798
|
|
|
1777
1799
|
local_only_modules = {name: module for name, module in modules_selected.items() if hasattr(module, "__local__")}
|
|
1778
1800
|
if target.path.name != "local" and local_only_modules:
|
|
@@ -1952,6 +1974,7 @@ class WindowsProfile:
|
|
|
1952
1974
|
SSH,
|
|
1953
1975
|
IIS,
|
|
1954
1976
|
TextEditor,
|
|
1977
|
+
Docker,
|
|
1955
1978
|
]
|
|
1956
1979
|
|
|
1957
1980
|
|
|
@@ -1966,6 +1989,7 @@ class LinuxProfile:
|
|
|
1966
1989
|
DEFAULT = MINIMAL
|
|
1967
1990
|
FULL = [
|
|
1968
1991
|
*DEFAULT,
|
|
1992
|
+
Docker,
|
|
1969
1993
|
History,
|
|
1970
1994
|
WebHosting,
|
|
1971
1995
|
]
|
|
@@ -2010,6 +2034,7 @@ class OSXProfile:
|
|
|
2010
2034
|
*DEFAULT,
|
|
2011
2035
|
History,
|
|
2012
2036
|
SSH,
|
|
2037
|
+
Docker,
|
|
2013
2038
|
]
|
|
2014
2039
|
|
|
2015
2040
|
|
|
@@ -12,5 +12,5 @@ __version__: str
|
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
|
13
13
|
version_tuple: VERSION_TUPLE
|
|
14
14
|
|
|
15
|
-
__version__ = version = '3.17.
|
|
16
|
-
__version_tuple__ = version_tuple = (3, 17, '
|
|
15
|
+
__version__ = version = '3.17.dev6'
|
|
16
|
+
__version_tuple__ = version_tuple = (3, 17, 'dev6')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: acquire
|
|
3
|
-
Version: 3.17.
|
|
3
|
+
Version: 3.17.dev6
|
|
4
4
|
Summary: A tool to quickly gather forensic artifacts from disk images or a live system into a lightweight container
|
|
5
5
|
Author-email: Dissect Team <dissect@fox-it.com>
|
|
6
6
|
License: Affero General Public License v3
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -518,6 +518,9 @@ class Collector:
|
|
|
518
518
|
self.report.add_symlink_collected(module_name, branch_path)
|
|
519
519
|
log.info("- Collecting symlink branch suceeded %s", branch_path)
|
|
520
520
|
|
|
521
|
+
except (FileNotFoundError, NotADirectoryError, NotASymlinkError, SymlinkRecursionError, ValueError):
|
|
522
|
+
self.report.add_path_missing(module_name, error_path)
|
|
523
|
+
log.error("- Path %s is not found (while collecting %s)", error_path, path)
|
|
521
524
|
except OSError as error:
|
|
522
525
|
if error.errno == errno.ENOENT:
|
|
523
526
|
self.report.add_path_missing(module_name, error_path)
|
|
@@ -528,9 +531,6 @@ class Collector:
|
|
|
528
531
|
else:
|
|
529
532
|
self.report.add_path_failed(module_name, error_path)
|
|
530
533
|
log.error("- OSError while collecting path %s (while collecting %s)", error_path, path)
|
|
531
|
-
except (FileNotFoundError, NotADirectoryError, NotASymlinkError, SymlinkRecursionError, ValueError):
|
|
532
|
-
self.report.add_path_missing(module_name, error_path)
|
|
533
|
-
log.error("- Path %s is not found (while collecting %s)", error_path, path)
|
|
534
534
|
except Exception:
|
|
535
535
|
self.report.add_path_failed(module_name, error_path)
|
|
536
536
|
log.error("- Failed to collect path %s (while collecting %s)", error_path, path, exc_info=True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|