
Ein Python-Paket wird verwendet, um Atomic Red Team Tests (Atomics) über mehrere Betriebssystemumgebungen hinweg auszuführen.
Dieses Python-Paket wird verwendet, um Atomic Red Team-Tests (Atomics) auf mehreren Betriebssystemumgebungen auszuführen.
atomic-operator ermöglicht es Sicherheitsexperten, ihre Erkennungs- und Abwehrfähigkeiten gegen die in atomic-red-team definierten Techniken zu testen. Durch die Verwendung eines Testframeworks wie atomic-operator können Sie sowohl Ihre Abwehrfähigkeiten als auch Lücken in der Abdeckung identifizieren.
Darüber hinaus kann atomic-operator in vielen anderen Situationen eingesetzt werden, wie zum Beispiel:
iaas:awsinput_arguments als Eingabe für Tests über die Kommandozeileatomic-operator ist ein reines Python-Paket, das auf PyPi gehostet wird und mit Python 3.6 und höher funktioniert.
Wenn Sie eine PowerShell-Version wünschen, schauen Sie bei Invoke-AtomicRedTeam vorbei.
pip install atomic-operator
Die nächsten Schritte führen Sie durch die Einrichtung und Ausführung von atomic-operator.
Sie können atomic-operator unter OS X, Linux oder Windows installieren. Sie können es auch direkt aus dem Quellcode installieren. Die Installationsbefehle finden Sie nachfolgend unter dem entsprechenden Betriebssystem.
Die folgenden Bibliotheken werden benötigt und von atomic-operator installiert:
pyyaml==5.4.1
fire==0.4.0
requests==2.26.0
attrs==21.2.0
pick==1.2.0
pip install atomic-operator
git clone https://github.com/swimlane/atomic-operator.git
cd atomic-operator
# Behebt ModuleNotFoundError: No module named 'setuptools_rust'
brew install rust
pip3 install --upgrade pip
pip3 install setuptools_rust
# Zurück zum regulären Programm ...
pip install -r requirements.txt
python setup.py install
git clone https://github.com/swimlane/atomic-operator.git
cd atomic-operator
pip install -r requirements.txt
python setup.py install
Sie können atomic-operator über die Kommandozeile oder in Ihren eigenen Python-Skripten ausführen. Um atomic-operator in der Kommandozeile zu verwenden, geben Sie einfach Folgendes in Ihrem Terminal ein:
atomic-operator --help
atomic-operator run -- --help
Bitte beachten Sie, dass Sie
atomic-operator run -- --helpund NICHTatomic-operator run --helpeingeben müssen, um Details zum run-Befehl zu sehen.
Um atomic-operator verwenden zu können, müssen Sie einen oder mehrere atomic-red-team-Tests (Atomics) auf Ihrem lokalen System haben. atomic-operator bietet Ihnen die Möglichkeit, das Atomic Red Team-Repository herunterzuladen. Sie können dies tun, indem Sie Folgendes in der Kommandozeile ausführen:
atomic-operator get_atomics
# Sie können das Zielverzeichnis mit der --destination-Option angeben
atomic-operator get_atomics --destination "/tmp/some_directory"
Um einen Test auszuführen, müssen Sie einige zusätzliche Eigenschaften (und bei Bedarf Optionen) angeben. Die Hauptmethode zum Ausführen von Tests heißt run.
# Dies führt ALLE Tests aus, die mit Ihrem lokalen Betriebssystem kompatibel sind
atomic-operator run --atomics-path "/tmp/some_directory/redcanaryco-atomic-red-team-3700624"
Sie können einzelne Tests auswählen, wenn Sie eine oder mehrere bestimmte Techniken angeben. Zum Beispiel, wenn Sie Folgendes in der Kommandozeile ausführen:
atomic-operator run --techniques T1564.001 --select_tests
Wird der Benutzer mit einer Auswahlliste der zu dieser Technik gehörenden Tests aufgefordert. Ein Benutzer kann einen oder mehrere Tests auswählen, indem er die Leertaste verwendet, um den gewünschten Test zu markieren:
Select Test(s) for Technique T1564.001 (Hide Artifacts: Hidden Files and Directories)
* Create a hidden file in a hidden directory (61a782e5-9a19-40b5-8ba4-69a4b9f3d7be)
Mac Hidden file (cddb9098-3b47-4e01-9d3b-6f5f323288a9)
Create Windows System File with Attrib (f70974c8-c094-4574-b542-2c545af95a32)
Create Windows Hidden File with Attrib (dadb792e-4358-4d8d-9207-b771faa0daa5)
Hidden files (3b7015f2-3144-4205-b799-b05580621379)
Hide a Directory (b115ecaf-3b24-4ed2-aefe-2fcb9db913d3)
Show all hidden files (9a1ec7da-b892-449f-ad68-67066d04380c)
Das Folgende ermöglicht es Ihnen, benutzerdefinierte Eingabeargumente für Tests bereitzustellen. Sie tun dies, indem Sie ein Wörterbuch von Schlüsseln und Werten als Wörterbuch an den Parameter input_arguments der run-Methode übergeben.
atomic-operator run --techniques T1564.001 --input_arguments '{"project-id": "some_value", "another_key": "another value"}'
# Bitte setzen Sie den Wert von input_arguments in einfache Anführungszeichen.
Um einen Test auf einem entfernten System auszuführen, müssen Sie einige zusätzliche Eigenschaften (und bei Bedarf Optionen) angeben. Die Hauptmethode zum Ausführen von Tests heißt run.
# Dies führt ALLE Tests aus, die mit Ihrem lokalen Betriebssystem kompatibel sind
atomic-operator run --atomics-path "/tmp/some_directory/redcanaryco-atomic-red-team-3700624" --hosts "10.32.1.0" --username "my_username" --password "my_password"
Wenn Sie Befehle auf entfernten Windows-Hosts ausführen, müssen Sie möglicherweise PSRemoting konfigurieren. Details finden Sie hier: Windows-Remoting
Sie können zusätzliche Parameter sehen, indem Sie den folgenden Befehl ausführen:
atomic-operator run -- --help
Sie sollten eine ähnliche Ausgabe wie die folgende sehen:
NAME
atomic-operator run - The main method in which we run Atomic Red Team tests.
SYNOPSIS
atomic-operator run <flags>
DESCRIPTION
The main method in which we run Atomic Red Team tests.
FLAGS
--techniques=TECHNIQUES
Type: list
Default: ['all']
One or more defined techniques by attack_technique ID. Defaults to 'all'.
--test_guids=TEST_GUIDS
Type: list
Default: []
One or more Atomic test GUIDs. Defaults to None.
--select_tests=SELECT_TESTS
Type: bool
Default: False
Select one or more tests from provided techniques. Defaults to False.
--atomics_path=ATOMICS_PATH
Default: '/U...
The path of Atomic tests. Defaults to os.getcwd().
--input_arguments={}
Default: {}
A dictionary of input arguments to pass to the test.
--check_prereqs=CHECK_PREREQS
Default: False
Whether or not to check for prereq dependencies (prereq_comand). Defaults to False.
--get_prereqs=GET_PREREQS
Default: False
Whether or not you want to retrieve prerequisites. Defaults to False.
--cleanup=CLEANUP
Default: False
Whether or not you want to run cleanup command(s). Defaults to False.
--copy_source_files=COPY_SOURCE_FILES
Default: True
Whether or not you want to copy any related source (src, bin, etc.) files to a remote host. Defaults to True.
--command_timeout=COMMAND_TIMEOUT
Default: 20
Timeout duration for each command. Defaults to 20.
--debug=DEBUG
Default: False
Whether or not you want to output details about tests being ran. Defaults to False.
--prompt_for_input_args=PROMPT_FOR_INPUT_ARGS
Default: False
Whether you want to prompt for input arguments for each test. Defaults to False.
--return_atomics=RETURN_ATOMICS
Default: False
Whether or not you want to return atomics instead of running them. Defaults to False.
--config_file=CONFIG_FILE
Type: Optional[]
Default: None
A path to a conifg_file which is used to automate atomic-operator in environments. Default to None.
--config_file_only=CONFIG_FILE_ONLY
Default: False
Whether or not you want to run tests based on the provided config_file only. Defaults to False.
--hosts=HOSTS
Default: []
A list of one or more remote hosts to run a test on. Defaults to [].
--username=USERNAME
Type: Optional[]
Default: None
Username for authentication of remote connections. Defaults to None.
--password=PASSWORD
Type: Optional[]
Default: None
Password for authentication of remote connections. Defaults to None.
--ssh_key_path=SSH_KEY_PATH
Type: Optional[]
Default: None
Path to a SSH Key for authentication of remote connections. Defaults to None.
--private_key_string=PRIVATE_KEY_STRING
Type: Optional[]
Default: None
A private SSH Key string used for authentication of remote connections. Defaults to None.
--verify_ssl=VERIFY_SSL
Default: False
Whether or not to verify ssl when connecting over RDP (windows). Defaults to False.
--ssh_port=SSH_PORT
Default: 22
SSH port for authentication of remote connections. Defaults to 22.
--ssh_timeout=SSH_TIMEOUT
Default: 5
SSH timeout for authentication of remote connections. Defaults to 5.
Additional flags are accepted.
If provided, keys matching inputs for a test will be replaced. Default is None.
Zusätzlich zur Möglichkeit, Parameter mit atomic-operator zu übergeben, können Sie auch einen Pfad zu einer config_file übergeben, die alle Atomic-Tests und deren potenzielle Eingaben enthält. Ein Beispiel für eine solche config_file finden Sie hier:
atomic_tests:
- guid: f7e6ec05-c19e-4a80-a7e7-241027992fdb
input_arguments:
output_file:
value: custom_output.txt
input_file:
value: custom_input.txt
- guid: 3ff64f0b-3af2-3866-339d-38d9791407c3
input_arguments:
second_arg:
value: SWAPPPED argument
- guid: 32f90516-4bc9-43bd-b18d-2cbe0b7ca9b2
Um atomic-operator zu verwenden, müssen Sie ein AtomicOperator-Objekt instanziieren.
from atomic_operator import AtomicOperator
operator = AtomicOperator()
# Dies lädt eine lokale Kopie des atomic-red-team-Repositorys herunter
print(operator.get_atomics('/tmp/some_directory'))
# Dies führt Tests auf Ihrem lokalen System aus
operator.run(
technique: str='All',
atomics_path=os.getcwd(),
check_dependencies=False,
get_prereqs=False,
cleanup=False,
command_timeout=20,
debug=False,
prompt_for_input_args=False,
**kwargs
)
Bitte erstellen Sie ein Issue, wenn Sie Fragen haben oder auf Probleme stoßen.
Bitte lesen Sie CONTRIBUTING.md für Details zu unserem Verhaltenskodex und den Prozess für das Einreichen von Pull Requests.
Wir verwenden SemVer für die Versionierung.
Siehe auch die Liste der Mitwirkenden, die an diesem Projekt teilgenommen haben.
Dieses Projekt ist unter der MIT-Lizenz lizenziert - siehe die Datei LICENSE für Details.
| Parametername | Typ | Standard | Beschreibung |
|---|
| techniques | list | all | Ein oder mehrere definierte Techniken nach attack_technique-ID. |
| test_guids | list | None | Eine oder mehrere Atomic-Test-GUIDs. |
| select_tests | bool | False | Wählen Sie einen oder mehrere Atomic-Tests aus, wenn Techniken angegeben sind. |
| atomics_path | str | os.getcwd() | Der Pfad zu den Atomic-Tests. |
| input_arguments | dict | {} | Ein Wörterbuch von Eingabeargumenten, die an den Test übergeben werden. |
| check_prereqs | bool | False | Ob Voraussetzungsabhängigkeiten überprüft werden sollen (prereq_comand). |
| get_prereqs | bool | False | Ob Sie Voraussetzungen abrufen möchten. |
| cleanup | bool | False | Ob Sie Bereinigungsbefehle ausführen möchten. |
| copy_source_files | bool | True | Ob Sie zugehörige Quelldateien (src, bin, etc.) auf einen entfernten Host kopieren möchten. |
| command_timeout | int | 20 | Zeitdauer für jeden Befehl vor dem Timeout. |
| debug | bool | False | Ob Sie Details zu den ausgeführten Tests ausgeben möchten. |
| prompt_for_input_args | bool | False | Ob Sie für jeden Test nach Eingabeargumenten gefragt werden möchten. |
| return_atomics | bool | False | Ob Sie Atomics zurückgeben möchten, anstatt sie auszuführen. |
| config_file | str | None | Ein Pfad zu einer config_file, die zur Automatisierung von atomic-operator in Umgebungen verwendet wird. |
| config_file_only | bool | False | Ob Sie Tests nur auf Basis der bereitgestellten config_file ausführen möchten. |
| hosts | list | None | Eine Liste von einem oder mehreren entfernten Hosts, auf denen ein Test ausgeführt werden soll. |
| username | str | None | Benutzername für die Authentifizierung bei entfernten Verbindungen. |
| password | str | None | Passwort für die Authentifizierung bei entfernten Verbindungen. |
| ssh_key_path | str | None | Pfad zu einem SSH-Schlüssel für die Authentifizierung bei entfernten Verbindungen. |
| private_key_string | str | None | Ein privater SSH-Schlüssel-String, der zur Authentifizierung bei entfernten Verbindungen verwendet wird. |
| verify_ssl | bool | False | Ob SSL beim Verbinden über RDP (Windows) überprüft werden soll. |
| ssh_port | int | 22 | SSH-Port für die Authentifizierung bei entfernten Verbindungen. |
| ssh_timeout | int | 5 | SSH-Timeout für die Authentifizierung bei entfernten Verbindungen. |
| **kwargs | dict | None | Wenn zusätzliche Flags an den run-Befehl übergeben werden, versuchen wir, sie mit definierten Eingaben in Atomic-Tests abzugleichen und ihren Wert durch den bereitgestellten Wert zu ersetzen. |