เนื่องจากก่อนหน้านี้เราได้สอนการติดตั้ง Mod Security เพื่อช่วยตรวจจับและป้องกันการบุกรุกแบบโอเพนซอร์ส
บทความนี้จึงเกี่ยวกับการตรวจสอบ Mod Security logs เพื่อให้เข้าใจกฎ และการบล็อกต่างๆของ Mod Security

 

1. Error Logs
คือ logs ที่ถูกสร้างขึ้นเมื่อพบข้อผิดพลาดที่เป็นอันตรายบนเซิร์ฟเวอร์
error logs ของ Mod Security นั้นจะถูกสร้างขึ้นในไฟล์เดียวกันกับของ Apache เนื่องจาก Mod Security กับ Apache ทำงานร่วมกัน
ไดเร็กทอรีที่ใช้เก็บไฟล์ error logs คือ /var/log/httpd/error_log
1) ใช้คำสั่ง tail -f เพื่อตรวจสอบ log ล่าสุด
tail -f /var/log/httpd/error_log

2) logs แสดงข้อผิดพลาดที่สร้างขึ้นจากไฟร์วอลล์ของ Mod Security

 

2. Debug Logs
จะเหมือนกับ error logs คือบอกข้อผิดพลาด แต่ debug logs ใช้เพื่อขจัดข้อผิดพลาดที่เป็นอันตรายต่อเซิร์ฟเวอร์

ขั้นตอนการเปิดใช้งาน Debug Logs
สร้าง mod_security.conf โดยใช้คำสั่ง
nano /etc/httpd/conf.d/mod_security.conf

เพิ่มโค้ดสองบรรทัดต่อไปนี้ต่อท้ายของไฟล์ บันทึก และ restart Apache service ใหม่
SecDebugLog /var/log/httpd/modsec_debug.log
SecDebugLoglevel 3

เนื่องจากเราใช้ centos 7 คำสั่งในการ restart Apache service จึงเป็น
systemctl restart httpd

 

โค้ดที่เพิ่มลงในไฟล์ mod_security.conf มีความหมายดังนี้
1) SecDebugLog เพื่อบอกไดเร็กทอรีของ debug logs ไดเร็กทอรีสามารถเปลี่ยนแปลงได้ตามความต้องการ
ณ ตอนนี้เราใช้เป็น /var/log/httpd/modsec_debug.log และไฟล์ modsec_debug.log จะเก็บ logs ทั้งหมด

2) SecDebugLoglevel 3 ระดับของ debug logs ที่แนะนำเนื่องจากการมี logs มากเกินไปจะส่งผลต่อประสิทธิภาพการทำงาน
โดยระดับของ debug logs คือ
0: no logging หรือไม่มีการบันทึก logs
1: errors หรือ logs ข้อผิดพลาด
2: warnings หรือ logs คำเตือน
3: notices หรือ logs แจ้งเตือน
4: detail of how transactions are handled หรือ logs รายละเอียดวิธีการจัดการ
5: as above, but including information about each piece of information handled
หรือ logs ที่กล่าวมาข้างต้นแต่รวมถึงข้อมูลเกี่ยวกับข้อมูลแต่ละครั้งที่จัดการด้วย
6: log everything หรือ logs บันทึกทุกอย่าง

 

3. Audit Logs
คือ logs ข้อมูลโดยละเอียดที่ถูกสร้างโดย Mod Security เมื่อตรวจสอบพบอันตรายหรือข้อผิดพลาดถูกบันทึกลงใน error logs
ระบบจะสร้าง audit logs เป็นข้อมูลคำขอเรียกใช้ของไคลเอ็นต์จริง รวมถึงเฮดเดอร์ไคลเอ็นต์และข้อมูลเกี่ยวกับการโจมตี

เราต้องกำหนดค่าเปิดใช้งาน audit logs ด้วยการเปิดไฟล์ mod_security.conf โดยใช้คำสั่ง
nano /etc/httpd/conf.d/mod_security.conf

เพิ่มโค้ดต่อไปนี้ต่อท้ายของไฟล์ บันทึก และ restart Apache service ใหม่
SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus ^2-5
SecAuditLogParts ABCIFHZ
SecAuditLogType Serial
SecAuditLog /var/log/httpd/modsec_audit.log

คำสั่งในการ restart Apache service
systemctl restart httpd

 

โค้ดที่เพิ่มต่อท้ายไฟล์ mod_security.conf มีความหมายดังนี้
1) SecAuditEngine เพื่อกำหนดค่า audit logs บันทึกข้อมูลที่เกี่ยวข้องกับ Mod Securoty
ในส่วนนี้มีสามตัวเลือกคือ On, Off and ReleventOnly

2) SecAuditLogRelevantStatus ระบุรหัสสถานะการตอบสนองที่พิจารณาว่ามีความเกี่ยวข้องกับ audit logs
ณ ตอนนี้คือ 2-5 หมายความว่า Mod Security จะบันทึก logs การทำธุรกรรมที่ไม่เกี่ยวข้องใหม่

3) SecAuditLogParts ด้วยความที่ audit logs ค่อนข้างมีขนาดใหญ่เนื่องจากบันทึกทุกอย่างเกี่ยวกับคำขอ
เช่น ส่วนหัวคำขอ, ส่วนหัวการตอบสนอง, เนื้อหาคำขอ และการตอบสนองของเนื้อหา
ดังนั้นด้วยตัวเลือกนี้เราสามารถกำหนดได้ว่าควรบันทึกสิ่งใดใน audit logs ความหมายของตัวเลือกคือ

A: Audit log header (mandatory) ส่วนหัวของบันทึกการตรวจสอบ (บังคับ)
B: Request headers ส่วนหัวคำขอ
C: Request body เนื้อหาคำขอ
D: Reserved คำสงวน
E: Response body การตอบสนองของเนื้อหา
F: Response headers การตอบสนองของส่วนหัว
G: Reserved คำสงวน
H: Audit log trailer, which contains additional data ตัวอย่าง audit logs และข้อมูลเพิ่มเติม
I: Compact request body alternative (to pact C), which excludes files กระชับเนื้อหาคำขอ (สำหรับตัวเลือก C) ไม่รวมไฟล์
J: Reserved คำสงวน
K: Contains a list of all rules that matched for the transaction รายการกฎทั้งหมดที่ตรงกับการทำธุรกรรม
Z: Final boundary (mandatory) ขอบเขตสุดท้าย (บังคับ)

4) SecAuditLogType เราสามารถจัดเก็บ audit logs ได้สองประเภทคือ Serial, Concurrent
แตกต่างกันตรงที่ Serail จะเก็บ logs ทั้งหมดรวมกันในไฟล์เดียว ส่วน Concurrent จะเก็บเป็นหนึ่งไฟล์ต่อการทำธุรกรรม

5) SecAuditLog เพื่อบอกไดเร็กทอรีของ modsec_audit.log ไดเร็กทอรีสามารถเปลี่ยนแปลงได้ตามความต้องการ
ณ ตอนนี้เราใช้เป็น /var/log/httpd/modsec_audit.log และไฟล์ modsec_audit.log จะเก็บ logs ทั้งหมด

 

ตรวจสอบ error logs ของ Mod Security
โดยใช้คำสั่งในการตรวจสอบไฟล์ logs แบบเรียลไทม์หรือ logs ล่าสุด
tail -f /var/log/httpd/error_log

1) สิ่งแรกที่เราจะเห็นใน error logs คือที่อยู่ IP ของไคลเอ็นต์ที่มีการสร้างคำขอในภาพจะเห็นที่อยู่ IP ของไคลเอ็นต์คือ 84.22.216.51

2) ในส่วนนี้ Mod Security จะสร้างข้อความตามการกำหนดค่าเมื่อคำขอใดๆ ถูกบล็อกโดย Mod Security
คำขอนั้นถูกกำหนดค่าให้เปลี่ยนเส้นทางไปยังหน้า 403 ด้วยข้อความ “Access Denied” นอกจากนี้เราสามารถปรับแต่งหน้านี้ได้อีกด้วย

3) Mod Security จะบล็อกคำขอที่มีการกำหนดรูปแบบในชุดกฎหลัก (CRS) นอกจากนี้ยังบอกว่ารูปแบบใดที่ตรงกัน และเวลาที่ถูกบล็อก

4) ข้อมูลเกี่ยวกับข้อผิดพลาด เช่นสาเหตุที่ Mod Security บล็อกคำขอดังกล่าว

5) ในส่วนนี้จะแสดงไดเร็คทอรีของไฟล์คอนฟิก Mod Security ในภาพด้านบนจดังต่อไปนี้
/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_21_protocol_anomalies.conf

6) ทุกกฎที่กำหนดไว้ในชุดกฎหลัก (CRS) จะถูกระบุโดย ID ในส่วนนี้จะแสดง ID ของกฎ

7) แสดงความรุนแรงของข้อผิดพลาดถูกจัดอันดับโดย OWASP ตามมารตฐานสากล

8)  unique id ของ audit logs จะถูกสร้างขึ้นแบบไม่ซ้ำกัน หากเราต้องการทราบรายละเอียด
เช่น คือคำขออะไร ข้อผิดพลาดเกิดขึ้นเมื่อใด หรือส่วนของข้อมูลคืออะไร เราสามารถนำไปตรวจสอบเพิ่มเติมได้

 

ตรวจสอบ audit logs ของ Mod Security
ดังที่ได้กล่าวไปข้างต้นเกี่ยวกับ unique id ของ error logs เราต้องหา unique id ของ error logs
โดยตรวจสอบไฟล์ error_log จากไดเร็กทอรีใช้คำสั่ง
cd /var/log/httpd
เมื่อเข้ามาที่ไดเร็กทอรีที่จัดเก็บไฟล์ error_log เรียบร้อยแล้วให้ใช้คำสั่ง
tail -f error_log

เราจะเห็น unique id คือ “Yea@5BAlJxrT2A2LwyWmrgAAAMk” สำหรับการเปิดไฟล์ modsec_audit.log ให้ใช้คำสั่ง
nano modsec_audit.log
หลังจากเปิดไฟล์ให้กด ctrl+w และใส่ค่า unique id ที่ได้รับมากด Enter
จากนั้นรายละเอียดต่างๆ จะปรากฏบนหน้าจอ เรายังสามารถใช้คำสั่ง grep ในการค้นหา unique id ได้อีกด้วย

 

1) ในส่วนนี้ เราจะเห็นวันที่และเวลาของบันทึก unique id และที่อยู่ IP ต้นทางและปลายทางด้วยหมายเลขพอร์ต

2) เป็นสาเหตุของการโจมตี ในกรณีนี้จะเห็นว่าผู้ใช้กำลังโจมตีเซิร์ฟเวอร์ผ่านที่อยู่ IP ที่สามารถเห็นได้ในช่องโฮสต์

3) เซิร์ฟเวอร์กฎ OWASP Mod Security ตัดการเชื่อมต่อกับที่อยู่ IP จึงเป็นสาเหตุที่เซิร์ฟเวอร์ส่งข้อผิดพลาด 403 Forbidden ให้กับผู้ใช้

4) สำเนาบันทึกข้อผิดพลาด

 

HostPacific หวังเป็นอย่างยิ่งว่าบทความนี้จะเป็นประโยชน์ต่อผู้ใช้งานทุกท่านค่ะ