การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก
จับคู่ร่องรอยของมัลแวร์
การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
จากตัวอย่างสู่ rule
การค้นหาเริ่มต้นจากตัวอย่าง คุณดึงร่องรอยเฉพาะ ตัดสินใจว่าร่องรอยใดเปลี่ยนแปลงได้ยาก แล้วใส่ร่องรอยเหล่านั้นลงใน rule ที่ตรวจจับตระกูลได้โดยไม่แจ้งเตือนไฟล์ที่ไม่เป็นอันตราย
กระบวนการทำงานมีดังนี้: คัดกรองตัวอย่าง ดึงสตริงและลักษณะเชิงโครงสร้าง แยกสัญญาณออกจากสัญญาณรบกวน ร่าง rule แล้วทดสอบกับทั้งตระกูลและชุดไฟล์สะอาดก่อนนำไปใช้งาน
การดึงสตริงที่อาจใช้ได้
เริ่มด้วยเครื่องมือ strings เพื่อแสดงลำดับอักขระที่พิมพ์ได้ โดยเก็บทั้งข้อความ ASCII และ UTF-16 (แบบอักขระกว้าง) มัลแวร์วินโดวส์มักจัดเก็บสตริงเป็นแบบกว้าง
ตรวจสอบผลลัพธ์เพื่อหา URL ของ C2 ชื่อมิวเท็กซ์ เส้นทางรีจิสทรี ข้อความผิดพลาดแบบกำหนดเอง เส้นทาง PDB และข้อความที่เฉพาะเจาะจงผิดปกติ ไม่ต้องสนใจสตริงทั่วไปของระบบขณะทำงานและคอมไพเลอร์
strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txtการเลือกสตริงที่เปลี่ยนแปลงได้ยาก
ไม่ใช่ทุกสตริงที่ควรอยู่ใน rule ควรเลือกใช้ร่องรอยที่ผู้เขียนไม่สามารถเปลี่ยนได้โดยไม่ต้องใช้ความพยายาม:
- ชื่อมิวเท็กซ์หรือไพป์ที่ฝังตายตัวและเป็นเอกลักษณ์ของตระกูล
- เครื่องหมายโพรโทคอลเฉพาะหรือคีย์การตั้งค่า
- ข้อความดีบักหรือข้อความแจ้งการหยุดทำงานที่ไม่ปกติ
- เส้นทาง PDB ที่ฝังอยู่ซึ่งเปิดเผยสภาพแวดล้อมการสร้าง
หลีกเลี่ยงโครงร่างสำเร็จรูปของไลบรารี ชื่อส่วนต่อประสานโปรแกรมประยุกต์ทั่วไป และสตริงรุ่นที่ใช้ร่วมกันโดยซอฟต์แวร์ที่ถูกต้อง เพราะสิ่งเหล่านี้ก่อให้เกิดผลบวกลวง
strings:
$mutex = "Global\\Zx7yQ_lock" wide
$cfgkey = "x0r_cfg_begin" ascii
$pdb = "C:\\build\\loader\\release\\loader.pdb"การเอาชนะการทำให้สับสนแบบง่าย
ตระกูลมัลแวร์จำนวนมากใช้ XOR หรือเข้ารหัสสตริงแบบไม่ซับซ้อน หากมีสตริงที่อ่านได้ชัดเจนอยู่น้อย ให้ค้นหารูปแบบที่เข้ารหัสหรือกระบวนการถอดรหัส
คุณสามารถคำนวณไบต์ที่เข้ารหัสด้วย XOR จากข้อความต้นฉบับที่ทราบ แล้วจับคู่กับไบต์เหล่านั้น หรือใช้ตัวปรับแต่ง xor ของ YARA เพื่อจับคู่สตริงภายใต้คีย์ XOR ขนาดหนึ่งไบต์ใด ๆ โดยอัตโนมัติ
strings:
// matches "http://" under any single-byte XOR key
$u = "http://" xor
// or a fixed key range
$k = "config" xor(0x01-0xff)การค้นหาด้วยรูปแบบเลขฐานสิบหก
เมื่อสตริงถูกทำให้สับสนแต่โค้ดยังไม่ถูกทำให้สับสน ให้จับคู่รูปแบบไบต์จากตรรกะของมัลแวร์เอง เช่น ส่วนโค้ดถอดรหัส วนรอบคลายการแพ็ก หรือค่าคงที่เฉพาะ
แยกส่วนคำสั่งของตัวอย่าง ค้นหาลำดับคำสั่งที่โดดเด่น แล้วแปลงรหัสคำสั่งเป็นสตริงเลขฐานสิบหก ใช้ไวลด์การ์ดกับไบต์ที่เปลี่ยนแปลงได้ (ที่อยู่และค่าคงที่ฝังในคำสั่ง) เพื่อให้รูปแบบยังใช้ได้หลังคอมไพล์ใหม่
strings:
// XOR decrypt loop with wildcarded counter/address
$decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }ไวลด์การ์ดและการกระโดดในการใช้งานจริง
หัวใจของการค้นหาด้วยเลขฐานสิบหกคือการเลือกไบต์ที่จะใช้ไวลด์การ์ด หากรัดกุมเกินไป การคอมไพล์ใหม่จะทำให้ rule ใช้ไม่ได้ แต่หากหลวมเกินไปก็จะจับคู่ได้ทุกอย่าง
- ใช้ไวลด์การ์ดกับออฟเซตสัมพัทธ์และค่าคงที่ฝังในคำสั่งที่คอมไพเลอร์เปลี่ยนแปลง
- ตรึงรหัสคำสั่งไว้ เพราะอัลกอริทึมยังคงเดิม
- ใช้การกระโดด
[n-m]เมื่อความยาวคำสั่งเปลี่ยนแปลงได้
มุ่งสร้างรูปแบบที่ยาวพอจะเป็นเอกลักษณ์ (มักมีไบต์ที่มีความหมายอย่างน้อย 8 ไบต์) แต่ยืดหยุ่นในจุดที่จำเป็น
strings:
$stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }ตัวบ่งชี้เชิงโครงสร้างและ PE
ลักษณะคงที่นอกเหนือจากไบต์ดิบช่วยสร้างเงื่อนไขที่มีความแม่นยำและสัญญาณรบกวนต่ำ โดยใช้โมดูล pe คุณสามารถจับคู่สิ่งต่อไปนี้:
- imphash — ค่าแฮชของตาราง imports ซึ่งมักคงที่ในการสร้างแต่ละรุ่นของตระกูล
- ชื่อส่วนต่าง ๆ — ตัวแพ็กแบบกำหนดเองจะเพิ่มส่วนที่บ่งชี้ได้ชัด
- imports เฉพาะ — VirtualAllocEx + WriteProcessMemory + CreateRemoteThread เป็นสัญญาณของการฉีดโค้ด
import "pe"
condition:
pe.imphash() == "4e3a9f..." or
for any s in pe.sections : ( s.name == ".x0rsec" )Entropy ในฐานะสัญญาณ
ส่วนที่ถูกแพ็กหรือเข้ารหัสมีค่า entropy สูง โมดูล math ใช้วัดค่านี้ ทำให้คุณทำเครื่องหมายตัวอย่างที่ส่วนข้อมูลบรรทุกดูเหมือนถูกเข้ารหัส ซึ่งเป็นลักษณะเด่นของตัวแพ็ก
การใช้ entropy เพียงอย่างเดียวมีสัญญาณรบกวนสูง (โปรแกรมติดตั้งที่บีบอัดก็มี entropy สูงเช่นกัน) ดังนั้นควรใช้ร่วมกับตัวบ่งชี้อื่น แทนการแจ้งเตือนจากค่านี้เพียงอย่างเดียว
import "math"
condition:
math.entropy(0, filesize) >= 7.2 and $loader_stubการรวมตัวบ่งชี้
rule ที่แข็งแกร่งที่สุดต้องใช้ตัวบ่งชี้อิสระหลายรายการ เพื่อไม่ให้การบังเอิญตรงกันเพียงครั้งเดียวทำให้เกิดการจับคู่ ควรผสมสตริง รูปแบบโค้ด และลักษณะเชิงโครงสร้างเข้าด้วยกัน
เงื่อนไขแบบหลายชั้นนี้ต้านทานทั้งผลบวกลวง (ทุกส่วนต้องสอดคล้องกัน) และการหลบเลี่ยง (ผู้เขียนต้องเปลี่ยนลักษณะหลายอย่างพร้อมกัน)
condition:
uint16(0) == 0x5A4D and
filesize < 800KB and
$mutex and
$decrypt and
pe.imports("kernel32.dll", "CreateRemoteThread")การตั้งชื่อ เมตาดาทา และการกำหนดรุ่น
rule สำหรับการค้นหาจะมีประโยชน์ก็ต่อเมื่อผู้อื่นเชื่อถือและดูแลรักษาได้ ตั้งชื่อแต่ละ rule ให้ชัดเจน มีเนมสเปซ และเติมข้อมูล meta ให้ครบถ้วน
- บันทึกค่าแฮชของตัวอย่างที่ใช้สร้าง rule
- ระบุตระกูล ผู้เขียน วันที่ และแหล่งอ้างอิง
- เพิ่มค่าฟิลด์รุ่นเมื่อปรับปรุงตรรกะ
เมื่อ rule ทำงานในอีกหลายเดือนต่อมา ข้อมูลเมตานี้จะบอกผู้วิเคราะห์ว่าหมายถึงอะไรและควรเชื่อถือมากน้อยเพียงใด ทำให้การค้นหาเฉพาะครั้งกลายเป็นการตรวจจับที่ทนทานและแบ่งปันได้
meta:
family = "X0rLoader"
author = "ir-team"
date = "2026-06-04"
hash = "9f1c...e2"
version = "2"ทดสอบก่อนเชื่อถือ
ตรวจสอบ rule ใหม่กับชุดข้อมูลสองชุดเสมอ:
- ผลบวกจริง — ตัวอย่างที่ทราบทั้งหมดของตระกูลต้องตรงกัน
- ซอฟต์แวร์ปกติ — ชุดข้อมูลสะอาดขนาดใหญ่ (ไบนารีระบบ แอปทั่วไป) ต้อง NOT ตรงกัน
ผลบวกลวงเพียงครั้งเดียวบน DLL ของวินโดวส์อาจทำให้ไฟล์สำคัญทั่วทั้งระบบถูกกักกัน เรียกใช้ นับ ตรวจทานกรณีที่พลาดและกรณีที่ตรวจพบ แล้วปรับปรุงก่อนนำไปใช้อย่างกว้างขวาง
yara -r family.yar /malware_corpus/ # expect all to hit
yara -r family.yar /clean_corpus/ # expect zero hitsตรวจสอบด่วน
เลือกตัวบ่งชี้ที่ทนต่อการเปลี่ยนแปลงมากที่สุด
สรุป
การค้นหา YARA เชิงปฏิบัติตั้งแต่ต้นจนจบ:
- ดึงสตริง ASCII และแบบกว้าง เก็บร่องรอยที่เปลี่ยนแปลงได้ยาก (มิวเท็กซ์ คีย์การตั้งค่า เส้นทาง PDB)
- เอาชนะการทำให้สับสนแบบไม่ซับซ้อนด้วยตัวปรับแต่ง XORหรือรูปแบบที่เข้ารหัส
- จับคู่รูปแบบไบต์ของโค้ด (ส่วนโค้ดถอดรหัส/คลายการแพ็ก) เมื่อสตริงถูกซ่อนไว้
- ใช้ไวลด์การ์ดกับไบต์ที่เปลี่ยนแปลงได้ ตรึงรหัสคำสั่งไว้ และใช้การกระโดดกับความยาวที่เปลี่ยนแปลงได้
- ใช้PE imphash ส่วนต่าง ๆ และ imports รวมถึงentropyเป็นสัญญาณเชิงโครงสร้าง
- รวมตัวบ่งชี้หลายรายการเพื่อต้านทานผลบวกลวงและการหลบเลี่ยง
- ทดสอบกับชุดข้อมูลตระกูลและซอฟต์แวร์ปกติเสมอก่อนนำไปใช้งาน
ถัดไป: การเรียกใช้ rule เหล่านี้กับทั้งสภาพแวดล้อม
เรียนรู้ Cyber Security Academy ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 76
- บทเรียน
- 303
คำถามที่พบบ่อย
บทเรียน “การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก”
จับคู่ร่องรอยของมัลแวร์ คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- YARA ใช้ทำอะไร
- ไวยากรณ์กฎ YARA
- การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก
- การขยายขนาดและทำให้การสแกนเป็นอัตโนมัติ