
مستخرج مؤشرات الاختراق (IOC) المنزوعة الأنياب.
مؤشر الاختراق (IOC) مستخرج لبعض القطع الأثرية الأكثر شيوعًا.
حزمة iocextract هي مكتبة وواجهة سطر أوامر (CLI) لاستخراج عناوين URL وعناوين IP وتجمعات MD5/SHA وعناوين البريد الإلكتروني وقواعد YARA من نصوص. تتيح لك استخراج مؤشرات الاختراق المشفرة و"المعرّضة" (defanged) مع خيار فك تشفيرها أو إعادة تنسيقها (refang).
من الممارسات الشائعة لمحللي البرامج الضارة أو برامج نقاط النهاية "تعريض" مؤشرات الاختراق مثل عناوين URL وIP، لمنع التعرض العرضي لمحتوى ضار حي. القدرة على استخراج وتجميع هذه المؤشرات غالبًا ما تكون ذات قيمة للمحللين. للأسف، غالبًا ما تمر أدوات "استخراج مؤشرات الاختراق" الحالية دون التعرف عليها، لأنها لا تُلتقط بواسطة التعبير العادي القياسي.
على سبيل المثال، تقنية التعريض البسيطة المتمثلة في وضع أقواس حول النقاط:
127[.]0[.]0[.]1
الأدوات الحالية التي تستخدم تعبيرًا عاديًا بسيطًا لعناوين IP ستتجاهل هذا المؤشر بالكامل.
من خلال الجمع بين تعبير عادي مصمم خصيصًا ومعالجة لاحقة مخصصة، نتمكن من اكتشاف مؤشرات الاختراق "المعرّضة" وإزالة تشويشها. هذا يوفر الوقت والجهد للمحلل، الذي قد يضطر إلى العثور يدويًا على المؤشرات وتحويلها إلى تنسيق قابل للقراءة آليًا.
ينشر العديد من مستخدمي Twitter عناوين C2 أو معلومات مؤشرات اختراق قيمة أخرى بعناوين URL معرّضة. على سبيل المثال، هذه التغريدة من @InQuest:
Recommended reading and great work from @unit42_intel:
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/ ...
InQuest customers have had detection for threats delivered from hotfixmsupload[.]com
since 6/3/2017 and cdnverify[.]net since 2/1/18.
إذا قمنا بتشغيل هذا عبر المستخرج، يمكننا بسهولة سحب عناوين URL:
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/
hotfixmsupload[.]com
cdnverify[.]net
تمرير refang=True في وقت الاستخراج سيزيل التشويش، ولكن نظرًا لأن هذه مؤشرات اختراق حقيقية، دعنا نتركها معرّضة في توثيقنا.
قد تحتاج إلى تثبيت رؤوس تطوير Python لتثبيت اعتماد regex. على أنظمة Ubuntu/Debian، جرب:
sudo apt-get install python-dev
ثم قم بتثبيت iocextract من pip:
pip install iocextract
إذا واجهت مشاكل في التثبيت على Windows، جرب تثبيت regex مباشرة عن طريق تنزيل العجلة المناسبة من PyPI والتثبيت عبر pip:
pip install regex-2018.06.21-cp27-none-win_amd64.whl
جرب استخراج بعض عناوين URL المعرّضة:
import iocextract
content = \
"""
I really love example[.]com!
All the bots are on hxxp://example.com/bad/url these days.
C2: tcp://example[.]com:8989/bad
"""
for url in iocextract.extract_urls(content):
print(url)
# Output
# hxxp://example.com/bad/url
# tcp://example[.]com:8989/bad
# example[.]com
# tcp://example[.]com:8989/bad
ملاحظة: قد تظهر بعض عناوين URL مرتين إذا التقطتها تعابير عادية متعددة.
إذا أردت، يمكنك أيضًا "إعادة التنسيق" (refang)، أو إزالة طرق التشويش الشائعة من مؤشرات الاختراق:
import iocextract
for url in iocextract.extract_urls(content, refang=True):
print(url)
# Output
# http://example.com/bad/url
# http://example.com:8989/bad
# http://example.com
# http://example.com:8989/bad
إذا كنت لا تريد تعريض مؤشرات الاختراق المستخرجة على الإطلاق أثناء الاستخراج، يمكنك تعطيل ذلك أيضًا:
import iocextract
content = \
"""
http://example.com/bad/url
http://example.com:8989/bad
http://example.com
http://example.com:8989/bad
"""
for url in iocextract.extract_urls(content, defang=False):
print(url)
# Output
# http://example.com/bad/url
# http://example.com:8989/bad
# http://example.com
# http://example.com:8989/bad
جميع دوال extract_* في هذه المكتبة تُعيد مكررات (iterators)، وليس قوائم. فائدة هذا السلوك هي أن iocextract يمكنه معالجة مدخلات كبيرة جدًا، بتكلفة منخفضة جدًا. ومع ذلك، إذا كنت بحاجة لسبب ما للتكرار على المؤشرات أكثر من مرة، فسيتعين عليك حفظ النتائج كقائمة:
import iocextract
content = \
"""
I really love example[.]com!
All the bots are on hxxp://example.com/bad/url these days.
C2: tcp://example[.]com:8989/bad
"""
print(list(iocextract.extract_urls(content)))
# ['hxxp://example.com/bad/url', 'tcp://example[.]com:8989/bad', 'example[.]com', 'tcp://example[.]com:8989/bad']
أداة سطر أوامر مضمنة أيضًا:
$ iocextract -h
usage: iocextract [-h] [--input INPUT] [--output OUTPUT] [--extract-emails]
[--extract-ips] [--extract-ipv4s] [--extract-ipv6s]
[--extract-urls] [--extract-yara-rules] [--extract-hashes]
[--custom-regex REGEX_FILE] [--refang] [--strip-urls]
[--wide]
Advanced Indicator of Compromise (IOC) extractor. If no arguments are
specified, the default behavior is to extract all IOCs.
optional arguments:
-h, --help show this help message and exit
--input INPUT default: stdin
--output OUTPUT default: stdout
--extract-emails
--extract-ips
--extract-ipv4s
--extract-ipv6s
--extract-urls
--extract-yara-rules
--extract-hashes
--custom-regex REGEX_FILE file with custom regex strings, one per line, with one capture group each
--refang default: no
--strip-urls remove possible garbage from the end of urls. default: no
--wide preprocess input to allow wide-encoded character matches. default: no
ملاحظة: فقط عناوين URL والبريد الإلكتروني وعناوين IPv4 يمكن "إعادة تنسيقها".
هل تبحث عن...
س. استخراج مؤشرات اختراق ربما معرّضة من نص عادي، مثل محتويات التغريدات أو منشورات المدونات؟
ج. نعم! هذا بالضبط ما صُمم iocextract من أجله، وهو حيث يؤدي أفضل أداء. هل تريد الذهاب خطوة أبعد وأتمتة الاستخراج والتخزين؟ تحقق من ThreatIngestor.
س. استخراج عناوين URL التي تم ترميزها بصيغة hex أو base64؟
ج. نعم، لكن CLI قد لا يعطيك أفضل النتائج. جرب كتابة نص Python واستدعاء
iocextract.extract_encoded_urlsمباشرة.
ملاحظة: على الأرجح ستحصل على قمامة إضافية في نهاية عناوين URL.
س. استخراج مؤشرات اختراق لم يتم تعريضها، من HTML/XML/RTF؟
ج. ربما، لكن يجب أن تفكر في استخدام علامة
--strip-urlsفي CLI (أو معاملstrip=Trueفي المكتبة)، وقد لا تزال تحصل على بعض القمامة الإضافية في مخرجاتك. إذا كنت تستخرج من HTML، فكر في استخدام شيء مثل Beautiful Soup لعزل محتوى النص أولاً، ثم تمريره إلى iocextract، مثل هذا.
س. استخراج مؤشرات اختراق لم يتم تعريضها، من بيانات ثنائية مثل الملفات التنفيذية، أو مدخلات كبيرة جدًا؟
ج. يوجد إصدار مبسط جدًا من هذا متاح عند الاستخدام كمكتبة، لكنه يتطلب معامل
defang=Falseوقد يفوت بعض المؤشرات. التعبير العادي في iocextract مصمم ليكون مرنًا لالتقاط المؤشرات المعرّضة. إذا كنت غير قادر على جمع المعلومات التي تحتاجها، فكر في استخدام شيء مثل Cacador بدلاً من ذلك.
تدعم هذه المكتبة حاليًا مؤشرات الاختراق التالية:
[.]، حتى بدون محدد بروتوكول@ أو atبالنسبة لعناوين IPv4، تقنيات التعريض التالية مدعومة:
بالنسبة لعناوين البريد الإلكتروني، تقنيات التعريض التالية مدعومة:
بالنسبة لعناوين URL، تقنيات التعريض التالية مدعومة:
ملاحظة: الجداول أعلاه ليست شاملة، وأنماط URL/تعريض أخرى قد تُستخرج بشكل صحيح. إذا لاحظت شيئًا مفقودًا أو لا يعمل بشكل صحيح، لا تتردد في إعلامنا عبر مشكلات GitHub.
تم إنشاء التعبير العادي لـ base64 باستخدام أداة regex base64 لـ @deadpixi.
إذا كنت ترغب في استخدام CLI لاستخراج مؤشرات الاختراق باستخدام تعبير عادي مخصص، قم بإنشاء ملف نصي عادي يحتوي على سلسلة تعبير عادي واحدة لكل سطر، ومرره باستخدام علامة --custom-regex. تأكد من أن كل سلسلة تعبير عادي تتضمن مجموعة التقاط واحدة بالضبط.
على سبيل المثال:
http://(example\.com)/
(?:https|ftp)://(example\.com)/
سوف يستخرج ملف التعبير العادي المخصص هذا النطاق example.com من عناوين URL المتطابقة. لن يتم تضمين مجموعة عدم التقاط (?: ) في التطابقات.
إذا كنت ترغب في استخراج التطابق بأكمله، فقط ضع أقواسًا حول سلسلة التعبير العادي بأكملها، مثل هذا:
(https?://.*?.com)
إذا كان تعبيرك العادي غير صالح، سترى رسالة خطأ مثل هذه:
Error in custom regex: missing ) at position 5
إذا كان تعبيرك العادي لا يتضمن مجموعة التقاط، سترى رسالة خطأ مثل هذه:
Error in custom regex: no such group
استخدم دائمًا مجموعة التقاط واحدة عند العمل مع تعبير عادي مخصص. إليك مثال سريع:
[
r'(my regex)', # This yields 'my regex' if the pattern matches
r'my (re)gex', # This yields 're' if the pattern matches
]
استخدام أكثر من مجموعة التقاط واحدة قد يسبب نتائج غير متوقعة. تحقق من هذا المثال:
[
r'my regex', # This doesn't yield anything
r'(my) (re)gex', # This yields 'my' if the pattern matches
]
لماذا؟ لأن النتيجة ستعطي دائمًا أول تطابق مجموعة من كل تعبير عادي فقط.
لاستعلامات التعبير العادي الأكثر تعقيدًا، يمكنك الجمع بين مجموعات التقاط وعدم التقاط مثل هذا:
[
r'(?:my|your) (re)gex', # This yields 're' if the pattern matches
]
يمكنك الآن مقارنة بناء (?: ) لمجموعات عدم التقاط مقابل بناء ( ) لمجموعة التقاط.
إذا كان iocextract لا يناسب حالة الاستخدام الخاصة بك، توجد عدة مشاريع مماثلة. تحقق من علامات defang و indicators-of-compromise على GitHub، بالإضافة إلى:
إذا كنت ترغب في أتمتة استخراج مؤشرات الاختراق وإثرائها وتصديرها والمزيد، تحقق من ThreatIngestor.
إذا كنت تعمل مع قواعد YARA، قد تكون مهتمًا بـ plyara.
إذا كان لديك تقنية تعريض لا تمر عبر المستخرج، أو إذا وجدت أي أخطاء، فإن طلبات السحب والمشكلات مرحب بها دائمًا. المكتبة منشورة تحت رخصة GPL-2.0 الرخصة.
هل تستخدمه؟ تريد رؤية موقعك مدرجًا هنا؟ أخبرنا!
| التقنية | معرّضة | معاد تنسيقها |
|---|
. -> [.] | 1[.]1[.]1[.]1 | 1.1.1.1 |
. -> (.) | 1(.)1(.)1(.)1 | 1.1.1.1 |
. -> \. | 1\.1\.1\.1 | 1.1.1.1 |
| جزئية | 1[.1[.1.]1 | 1.1.1.1 |
| أي مجموعة | 1.)1[.1.)1 | 1.1.1.1 |
| التقنية | معرّضة | معاد تنسيقها |
|---|
. -> [.] | me@example[.]com | [email protected] |
. -> (.) | me@example(.)com | [email protected] |
. -> {.} | me@example{.}com | [email protected] |
. -> _dot_ | me@example dot com | [email protected] |
@ -> [@] | me[@]example.com | [email protected] |
@ -> (@) | me(@)example.com | [email protected] |
@ -> {@} | me{@}example.com | [email protected] |
@ -> _at_ | me at example.com | [email protected] |
| جزئية | me@} example[.com | [email protected] |
| إضافة مسافات | me@example [.] com | [email protected] |
| أي مجموعة | me @example [.)com | [email protected] |
| التقنية | معرّضة | معاد تنسيقها |
|---|
. -> [.] | example[.]com/path | http://example.com/path |
. -> (.) | example(.)com/path | http://example.com/path |
. -> \. | example\.com/path | http://example.com/path |
| جزئية | http://example[.com/path | http://example.com/path |
/ -> [/] | http://example.com[/]path | http://example.com/path |
| Cisco ESA | http:// example .com /path | http://example.com/path |
:// -> __ | http__example.com/path | http://example.com/path |
:// -> :\\ | http:\\example.com/path | http://example.com/path |
: -> [:] | http[:]//example.com/path | http://example.com/path |
hxxp | hxxp://example.com/path | http://example.com/path |
| أي مجموعة | hxxp__ example( .com[/]path | http://example.com/path |
| مشفر بـ Hex | 687474703a2f2f6578616d706c652e636f6d2f70617468 | http://example.com/path |
| مشفر بـ URL | http%3A%2F%2fexample%2Ecom%2Fpath | http://example.com/path |
| مشفر بـ Base64 | aHR0cDovL2V4YW1wbGUuY29tL3BhdGgK | http://example.com/path |