هندسة الكشف: اكتب القاعدة التي تمسك المهاجم
درس 1 من 3
1هندسة الكشف: اكتب القاعدة التي تمسك المهاجم
الصورة الكبيرةالأدوات تأتي بقواعد جاهزة، لكن المهاجم يعرفها أيضًا. محلل SOC المتوسط لا ينتظر أن يكتشف المنتج كل شيء؛ يسأل «كيف يبدو هذا الهجوم في سجلاتنا نحن؟» ويكتب القاعدة بنفسه. وكل قاعدة لها ثمن: تنبيه كاذب كثير يُتعب الفريق، وقاعدة ضيقة جدًا لا تمسك أحدًا. هندسة الكشف هي فن الموازنة بينهما.
ماذا تشاهد في الرسم: تبدأ من تقنية في ATT&CK، وتسأل أي سجل يراها، وتكتب القاعدة، وتشغّل هجومًا محاكى لترى هل تطلق، ثم تضبطها على بيانات حقيقية قبل أن تنشرها.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
تخيّل حارس مبنى. القاعدة الضعيفة: «أوقف الرجل ذا القميص الأحمر» (مؤشر يتغير بسهولة). القاعدة القوية: «أوقف أي شخص يحاول فتح الأبواب واحدًا تلو الآخر في الثالثة فجرًا» (سلوك). هندسة الكشف أن تكتب قواعد من النوع الثاني، وتجربها بممثل يمثل دور اللص، وتتأكد أنها لا توقف عامل النظافة كل ليلة.
مصادر مهمة في Windows: 4624 دخول ناجح و4625 فاشل، و4688 إنشاء عملية (فعّل تسجيل سطر الأوامر)، و4720 إنشاء مستخدم، و4732 إضافة لمجموعة محلية، و4769 تذكرة Kerberos لخدمة، و1102 مسح سجل الأمن. Sysmon يضيف: 1 إنشاء عملية بالتجزئة والأب، و3 اتصال شبكي، و10 وصول لعملية (مثل LSASS)، و11 إنشاء ملف. في Linux: auth.log وauditd. Sigma: صيغة YAML عامة لقواعد الكشف (title وlogsource وdetection وcondition وlevel وtags مثل attack.t1059.001) تُحوّل بـ sigma-cli/pySigma إلى استعلام Splunk أو Elastic أو Sentinel. الاختبار بـ Atomic Red Team (اختبار صغير لكل تقنية). القياس: الدقة (كم تنبيهًا حقيقيًا من المجموع)، والتغطية على مصفوفة ATT&CK. والكشف ككود: كل قاعدة في Git بمراجعة واختبار آلي.
قبل أن تبدأ
🚨الرصد والاستجابة
تعرف SIEM والتنبيه ودورة الاستجابة.
🧠كيف يفكر المهاجم
تعرف تكتيكات ATT&CK.
الفكرة الجوهرية
1السجلات التي تهم
لا كشف بلا سجل. قبل أن تكتب أي قاعدة، تأكد أن الحدث يُسجّل أصلًا ويصل إلى SIEM. أكثر القواعد فشلًا في الواقع تفشل لأن سجل سطر الأوامر لم يُفعّل، أو لأن Sysmon غير مثبت على الخوادم، أو لأن السجلات تُحفظ سبعة أيام فقط.
| الحدث | المصدر | ماذا يكشف | تقنية ATT&CK |
|---|---|---|---|
| 4625 ×20 | أمن Windows | تخمين كلمات مرور أو رش | T1110 |
| 4688 / Sysmon 1 | أمن Windows وSysmon | PowerShell بأمر مشفر | T1059.001 |
| 4720 + 4732 | أمن Windows | حساب جديد أضيف للمديرين | T1136 · T1098 |
| Sysmon 10 | Sysmon | عملية تقرأ ذاكرة LSASS | T1003.001 |
| 1102 | أمن Windows | مسح سجل الأمن | T1070.001 |
2قاعدة Sigma: لغة واحدة لكل SIEM
بدل أن تكتب القاعدة بلغة Splunk ثم تعيد كتابتها لـ Elastic، تكتبها مرة بـ Sigma وتحوّلها آليًا. القاعدة ثلاثة أجزاء: logsource (أي سجل)، وdetection (ماذا تبحث)، وcondition (كيف تجمع الشروط)، ومعها مستوى الخطورة ورقم تقنية ATT&CK والإيجابيات الكاذبة المعروفة.
title: PowerShell started with an encoded command
id: 7b0c4f2a-0d1e-4b55-9b3a-2f6e1c9a0d11
status: experimental
description: Encoded commands hide what PowerShell runs; attackers use them to slip past simple filters.
logsource:
product: windows
category: process_creation
detection:
selection_img:
Image|endswith: ['\powershell.exe', '\pwsh.exe']
selection_flag:
CommandLine|contains: [' -enc ', ' -EncodedCommand ', ' -e ']
filter_known:
ParentImage|endswith: '\ccmexec.exe' # the software-deployment agent does this legitimately
condition: selection_img and selection_flag and not filter_known
falsepositives:
- Admin scripts that pass encoded commands
level: high
tags:
- attack.execution
- attack.t1059.0013القاعدة تعمل: محرك كشف صغير
حتى تفهم ما يفعله SIEM، شغّل محركًا مصغرًا: أحداث بصيغة JSON، وقواعد تطابقها، وتنبيهات. لاحظ قاعدة العتبة: محاولة دخول فاشلة واحدة لا تعني شيئًا، لكن عشرين من عنوان واحد خلال دقائق تعني تخمينًا. وقاعدة التسلسل: إنشاء مستخدم ثم إضافته للمديرين خلال دقائق.
الفلتر أسقط PowerShell الذي شغّله وكيل النشر. لاحظ أن PowerShell من Word هو المريب: مستند يشغّل أوامر.
from collections import Counter
events = [{"id": 4625, "ip": "10.8.1.50", "user": f"user{i}", "t": i} for i in range(22)]
events += [{"id": 4688, "image": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"cmd": "powershell -enc SQBFAFgA", "parent": "winword.exe", "t": 40},
{"id": 4720, "user": "svc_backup2", "t": 50},
{"id": 4732, "user": "svc_backup2", "group": "Administrators", "t": 53},
{"id": 4688, "image": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"cmd": "powershell -enc AAAA", "parent": "ccmexec.exe", "t": 60}]
alerts = []
fails = Counter(e["ip"] for e in events if e["id"] == 4625)
users = {ip: len({e["user"] for e in events if e["id"] == 4625 and e["ip"] == ip}) for ip in fails}
for ip, n in fails.items():
if n >= 20:
alerts.append(f"HIGH T1110.003 password spraying from {ip}: {n} failures over {users[ip]} accounts")
for e in events:
if e["id"] == 4688 and e["image"].lower().endswith("powershell.exe") and " -enc " in f" {e['cmd']} ":
if not e["parent"].endswith("ccmexec.exe"):
alerts.append(f"HIGH T1059.001 encoded PowerShell, parent {e['parent']}")
created = {e["user"]: e["t"] for e in events if e["id"] == 4720}
for e in events:
if e["id"] == 4732 and e["user"] in created and e["t"] - created[e["user"]] <= 10:
alerts.append(f"CRIT T1136+T1098 {e['user']} created and added to {e['group']} within {e['t'] - created[e['user']]} min")
print("\n".join(alerts))4الاختبار والضبط والتغطية
قاعدة لم تُختبر ليست قاعدة. شغّل اختبار Atomic Red Team للتقنية نفسها في مختبرك، وتأكد أن التنبيه يظهر. ثم شغّل القاعدة على أسبوعين من سجلات حقيقية وعدّ التنبيهات الكاذبة واضبط الفلاتر. وارسم التغطية: أي تقنيات ATT&CK عندك لها قاعدة مختبرة، وأيها لا. الفجوات تقول لك ماذا تكتب بعدها.
قبل الفلتر: 143 تنبيهًا منها 3 حقيقية، فسيتجاهله المحللون. بعده: 9 تنبيهات وثلثها حقيقي.
def precision(true_alerts, false_alerts):
total = true_alerts + false_alerts
return true_alerts / total if total else 0
week = {"encoded PowerShell": (3, 140), "after filter": (3, 6), "spraying >= 20": (1, 0)}
for rule, (tp, fp) in week.items():
print(f"{rule:<20} {tp + fp:>4} alerts, precision {precision(tp, fp):6.1%}")مثال محلول
المسألة: تقرير استخبارات يقول إن عصابة فدية تبدأ بتعطيل Windows Defender بأمر PowerShell ثم تحذف النسخ الظلية بـ vssadmin delete shadows. اكتب خطة كشف.
الحل: (1) التقنيتان: T1562.001 (تعطيل الدفاعات) وT1490 (منع الاستعادة). (2) المصدر: 4688 وSysmon 1 مع سطر الأوامر. (3) قاعدتان Sigma: Set-MpPreference مع -DisableRealtimeMonitoring، وvssadmin أو wmic shadowcopy مع delete. الثانية مستواها حرج لأن الاستخدام المشروع نادر جدًا. (4) قاعدة تسلسل: الاثنتان على الجهاز نفسه خلال ساعة = عزل الجهاز آليًا. (5) اختبر بـ Atomic Red Team لـ T1490 في المختبر. (6) شغّلها أسبوعًا وراجع الإيجابيات الكاذبة (برامج النسخ الاحتياطي). (7) أضفها إلى Git وحدّث خريطة التغطية.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| المنتج الأمني يكشف كل شيء وحده. | القواعد الجاهزة عامة، والمهاجم يختبر أدواته ضدها. بيئتك تحتاج قواعد تعرف أنظمتك وعاداتك. |
| تنبيهات أكثر تعني أمانًا أكثر. | التنبيهات الكاذبة الكثيرة تجعل المحللين يتجاهلون الحقيقي. الدقة أهم من العدد. |
| القاعدة تُكتب مرة وتبقى. | الأنظمة والبرامج تتغير، فتصبح القاعدة صاخبة أو صامتة. راجعها واختبرها دوريًا. |
أين تقابله في العمل
🛡️مركز العمليات
مهندس الكشف يكتب القواعد التي يعمل عليها المحللون.
📰تقرير استخبارات جديد
يتحول خلال يوم إلى قواعد مختبرة لتقنيات العصابة.
📊تقرير للإدارة
خريطة تغطية ATT&CK تُظهر أين نحن أقوياء وأين الفجوات.
اختبر فهمك
أي حدث Windows يسجل إنشاء عملية جديدة؟
4688 إنشاء عملية، ومعه سطر الأوامر إن فُعّل.
ما ميزة كتابة القاعدة بـ Sigma؟
صيغة عامة يحوّلها sigma-cli إلى Splunk أو Elastic أو Sentinel.
لماذا الكشف بالسلوك أقوى من الكشف بالتجزئة؟
التجزئة تتغير بأي تعديل، والسلوك مرتبط بهدف المهاجم.
قاعدة أطلقت 200 تنبيه منها 2 حقيقيان. ما دقتها؟
2 ÷ 200 = 1%. تحتاج ضبطًا قبل أن تُنشر.
كيف تتأكد أن القاعدة تعمل قبل نشرها؟
Atomic Red Team يعطيك اختبارًا صغيرًا لكل تقنية.
بطاقات مراجعة سريعة
تحقق من فهمك
ما أول ما تتأكد منه قبل كتابة قاعدة؟
أن الحدث يُسجل فعلًا ويصل إلى SIEM ويُحفظ مدة كافية.
لماذا تكتب الإيجابيات الكاذبة المعروفة داخل القاعدة؟
ليعرف المحلل بسرعة إن كان التنبيه من مصدر مشروع، ولتبقى المعرفة مع القاعدة.
ماذا تخبرك خريطة التغطية؟
أي تقنيات لها قواعد مختبرة وأيها فجوات، فتعرف ماذا تكتب بعدها.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
أدوات2
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.