Playbook: การตอบสนอง SQL Injection
ID: PB-37
ความรุนแรง: สูง | ประเภท: Initial Access / Web Application
MITRE ATT&CK: T1190 (Exploit Public-Facing Application)
Trigger: WAF alert, SIEM correlation (SQL patterns ผิดปกติ), IDS signature, application error spike
⚠️ วิกฤต: SQL injection อาจนำไปสู่การโจมตี database ทั้งหมด, ขโมยข้อมูล, หรือรัน OS command ผ่าน xp_cmdshell หรือ LOAD_FILE()
ประเภท SQL Injection
graph TD
SQLi["🔴 SQL Injection"] --> Classic["Classic SQLi\n' OR 1=1 --"]
SQLi --> Blind["Blind SQLi\nBoolean/Time-based"]
SQLi --> Union["UNION-based\nExtract ตารางอื่น"]
SQLi --> Error["Error-based\nข้อมูล DB ใน error"]
SQLi --> Stacked["Stacked Queries\nหลายคำสั่ง"]
SQLi --> OOB["Out-of-Band\nDNS/HTTP exfil"]
SQLi --> Second["Second-Order\nเก็บแล้วทำงานทีหลัง"]
style SQLi fill:#ff4444,color:#fff
style Stacked fill:#cc0000,color:#fff
style OOB fill:#cc0000,color:#fff
ลำดับการโจมตี
graph LR
A["1️⃣ สำรวจ\nParameter fuzzing"] --> B["2️⃣ Injection\nสร้าง payload"]
B --> C["3️⃣ ดึงข้อมูล\nUNION/Blind"]
C --> D["4️⃣ Privilege Escalation\nDB admin access"]
D --> E["5️⃣ OS Command\nxp_cmdshell/UDF"]
E --> F["6️⃣ Compromise เต็มรูป\nLateral movement"]
style A fill:#ffcc00,color:#000
style B fill:#ff9900,color:#fff
style C fill:#ff6600,color:#fff
style D fill:#ff4444,color:#fff
style E fill:#cc0000,color:#fff
style F fill:#660000,color:#fff
Decision Flow
graph TD
Alert["🚨 ตรวจพบ SQLi"] --> Source{"แหล่ง Alert?"}
Source -->|WAF| WAF["ตรวจ WAF logs\nBlock หรือผ่าน?"]
Source -->|SIEM| SIEM["ตรวจ DB query logs"]
Source -->|IDS| IDS["ตรวจ network payload"]
WAF --> Blocked{"Request ถูก block?"}
Blocked -->|ใช่| Monitor["ตรวจติดตามต่อเนื่อง\nเช็ค endpoint อื่น"]
Blocked -->|"ไม่ — ผ่านเข้ามา"| Confirm["🔴 ยืนยัน SQLi"]
SIEM --> Confirm
IDS --> Confirm
Confirm --> Assess{"ข้อมูลถูกเข้าถึง?"}
Assess -->|"Schema/metadata เท่านั้น"| Medium["🟡 ปานกลาง — ขั้นสำรวจ"]
Assess -->|"ข้อมูลผู้ใช้ถูกดึง"| High["🔴 สูง — Data breach"]
Assess -->|"OS commands ถูกรัน"| Critical["💀 วิกฤต — Full compromise"]
High --> Contain["CONTAIN & แจ้ง"]
Critical --> Contain
style Alert fill:#ff4444,color:#fff
style Confirm fill:#cc0000,color:#fff
style Critical fill:#660000,color:#fff
ขั้นตอนการสืบสวน
sequenceDiagram
participant WAF
participant SOC as SOC Analyst
participant DBA as DB Admin
participant Dev as Dev Team
participant IR as IR Team
WAF->>SOC: 🚨 ตรวจพบ SQLi pattern
SOC->>WAF: ดึง request logs ทั้งหมด (URI, params, body)
SOC->>DBA: ขอ DB query audit logs
DBA->>SOC: ส่ง queries ที่น่าสงสัย
SOC->>SOC: เปรียบเทียบ WAF + DB logs (timestamp match)
SOC->>IR: ยืนยัน SQLi — escalate
IR->>DBA: ตรวจข้อมูลที่ถูกเข้าถึง (tables, rows)
IR->>Dev: ระบุ endpoint ที่มีช่องโหว่
Dev->>Dev: Deploy hotfix (parameterized queries)
IR->>SOC: ประเมินขอบเขต data breach
การประเมินผลกระทบ Database
graph TD
subgraph "Level 1: สำรวจ"
L1A["Version query\nSELECT @@version"]
L1B["Schema enumeration\nINFORMATION_SCHEMA"]
L1C["Table listing\nSHOW TABLES"]
end
subgraph "Level 2: เข้าถึงข้อมูล"
L2A["อ่านข้อมูลผู้ใช้\nSELECT from users"]
L2B["ขโมย credential\npassword hashes"]
L2C["ข้อมูลการเงิน\ntransactions, PII"]
end
subgraph "Level 3: Compromise ระบบ"
L3A["อ่านไฟล์\nLOAD_FILE()"]
L3B["เขียนไฟล์\nINTO OUTFILE"]
L3C["OS commands\nxp_cmdshell"]
end
style L1A fill:#ffcc00,color:#000
style L2B fill:#ff6600,color:#fff
style L3C fill:#cc0000,color:#fff
ประสิทธิภาพ WAF Rules
pie title SQLi Detection โดย WAF Rule
"Classic patterns blocked" : 45
"Encoded payloads blocked" : 20
"Blind SQLi detected" : 15
"Bypassed (0-day)" : 10
"False positives" : 10
Timeline การตอบสนอง
gantt
title SQL Injection Response Timeline
dateFormat HH:mm
axisFormat %H:%M
section Detection
WAF/IDS alert :a1, 00:00, 5min
Log correlation :a2, after a1, 15min
section Containment
Block attacker IP :a3, after a2, 5min
WAF emergency rules :a4, after a3, 10min
section Investigation
วิเคราะห์ request :a5, after a4, 30min
ประเมินผลกระทบ DB :a6, after a5, 60min
ขอบเขต data breach :a7, after a6, 60min
section Recovery
Deploy code fix :a8, after a7, 120min
WAF rule hardening :a9, after a8, 60min
1. การดำเนินการทันที (15 นาทีแรก)
| # |
การดำเนินการ |
ผู้รับผิดชอบ |
| 1 |
Block IP ผู้โจมตีที่ WAF/firewall |
SOC T1 |
| 2 |
เปิด WAF rules เข้มงวดสำหรับ SQLi |
SOC T1 |
| 3 |
เก็บ HTTP request logs เต็มรูปแบบ (headers, body, params) |
SOC T2 |
| 4 |
ขอ database query audit logs จาก DBA |
SOC T2 |
| 5 |
ระบุ application endpoint ที่มีช่องโหว่ |
Dev Team |
| 6 |
ตรวจว่าข้อมูลถูกนำออกหรือไม่ (response sizes, timing) |
SOC T2 |
2. รายการตรวจสอบการสืบสวน
วิเคราะห์ WAF/Web Server
วิเคราะห์ Database
วิเคราะห์ Application
3. การควบคุม (Containment)
| ขอบเขต |
การดำเนินการ |
รายละเอียด |
| เครือข่าย |
Block IP ผู้โจมตี |
WAF + Firewall rules |
| WAF |
Emergency SQLi rules |
Block payloads ทั่วไป |
| Application |
ปิด endpoint ที่มีช่องโหว่ |
หน้า maintenance ชั่วคราว |
| Database |
เพิกถอน privileges เกิน |
Least-privilege สำหรับ app accounts |
| Credentials |
หมุนเวียน DB passwords |
ทุก application DB connections |
4. การกำจัดและกู้คืน
Code Fixes (ลำดับความสำคัญ)
- Parameterized queries — แทนที่ string concatenation ใน SQL ทั้งหมด
- Input validation — Whitelist ตัวอักษรที่อนุญาตต่อ field
- WAF rules — Deploy SQLi signatures เฉพาะ
- DB hardening — ลบ
xp_cmdshell, ปิด LOAD_FILE()
- Least privilege — App DB accounts มี permissions น้อยที่สุด
SIEM Detection Queries
-- Splunk: ตรวจจับ SQLi patterns ใน web logs
index=web sourcetype=access_combined
| regex uri_query="(?i)(union\s+select|information_schema|or\s+1\s*=\s*1|waitfor\s+delay|benchmark\s*\(|sleep\s*\()"
| stats count by src_ip, uri_path, uri_query
| where count > 5
5. หลังเหตุการณ์ (Post-Incident)
บทเรียน
| คำถาม |
คำตอบ |
| Application ใช้ parameterized queries หรือไม่? |
[บันทึก] |
| WAF ตรวจจับและ block ได้หรือไม่? |
[ใช่/ไม่ — rule gap?] |
| Database privileges กำหนดถูกต้องหรือไม่? |
[บันทึกช่องว่าง] |
| ข้อมูลถูกนำออกหรือไม่? ต้องแจ้ง PDPA? |
[ประเมิน] |
6. Detection Rules (Sigma)
title: SQL Injection Attempt in Web Logs
logsource:
category: webserver
detection:
selection:
cs-uri-query|contains:
- 'UNION SELECT'
- 'INFORMATION_SCHEMA'
- 'xp_cmdshell'
- "' OR 1=1"
- 'WAITFOR DELAY'
- 'BENCHMARK('
condition: selection
level: high
เอกสารที่เกี่ยวข้อง
References