
حزمة بايثون تُستخدم لتنفيذ اختبارات Atomic Red Team (Atomics) عبر بيئات أنظمة تشغيل متعددة.
تُستخدم حزمة Python هذه لتنفيذ اختبارات فريق الأحمر الذري (Atomics) عبر بيئات أنظمة تشغيل متعددة.
يتيح atomic-operator لمحترفي الأمن اختبار قدراتهم في الكشف والدفاع ضد التقنيات المحددة داخل atomic-red-team. باستخدام إطار اختبار مثل atomic-operator، يمكنك تحديد قدراتك الدفاعية وكذلك الفجوات في التغطية الدفاعية.
بالإضافة إلى ذلك، يمكن استخدام atomic-operator في العديد من المواقف الأخرى مثل:
iaas:awsinput_arguments كمدخلات للاختبارات عبر سطر الأوامرatomic-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
يرجى ملاحظة أنه لرؤية تفاصيل حول أمر التشغيل، قم بتشغيل
atomic-operator run -- --helpوليسatomic-operator run --help
لاستخدام atomic-operator يجب أن يكون لديك اختبار واحد أو أكثر من atomic-red-team (Atomics) على نظامك المحلي. يوفر لك atomic-operator القدرة على تنزيل مستودع فريق الأحمر الذري. يمكنك القيام بذلك عن طريق تشغيل ما يلي في سطر الأوامر:
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
سيطالب المستخدم بقائمة اختيار للاختبارات المرتبطة بتلك التقنية. يمكن للمستخدم اختيار اختبار واحد أو أكثر باستخدام مفتاح المسافة لتمييز الاختبار المطلوب:
تحديد الاختبار (الاختبارات) للتقنية T1564.001 (إخفاء القطع الأثرية: الملفات والأدلة المخفية)
* إنشاء ملف مخفي في دليل مخفي (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 في طريقة التشغيل.
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 Remoting
يمكنك رؤية المعاملات الإضافية عن طريق تشغيل الأمر التالي:
atomic-operator run -- --help
يجب أن ترى مخرجات مشابهة لما يلي:
NAME
atomic-operator run - الطريقة الرئيسية التي نشغل بها اختبارات فريق الأحمر الذري.
SYNOPSIS
atomic-operator run <flags>
DESCRIPTION
الطريقة الرئيسية التي نشغل بها اختبارات فريق الأحمر الذري.
FLAGS
--techniques=TECHNIQUES
Type: list
Default: ['all']
تقنية واحدة أو أكثر محددة بواسطة معرف attack_technique. القيمة الافتراضية 'all'.
--test_guids=TEST_GUIDS
Type: list
Default: []
معرف GUID واحد أو أكثر لاختبار ذري. القيمة الافتراضية None.
--select_tests=SELECT_TESTS
Type: bool
Default: False
تحديد اختبار واحد أو أكثر من التقنيات المقدمة. القيمة الافتراضية False.
--atomics_path=ATOMICS_PATH
Default: '/U...
مسار الاختبارات الذرية. القيمة الافتراضية 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
ما إذا كنت ترغب في إرجاع الذريات بدلاً من تشغيلها. القيمة الافتراضية False.
--config_file=CONFIG_FILE
Type: Optional[]
Default: None
مسار إلى ملف تكوين يُستخدم لأتمتة atomic-operator في البيئات. القيمة الافتراضية None.
--config_file_only=CONFIG_FILE_ONLY
Default: False
ما إذا كنت ترغب في تشغيل الاختبارات بناءً على ملف التكوين المقدم فقط. القيمة الافتراضية 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_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()
# هذا سيقوم بتنزيل نسخة محلية من مستودع فريق الأحمر الذري
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 للحصول على تفاصيل حول مدونة قواعد السلوك الخاصة بنا، وعملية تقديم طلبات السحب إلينا.
نستخدم SemVer للتحكم في الإصدارات.
راجع أيضًا قائمة المساهمين الذين شاركوا في هذا المشروع.
هذا المشروع مرخص بموجب ترخيص MIT - راجع ملف LICENSE للحصول على التفاصيل
| اسم المعامل | النوع | القيمة الافتراضية | الوصف |
|---|
| techniques | list | all | تقنية واحدة أو أكثر محددة بواسطة معرف attack_technique. |
| test_guids | list | None | معرف GUID واحد أو أكثر لاختبار ذري. |
| select_tests | bool | False | تحديد اختبار ذري واحد أو أكثر لتشغيله عند تحديد التقنيات. |
| atomics_path | str | os.getcwd() | مسار الاختبارات الذرية. |
| input_arguments | dict | {} | قاموس من وسائط الإدخال لتمريرها إلى الاختبار. |
| check_prereqs | bool | False | ما إذا كان سيتم التحقق من تبعيات المتطلبات الأساسية (prereq_command). |
| 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 | ما إذا كنت ترغب في إرجاع الذريات بدلاً من تشغيلها. |
| config_file | str | None | مسار إلى ملف تكوين يُستخدم لأتمتة atomic-operator في البيئات. |
| config_file_only | bool | False | ما إذا كنت ترغب في تشغيل الاختبارات بناءً على ملف التكوين المقدم فقط. |
| 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 | إذا تم تمرير علامات إضافية إلى أمر التشغيل، فسنحاول مطابقتها مع المدخلات المحددة داخل الاختبارات الذرية واستبدال قيمتها بالقيمة المقدمة. |