Cyber Security Academy · บทเรียน

การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก

จับคู่ร่องรอยของมัลแวร์

บทเรียน 3 จาก 413 ขั้นตอน

การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. YARA ใช้ทำอะไร
  2. ไวยากรณ์กฎ YARA
  3. การล่าภัยคุกคามด้วยสตริงและเลขฐานสิบหก
  4. การขยายขนาดและทำให้การสแกนเป็นอัตโนมัติ
← กลับไปที่ Cyber Security Academy