1. บทนำ
การแก้ไขเซสชันเป็นเทคนิคที่ช่วยให้แฮกเกอร์สามารถแย่งชิงเซสชันของผู้ใช้ได้ เทคนิคนี้ใช้ประโยชน์จากข้อเท็จจริงที่ว่าเซิร์ฟเวอร์ไม่เปลี่ยนค่า ID เซสชันทุกครั้งที่ผู้ใช้เข้าสู่ระบบ แต่จะใช้ ID เซสชันที่มีอยู่แล้วแทน กระบวนการโจมตีรวมถึงการได้รับรหัสเซสชันที่ถูกต้อง (อาจเป็นไปได้โดยการเข้าถึงเว็บไซต์ ) จากนั้นค้นหาวิธีให้เหยื่อเข้าสู่ระบบเว็บไซต์ด้วยรหัสเซสชันนี้ และสุดท้ายเมื่อเหยื่อเข้าสู่ระบบได้สำเร็จ แฮกเกอร์จะเรียกดู เว็บไซต์ด้วยบัญชีของเขา สถานการณ์เฉพาะมีดังนี้:
Mallory ค้นหาเว็บไซต์ เช่น http://unsafe.example.com ที่ยอมรับ ID เซสชันใดๆ จากคำขอโดยไม่มีการตรวจสอบสิทธิ์
มัลลอรีจะส่งอีเมลถึงอลิซซึ่งมีลิงก์ http://unsafe.example.com/?SID=1234
อลิซไปที่http://unsafe.example.com/?SID=1234 จากนั้นเข้าสู่เว็บไซต์
Mallory เพียงไปที่ http://unsafe.example.com/?SID=1234 และใช้เว็บไซต์กับบัญชีของ Alice
Mallory สามารถใช้วิธีการต่อไปนี้เพื่อตั้งค่าคุกกี้สำหรับ Alice:
ใส่สคริปต์เพื่อตั้งค่าคุกกี้
ส่งแพ็กเก็ตการตอบสนอง HTTP พร้อมค่าคุกกี้ Mallory ส่งแพ็กเก็ตการตอบสนอง HTTP พร้อมค่าคุกกี้ Mallory
ใช้เมตาแท็ก HTML:
2. ตัวอย่าง
ตัวอย่างที่ 1 – การเขียนสคริปต์ฝั่งไคลเอ็นต์
เช่นเดียวกับสถานการณ์ที่กล่าวถึงข้างต้น แต่ในกรณีนี้ รหัสเซสชันจะไม่ถูกส่งใน URL แต่ในคุกกี้ หากต้องการแก้ไขค่าของ Session ID ในคุกกี้ของเหยื่อ แฮกเกอร์จะแทรก Javascript ลงไป:
http://website.kom/document.cookie=”sessionid=abcd”;
ตัวอย่างที่ 2 - แท็ก
คล้ายกับการเขียนสคริปต์ฝั่งไคลเอ็นต์ แต่คราวนี้แฮ็กเกอร์จะแทรกแท็กเพิ่มเติม:
http://website.kon/
ตัวอย่างที่ 3 – การตอบสนองส่วนหัว HTTP
การแทรก ID เซสชันสามารถทำได้โดยการสกัดกั้นแพ็กเก็ตที่แลกเปลี่ยนระหว่างไคลเอนต์และแอปพลิเคชันเว็บ จากนั้นจึงแทรกฟิลด์ Set-Cookie ลงในส่วนหัว
3.วิธีป้องกัน
สาเหตุของข้อผิดพลาดนี้เป็นเพราะเซิร์ฟเวอร์ไม่สร้างรหัสเซสชันใหม่หลังจากการเข้าสู่ระบบสำเร็จแต่ละครั้ง ดังนั้นการแก้ไขข้อผิดพลาดนี้จึงไม่ใช่เรื่องยาก เราแค่ต้องเปลี่ยนค่า Session ID เท่านี้ก็เรียบร้อย ใน PHP เราใช้ฟังก์ชัน session_regenerate_id() เพื่อสร้างเซสชันใหม่