วันจันทร์ที่ 5 พฤศจิกายน พ.ศ. 2550

การเก็บข้อมูลที่อยู่ใน RAM สำหรับการทำ Computer Forensics

ขึ้นชื่อว่า Live Response (การวิเคราะห์ข้อมูลเกี่ยวกับการบุกรุกโดยอาศัยข้อมูลและสถานะปัจจุบันของเครื่องที่ถูกบุกรุกเป็นหลัก) ก็คงจะปฏิเสธไม่ได้ว่าข้อมูลที่อยู่ใน RAM นั้นมีความสำคัญอย่างยิ่งยวดสำหรับการวิเคราะห์ เนืองจากข้อมูลดังกล่าวเป็นจะเป็นสิ่งที่ช่วยให้เห็นภาพมากขึ้น ณ ขณะที่เครื่องที่ถูกบุกรุกมีโปรเซสใดรันอยู่บ้าง ดังนั้นในวันนี้ผมจะมากล่าวถึงวิธีการเก็บข้อมูลที่อยู่ใน RAM ว่าสามารถทำได้อย่างไร

วิธีการที่ง่ายที่สุดคือใช้ Helix Live CD ซึ่งมี GUI ให้ใช้แบบง่ายๆเลย หน้าตาของ Helix ก็เป็นดังภาพข้างล่าง

Photo Sharing and Video Hosting at Photobucket

โดยปกติแล้วเราจะใช้ dd เพื่อทำการสร้าง image ของฮาร์ดดิสก์แต่อย่างไรก็ตาม dd สามารถทำการ "dump" ข้อมูลจาก Physical memory หรือ RAM ได้อีกด้วย จากภาพข้างบนเป็นการดึงข้อมูลจาก RAM บนระบบปฏิบัติการ Windows ซึ่งหากต้องการรันแบบ command line นั้นสามารถรันได้โดยใช้คำสั่ง

dd if=\\.\PhysicalMemory of=ram.img bs=4096 conv=noerror

if ย่อมาจาก input file ซึ่งหมายถึงว่าให้ dd ทำการอ่านข้อมูลจากอะไร หากเป็น RAM บนระบบปฏิบัติการ Windows เราจะใช้ \\.\PhysicalMemory ในขณะที่บนระบบปฏิบัติการ Linux นั้นจะเป็น /dev/mem

หมายเหตุ: \\.\PhysicalMemory สามารถใช้ได้ตั้งแต่ Windows 2000 จนถึง Windows 2003 Server SP0 แต่ Windows 2003 Server SP1 จนถึง Vista จะไม่สามารถใช้ dd อ่านได้เนื่องจากระบบปฏิบัติการรุ่นใหม่ไม่ยอมให้ dd ซึ่งเป็นโปรแกรมในระดับ user-mode สามารถเข้าถึง \\.\PhysicalMemory ได้ จะยอมให้เฉพาะระดับ kernel-mode เท่านั้นเช่น device-driver ที่สามารถเข้าถึงได้ แต่อย่างไรก็ตามผมได้พบว่าเค้าให้ไปอ่านที่ \\.\DebugMemory ซึ่งไว้จะตรวจสอบความถูกต้องอีกทีครับ

of ย่อมาจาก output file ซึ่งหมายถึงว่าให้ dd ทำการเขียนข้อมูลไปที่ใด ในที่นี้คือเขียนผลลัพธ์ไปที่ไฟล์ ram.img แต่อย่างไรก็ตามไม่แนะนำให้เขียนข้อมูลลงในในเครื่องที่ทำการตรวจสอบ เพราะอาจจะไปเขียนทับข้อมูลสำคัญที่ถูกลบไปแล้วในฮาร์ดดิสก์ได้ ซึ่งทางเลือกก็คือ
  • เขียนข้อมูลลงไปใน external storage เช่น USB thumb drive หรือไม่ก็ external harddisk
  • เขียนข้อมูลลงไปใน share ของคอมพิวเตอร์อีกเครื่องหนึ่ง
วิธีการแรกเป็นที่นิยมมากกว่าเนื่องจากระบบที่ทำการเก็บข้อมูลนั้นไม่ต้องเชื่อมต่อออกไปยังภายนอก ซึ่งส่งผลกระทบต่อสภาพแวดล้อมของระบบน้อยกว่าวิธีการที่สอง

bs ย่อมาจาก byte sector (ถ้าจำไม่ผิด) เป็นการบอกให้ dd ทำการอ่านและเขียนข้อมูลทีล่ะ 4096 byte

conv=noerror อันนี้ไม่รู้จะอธิบายยังไงดี สรุปใจความสั้นๆคือในกรณีที่ dd ทำการอ่านข้อมูลแล้วเกิดข้อผิดพลาดขึ้น ให้ dd ทำการอ่านข้อมูลต่อไปโดยที่ไม่ต้องหยุดการทำงาน

หลังจากทำการดึงข้อมูลจาก RAM ออกมาแ้ล้ว ควรทำการ hash ไฟล์ข้อมูลจาก RAM ทุกครั้งด้วย md5 หรือ SHA-1 ตามแต่สะดวก ในกรณีถ้าใช้ Helix มันจะทำการ hash ให้โดยอัตโนมัติครับ

ไม่มีความคิดเห็น: