Access Log สำคัญอย่างไร? บอกอะไรเราได้บ้าง?
Access Log คืออะไร?
Access log หมายถึง บันทึกกิจกรรมหรือเหตุการณ์ที่เกี่ยวข้องกับคำขอเข้าถึงที่ทำกับระบบ บริการ หรือทรัพยากร ในบริบทของเว็บเซิร์ฟเวอร์หรืออุปกรณ์เครือข่าย โดยทั่วไป บันทึกการเข้าถึงจะมีรายละเอียดเกี่ยวกับคำขอที่ผู้ใช้ (client) ทำเพื่อเข้าถึงหน้าเว็บ ไฟล์ หรือทรัพยากรอื่น ๆ ที่โฮสต์ (host) บนเซิร์ฟเวอร์ บันทึกเหล่านี้สำคัญมากเพราะสามารถนำมาตรวจสอบ วิเคราะห์รูปแบบการใช้งาน รวมถึงแก้ไขปัญหาของเซิร์ฟเวอร์ได้
Access Log บอกอะไรบ้าง?
โดยทั่วไปแล้ว ใน access log มักระบุข้อมูลดังต่อไปนี้
Timestamps (ประทับเวลา) : คือการระบุว่าคำขอเข้าถึงเกิดขึ้นเมื่อใด ช่วยในการทำความเข้าใจลำดับคำขอและระบุแนวโน้มเมื่อเวลาผ่านไปได้
Client Information (ข้อมูลลูกค้า) : คือข้อมูลเกี่ยวกับ client ที่ส่งคำขอ เช่น ที่อยู่ IP, ตัวแทนผู้ใช้ (เบราว์เซอร์หรือแอปพลิเคชัน) หรือชื่อ host หรือ domain ที่เกี่ยวข้องกับ client
Request detail (รายละเอียดคำขอ) : คือรายละเอียดเกี่ยวกับคำขอเฉพาะที่ทำโดยไคลเอ็นต์ รวมถึงวิธี HTTP (เช่น GET, POST) URL หรือทรัพยากรที่ร้องขอ และเวอร์ชันโปรโตคอล HTTP
Server response (การตอบสนองของเซิร์ฟเวอร์) : คือข้อมูลเกี่ยวกับการตอบสนองของเซิร์ฟเวอร์ต่อคำขอ client เช่น รหัสสถานะ HTTP (เช่น 200 สำหรับคำขอที่สำเร็จ 404 สำหรับไม่พบ) ขนาดของการตอบกลับเป็น byte หรือ meta data เพิ่มเติมเกี่ยวกับการตอบกลับ
User authentication (การตรวจสอบสิทธิ์ผู้ใช้) : หากจำเป็นต้องมีการตรวจสอบสิทธิ์เพื่อเข้าถึงทรัพยากร access log ถึงอาจมีข้อมูลเกี่ยวกับกระบวนการตรวจสอบสิทธิ์ผู้ใช้ เช่น การอนุญาตหรือปฏิเสธการเข้าถึง และชื่อผู้ใช้หรือข้อมูลรับรองที่ใช้สำหรับการตรวจสอบสิทธิ์
Error logging (การบันทึกข้อผิดพลาด) : นอกเหนือจากการร้องขอการเข้าถึงที่สำเร็จแล้ว access ยังรวบรวมข้อมูลเกี่ยวกับข้อผิดพลาดหรือความล้มเหลวใด ๆ ที่พบในระหว่างกระบวนการเข้าถึง ซึ่งอาจรวมถึงรายละเอียดเกี่ยวกับข้อผิดพลาดของเซิร์ฟเวอร์ เช่น ข้อผิดพลาดเซิร์ฟเวอร์ภายใน 500 หรือข้อผิดพลาดในการปฏิเสธการเข้าถึง (เช่น 403 Forbidden)
ทำไมต้องตรวจสอบ Access Log?
การตรวจสอบ access log สามารถทำเพื่อวัตถุประสงค์ต่าง ๆ ได้ดังต่อไปนี้
Security monitoring (การตรวจสอบความปลอดภัย) : ช่วยระบุความพยายามเข้าถึงที่น่าสงสัยหรือไม่ได้รับอนุญาต เช่น การโจมตีแบบ brute-force การเข้าถึงทรัพยากรที่มีความละเอียดอ่อนโดยไม่ได้รับอนุญาต หรือรูปแบบการเข้าถึงที่ผิดปกติซึ่งอาจบ่งบอกถึงภัยคุกคามด้านความปลอดภัย
Performance analysis (การวิเคราะห์ประสิทธิภาพ) : ผู้ดูแลระบบสามารถรับข้อมูลเชิงลึกเกี่ยวกับประสิทธิภาพของเซิร์ฟเวอร์ รวมถึงรูปแบบการรับส่งข้อมูล ทรัพยากรยอดนิยม และปัญหาคอขวดที่อาจส่งผลต่อประสิทธิภาพโดยรวมและประสบการณ์ผู้ใช้
Auditing and compliance (การตรวจสอบและการปฏิบัติตามข้อกำหนด) : ใช้ตรวจสอบและปฏิบัติตามกฎระเบียบโดยจัดทำบันทึกกิจกรรมการเข้าถึงโดยละเอียด สามารถใช้แสดงให้เห็นถึงการปฏิบัติตามข้อกำหนดด้านกฎระเบียบหรือนโยบายความปลอดภัยภายใน
Troubleshooting (การแก้ไขปัญหา) : access log สามารถทำหน้าที่เป็นเครื่องมือแก้ไขปัญหา ช่วยให้ผู้ดูแลระบบวินิจฉัยและแก้ไขปัญหาที่เกี่ยวข้องกับสิทธิ์ในการเข้าถึง ข้อผิดพลาดในการกำหนดค่า (configuration errors) หรือการกำหนดค่าเซิร์ฟเวอร์ไม่ถูกต้อง (server misconfigurations)
Access log จึงเป็นองค์ประกอบสำคัญของการดูแลเซิร์ฟเวอร์และการจัดการความปลอดภัย โดยให้ข้อมูลเชิงลึกเกี่ยวกับกิจกรรมการเข้าถึง และสามารถใช้เป็นข้อมูลสำหรับการตรวจสอบ วิเคราะห์ และบำรุงรักษาเว็บเซิร์ฟเวอร์และโครงสร้างพื้นฐานเครือข่ายอย่างมีประสิทธิภาพ
เริ่มต้นวิเคราะห์ Access Log
จากที่ได้เกริ่นไปข้างต้น จะพบว่า access log นั้นครอบคลุมการเข้าถึงที่หลากหลายและกว้างขวาง ในบทความนี้ จึงจะพาทำจากจุดเล็ก ๆ ก่อน คือให้วิเคราะห์จาก SSH access log โดยจะพาดูว่า log บอกอะไรเราบ้าง แล้วจะได้ข้อมูลอะไรที่สำคัญบ้าง
ในบทความนี้จะใช้ CentOS7 เป็น OS สำหรับการทดสอบ
1. Log in เข้าสู่ SSH
จะพบว่า เมื่อ log in เข้า server จะพบแจ้งเตือนทันทีว่าเกิดกิจกรรมใดขึ้น จากภาพ server แจ้งว่าครั้งล่าสุดที่เรา log in ด้วย nc-user คือเวลาใด ด้วย IP อะไร
2. ใช้คำสั่ง su (switch user) แล้ว log in เข้าสู่ user นั้นๆ ระบบจะแจ้งเช่นเดียวกับตอนที่ log in เข้า server
จากภาพ ลอง switch user เป็น root ตัว server แจ้งว่าระหว่างช่วงเวลาที่เรา log in สำเร็จครั้งที่แล้ว จนถึงตอนนี้มีการพยายาม log in ทั้งหมด 39 ครั้ง แต่ไม่สำเร็จ (failed)
ในกรณีเช่นนี้ หากเราไม่เห็นว่า failed แปลว่าเครื่องของเราน่าจะโดนโจมตีโดยแฮกเกอร์ และถูกลบทำลายหลักฐานไปหมดแล้วจึงไม่มีแจ้งเตือน
ขณะเดียวกัน ในภาพด้านล่างไม่ได้แจ้งว่า failed login แต่ในกรณีนี้ไม่ได้โดนอะไร เพราะเพิ่งเข้าใช้งานได้ไม่นานแล้วจึง login เข้าไปใหม่ เลยยังไม่โดนยิงเข้ามา
สำหรับการตรวจสอบว่า มี log in เข้ามาบ่อยแค่ไหน ทำได้อย่างไร สามารถตรวจสอบได้จาก log file ซึ่ง log file ดังกล่าวใน CentOS7 นี้จะอยู่ใน path /var/log/secure
วิธีตรวจสอบ Access Log
ตรวจสอบการ log in ด้วยคำสั่ง
tail /var/log/secure
คำสั่ง tail จะเป็นการแสดงผลบรรทัดท้ายใน file
คำสั่งด้านบนเป็นคำสั่งที่ยังไม่ได้ใช้ option ใด ๆ ผลที่แสดงออกมาจะเป็น default คือ จะแสดงผล 10 บรรทัดสุดท้ายในไฟล์ /var/log/secure
การวิเคราะห์ Log
ผลจาก log ในภาพบอกอะไรบ้าง
1. การใช้งานปกติ
บรรทัดที่ 1 session closed for user nc-user -> ตามที่ server บอกคือ เลิกใช้งานแล้ว ปิด session
บรรทัดที่ 2-4 ใส่ password ของ nc-user ผิด
บรรทัดที่ 5 Log in nc-user suggess เข้าใช้งานได้
บรรทัดที่ 6 หลังจาก log in แล้วระบบจะสร้าง SSHD session ให้ nc-user
บรรทัดที่ 7 Log out จาก nc-user และปิด session
บรรทัดที่ 8 Login nc-user suggess เข้าใช้งานได้ (Login nc-user อีกครั้ง)
บรรทัดที่ 9 หลังจาก Login แล้วระบบจะสร้าง SSHD session ให้ nc-user
บรรทัดที่ 10 Switch user จาก nc-user เป็น root
ในกรณีที่มีการเข้าใช้งานแบบปกติ ควรจะมี log ตามแบบที่กล่าวมาข้างต้น แต่ถ้าหากเราลองใช้คำสั่งดังกล่าว แล้วผลลัพธ์ออกมาไม่ปกติ จะต้องดำเนินการตามขั้นตอนถัดไป
2. การใช้งานไม่ปกติ
หากพบการใช้งานที่ไม่ปกติ จะใช้คำสั่งเดิมเพื่อตรวจสอบ นั่นก็คือ tail แต่ต้องเพิ่ม option เข้าไปเพื่อให้มีข้อมูลมากขึ้น ในที่นี้ จะใช้คำสั่งเพิ่มแถวที่แสดงจากเดิม default 10 แถว เป็น 500 แถวสุดท้ายด้วยคำสั่ง
# tail -n 500 /var/log/secure
ภาพนี้เป็นส่วนหนึ่งของผลที่ได้จากคำสั่งด้านบน สรุปง่ายๆ จากภาพคือ มี IP 139.59.10.206 พยายาม log in เครื่อง server ของเราด้วยการสุ่ม user และ password เข้ามาเรื่อยๆ การพยายาม log in ดังกล่าว เรียกว่า การโจมตีแบบ brute force attack
ข้อมูลเพิ่มเติมเกี่ยวกับ brute force attack
ดูรายละเอียด Log เพิ่มเติม
Log ที่แสดงให้เห็นข้างต้น มีรายละเอียดเกี่ยวกับการโจมตี ดังนี้
สุ่ม user มาแล้วไม่ตรงกับ user ที่มีอยู่ภายใน server --> log จะแจ้งว่า invalid user รวมถึงแจ้งว่า failed password
Failed password for invalid user xxxxx[1] from xxx.xxx.xxx.xxx[2] port xxxxx[3] ssh2
Received disconnect from xxx.xxx.xxx.xxx[2]
port xxxxx[3]
[1] user ที่สุ่มโจมตีเข้ามา ในที่นี้จะเป็น invalid user
[2] IP address ที่โจมตีเข้ามา
[3] source port ของเครื่องที่โจมตีเข้ามา
สุ่ม user มาแล้วมี user อยู่ใน server แต่ password ไม่ถูกต้อง
Failed password for root[1]
from xxx.xxx.xxx.xxx[2] port xxxxx[3] ssh2
Received disconnect from xxx.xxx.xxx.xxx[2]
port xxxxx[3]
[1] user ที่สุ่มโจมตีเข้ามา ในที่นี้เป็น root ซึ่งมีอยู่ใน server
[2] IP address ที่โจมตีเข้ามา
[3] source port ของเครื่องที่โจมตีเข้ามา
ผลที่ได้จากการวิเคราะห์ Log
การวิเคราะห์ log เช่นนี้ ทำให้เรารู้รูปแบบการโจมตี ทำให้เตรียมการรับมือและป้องกันได้
การจะ log in ได้ ต้องมีองค์ประกอบหลายอย่าง ในที่นี้การ access ด้วย SSH จะต้องใช้ user และ password ที่ต้องตรงกับฐานข้อมูลของ server แต่จากข้อมูลที่ได้มาข้างต้น มี user ที่มักถูกสุ่มมาใช้โจมตี เช่น unknown, oracle, ubuntu, dell, lenovo, cloud, grid, test, admin, centos, hadoop, user, git, postgres, mysql เป็นต้น
ดังนั้น user ที่เราจะใช้เพื่อ access จึงไม่ควรเป็น user ที่มักจะถูกสุ่มมาใช้โจมตี ต้องตั้ง password ให้ยาวและซับซ้อน อีกทั้งต้องไม่ให้สิทธิ์ root สามารถ access เข้ามาได้โดยตรง (สามารถใช้คำสั่ง su เพื่อสลับเป็น root ได้หลังจากที่ access เข้าถึง server แล้ว)
จากเหตุผลข้างต้นทาง NIPA Cloud จึงใช้ default user เป็น nc-user เพื่อลดความเสี่ยงจากการถูก brute force attack นั่นเอง
วิธีการป้องกันอื่น ๆ นอกจาก User และ Password
เครื่องที่โจมตีเข้ามาส่วนใหญ่แล้วจะเป็นเครื่อง zombie หรือเครื่องที่โดนแฮกเกอร์เจาะเข้าไปแล้วนำมาใช้ประโยชน์
พฤติกรรมของเครื่องดังกล่าวจะพยายามทำอย่างเดิมซ้ำ ๆ หากวิเคราะห์จาก log ด้านบนแล้ว จะพบว่า มีเพียง IP เดียวที่โจมตีเข้ามา เนื่องจาก server นี้ได้เปลี่ยน default SSH port แล้ว (การเปลี่ยน ssh port) ทำให้เครื่อง zombie หลายเครื่องที่ไม่ได้ program ให้ฉลาดพอ (ต้องหา port SSH ก่อน) โจมตีเข้ามาได้ ถ้าเราต้องการป้องกันการโจมตีก็สามารถใช้ firewall ของ server เพื่อ block การโจมตีได้ โดย block ทีละ IP อย่างในกรณีนี้ สามารถสั่งให้เครื่องสามารถ block IP ได้เลย
ดังนั้นแล้ว จะเห็นได้ว่า access log file สามารถแจ้งได้ว่าใครพยายามจะเข้าเครื่อง server ของเรา ใครออก ใครเข้าได้แล้ว เข้าเมื่อไร จึงเป็นสิ่งที่ควรให้ความสำคัญอย่างมาก โดยเฉพาะชาว IT อย่างเรา
หมายเหตุ วิธีการ block การโจมตีด้วย server firewall จะกล่าวถึงในบทความหน้า รวมถึงวิธีป้องกันอีกวิธีหนึ่งที่ใช้ log คือโปรแกรม auto block attack ชื่อ “fail2ban”
อ้างอิง
https://www.sangfor.com/glossary/cybersecurity/what-is-zombie-attack-in-cybersecurity
https://en.wikipedia.org/wiki/Zombie_(computing)