ภัยคุกคามที่มองไม่ Invisible Threat


หลังปีใหม่ไม่กี่วัน ผมได้จัดข้อมูลในคอมพิวเตอร์ใหม่ ได้พบบทความที่ได้เขียนไว้ เมื่อหลายปีและคิดว่ายังคงได้สาระความรู้อยู่ในยุคปัจจุบันจึงนะมาให้อ่านกัน
ภัยคุกคามที่มองไม่ (Invisible Threat)
ภัยคุกคามเป็นเรื่องต้องระวังอยู่ตลอดเวลา พูดง่ายๆว่าต้องมีสติในการใช้งาน ครั้งนี้ผมจะกล่าวถึงภัยคุกคามชนิดหนึ่ง ที่มองด้วยตาเปล่าไม่เห็น เป็นภัยคุกคามบนระบบคอมพิวเตอร์นี้เองครับ และเป็นศัพท์เทคนิคที่หลายคนยังสับสนอยู่ว่าคืออะไรกันแน่ “Root Kit” โดยผมแบ่งหัวข้อไว้ดังนี้
1.ชนิดของ Rootkit
2.การตรวจหา rootkit
3.การกำจัด rootkit
4.ความแตกต่างของ Rootkit ไวรัสคอมพิวเตอร์และเวิร์ม
5. rootkit ที่ดาวน์โหลดได้ในอินเทอร์เน็ต

1. ชนิดของ rootkit
rootkit มีสามแบบด้วยกันคือ rootkit ในระดับ kernel, library และ application ในระดับ kernel rootkit เพิ่มโค้ดและ/หรือแทนที่บางส่วนของโค้ดของ kernel ด้วยโค้ดที่แก้ไขแล้วเพื่อช่วยในการซ่อน backdoor ในระบบคอมพิวเตอร์ มักทำโดยการเพิ่มโค้ดใหม่เข้าไปใน kernel ผ่านทาง device driver หรือ loadable module เช่น Loadable Kernel Modules ในลีนุกซ์หรือ device drivers ในไมโครซอฟท์วินโดวส์ โดยทั่วไป kernel rootkit จะ แก้ไขหรือแทนที่ system calls ด้วยเวอร์ชั่นที่ซ่อนข้อมูลเกี่ยวกับผู้โจมตี ส่วน rootkit ในระดับ application อาจแทนที่ไฟล์ไบนารีของ application ด้วยไฟล์ปลอมที่ซ่อนโทรจันไว้ หรืออาจแก้ไขการทำงานของ application โดยใช้ hook, patch, inject code หรือวิธีอื่น ๆ rootkit ในระดับ kernel อาจมีอันตรายมากเนื่องจากตรวจพบได้ยากถ้าไม่ได้ใช้ซอฟท์แวร์ที่เหมาะสมเพื่อค้นหา

ตัวอย่าง
* Rootkit.com มีตัวอย่างของ rootkits จำนวนมาก
* Sony BMG ใช้ XCP (Extended Copy Protection) DRM ของ First 4 Internet

2. การตรวจหา rootkit
มีข้อจำกัดสำหรับโปรแกรมใด ๆ ที่พยายามตรวจหา rootkit ในขณะที่ rootkit กำลังทำงานอยู่ในระบบที่สงสัย rootkit เป็นชุดของโปรแกรมที่แก้ไขเครื่องมือและ library ที่ทุกโปรแกรมต้องใช้ rootkit บางตัวแก้ไข kernel ที่ทำงานอยู่ (ผ่านทาง loadable modules ในลีนุกซ์ และรูปแบบอื่น ๆ ในยูนิกซ์ ผ่านทาง VxD ซึ่งเป็น virtual external driver ในแพลตฟอร์มวินโดวส์ของไมโครซอฟท์) ปัญหาเบื้องต้นในการตรวจจับ rootkit คือเราไม่สามารถให้ความเชื่อถือระบบปฏิบัติการที่กำลังทำงานอยู่ได้ พูดในอีกแง่หนึ่งคือ การกระทำเช่นการดูรายชื่อโปรเซสที่กำลังทำงาน หรือรายชื่อไฟล์ทุกไฟล์ในไดเร็กทอรีหนึ่ง เราไม่สามารถเชื่อถือได้ว่ามันได้ทำงานอย่างที่ผู้ออกแบบตั้งใจให้เป็น ในปัจจุบันโปรแกรมตรวจ rootkit ที่ทำงานใน live system เป็นเพียงวิธีเดียวที่ได้ผลเนื่องจาก rootkit ยังไม่ได้รับการพัฒนาให้ซ่อนตัวมันอย่างเต็มที่

วิธีที่ดีและน่าเชื่อถือที่สุดสำหรับการตรวจหา rootkit คือการปิดคอมพิวเตอร์ที่สงสัยว่าถูกติดตั้ง rootkit แล้วจึงตรวจพื้นที่เก็บข้อมูลโดยการบู๊ต (boot) จากสื่ออื่น (เช่น rescue CD-ROM, USB flash drive) rootkit ที่ไม่ได้ทำงานอยู่จะไม่สามารถซ่อนตัวเองได้ และโปรแกรมแอนตี้ไวรัสจะสามารถค้นหา rootkit ที่ติดตั้งผ่านทาง OS calls มาตรฐาน (ซึ่งน่าจะถูกแก้ไขโดย rootkit) และ query ในระดับต่ำ ซึ่งยังน่าเชื่อถือได้ rootkit พยายามป้องกันจากการค้นพบโดยการเฝ้าดูโปรเซสที่ทำงานอยู่และหยุดกิจกรรมของพวกมันจนกระทั่งการสแกนเสร็จสิ้น เนื่องจาก rootkit scanner ไม่สามารถค้นหา malware ที่ไม่มีระบบซ่อนตัวเองได้

ผู้ผลิตภัณฑ์ด้านความปลอดภัยได้แก้ไขปัญหาโดยการรวมระบบตรวจจับ rootkit ลงไปในผลิตภัณฑ์แอนตี้ไวรัสแบบดั้งเดิม ถ้า rootkit ตัดสินใจที่จะซ่อนตัวเองในระหว่างขั้นตอนการสแกน มันจะถูกตรวจพบโดยซอฟท์แวร์ตรวจจับการซ่อนตัวเอง แต่ถ้ามันตัดสินใจที่จะยกเลิกการโหลดเข้าสู่ระบบ แอนตี้ไวรัสแบบดั้งเดิมก็สามารถค้นหาพบได้โดยการตรวจจาก fingerprint การป้องกันที่ใช้ทั้งสองวิธีแบบนี้อาจบังคับผู้โจมตีให้ใช้ระบบตอบโต้การโจมตี (เรียกว่า retro routines) ในโค้ดของ rootkit ที่จะบังคับให้ลบซอฟท์แวร์ด้านความปลอดภัยออกจากหน่วยความจำ ทำให้โปรแกรมแอนตี้ไวรัสไม่สามารถทำงานได้ เช่นเดียวกันกับไวรัสคอมพิวเตอร์

มีหลายโปรแกรมที่สามารถตรวจจับ rootkit ในระบบยูนิกซ์มีโปรแกรมสองตัวที่นิยมใช้คือ chkrootkit และ rkhunter สำหรับแพลตฟอร์มวินโดวส์ มีโปรแกรมฟรีสำหรับใช้ส่วนบุคคลชื่อ Blacklight เป็นเวอร์ชั่นเบต้าในเว็บไซต์ของ F-Secure อีกโปรแกรมหนึ่งคือ Rootkit Revealer จาก Sysinternals มันจะตรวจจับ rootkit ที่มีทั้งหมดในปัจจุบันโดยการเปรียบเทียบผลที่ได้จากระบบปฏิบัติการกับผลที่ได้จากการอ่านดิสก์ อย่างไรก็ตามrootkit บางตัวใช้การเพิ่มโปรแกรมเหล่านี้เข้าไปในรายการของไฟล์ที่มันไม่ได้ซ่อนไว้ ดังนั้นเมื่อ rootkit ทำให้ไม่เกิดความแตกต่างระหว่างรายการไฟล์ทั้งสองรายการ โปรแกรมตรวจจับจึงไม่รายงานความผิดปกติ อย่างไรก็ตามการเปลี่ยนชื่อไฟล์ rootkitrevealer.exe เป็นชื่อแบบสุ่มสามารถเอาชนะฟีเจอร์นี้ของ rootkit ได้ ในรีลีสล่าสุดของ Rkdetector และ Rootkit Revealer มีฟีเจอร์ที่เปลี่ยนชื่อไฟล์อยู่แล้วดังนั้นจึงไม่จำเป็นต้องเปลี่ยนชื่อไฟล์ด้วยตัวคุณเองอีกต่อไป

Chkrootkit
http://www.chkrootkit.org/
Rkhunter
http://www.rootkit.nl/
Blacklight
http://www.f-secure.com/blacklight/
Rootkit Revealer
http://www.sysinternals.com/Utilities/RootkitRevealer.html
Rkdtector
http://www.rootkitdetector.com/

หลักการป้องกันไว้ดีกว่าแก้ยังใช้ได้เสมอ ถ้าคุณเชื่อในความถูกต้องของแผ่นติดตั้งของระบบ คุณสามารถใช้การเข้ารหัสเพื่อเฝ้าดูความถูกต้องของระบบ โดยการทำ fingerprinting ไฟล์ระบบทันทีหลังจากมีการติดตั้งระบบใหม่ ๆ และทำอีกครั้งเมื่อมีการเปลี่ยนแปลงไฟล์ระบบ (เช่น การติดตั้งซอฟท์แวร์ใหม่) ทำให้คุณรู้ได้เมื่อมีการเปลี่ยนแปลงที่เป็นอันตรายกับไฟล์ระบบของคุณ ในขั้นตอนการทำ fingerprint จะมีการใช้ cryptographic hash function เพื่อสร้างตัวเลขที่มีความยาวจำกัด มีเอกลักษณ์เฉพาะขึ้นอยู่กับทุกบิตของข้อมูลที่มีในไฟล์ที่ทำ fingerprint คุณสามารถตรวจจับการเปลี่ยนแปลงใด ๆ กับไฟล์เหล่านี้ที่คุณไม่ได้ทำ โดยการคำนวณและเปรียบเทียบค่า hash (หรือ fingerprint) ของไฟล์เป็นระยะ ๆ

3. การกำจัด rootkit
มีความคิดที่เชื่อว่าการกำจัด rootkit ออกจากระบบไม่สามารถทำได้ ถึงแม้จะรู้ถึงลักษณะที่แท้จริงและองค์ประกอบของ rootkit ก็ตาม การใช้เวลาและความพยายามของผู้ดูแลระบบโดยใช้ทักษะหรือประสบการณ์ที่จำเป็นเพื่อการติดตั้งระบบปฏิบัติการใหม่ตั้งแต่ต้นเป็นทางเลือกที่ดีกว่า

Rootkit Question
http://forums.spywareinfo.com/lofiversion/index.php/t52360.html

มีวิธีการลบ rootkit โดยการใช้ filesystem driver เมื่อระบบกำลังทำงานอยู่ Rkdetector v2.0 ใช้วิธีลบไฟล์ที่ซ่อนอยู่เมื่อระบบกำลังทำงานอยู่โดยใช้ NTFS และ FAT32 filesystem driver ของมันเอง หลังจากลบไฟล์และระบบบู๊ตขึ้นมาใหม่แล้ว ไฟล์ของ rootkit จะไม่สามารถโหลดขึ้นมาได้เพราะข้อมูลที่มีอยู่เสียหายไปแล้ว

4. ความแตกต่างของ Rootkit ไวรัสคอมพิวเตอร์และเวิร์ม
ความแตกต่างหลัก ๆ ของไวรัสคอมพิวเตอร์และ rootkit คือการแพร่กระจาย ไวรัสคอมพิวเตอร์เหมือน rootkit ตรงที่พวกมันแก้ไขซอฟท์แวร์ที่เป็นองค์ประกอบหลักของระบบ โดยการใส่โค้ดที่พยายามซ่อนการติดตั้ง และช่วยเพิ่มฟีเจอร์หรือ service บางอย่างให้กับผู้โจมตี (เป็น payload ของไวรัส)

ในกรณีของ rootkit payload อาจพยายามรักษาความถูกต้องสมบูรณ์ของ rootkit (การพยายามควบคุมระบบ)เช่น ทุกครั้งที่ผู้ใช้ใช้คำสั่ง ps ที่เป็นของ rootkit มันอาจตรวจ copy ของ init และ inetd ในระบบเพื่อให้แน่ใจว่าระบบยังคงถูกควบคุมโดย rootkit อยู่ และอาจติดตั้ง rootkit ลงในระบบอีกครั้งตามความจำเป็น ส่วนที่เหลือของ payload มีไว้เพื่อตรวจให้แน่ใจว่าผู้บุกรุกยังคงควบคุมระบบอยู่ โดยทั่วไปรวมถึงการมี backdoor ในรูปแบบของ username /password ที่สามารถเข้าสู่ระบบได้ command-line switch ที่ซ่อนไว้ หรือ environment variable พิเศษซึ่งสามารถหลบหลีกระบบ access control policy ของโปรแกรมที่ไม่ได้ถูกแก้ไขโดย rootkit ได้ rootkit บางตัวอาจเพิ่มการตรวจ port knocking เข้าไปใน network daemon (services) เช่น inetd หรือ sshd

port knocking วิธีการเปิดพอร์ตในไฟร์วอลล์โดยการสร้างความพยายามในการเชื่อมโยงเข้าไปที่พอร์ตที่ปิดอยู่ตามที่กำหนดไว้ หลังจากที่ได้รับความพยายามในการเชื่อมโยงตามลำดับที่ถูกต้องมาแล้ว จะมีการแก้ไขข้อบังคับของไฟร์วอลล์อนุญาตให้โฮสต์นั้นสามารถเชื่อมโยงกับพอร์ตนั้นได้)

ไวรัสคอมพิวเตอร์อาจมี payload แบบใดก็ได้ อย่างไรก็ตาม ไวรัสคอมพิวเตอร์อาจพยายามแพร่กระจายไปยังระบบอื่นอีกด้วย ส่วน rootkit นั้นโดยทั่วไปแล้วจะจำกัดอยู่ที่การควบระบบเพียงระบบเดียวเท่านั้น

โปรแกรมหนึ่งหรือชุดโปรแกรมที่พยายามสแกนเครือข่ายเพื่อหาระบบที่มีช่องโหว่ โจมตีช่องโหว่และบุกรุกเข้าระบบเหล่านั้นโดยอัตโนมัติ เรียกว่า หนอนคอมพิวเตอร์ (computer worm) รูปแบบอื่น ๆ ของหนอนคอมพิวเตอร์อาจทำงานในลักษณะ passive เช่น ดักจับข้อมูล username และ password และใช้ข้อมูลนี้เพื่อบุกรุกแอคเคาท์ ติดตั้งสำเนาของตัวมันเองลงไปในแต่ละแอคเคาท์ (และมักส่งข้อมูลแอคเคาท์กลับมายังผู้บุกรุกผ่านทาง covert channel)

covert channel หมายถึงช่องการสื่อสารใด ๆ (channel) ที่สามารถถูกใช้ประโยชน์โดยโปรเซสหนึ่ง เพื่อส่งผ่านข้อมูลข่าวสารในลักษณะที่ละเมิดข้อกำหนดในการรักษาความปลอดภัยของระบบ

นอกจากนี้ยังมีซอฟท์แวร์มุ่งร้ายแบบ hybrid หนอนอินเทอร์เน็ตอาจติดตั้ง rootkit และ rootkit อาจทำมีสำเนาของหนอนอินเทอร์เน็ต, packet sniffer หรือ pot scanner หนึ่งตัวหรือมากกว่า นอกจากนี้ยังมีหนอนอินเทอร์เน็ตที่แพร่กระจายผ่านอีเมล ที่โจมตีแพลตฟอร์มไมโครซอฟท์วินโดวส์โดยเฉพาะ ที่มักเรียกกันว่าไวรัส ดังนั้นคำเหล่านี้จึงมักใช้คาบเกี่ยวกัน และถูกเหมารวมได้ง่าย

5. rootkit ที่ดาวน์โหลดได้ในอินเทอร์เน็ต
rootkit ก็เหมือนกับซอฟท์แวร์อื่น ๆ ที่ใช้โดยผู้โจมตี มีเครื่องมือหลายตัวที่ใช้ร่วมกันหลายคน และหาได้ง่ายในอินเทอร์เน็ต ไม่ใช่เรื่องแปลกที่จะพบระบบที่ถูกบุกรุกที่ถูกติดตั้ง rootkit ซับซ้อนที่สามารถหาได้ในอินเทอร์เน็ต แต่ซ่อนหนอนอินเทอร์เน็ตที่ไม่ซับซ้อน หรือเครื่องมือที่ดูเหมือนจะเขียนโดยโปรแกรมเมอร์ที่ไม่มีประสบการณ์

rootkit ส่วนใหญ่ที่หาได้ในอินเทอร์เน็ตมักสร้างเป็นโปรแกรมพิสูจน์ความคิด (proof of concept) เพื่อทดลองแนวคิดใหม่ในการซ่อนสิ่งที่ต้องการในระบบคอมพิวเตอร์ อย่างก็ตามเนื่องจากเป็นการทดลอง พวกเขาจึงมักจะไม่ได้ทำให้ rootkit สามารถซ่อนตัวได้อย่างสมบูรณ์ เมื่อใช้ rootkit เพื่อการโจมตีจึงอาจมีประสิทธิภาพมาก แต่อย่างไรก็ตาม เมื่อ rootkit ถูกค้นพบ เช่น โดยการเริ่มต้นระบบปฏิบัติการจากสื่อที่เชื่อถือได้ เช่น ซีดี จึงมักแสดงให้เห็นถึงร่องรอยของ rootkit เหล่านี้ เช่น มีไฟล์ที่ชื่อ rootkit ในไดเร็กทอรีทั่ว ๆ ไปในระบบคอมพิวเตอร์นั้น

นายนนทวรรธนะ สาระมาน
Nontawattana Saraman
ทีมพัฒนาวิจัย SRAN