
Un package Python est utilisé pour exécuter des tests Atomic Red Team (Atomics) sur plusieurs environnements de systèmes d'exploitation.
Ce package Python permet d'exécuter les tests Atomic Red Team (Atomiques) sur plusieurs systèmes d'exploitation.
atomic-operator permet aux professionnels de la sécurité de tester leurs capacités de détection et de défense face aux techniques définies dans atomic-red-team. En utilisant un framework de test comme atomic-operator, vous pouvez identifier à la fois vos capacités défensives et les lacunes de votre couverture défensive.
De plus, atomic-operator peut être utilisé dans de nombreuses autres situations, comme :
iaas:awsatomic-operator est un package uniquement Python hébergé sur PyPi et fonctionne avec Python 3.6 et plus.
Si vous souhaitez une version PowerShell, consultez Invoke-AtomicRedTeam.
pip install atomic-operator
Les étapes suivantes vous guideront dans l'installation et l'exécution d'atomic-operator.
Vous pouvez installer atomic-operator sur OS X, Linux ou Windows. Vous pouvez également l'installer directement à partir des sources. Pour installer, voir les commandes sous l'en-tête du système d'exploitation correspondant ci-dessous.
Les bibliothèques suivantes sont requises et installées par atomic-operator :
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
# Satisfaire ModuleNotFoundError: No module named 'setuptools_rust'
brew install rust
pip3 install --upgrade pip
pip3 install setuptools_rust
# Retour à notre programme habituel...
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
Vous pouvez exécuter atomic-operator depuis la ligne de commande ou dans vos propres scripts Python. Pour utiliser atomic-operator en ligne de commande, entrez simplement la commande suivante dans votre terminal :
atomic-operator --help
atomic-operator run -- --help
Veuillez noter que pour voir les détails de la commande run, exécutez
atomic-operator run -- --helpet PASatomic-operator run --help
Pour utiliser atomic-operator, vous devez disposer d'un ou plusieurs tests atomic-red-team (Atomiques) sur votre système local. atomic-operator vous offre la possibilité de télécharger le dépôt Atomic Red Team. Vous pouvez le faire en exécutant la commande suivante :
atomic-operator get_atomics
# Vous pouvez spécifier le répertoire de destination avec l'option --destination
atomic-operator get_atomics --destination "/tmp/some_directory"
Pour exécuter un test, vous devez fournir des propriétés supplémentaires (et des options si souhaité). La méthode principale pour exécuter des tests s'appelle run.
# Ceci exécutera TOUS les tests compatibles avec votre système d'exploitation local
atomic-operator run --atomics-path "/tmp/some_directory/redcanaryco-atomic-red-team-3700624"
Vous pouvez sélectionner des tests individuels en fournissant une ou plusieurs techniques spécifiques. Par exemple, exécutez la commande suivante :
atomic-operator run --techniques T1564.001 --select_tests
Cela invitera l'utilisateur avec une liste de sélection des tests associés à cette technique. L'utilisateur peut sélectionner un ou plusieurs tests en utilisant la barre d'espace pour mettre en surbrillance le test souhaité :
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)
Ce qui suit vous permet de fournir des arguments d'entrée personnalisés pour les tests. Pour ce faire, fournissez un dictionnaire de clés et de valeurs comme dictionnaire au paramètre input_arguments de la méthode run.
atomic-operator run --techniques T1564.001 --input_arguments '{"project-id": "some_value", "another_key": "another value"}'
# Veuillez inclure des guillemets simples autour de la valeur input_arguments.
Pour exécuter un test à distance, vous devez fournir des propriétés supplémentaires (et des options si souhaité). La méthode principale pour exécuter des tests s'appelle run.
# Ceci exécutera TOUS les tests compatibles avec votre système d'exploitation local
atomic-operator run --atomics-path "/tmp/some_directory/redcanaryco-atomic-red-team-3700624" --hosts "10.32.1.0" --username "my_username" --password "my_password"
Lors de l'exécution de commandes à distance sur des hôtes Windows, vous devrez peut-être configurer PSRemoting. Voir les détails ici : Windows Remoting
Vous pouvez voir les paramètres supplémentaires en exécutant la commande suivante :
atomic-operator run -- --help
Vous devriez voir une sortie similaire à ce qui suit :
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.
En plus de pouvoir passer des paramètres avec atomic-operator, vous pouvez également passer le chemin vers un config_file qui contient tous les tests atomiques et leurs entrées potentielles. Vous pouvez voir un exemple de ce fichier de configuration ici :
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
Pour utiliser atomic-operator, vous devez instancier un objet AtomicOperator.
from atomic_operator import AtomicOperator
operator = AtomicOperator()
# Ceci téléchargera une copie locale du dépôt atomic-red-team
print(operator.get_atomics('/tmp/some_directory'))
# ceci exécutera les tests sur votre système local
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
)
Veuillez créer un issue si vous avez des questions ou rencontrez des problèmes.
Veuillez lire CONTRIBUTING.md pour plus de détails sur notre code de conduite et le processus de soumission de pull requests.
Nous utilisons SemVer pour la gestion de version.
Voir aussi la liste des contributeurs qui ont participé à ce projet.
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails
| Nom du paramètre | Type | Valeur par défaut | Description |
|---|
| techniques | list | all | Une ou plusieurs techniques définies par ID attack_technique. |
| test_guids | list | None | Un ou plusieurs GUID de tests atomiques. |
| select_tests | bool | False | Sélectionner un ou plusieurs tests atomiques à exécuter lorsque des techniques sont spécifiées. |
| atomics_path | str | os.getcwd() | Le chemin des tests atomiques. |
| input_arguments | dict | {} | Un dictionnaire d'arguments d'entrée à passer au test. |
| check_prereqs | bool | False | Indique s'il faut vérifier les dépendances préalables (prereq_comand). |
| get_prereqs | bool | False | Indique si vous souhaitez récupérer les prérequis. |
| cleanup | bool | False | Indique si vous souhaitez exécuter les commandes de nettoyage. |
| copy_source_files | bool | True | Indique si vous souhaitez copier les fichiers source associés (src, bin, etc.) vers un hôte distant. |
| command_timeout | int | 20 | Durée de chaque commande avant expiration du délai. |
| debug | bool | False | Indique si vous souhaitez afficher les détails des tests exécutés. |
| prompt_for_input_args | bool | False | Indique si vous souhaitez être invité à fournir des arguments d'entrée pour chaque test. |
| return_atomics | bool | False | Indique si vous souhaitez retourner les atomiques au lieu de les exécuter. |
| config_file | str | None | Chemin vers un fichier de configuration utilisé pour automatiser atomic-operator dans des environnements. |
| config_file_only | bool | False | Indique si vous souhaitez exécuter les tests uniquement sur la base du fichier de configuration fourni. |
| hosts | list | None | Une liste d'un ou plusieurs hôtes distants sur lesquels exécuter un test. |
| username | str | None | Nom d'utilisateur pour l'authentification des connexions distantes. |
| password | str | None | Mot de passe pour l'authentification des connexions distantes. |
| ssh_key_path | str | None | Chemin vers une clé SSH pour l'authentification des connexions distantes. |
| private_key_string | str | None | Chaîne de clé SSH privée utilisée pour l'authentification des connexions distantes. |
| verify_ssl | bool | False | Indique s'il faut vérifier le SSL lors de la connexion via RDP (Windows). |
| ssh_port | int | 22 | Port SSH pour l'authentification des connexions distantes. |
| ssh_timeout | int | 5 | Délai d'expiration SSH pour l'authentification des connexions distantes. |
| **kwargs | dict | None | Si des indicateurs supplémentaires sont passés à la commande run, nous tenterons de les faire correspondre aux entrées définies dans les tests atomiques et de remplacer leur valeur par la valeur fournie. |