
Пакет Python используется для выполнения тестов Atomic Red Team (Atomics) в нескольких операционных системах.
Этот пакет Python используется для выполнения тестов Atomic Red Team (Atomics) в различных операционных системах.
atomic-operator позволяет специалистам по безопасности проверять свои возможности обнаружения и защиты от предписанных техник, определённых в atomic-red-team. Используя фреймворк для тестирования, такой как atomic-operator, вы можете выявить как свои защитные возможности, так и пробелы в защите.
Кроме того, atomic-operator можно использовать во многих других ситуациях, например:
iaas:awsatomic-operator — это пакет только для Python, размещённый на PyPi, и работает с Python 3.6 и новее.
Если вам нужна версия на PowerShell, пожалуйста, посмотрите Invoke-AtomicRedTeam.
pip install atomic-operator
Следующие шаги помогут вам настроить и запустить atomic-operator.
Вы можете установить atomic-operator на OS X, Linux или Windows. Также можно установить напрямую из исходного кода. Для установки используйте команды, соответствующие вашей операционной системе, приведённые ниже.
Следующие библиотеки требуются и устанавливаются вместе с 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
# Устранение ModuleNotFoundError: No module named 'setuptools_rust'
brew install rust
pip3 install --upgrade pip
pip3 install setuptools_rust
# Возвращаемся к обычной программе...
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
Вы можете запускать atomic-operator из командной строки или внутри собственных скриптов Python. Чтобы использовать atomic-operator в командной строке, просто введите следующее в терминале:
atomic-operator --help
atomic-operator run -- --help
Обратите внимание: для просмотра подробностей о команде
runиспользуйтеatomic-operator run -- --help, а неatomic-operator run --help.
Для использования atomic-operator необходимо иметь один или несколько тестов atomic-red-team (Atomics) на локальной системе. atomic-operator предоставляет возможность загрузить репозиторий Atomic Red Team. Это можно сделать, выполнив следующую команду:
atomic-operator get_atomics
# Вы можете указать каталог назначения с помощью флага --destination
atomic-operator get_atomics --destination "/tmp/some_directory"
Для запуска теста необходимо указать несколько дополнительных свойств (и, при желании, параметры). Основной метод для запуска тестов называется run.
# Это запустит ВСЕ тесты, совместимые с вашей локальной операционной системой
atomic-operator run --atomics-path "/tmp/some_directory/redcanaryco-atomic-red-team-3700624"
Вы можете выбирать отдельные тесты, указав одну или несколько конкретных техник. Например, выполнение следующей команды:
atomic-operator run --techniques T1564.001 --select_tests
Запросит у пользователя список тестов, связанных с этой техникой. Пользователь может выбрать один или несколько тестов, используя пробел для выделения нужного теста:
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)
Следующая команда позволяет указать пользовательские входные аргументы для тестов. Для этого передайте словарь ключей и значений в параметр input_arguments метода run.
atomic-operator run --techniques T1564.001 --input_arguments '{"project-id": "some_value", "another_key": "another value"}'
# Пожалуйста, заключайте значение input_arguments в одинарные кавычки.
Для удалённого запуска теста необходимо указать несколько дополнительных свойств (и, при желании, параметры). Основной метод для запуска тестов называется run.
# Это запустит ВСЕ тесты, совместимые с вашей локальной операционной системой
atomic-operator run --atomics-path "/tmp/some_directory/redcanaryco-atomic-red-team-3700624" --hosts "10.32.1.0" --username "my_username" --password "my_password"
При удалённом выполнении команд на хостах Windows может потребоваться настройка PSRemoting. Подробнее см. здесь: Удалённое управление Windows
Вы можете просмотреть дополнительные параметры, выполнив следующую команду:
atomic-operator run -- --help
Вы должны увидеть вывод, похожий на следующий:
NAME
atomic-operator run - Основной метод для запуска тестов Atomic Red Team.
SYNOPSIS
atomic-operator run <flags>
DESCRIPTION
Основной метод для запуска тестов Atomic Red Team.
FLAGS
--techniques=TECHNIQUES
Type: list
Default: ['all']
Одна или несколько определённых техник по ID attack_technique. По умолчанию 'all'.
--test_guids=TEST_GUIDS
Type: list
Default: []
Один или несколько GUID-идентификаторов Atomic-тестов. По умолчанию None.
--select_tests=SELECT_TESTS
Type: bool
Default: False
Выбор одного или нескольких тестов из указанных техник. По умолчанию False.
--atomics_path=ATOMICS_PATH
Default: '/U...
Путь к Atomic-тестам. По умолчанию os.getcwd().
--input_arguments={}
Default: {}
Словарь входных аргументов для передачи в тест.
--check_prereqs=CHECK_PREREQS
Default: False
Проверять ли зависимости предварительных условий (prereq_comand). По умолчанию False.
--get_prereqs=GET_PREREQS
Default: False
Нужно ли получать предварительные условия. По умолчанию False.
--cleanup=CLEANUP
Default: False
Нужно ли выполнять команды очистки. По умолчанию False.
--copy_source_files=COPY_SOURCE_FILES
Default: True
Нужно ли копировать связанные исходные файлы (src, bin и т.д.) на удалённый хост. По умолчанию True.
--command_timeout=COMMAND_TIMEOUT
Default: 20
Время ожидания для каждой команды. По умолчанию 20.
--debug=DEBUG
Default: False
Нужно ли выводить подробную информацию о выполняемых тестах. По умолчанию False.
--prompt_for_input_args=PROMPT_FOR_INPUT_ARGS
Default: False
Нужно ли запрашивать входные аргументы для каждого теста. По умолчанию False.
--return_atomics=RETURN_ATOMICS
Default: False
Нужно ли возвращать Atomics вместо их запуска. По умолчанию False.
--config_file=CONFIG_FILE
Type: Optional[]
Default: None
Путь к файлу конфигурации, используемому для автоматизации atomic-operator в средах. По умолчанию None.
--config_file_only=CONFIG_FILE_ONLY
Default: False
Нужно ли запускать тесты только на основе предоставленного config_file. По умолчанию False.
--hosts=HOSTS
Default: []
Список одного или нескольких удалённых хостов для выполнения теста. По умолчанию [].
--username=USERNAME
Type: Optional[]
Default: None
Имя пользователя для аутентификации удалённых подключений. По умолчанию None.
--password=PASSWORD
Type: Optional[]
Default: None
Пароль для аутентификации удалённых подключений. По умолчанию None.
--ssh_key_path=SSH_KEY_PATH
Type: Optional[]
Default: None
Путь к SSH-ключу для аутентификации удалённых подключений. По умолчанию None.
--private_key_string=PRIVATE_KEY_STRING
Type: Optional[]
Default: None
Строка закрытого SSH-ключа для аутентификации удалённых подключений. По умолчанию None.
--verify_ssl=VERIFY_SSL
Default: False
Проверять ли SSL при подключении через RDP (Windows). По умолчанию False.
--ssh_port=SSH_PORT
Default: 22
Порт SSH для аутентификации удалённых подключений. По умолчанию 22.
--ssh_timeout=SSH_TIMEOUT
Default: 5
Тайм-аут SSH для аутентификации удалённых подключений. По умолчанию 5.
Дополнительные флаги принимаются.
Если предоставлены, ключи, совпадающие с входными данными для теста, будут заменены. По умолчанию None.
В дополнение к возможности передавать параметры с помощью atomic-operator, вы также можете передать путь к config_file, который содержит все Atomic-тесты и их возможные входные данные. Пример такого config_file можно увидеть здесь:
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
Для использования atomic-operator необходимо создать экземпляр объекта AtomicOperator.
from atomic_operator import AtomicOperator
operator = AtomicOperator()
# Это загрузит локальную копию репозитория atomic-red-team
print(operator.get_atomics('/tmp/some_directory'))
# это запустит тесты на локальной системе
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
)
Пожалуйста, создайте issue, если у вас есть вопросы или возникли проблемы.
Пожалуйста, прочитайте CONTRIBUTING.md для получения подробной информации о нашем кодексе поведения и процессе отправки pull request'ов.
Мы используем SemVer для версионирования.
Также см. список участников, которые участвовали в этом проекте.
Этот проект лицензирован на условиях лицензии MIT — см. файл LICENSE для подробностей.
| Имя параметра | Тип | По умолчанию | Описание |
|---|
| techniques | list | all | Одна или несколько определённых техник по ID attack_technique. |
| test_guids | list | None | Один или несколько GUID-идентификаторов Atomic-тестов. |
| select_tests | bool | False | Выбор одного или нескольких Atomic-тестов для запуска при указании техник. |
| atomics_path | str | os.getcwd() | Путь к Atomic-тестам. |
| input_arguments | dict | {} | Словарь входных аргументов для передачи в тест. |
| check_prereqs | bool | False | Проверять ли зависимости предварительных условий (prereq_comand). |
| get_prereqs | bool | False | Нужно ли получать предварительные условия. |
| cleanup | bool | False | Нужно ли выполнять команды очистки. |
| copy_source_files | bool | True | Нужно ли копировать связанные исходные файлы (src, bin и т.д.) на удалённый хост. |
| command_timeout | int | 20 | Время ожидания для каждой команды до тайм-аута. |
| debug | bool | False | Нужно ли выводить подробную информацию о выполняемых тестах. |
| prompt_for_input_args | bool | False | Нужно ли запрашивать входные аргументы для каждого теста. |
| return_atomics | bool | False | Нужно ли возвращать Atomics вместо их запуска. |
| config_file | str | None | Путь к файлу конфигурации, используемому для автоматизации atomic-operator в средах. |
| config_file_only | bool | False | Нужно ли запускать тесты только на основе предоставленного config_file. |
| hosts | list | None | Список одного или нескольких удалённых хостов для выполнения теста. |
| username | str | None | Имя пользователя для аутентификации удалённых подключений. |
| password | str | None | Пароль для аутентификации удалённых подключений. |
| ssh_key_path | str | None | Путь к SSH-ключу для аутентификации удалённых подключений. |
| private_key_string | str | None | Строка закрытого SSH-ключа для аутентификации удалённых подключений. |
| verify_ssl | bool | False | Проверять ли SSL при подключении через RDP (Windows). |
| ssh_port | int | 22 | Порт SSH для аутентификации удалённых подключений. |
| ssh_timeout | int | 5 | Тайм-аут SSH для аутентификации удалённых подключений. |
| **kwargs | dict | None | Если в команду run передаются дополнительные флаги, мы попытаемся сопоставить их с определёнными входными данными в Atomic-тестах и заменить их значение на предоставленное. |