SPL (Search Processing Language) คือภาษาค้นหาของ Sangfor Athena XDR ใช้กรอง Log ในหน้า Security Logs และกรองรายการในหน้า Security Incidents กับ Security Alerts แบบ Advanced Mode บทความนี้สำหรับผู้ดูแลระบบและทีม SOC ที่ต้องการล่าภัยคุกคาม (Threat Hunting) เชิงรุก หรือหาขอบเขตของเหตุการณ์ที่เพิ่งพบ เช่น มีเครื่องอื่นติดต่อโดเมนเดียวกันหรือไม่ มีใครสแกนเครื่องที่เปิดให้บริการจากภายนอก หรือเครื่องหนึ่งรันคำสั่งอะไรไปบ้าง โดยอธิบายรูปแบบคำสั่ง ตัวดำเนินการ วิธีคิด และตัวอย่างการล่าภัยแบบทีละขั้น
สารบัญ
- รูปแบบ SPL ในหน้า Security Logs
- SPL ในหน้า Security Incidents และ Security Alerts
- วิธีคิดในการล่าภัย
- ตัวอย่าง: หาเครื่องที่ถามหาโดเมนต้องสงสัย
- ตัวอย่าง: IP ภายนอกที่สแกนเครื่องที่เปิดให้บริการ
- ตัวอย่าง: โปรเซสที่รันบนเครื่องหนึ่ง
- ตัวอย่าง: กฎตรวจจับหนึ่งกฎเกิดขึ้นกับกี่เครื่อง
- จากผลการล่าภัยสู่การตรวจจับอัตโนมัติ
รูปแบบ SPL ในหน้า Security Logs
ในช่องค้นหาของ Detections › Security Logs แต่ละเงื่อนไขมี 3 ส่วน คือ ชื่อฟิลด์ · ตัวดำเนินการ · ค่า ค่าที่เป็นข้อความหรือ IP ต้องครอบด้วยเครื่องหมายคำพูด หลายเงื่อนไขต่อกันด้วย and หรือ or และพิมพ์ชื่อฟิลด์ได้ทันทีโดยไม่ต้องมีคำนำหน้า
SrcIP = "192.168.20.15"
SrcIP = "192.168.20.15" and DNSQueryDomainName like "example"
ชื่อฟิลด์ใน SPL คือชื่อที่แสดงบนหน้าจอแบบเขียนติดกัน เช่น Src IP → SrcIP, Dst Port → DstPort, DNS Query Domain Name → DNSQueryDomainName, Process Path → ProcessPath, Process Execution Command → ProcessExecutionCommand, Host Ip → HostIp, Rule Name → RuleName วิธีที่ง่ายที่สุดคือสร้างเงื่อนไขด้วยไอคอนรูปกรวย (ตัวสร้างเงื่อนไข) แล้วดูคำสั่งที่ระบบเขียนให้ในช่อง SPL จากนั้นค่อยแก้ต่อเอง (ดู Security Logs บน Athena XDR)
| รูปแบบ | ความหมาย | ตัวอย่าง |
|---|---|---|
= / !=
|
เท่ากับ / ไม่เท่ากับ |
DstPort = 445SrcIP != "192.168.20.15"
|
in {…} / not in {…}
|
ตรง / ไม่ตรงกับค่าใดค่าหนึ่งในรายการ เขียนรายการในวงเล็บปีกกา คั่นด้วยจุลภาค | SrcIP in {"192.168.20.15","192.168.20.16"} |
like "คำ" |
ค่าที่มีคำนี้อยู่ส่วนใดก็ได้ พิมพ์เฉพาะคำที่ต้องการ |
DNSQueryDomainName like "example" พบทั้ง example.com และ www.example.com |
rlike "regex" |
จับคู่ด้วย Regular Expression | DNSQueryDomainName rlike "example\.com$" |
> >= < <=
|
เปรียบเทียบฟิลด์ตัวเลข ใช้คู่กับ and เพื่อกำหนดช่วง |
DstPort >= 1 and DstPort <= 1024 |
not ( … ) |
กลับความหมายของเงื่อนไข ครอบเงื่อนไขด้วยวงเล็บทุกครั้ง | not (SrcIP = "192.168.20.15") |
and / or
|
ต้องตรงทุกข้อ / ตรงข้อใดข้อหนึ่ง | SrcIP = "192.168.20.15" or DNSQueryDomainName like "example" |
ตัวดำเนินการที่ใช้ได้ขึ้นกับชนิดของฟิลด์ ฟิลด์ IP (Src IP, Dst IP, Host IP) ใช้ = != in like rlike ฟิลด์ตัวเลข (Src Port, Dst Port) ใช้ = != > >= < <= และฟิลด์ข้อความ (Rule Name, Process Path, File MD5) ใช้ = != in like rlike ตัวสร้างเงื่อนไขจะแสดงเฉพาะตัวที่เหมาะกับฟิลด์นั้นให้เลือก
อ่านข้อความใต้ช่อง SPL: ขณะพิมพ์ ระบบตรวจคำสั่งให้ทันที เช่น Unknown field (X) หมายถึงชื่อฟิลด์สะกดไม่ตรง ให้เลือกฟิลด์จากตัวสร้างเงื่อนไขแทน ส่วน The statement lacks values. หมายถึงเงื่อนไขยังขาดค่า และหากประเภท Log ที่เลือกไม่มีฟิลด์นั้น ระบบจะแจ้งให้ทราบเช่นกัน
SPL ในหน้า Security Incidents และ Security Alerts
ในหน้า Detections › Security Incidents และ Detections › Security Alerts (แท็บ All Alerts) คลิก Basic Mode ⌄ แล้วเลือก Advanced Mode เพื่อพิมพ์ SPL รูปแบบของสองหน้านี้ขึ้นต้นด้วยคำว่า filter ต่อหลายคำสั่งด้วยเครื่องหมาย Pipe (|) และใน like ใช้ดอกจัน (*) แทนตัวอักษรใด ๆ กี่ตัวก็ได้ โดยขีดตั้งภายในค่าของ like หมายถึง "หรือ"
| ต้องการ | SPL |
|---|---|
| Incident ที่มีหลักฐานทั้งฝั่งเครือข่ายและฝั่ง Endpoint | filter DataSource = "NDR&EDR" |
| Incident ที่ชื่อมีคำว่า virus หรือ domain | filter IncidentName like "*virus*|*domain*" |
| Alert ฝั่งเครือข่ายที่ชื่อมีคำว่า mining | filter DataSource in {"NDR"} | filter AlertName like "*mining*" |
| Alert ฝั่งเครือข่ายจาก IPS Engine | filter DataSource = "NDR" | filter DetectionEngine in {"IPS Engine"} |
| Alert ที่เครื่องหนึ่งเป็นต้นทาง | filter SrcIP = "192.168.20.15" |
ค่าในภาพเป็นค่าตัวอย่าง ให้เปลี่ยนเป็นค่าขององค์กร คำสั่งที่ใช้ประจำเก็บไว้ใน Favorites ของแต่ละหน้าได้ และตั้งรายการหนึ่งเป็น Default เพื่อให้หน้านั้นเปิดมาพร้อมเงื่อนไขนั้นทุกครั้ง
| หัวข้อ | Security Logs | Security Incidents / Security Alerts (Advanced Mode) |
|---|---|---|
| คำนำหน้า | พิมพ์ชื่อฟิลด์ได้เลย | ขึ้นต้นด้วย filter
|
| ต่อหลายเงื่อนไข |
and / or
|
and / or หรือ Pipe | ระหว่างคำสั่ง filter
|
like |
like "คำ" = มีคำนี้อยู่ในค่า |
like "*คำ*" ใช้ * และ | (หรือ) |
วิธีคิดในการล่าภัย
Incident ที่ XDR สร้างเริ่มจากสิ่งที่ระบบตรวจพบ ส่วนการล่าภัยเริ่มจากข้อสงสัยของทีมเองก่อนที่ระบบจะแจ้งเตือน ทำเป็นวงรอบดังนี้
ตั้งสมมติฐาน — จากข่าวภัยคุกคาม จาก Incident ที่เพิ่งพบ หรือจากขั้นของ MITRE ATT&CK ในหน้า Risky Assets เช่น ขั้นขโมยรหัสผ่าน หรือขั้นติดต่อกลับหาผู้โจมตี
ตีกรอบ — เลือกประเภท Log ที่ตอบคำถามนั้น และช่วงเวลาที่เกี่ยวข้อง
ค้น — เขียน SPL จากคำถาม เริ่มจากเงื่อนไขกว้างแล้วค่อยเติมให้แคบลง
เจาะต่อ — เมื่อเจอค่าที่ผิดปกติ ให้ตามต่อไปที่เครื่องนั้น โปรเซสนั้น และ Incident ที่เกี่ยวข้อง ใช้หลักฐานทั้งฝั่งเครือข่ายและฝั่ง Endpoint ยืนยันกัน
บันทึก — หากพบภัยจริง ให้ตั้งเป็นกฎเตือนและเก็บคำค้นไว้ให้ทีมใช้ซ้ำ หากไม่พบ ให้บันทึกไว้ว่าตรวจแล้ว เพื่อไม่ต้องเริ่มใหม่ในครั้งหน้า
หลักสำคัญคือเทียบกับการทำงานปกติขององค์กรเสมอ เช่น เครื่องผู้ใช้เชื่อมต่อ SMB ไปยัง Domain Controller เป็นงานปกติของโดเมน แต่ถ้าปลายทางเป็นเครื่องผู้ใช้ด้วยกัน นั่นคือค่าที่ควรตรวจต่อ
ตัวอย่าง: หาเครื่องที่ถามหาโดเมนต้องสงสัย
คำถาม: นอกจากเครื่องที่เกิด Incident แล้ว มีเครื่องอื่นถามหาโดเมนเดียวกันหรือไม่
ที่ Security Logs เลือกประเภท Log DNS Logs และช่วงเวลา Last 30 days
-
ค้นด้วยชื่อโดเมนเพียงบางส่วน เพื่อให้พบทั้งโดเมนหลักและโดเมนย่อย
DNSQueryDomainName like "example" -
คลิก Expand ดูกราฟ Trend ว่าการถามเกิดช่วงเดียวหรือต่อเนื่อง แล้วดูต้นทางในคอลัมน์ Src IP
-
ตัดเครื่องที่รู้แล้วออก เพื่อดูว่ายังเหลือใคร
DNSQueryDomainName like "example" and SrcIP != "192.168.20.15" -
ถ้าแถวที่เหลือมีต้นทางเป็น DNS Server ภายในที่ส่งคำถามต่อออกไปยัง DNS ภายนอก แปลว่า DNS Server เพียงถามต่อให้ ให้เปิด Security Alerts แล้วดู Alert ที่ชื่อขึ้นต้นด้วย [DNS Forwarding Attribution] ซึ่งระบุเครื่องลูกข่ายที่เป็นต้นทางจริง (การส่ง DNS Log จาก DNS Server เข้า XDR ดูที่ การส่ง Log ของ Windows DNS Server เข้า Athena XDR)
ตัวอย่าง: IP ภายนอกที่สแกนเครื่องที่เปิดให้บริการ
คำถาม: IP ภายนอกที่น่าสงสัยเข้ามาหาเครื่องใดบ้าง ผ่านพอร์ตใด
เลือกประเภท Log Firewall ACL Logs (กลุ่ม Third-Party Logs) ซึ่งเก็บ Connection ที่ผ่านไฟร์วอลล์ของผู้ผลิตอื่น เช่น FortiGate ที่ส่ง Log ผ่าน XDR Broker
-
ค้นด้วย IP ต้นทาง
SrcIP = "203.0.113.50" อ่านผล: ถ้าปลายทางเป็นเครื่องเดียวแต่พอร์ตปลายทางเปลี่ยนไปเรื่อย ๆ และกราฟ Trend รวมอยู่ในช่วงสั้น ๆ คือรูปแบบของการสแกนพอร์ต
-
เจาะพอร์ตที่สำคัญ เช่น SSH
SrcIP = "203.0.113.50" and DstPort = 22 -
คลิกแถวเพื่อเปิด Log Details ดูต้นทาง ปลายทาง พอร์ต และ Policy ของไฟร์วอลล์ที่ตรงกับ Connection นั้น พร้อมบรรทัด Raw Logs ที่เก็บข้อความต้นฉบับจากไฟร์วอลล์
ตัวอย่าง: โปรเซสที่รันบนเครื่องหนึ่ง
คำถาม: เครื่องที่ถูกโจมตีรันคำสั่งอะไรไปบ้าง และมีเครื่องอื่นรันคำสั่งแบบเดียวกันหรือไม่
เลือกประเภท Log Endpoint Behavior Logs (กลุ่ม Behavior Logs) ซึ่งเป็นเหตุการณ์โปรเซสที่ Athena EPP ส่งเข้ามา คอลัมน์หลักคือ Process Path, Process Execution Command, Parent Process Path, Parent Process Execution Command และ Host Ip
-
ค้นโปรแกรมที่สนใจบนเครื่องนั้น
ProcessPath like "powershell" and HostIp = "192.168.20.15" -
ค้นจากบรรทัดคำสั่งแทนชื่อโปรแกรม เช่น เครื่องมือที่มักใช้ดาวน์โหลดไฟล์
ProcessExecutionCommand like "certutil" and HostIp = "192.168.20.15" -
ตรวจว่ามีเครื่องอื่นรันโปรแกรมเดียวกันหรือไม่
ProcessPath like "powershell" and HostIp != "192.168.20.15" บรรทัดคำสั่งแบบเต็มดูต่อได้ที่ Attack Chain ของ Incident ในช่อง CLI Argument หากคำสั่งถูก Encode ไว้ ใช้ปุ่ม Code Converter ถอดให้อ่านได้
Endpoint Behavior Logs มาจากนโยบายของ Athena EPP ที่เปิด "Collect endpoint behavior data" และการส่งข้อมูลไปยัง Athena XDR ไว้แล้ว ดูการตั้งค่าที่ การเชื่อมต่อ Athena EPP กับ Athena XDR
ตัวอย่าง: กฎตรวจจับหนึ่งกฎเกิดขึ้นกับกี่เครื่อง
คำถาม: เรื่องนี้กระทบกี่เครื่อง ซึ่งเป็นคำถามที่ผู้บริหารมักถามเป็นข้อแรก
เลือกประเภท Log Network Security Logs และ Endpoint Security Logs (กลุ่ม Security Detection Logs)
-
ค้นด้วยคำในชื่อกฎที่จับเครื่องแรกได้ (คำจากชื่อ Alert)
RuleName like "Certutil" ดูคอลัมน์ Reporting Device แถวจาก Athena STA หรือ Athena NGFW บอกการติดต่อฝั่งเครือข่าย (ต้นทาง ปลายทาง พอร์ต) ส่วนแถวจาก Agent ของ Athena EPP คือผลตรวจจับฝั่ง Endpoint ของเครื่องที่ติดตั้ง Agent เปิด Log Details เพื่อดูว่าเป็นเครื่องใด
-
ตัดเครื่องที่รู้แล้วออก
RuleName like "Certutil" and SrcIP != "192.168.20.15"แถวที่ยังเหลือจาก Agent ของ Athena EPP ให้เปิด Log Details ตรวจว่าเป็นผลตรวจจับฝั่ง Endpoint ของเครื่องเดิมหรือเป็นเครื่องอื่น
ถ้ากฎเดียวกันขึ้นหลายเครื่อง ให้ไล่ต่อว่าเป็นการแพร่กระจาย หรือกฎไปตรงกับงานปกติขององค์กร (False Positive)
รูปแบบเดียวกันใช้ตอบคำถามอื่นได้ เช่น เครื่องหนึ่งเชื่อมต่อ SMB ไปหาเครื่องใดบ้าง (SMB Logs: SrcIP = "192.168.20.15" and DstPort = 445) หรือมีเครื่องใดใช้ Remote Desktop เข้าเครื่องอื่น (RDP Logs: DstPort = 3389)
จากผลการล่าภัยสู่การตรวจจับอัตโนมัติ
-
เก็บคำค้น — คลิกปุ่มรูปดาวเพื่อบันทึกคำค้นที่ได้ผลเข้า Favorites ตั้งชื่อด้วยตัวอักษรภาษาอังกฤษ ตัวเลข และขีดล่างเท่านั้น เช่น
Hunt_SuspiciousDomainครั้งต่อไปเปิดจาก Favorites แล้วค้นได้ทันที - Create Alert — ติ๊กแถวที่เกี่ยวข้องในผลการค้นหา แล้วคลิก Create Alert เพื่อสร้างกฎเตือนจาก Log ที่เลือก XDR จะแจ้งเตือนในหน้า Security Alerts ทุกครั้งที่พบเหตุการณ์ที่ตรงกัน
- Custom IOC Alert Rule — เมื่อพบโดเมนหรือ IP อันตรายตัวใหม่ ตั้งเป็นกฎ IOC ได้จากเมนู Custom Rule ในหน้า Security Alerts หรือที่ Configuration › Basic Configuration › Custom Detection Rules (ดู Custom Detection Rules บน Athena XDR)
ข้อคิดเห็น
0 ข้อคิดเห็น
โปรด ลงชื่อเข้าใช้ เพื่อแสดงข้อคิดเห็น