การเขียนกฎ Sigma
ไวยากรณ์กฎตรวจจับที่นำไปใช้ได้หลายระบบ
การเขียนกฎ Sigma เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
ซิกมาคืออะไร
ซิกมา คือรูปแบบลายเซ็นทั่วไปที่ไม่ขึ้นกับผู้จำหน่ายสำหรับการตรวจจับจากบันทึก คุณเขียนตรรกะการตรวจจับเพียงครั้งเดียวใน YAML แล้วแปลงเป็น SPL ของ Splunk คำค้นหาของ Elastic, KQL ของ Sentinel และระบบปลายทางอื่น ๆ ได้อีกมากมาย
ซิกมาสำหรับการตรวจจับจากบันทึกก็เหมือนกับที่ YARA ใช้สำหรับการตรวจจับแฟ้ม นั่นคือเป็นภาษากลางที่ใช้งานข้ามระบบได้ ช่วยให้ทีมแบ่งปันกฎต่อสาธารณะและหลีกเลี่ยงการเขียนแนวคิดเดียวกันใหม่สำหรับ SIEM แต่ละระบบ
โครงสร้างของกฎ
กฎซิกมาเป็นเอกสาร YAML ที่มีส่วนที่จำเป็นและส่วนที่เลือกใช้ได้ ส่วนสำคัญคือ title, logsource และ detection
title: Suspicious PowerShell Encoded Command
id: 7e3f3c1a-1f2b-4c3d-9a8b-1234567890ab
status: experimental
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\\powershell.exe'
CommandLine|contains: '-enc'
condition: selection
level: highบล็อกแหล่งบันทึก
บล็อก logsource บอกตัวแปลงว่ากฎนี้ใช้กับ บันทึกใด โดยตรง บล็อกนี้ไม่ได้ค้นหาข้อมูล แต่เลือกการจับคู่เขตข้อมูลและดัชนีที่ถูกต้องระหว่างการแปลง
คีย์ที่พบบ่อย:
product— เช่น windows, linux, awscategory— เช่น process_creation, network_connection, file_eventservice— เช่น sysmon, security, sshd
เลือกชุดค่าผสมที่เจาะจงที่สุดเท่าที่ข้อมูลของคุณรองรับ เพื่อให้กระบวนการส่งต่อจับคู่เขตข้อมูลได้อย่างถูกต้อง
การเลือกและตัวระบุการค้นหา
ภายใน detection คุณกำหนด ตัวระบุการค้นหา ที่มีชื่อกำกับได้ตั้งแต่หนึ่งรายการขึ้นไป แต่ละรายการเป็นโครงสร้างจับคู่เกณฑ์ระหว่างเขตข้อมูลกับค่า เขตข้อมูลหลายรายการภายในการเลือกเดียวกันจะเชื่อมด้วยตรรกะ AND
ในที่นี้ เงื่อนไขทั้งสองข้อจะต้องเป็นจริงจึงจะตรงกับ selection
detection:
selection:
EventID: 4688
NewProcessName|endswith: '\\whoami.exe'
condition: selectionตัวปรับแต่งเขตข้อมูล
ตัวปรับแต่งช่วยกำหนดวิธีจับคู่ค่าให้ละเอียดขึ้น โดยต่อท้ายชื่อเขตข้อมูลหลังเครื่องหมาย |
contains— จับคู่ข้อความย่อยstartswith/endswith— จับคู่โดยยึดจุดเริ่มต้นหรือจุดสิ้นสุดall— ค่าทุกค่าในรายการต้องปรากฏอยู่re— นิพจน์ปกติbase64offset|contains— จับคู่ข้อความย่อยที่เข้ารหัสแบบ base64
ตัวปรับแต่งสามารถต่อกันจากซ้ายไปขวาและจะถูกนำไปใช้ตามลำดับ
detection:
selection:
CommandLine|contains|all:
- 'Invoke-WebRequest'
- 'DownloadString'
condition: selectionรายการและโครงสร้างจับคู่แบบ OR / AND
มีกฎสองข้อที่กำหนดตรรกะภายในการเลือก:
- รายการค่าภายใต้เขตข้อมูลเดียวกันเป็น OR — ค่ารายการใดรายการหนึ่งตรงกันก็เพียงพอ
- โครงสร้างจับคู่ที่มีหลายเขตข้อมูลเป็น AND — เขตข้อมูลทั้งหมดต้องตรงกัน
ด้านล่างนี้ Image จะตรงกับไบนารีรายการใดรายการหนึ่ง และ User จะต้องมีค่าเท่ากับ SYSTEM ด้วย
detection:
selection:
Image|endswith:
- '\\net.exe'
- '\\net1.exe'
User: 'SYSTEM'
condition: selectionนิพจน์เงื่อนไข
condition ใช้รวมการเลือกที่มีชื่อกำกับเข้าด้วยกันด้วยตรรกะแบบบูลีน ส่วนนี้เป็นที่สำหรับระบุตัวกรองและข้อยกเว้น
ตัวดำเนินการประกอบด้วย and, or, not, วงเล็บ และการรวมค่าอย่าง count() นอกจากนี้ คุณยังใช้ 1 of selection* / all of selection* เพื่ออ้างอิงกลุ่มตัวระบุที่มีคำนำหน้าเดียวกันได้
detection:
selection:
EventID: 4625
timeframe: 5m
condition: selection | count() by SourceIp > 10กรองสัญญาณรบกวนออก
หากต้องการระงับกิจกรรมที่ทราบว่าปลอดภัย ให้กำหนดตัวระบุแยกต่างหากแล้วตัดตัวระบุนั้นออกในเงื่อนไขด้วย not วิธีนี้ทำให้ตรรกะที่เป็นอันตรายอ่านได้ง่ายและทำให้ข้อยกเว้นระบุไว้อย่างชัดเจน
ในที่นี้ กฎจะทำงานเมื่อโปรแกรมเรียกใช้ไลบรารีแบบไดนามิกสร้างการเชื่อมต่อเครือข่าย ยกเว้นกระบวนการอัปเดตที่ทราบว่าเป็นกระบวนการที่ถูกต้อง
detection:
selection:
Image|endswith: '\\rundll32.exe'
filter_legit:
ParentImage|endswith: '\\MicrosoftEdgeUpdate.exe'
condition: selection and not filter_legitข้อมูลกำกับสำหรับการคัดแยก
นอกเหนือจากตรรกะแล้ว กฎที่ดีควรมีข้อมูลกำกับที่ช่วยให้ผู้ตอบสนองดำเนินการได้อย่างรวดเร็ว และช่วยให้วิศวกรดูแลความครอบคลุมได้
level— ข้อมูล, ต่ำ, ปานกลาง, สูง, วิกฤตtags— เทคนิคของ ATT&CK เช่น attack.t1059.001falsepositives— ตัวกระตุ้นที่ทราบว่าไม่เป็นอันตรายreferences— รายงานภัยคุกคามหรือเอกสารauthorและdate
เขตข้อมูลเหล่านี้ใช้เวลาเขียนเพียงไม่กี่นาที แต่ช่วยประหยัดเวลาได้หลายชั่วโมงระหว่างเกิดเหตุการณ์
กฎการเชื่อมโยง
กฎสำหรับเหตุการณ์เดียวไม่สามารถแสดงการโจมตีหลายขั้นตอนได้ กฎการ เชื่อมโยงของซิกมาจะรวมกฎพื้นฐานหลายข้อในช่วงเวลาเดียวกันเพื่อจับลำดับและรูปแบบ
ประเภทที่รองรับ ได้แก่ event_count (การตรงกัน N ครั้งภายในช่วงเวลา), value_count (ค่าที่ไม่ซ้ำกัน เช่น ผู้ใช้ที่เข้าสู่ระบบไม่สำเร็จจำนวนมาก) และ temporal (กฎ A แล้วจึงเป็นกฎ B) วิธีนี้ช่วยให้ตรวจจับได้ เช่น การเข้าสู่ระบบสำเร็จทันทีหลังจากความพยายามล้มเหลวเป็นชุด
name: bruteforce_then_success
correlation:
type: temporal
rules: [failed_logins, successful_login]
group-by: [SourceIp, TargetUser]
timespan: 10mการแปลงเป็นระบบปลายทาง
ด้วยเครื่องมือบรรทัดคำสั่งของซิกมา คุณสามารถแปลงกฎเป็นภาษาคำค้นหาของระบบเป้าหมายได้ กระบวนการประมวลผลจะจับคู่ชื่อเขตข้อมูลของซิกมากับโครงสร้างข้อมูลจริงของคุณ
ผลลัพธ์คือคำค้นหาที่พร้อมนำไปใช้งาน ซึ่งคุณสามารถวางหรือส่งผ่านส่วนเชื่อมต่อโปรแกรมประยุกต์ได้
sigma convert -t splunk -p sysmon \
-f default rule.yml
# Example output (Splunk SPL):
# Image="*\\powershell.exe" CommandLine="*-enc*"ตรวจสอบความเข้าใจ
ตรวจสอบความเข้าใจตรรกะการตรวจจับของซิกมา
ทบทวน
ขณะนี้คุณสามารถเขียนกฎซิกมาที่ใช้งานข้ามระบบได้แล้ว:
logsourceเลือกบันทึกและการจับคู่เขตข้อมูลที่เกี่ยวข้อง- การเลือกคือเกณฑ์เขตข้อมูลกับค่าที่มีชื่อกำกับ (เขตข้อมูล = AND, รายการค่า = OR)
- ตัวปรับแต่ง เช่น contains, endswith, all และ re ช่วยกำหนดการจับคู่ให้ละเอียดขึ้น
conditionรวมการเลือกด้วย and/or/not ตัวกรอง และการรวมค่า- ตัวระบุ การกรองที่แยกต่างหากใช้ตัดสัญญาณรบกวนที่ทราบว่าปลอดภัยออก
- ข้อมูลกำกับ (level, tags, falsepositives) ช่วยให้คัดแยกได้รวดเร็วยิ่งขึ้น
sigma convertแปลกฎเป็นระบบปลายทางของ SIEM
ถัดไป คุณจะเชื่อมโยงกฎเหล่านี้กับเทคนิคของผู้โจมตีด้วย MITRE ATT&CK
คำถามที่พบบ่อย
บทเรียน “การเขียนกฎ Sigma” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเขียนกฎ Sigma” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเขียนกฎ Sigma”
ไวยากรณ์กฎตรวจจับที่นำไปใช้ได้หลายระบบ คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การเขียนกฎ Sigma” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ