การเชื่อมโยง Sigma
กฎ Event Count¶
กฎเหล่านี้เป็นกฎที่นับเหตุการณ์บางอย่างและแจ้งเตือนหากเหตุการณ์เหล่านี้เกิดขึ้นมากเกินไปหรือไม่เพียงพอภายในกรอบเวลาหนึ่ง ตัวอย่างทั่วไปของการตรวจจับเหตุการณ์จำนวนมากภายในช่วงเวลาหนึ่งคือการตรวจจับการโจมตีแบบเดารหัสผ่าน การโจมตีแบบ password spray และการโจมตีแบบ denial of service คุณยังสามารถใช้กฎเหล่านี้เพื่อตรวจจับปัญหาความน่าเชื่อถือของแหล่งล็อก เช่น เมื่อเหตุการณ์บางอย่างต่ำกว่าเกณฑ์ที่กำหนด
ตัวอย่างกฎ Event Count:¶
ตัวอย่างต่อไปนี้ใช้สองกฎเพื่อตรวจจับการโจมตีแบบเดารหัสผ่าน
จะมีการแจ้งเตือนเมื่อกฎที่ถูกอ้างอิงตรงกัน 5 ครั้งขึ้นไปภายใน 5 นาทีและฟิลด์ IpAddress เป็นค่าเดียวกันสำหรับเหตุการณ์เหล่านั้น
โปรดทราบว่าเราได้รวมเฉพาะฟิลด์ที่จำเป็นเพื่อให้เข้าใจแนวคิดเท่านั้น กฎฉบับเต็มที่ตัวอย่างนี้อ้างอิงอยู่ที่ here เพื่อการอ้างอิงของคุณ
กฎ correlation แบบ Event Count:¶
title: PW Guessing
id: 23179f25-6fce-4827-bae1-b219deaf563e
correlation:
type: event_count
rules:
- 5b0b75dc-9190-4047-b9a8-14164cee8a31
group-by:
- IpAddress
timespan: 5m
condition:
gte: 5
กฎ Failed Logon - Incorrect Password:¶
title: Failed Logon - Incorrect Password
id: 5b0b75dc-9190-4047-b9a8-14164cee8a31
logsource:
product: windows
service: security
detection:
selection:
Channel: Security
EventID: 4625
SubStatus: "0xc000006a" #Wrong password
filter:
IpAddress: "-"
condition: selection and not filter
ตัวอย่างกฎ count ที่เลิกใช้แล้ว:¶
กฎ correlation และกฎที่ถูกอ้างอิงข้างต้นให้ผลลัพธ์เหมือนกันกับกฎต่อไปนี้ที่ใช้ตัวปรับแต่ง count แบบเก่า:
title: PW Guessing
logsource:
product: windows
service: security
detection:
selection:
Channel: Security
EventID: 4625
SubStatus: "0xc000006a" #Wrong password
filter:
IpAddress: "-"
condition: selection and not filter | count() by IpAddress >= 5
timeframe: 5m
ผลลัพธ์ของกฎ Event Count:¶
กฎข้างต้นจะสร้างผลลัพธ์ต่อไปนี้:
% ./hayabusa csv-timeline -d ../hayabusa-sample-evtx -r password-guessing-sample.yml -w
%
Timestamp · RuleTitle · Level · Computer · Channel · EventID · RecordID · Details · ExtraFieldInfo
2016-09-20 01:50:06.513 +09:00 · PW Guessing · med · DESKTOP-M5SN04R · Sec · 4625 · - · Count: 3558 ¦ IpAddress: 192.168.198.149 · -
กฎ Value Count¶
กฎเหล่านี้นับเหตุการณ์เดียวกันภายในกรอบเวลาหนึ่งที่มีค่า แตกต่างกัน ของฟิลด์ที่กำหนด
ตัวอย่าง:
- การสแกนเครือข่ายที่ที่อยู่ IP ต้นทางเดียวพยายามเชื่อมต่อไปยังที่อยู่ IP ปลายทางและ/หรือพอร์ตจำนวนมากที่แตกต่างกัน
- การโจมตีแบบ password spraying ที่ต้นทางเดียวล้มเหลวในการยืนยันตัวตนกับผู้ใช้จำนวนมากที่แตกต่างกัน
- ตรวจจับเครื่องมืออย่าง BloodHound ที่แจกแจงกลุ่ม AD ที่มีสิทธิ์สูงจำนวนมากภายในกรอบเวลาสั้นๆ
ตัวอย่างกฎ Value Count:¶
กฎต่อไปนี้ตรวจจับเมื่อผู้โจมตีพยายามเดาชื่อผู้ใช้
นั่นคือ เมื่อที่อยู่ IP ต้นทาง (IpAddress) เดียวกัน ล้มเหลวในการเข้าสู่ระบบด้วยชื่อผู้ใช้ (TargetUserName) ที่ แตกต่างกัน มากกว่า 3 รายการภายใน 5 นาที
โปรดทราบว่าเราได้รวมเฉพาะฟิลด์ที่จำเป็นเพื่อให้เข้าใจแนวคิดเท่านั้น กฎฉบับเต็มที่ตัวอย่างนี้อ้างอิงอยู่ที่ here เพื่อการอ้างอิงของคุณ
กฎ correlation แบบ Value Count:¶
title: User Guessing
id: 0ae09af3-f30f-47c2-a31c-83e0b918eeee
correlation:
type: value_count
rules:
- b2c74582-0d44-49fe-8faa-014dcdafee62
group-by:
- IpAddress
timespan: 5m
condition:
gt: 3
field: TargetUserName
กฎ Value Count Logon Failure (Non-existant User):¶
title: Failed Logon - Non-Existant User
id: b2c74582-0d44-49fe-8faa-014dcdafee62
logsource:
product: windows
service: security
detection:
selection:
Channel: Security
EventID: 4625
SubStatus: "0xc0000064" #Username does not exist
condition: selection
กฎตัวปรับแต่ง count ที่เลิกใช้แล้ว:¶
กฎ correlation และกฎที่ถูกอ้างอิงข้างต้นให้ผลลัพธ์เหมือนกันกับกฎต่อไปนี้ที่ใช้ตัวปรับแต่ง count แบบเก่า:
title: User Guessing
logsource:
product: windows
service: security
detection:
selection:
Channel: Security
EventID: 4625
SubStatus: "0xc0000064" #Username does not exist
condition: selection | count(TargetUserName) by IpAddress > 3
timeframe: 5m
ผลลัพธ์ของกฎ Value Count:¶
กฎข้างต้นจะสร้างผลลัพธ์ต่อไปนี้:
2018-08-23 23:24:22.523 +09:00 · User Guessing · med · dmz-ftp · Sec · 4625 · - · Count: 4 ¦ TargetUserName: ninja-labs/root/test@ninja-labs.com/sarutobi ¦ IpAddress: - ¦ LogonType: 8 ¦ TargetDomainName: ¦ ProcessName: C:\\Windows\\System32\\svchost.exe ¦ LogonProcessName: Advapi ¦ WorkstationName: DMZ-FTP · -
2018-08-28 08:03:13.770 +09:00 · User Guessing · med · dmz-ftp · Sec · 4625 · - · Count: 4 ¦ TargetUserName: root/sarutobi@ninja-labs.com/sarutobi/administrator@ninja-labs.com ¦ IpAddress: - ¦ LogonType: 8 ¦ TargetDomainName: ¦ ProcessName: C:\\Windows\\System32\\svchost.exe ¦ LogonProcessName: Advapi ¦ WorkstationName: DMZ-FTP · -
2018-09-01 12:51:58.346 +09:00 · User Guessing · med · dmz-ftp · Sec · 4625 · - · Count: 4 ¦ TargetUserName: root/admin@ninja-labs.com/admin/administrator@ninja-labs.com ¦ IpAddress: - ¦ LogonType: 8 ¦ TargetDomainName: ¦ ProcessName: C:\\Windows\\System32\\svchost.exe ¦ LogonProcessName: Advapi ¦ WorkstationName: DMZ-FTP · -
2018-09-02 03:55:13.007 +09:00 · User Guessing · med · dmz-ftp · Sec · 4625 · - · Count: 4 ¦ TargetUserName: root/admin@ninja-labs.com/administrator@ninja-labs.com/admin ¦ IpAddress: - ¦ LogonType: 8 ¦ TargetDomainName: ¦ ProcessName: C:\\Windows\\System32\\svchost.exe ¦ LogonProcessName: Advapi ¦ WorkstationName: DMZ-FTP · -
กฎ Temporal Proximity¶
เหตุการณ์ทั้งหมดที่กำหนดโดยกฎที่ถูกอ้างอิงในฟิลด์ rule ต้องเกิดขึ้นภายในกรอบเวลาที่กำหนดโดย timespan
ค่าของฟิลด์ที่กำหนดใน group-by ต้องมีค่าเหมือนกันทั้งหมด (เช่น โฮสต์เดียวกัน ผู้ใช้เดียวกัน เป็นต้น)
ตัวอย่างกฎ Temporal Proximity:¶
ตัวอย่าง: คำสั่ง Reconnaissance ที่กำหนดในสามกฎ Sigma ถูกเรียกใช้ในลำดับใดก็ได้ภายใน 5 นาทีบนระบบโดยผู้ใช้คนเดียวกัน
กฎ correlation แบบ Temporal Proximity:¶
correlation:
type: temporal
rules:
- recon_cmd_a
- recon_cmd_b
- recon_cmd_c
group-by:
- Computer
- User
timespan: 5m
กฎ Ordered Temporal Proximity¶
ประเภท correlation แบบ temporal_ordered มีพฤติกรรมเหมือน temporal และเพิ่มเติมว่าเหตุการณ์ต้องปรากฏตามลำดับที่ระบุไว้ในแอตทริบิวต์ rules
ตัวอย่างกฎ Ordered Temporal Proximity:¶
ตัวอย่าง: การเข้าสู่ระบบที่ล้มเหลวจำนวนมากตามที่กำหนดข้างต้น ตามด้วยการเข้าสู่ระบบสำเร็จโดยบัญชีผู้ใช้เดียวกันภายใน 1 ชั่วโมง:
กฎ correlation แบบ Ordered Temporal Proximity:¶
correlation:
type: temporal_ordered
rules:
- many_failed_logins
- successful_login
group-by:
- User
timespan: 1h
หมายเหตุเกี่ยวกับกฎ correlation¶
-
คุณควรรวมกฎ correlation และกฎที่ถูกอ้างอิงทั้งหมดไว้ในไฟล์เดียวและแยกกันด้วยตัวคั่น YAML คือ
--- -
โดยค่าเริ่มต้น กฎ correlation ที่ถูกอ้างอิงจะไม่ถูกแสดงผล หากคุณต้องการดูผลลัพธ์ของกฎที่ถูกอ้างอิง คุณต้องเพิ่ม
generate: trueภายใต้correlationซึ่งมีประโยชน์มากในการเปิดและตรวจสอบเมื่อสร้างกฎ correlationตัวอย่าง:
3. คุณสามารถใช้ชื่อ alias แทน rule ID เมื่ออ้างอิงกฎเพื่อให้เข้าใจสิ่งต่างๆ ได้ง่ายขึ้น -
คุณสามารถอ้างอิงกฎได้หลายกฎ
-
คุณสามารถใช้หลายฟิลด์ใน
group-byได้ หากคุณทำเช่นนั้น ค่าทั้งหมดในฟิลด์เหล่านั้นต้องเหมือนกัน มิฉะนั้นคุณจะไม่ได้รับการแจ้งเตือน โดยส่วนใหญ่ คุณจะเขียนกฎที่กรองในฟิลด์บางอย่างด้วยgroup-byเพื่อลด false positive อย่างไรก็ตาม สามารถละเว้นgroup-byเพื่อสร้างกฎที่ทั่วไปมากขึ้นได้ -
timestamp ของกฎ correlation จะเป็นจุดเริ่มต้นของการโจมตี ดังนั้นคุณควรตรวจสอบเหตุการณ์หลังจากนั้นเพื่อยืนยันว่าเป็น false positive หรือไม่