ไวยากรณ์กฎ YARA
สตริง เงื่อนไข และเมทาดาทา
ไวยากรณ์กฎ YARA เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
สามส่วนของกฎ
กฎ YARA มีชื่อและส่วนต่าง ๆ ได้สูงสุดสามส่วน ได้แก่ meta, strings และ condition ส่วนเงื่อนไขเป็นส่วนเดียวที่จำเป็น แต่กฎที่ใช้งานจริงมักใช้ครบทั้งสามส่วน
rule Example_Malware
{
meta:
author = "analyst"
description = "Detects Example family"
strings:
$a = "EvilConfig"
$b = { 6A 40 68 00 30 00 00 }
condition:
$a and $b
}ส่วน meta
meta เก็บข้อมูลกำกับเชิงบรรยายที่ไม่ส่งผลต่อการจับคู่ แต่มีความสำคัญอย่างยิ่งต่อการคัดแยกเบื้องต้นและการบำรุงรักษา
author,date,descriptionreference— ลิงก์รายงานหรือคำแนะนำhash— ตัวอย่างที่ใช้สร้างกฎtlp— การจัดประเภทการแบ่งปัน
ค่าอาจเป็นข้อความ จำนวนเต็ม หรือค่าบูลีน ให้ถือว่าส่วนข้อมูลกำกับเป็นเอกสารประกอบ เพราะผู้รับผิดชอบคนถัดไปต้องอาศัยข้อมูลนี้
สตริงข้อความ
ส่วน strings กำหนดตัวระบุ (เริ่มต้นด้วย $) ที่ผูกกับรูปแบบ รูปแบบที่ง่ายที่สุดคือสตริงข้อความในเครื่องหมายคำพูด
ตัวปรับแต่งช่วยกำหนดรายละเอียดการจับคู่:
nocase— ไม่คำนึงถึงตัวพิมพ์เล็กใหญ่wide— UTF-16 (สองไบต์ต่อตัวอักษร ซึ่งพบได้ทั่วไปในวินโดวส์)ascii— ASCII (ค่าเริ่มต้น ใช้ร่วมกับ wide เพื่อจับคู่ได้ทั้งสองรูปแบบ)fullword— จับคู่เฉพาะเมื่อเป็นคำทั้งคำ
strings:
$s1 = "cmd.exe /c" nocase
$s2 = "InjectDll" wide ascii
$s3 = "admin" fullwordสตริงเลขฐานสิบหก
สำหรับรูปแบบไบนารี ให้ใช้สตริงเลขฐานสิบหกภายในวงเล็บปีกกา รูปแบบเหล่านี้จับคู่ไบต์ดิบ จึงเหมาะสำหรับรหัสคำสั่ง หมายเลขบ่งชี้รูปแบบ และโครงสร้าง
สตริงเลขฐานสิบหกรองรับความยืดหยุ่นดังนี้:
??— อักขระแทนค่าระดับครึ่งไบต์/ไบต์[n-m]— การข้ามไบต์ใด ๆ จำนวนตั้งแต่ n ถึง m( A | B )— ทางเลือกหลายแบบ
strings:
$h1 = { 4D 5A 90 00 }
$h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
$h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
$h4 = { ( B8 | B9 ) 00 00 00 00 }นิพจน์ปกติ
YARA รองรับรูปแบบนิพจน์ปกติที่คั่นด้วยเครื่องหมายทับ โดยมีตัวปรับแต่งแบบเดียวกับสตริงข้อความ ใช้นิพจน์ปกติเมื่อรูปแบบมีความแตกต่างกันแต่เป็นไปตามโครงสร้าง เช่น เครื่องหมายกำกับการตั้งค่าหรือชื่อมิวเท็กซ์ที่สร้างขึ้น
นิพจน์ปกติมีพลังมากแต่ใช้ทรัพยากรสูง ควรเลือกใช้สตริงคงที่หรือเลขฐานสิบหกเมื่อทำได้ และกำหนดจุดยึดของนิพจน์ปกติให้รัดกุมเพื่อหลีกเลี่ยงการสแกนทั้งไฟล์
strings:
$re1 = /mutex_[a-f0-9]{8}/ nocase
$re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// asciiส่วนเงื่อนไข
condition คือนิพจน์บูลีนที่ใช้ตัดสินว่าตรงกันหรือไม่ อ้างอิงตัวระบุสตริงโดยตรง ส่วน $a ที่อยู่เดี่ยว ๆ จะเป็นจริงเมื่อพบสตริงนั้น
ใช้ and, or, not และวงเล็บร่วมกัน ส่วนนี้คือจุดที่คุณกำหนดตรรกะเพื่อแยกการตรวจพบตระกูลจริงออกจากการบังเอิญตรงกัน
condition:
$a and ($b or $c) and not $benignการนับและเซต
YARA มีตัวระบุปริมาณที่ยืดหยุ่นสำหรับเซตสตริง:
any of them/all of them2 of ($s*)— อย่างน้อยสองรายการจากกลุ่ม#a > 3— จำนวนการจับคู่ของ $a มากกว่า 3
สิ่งเหล่านี้ช่วยให้คุณกำหนดให้มี เช่น เครื่องหมายบ่งชี้ตระกูลห้ารายการต้องตรงกันอย่างน้อยสามรายการ โดยสร้างสมดุลระหว่างความไวกับผลบวกลวง
condition:
3 of ($str*) and #marker >= 2ออฟเซตและขนาดไฟล์
เงื่อนไขสามารถอ้างอิงได้ว่า ตำแหน่งใด ที่เกิดการจับคู่ รวมถึงขนาดของไฟล์:
$a at 0— การจับคู่ต้องอยู่ที่ออฟเซต 0$a in (0..1024)— อยู่ภายในช่วงไบต์filesize— ขนาดทั้งหมด เช่นfilesize < 200KBuint16(0) == 0x5A4D— อ่านจำนวนเต็มที่ออฟเซต (ในที่นี้คือส่วนหัว MZ)
การยึดการจับคู่เข้ากับตำแหน่งช่วยลดผลบวกลวงได้อย่างมากและเร่งการสแกน
condition:
uint16(0) == 0x5A4D and filesize < 500KB and $payloadโมดูล
โมดูลของ YARA เปิดเผยข้อมูลแบบมีโครงสร้างที่คำนึงถึงรูปแบบไฟล์ ทำให้เงื่อนไขใช้เหตุผลกับฟิลด์ที่แยกวิเคราะห์แล้วแทนไบต์ดิบ
pe— imports ของ PE, ส่วนต่าง ๆ, จุดเริ่มต้นการทำงาน, ลายเซ็น, imphashhash— คำนวณ md5/sha256 ของส่วนต่าง ๆmath— entropy และสถิติelf,dotnet,magic
ตัวอย่างเช่น การนำเข้า pe ช่วยให้คุณจับคู่ฟังก์ชันใน imports หรือ imphash เฉพาะได้ ซึ่งทนทานกว่าสตริงตามตัวอักษรมาก
import "pe"
condition:
pe.imphash() == "a1b2c3d4e5f6..." and
pe.imports("kernel32.dll", "VirtualAllocEx")การวนซ้ำบนเซต
สำหรับตรรกะที่ซับซ้อนขึ้น YARA รองรับการวนซ้ำเหนือกลุ่มข้อมูลด้วย for คุณสามารถเขียนเงื่อนไข เช่น ออฟเซตอย่างน้อยสองค่าต้องมีคุณสมบัติตามกำหนด หรือชื่อส่วนใด ๆ ต้องตรงกับรูปแบบ
ความสามารถนี้จำเป็นอย่างยิ่งเมื่อทำงานกับข้อมูลจากโมดูล เช่น ส่วนต่าง ๆ ของ PE หรือ imports ซึ่งต้องตรวจสอบรายการที่มีความยาวเปลี่ยนแปลงได้แทนค่าค่าเดียว
import "pe"
condition:
for any i in (0..pe.number_of_sections - 1) : (
pe.sections[i].name == ".evil"
)ทั่วไป ส่วนตัว และแท็ก
คีย์เวิร์ดระดับ rule ช่วยจัดระเบียบชุดกฎ:
global rule— เงื่อนไขของ rule นี้จะควบคุมกฎอื่นทั้งหมดในไฟล์ (เช่น สแกนเฉพาะไฟล์ PE)private rule— องค์ประกอบพื้นฐานที่นำกลับมาใช้ได้ ไม่รายงานด้วยตัวเอง แต่ rule อื่นอ้างอิงได้- แท็กหลังชื่อ rule ใช้จัดประเภทการตรวจพบ (เช่น ใช้กรองผลลัพธ์)
global private rule IsPE { condition: uint16(0) == 0x5A4D }
rule Dropper : trojan dropper {
strings: $a = "drop_payload"
condition: $a
}ตรวจสอบด่วน
วิเคราะห์ความทนทานของเงื่อนไข
สรุป
ไวยากรณ์ rule ของ YARA ในภาพรวม:
- rule หนึ่งรายการ =
meta+strings+condition - สตริงข้อความพร้อมตัวปรับแต่งที่ไม่คำนึงถึงตัวพิมพ์เล็กใหญ่ แบบกว้าง ASCII และเต็มคำ
- สตริงเลขฐานสิบหกพร้อมไวลด์การ์ด
??การกระโดด[n-m]และทางเลือก - นิพจน์ปกติสำหรับรูปแบบตัวแปรที่มีโครงสร้าง (ใช้เท่าที่จำเป็น)
conditionรวมสตริงด้วย and/or/not- ตัวระบุปริมาณ: any/all/N of และการนับด้วย
#a - การยึดตำแหน่ง: at, in, filesize และการอ่านค่าด้วย uint
- โมดูล (พีอี, แฮช, คณิตศาสตร์) ใช้จับคู่ข้อมูลแบบมีโครงสร้างและ imphash
global,privateและแท็กใช้จัดระเบียบชุด rule
ถัดไป: การค้นหาเชิงปฏิบัติด้วยสตริงและเลขฐานสิบหก
คำถามที่พบบ่อย
บทเรียน “ไวยากรณ์กฎ YARA” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ไวยากรณ์กฎ YARA” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ไวยากรณ์กฎ YARA”
สตริง เงื่อนไข และเมทาดาทา คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ไวยากรณ์กฎ YARA” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- YARA ใช้ทำอะไร
- ไวยากรณ์กฎ YARA
- การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก
- การขยายขนาดและทำให้การสแกนเป็นอัตโนมัติ