Knowledge & Security by CAT-CA InfoSec Team.


[Best view with Firefox web browser]

Linux Virus ELS file format

Posted by ejeepss on กันยายน 19th, 2007

Linux Viruses – ELS FILE FORMAT

บทความนี้ผมได้ทำสมัยยังศึกษาอยู่ เพื่อศึกษาเกี่ยวกับไวรัสในระบบปฏิบัติการอื่นๆ นอกเหนือจากระบบปฏิบัติการของไมโครซอฟต์ ซึ่งจากข้อมูลที่ได้ศึกษาพบว่าจากความนิยมใช้ Linux อย่างแพร่หลาย จึงทำให้เกิดการพัฒนาไวรัสที่สามารถติดบนระบบปฏิบัติอื่น และมีแนวโน้มที่ไวรัสพวกนี้สามารถกระโดดข้ามระบบปฏิบัติการได้ ซึ่งหากถึงวันนั้นจริงๆ การแพร่กระจายตัวของไวรัสคอมพิวเตอร์ คงรวดเร็วกว่า CodeRed , Slamber เป็นแน่ …

ปัจจุบันได้มีการนำ Linux มาใช้เป็นระบบปฏิบัติการเป็นจำนวนมาก โดย Linux ที่ได้รับความนิยมใช้งานกันแพร่หลาย ได้แก่ RedHat และ Suse อย่างไรก็ตามในปัจจุบัน Linux ที่ติดไวรัสนั้นมีจำนวนน้อย และยังไม่ส่งผลอะไรมากมายนัก แต่เมื่อมีการนำ Linux มาใช้เป็น Desktop เพิ่มมากขึ้น อนาคตเรื่องไวรัสบน Linux นี้ อาจเป็นเรื่องใหญ่
Linux โดยทั่วๆ ไปจะใช้ระบบไฟล์ที่เรียกว่า ELF (Executable and Linkable Format) ซึ่งรองรับการทำงานของ CPU ตั้งแต่ 32 และ 64 Bit

1. ELS File FORMAT Layout
ตั้งแต่ระบบปฏิบัติการ Linux ได้เข้ามามีบทบาทในชีวิตประจำวัน RedHat และ Suse เป็น Linux ที่มีผู้ใช้นิยมใช้ โดยได้ทำการทดสอบการ RedHat ทั้ง 2 version พบว่าการติดไวรัส นั้นขึ้นอยู่กับ Version ของ Linux และ Kernal Level ซึ่งใน Paper นี้ใช้ Linux RedHat 5.2 (Apollo) Kernal 2.0.36 บนเครื่อง i586 และ Linux RedHat 6.1 (Cartman) Kernal 2.2.12.20 บนเครื่อง i686
ในปัจจุบันประเภทไฟล์ที่ใช้เป็นพื้นฐานที่ Linux ใช้กันเรียกว่า ELF (Executable and Linkable Format) โดยที่ Object สามารถมองเห็นได้ถึง Linkable หรือ Executable Perspective โดยมี Linking View ซึ่งสำคัญมาก หากต้องการสร้างหรือ Compile หรือ Link file ไปยังไฟล์หรือต้องการจะ Run ไฟล์ โดยแสดงดัง Figure 1

linux_els_1.jpg
Figure 1 : ELF object can be viewed from a Linking or Executable perspective

อย่างไรก็ตาม Linking View ได้มีส่วนขยายของ header ออก โดยทั่วไป Program Header Table และ Segment นั้น เป็นส่วนสำคัญที่มองข้ามไม่ได้ ELF รองรับการทำงานทั้ง 32 และ 64 Bit ตัวอย่างเช่น Linux ที่ติดตั้งบน Intel Base System จะใช้ 32 Bit แต่หากใช้เครื่อง DEC Alpha-base จะใช้ 64 Bit แต่ปัจจุบันไม่ค่อยมีคนใช้ แต่ในอนาคตจะทำการทดสอบ 64 Bit ที่กำลังจะมาถึงคือ Intel , AMD และอื่น ๆ

1.1 ELF Header
ในการวิเคราะห์ครั้งนี้เราได้เลือกไปที่ path Arch ใน Linux RedHat 5.2 ที่ติดตั้งใหม่ เป็นไฟล์Execute ที่อยู่ที่ ../bin/arch โดยแสดงดังภาพ Figure 2 ซึ่งแสดงเป็นเลขฐาน 16 (hex)

linux_els_2.jpg
Figure 2 : A clean Linux RedHat v5.2 executable file /bin/arch (*)

1.2 Program Header Table
ใน Program Header Table สามารถแบ่ง 5 Segment โดยมีรายละเอียดแสดง Figure 3
• Segment 0 เริ่มต้นที่ตำแหน่ง 0034+ 20(h)
• Segment 1 เริ่มต้นที่ตำแหน่ง 0054+ 20(h)
• Segment 0 เริ่มต้นที่ตำแหน่ง 0074+ 20(h)
• Segment 0 เริ่มต้นที่ตำแหน่ง 0094+ 20(h)
• Segment 0 เริ่มต้นที่ตำแหน่ง 00B4+ 20(h)

linux_els_3.jpg
Figure 3 : File header overview 0000-0033: ELF header, 0034-00D3: Program Header Table

1.3 Section Header Table
โดยนับจำนวน Program Header และ Segment โดยภายในบรรจุข้อมูลที่สำคัญเวลา Linking เริ่มต้น Segment Header Table ที่ 07C0 (e-Shoff) แสดงได้ดัง Figure 7

linux_els_7.jpg
Figure 7 : Section Header Table with Section entries, location 07C0-0B2F

linux_els_8.jpg
Figure 8 : Section entry #1 in the Section Header Table, at location 07E8-080F

2. ELF FILE VIRUS
UNIX / LINUX มี Model ที่ดีเกี่ยวกับด้านความปลอดภัย ตัวอย่างเช่น นอกจากสิทธิ์ Root (Administrator) เป็นเรื่องยากมากที่จะทำการเปลี่ยน ELF Binary File อีกทั้งการที่ Server ให้บริการกับผู้ให้บริการไม่ให้สิทธิ์สูงในการเข้าใช้งาน อย่างไรก็ดีการที่มีผู้ใช้ Linux เพิ่มจำนวนมากขึ้นเรื่อย ๆ เราอาจจะเห็น Linux Virus เพิ่มขึ้นในอนาคต

2.1 Lin/Bliss
Virus Binary Virus ถูกค้นพบตั้งแต่ปี 1997 โดยจะแสดงให้เห็นถึงช่องโหว่สำหรับ Binary Virus โดย Lin/Bliss นั้นจะเพิ่มข้อมูลอย่างง่าย โดยเพิ่มข้อมูลไปถึง 17,992 หรือ 18,604 Bytes โดยมี 2 ELF Header โดยที่ Header แรกนั้นเป็น Virus และ Header 2 เป็น ELF ปกติ (ไม่ติด Virus) โดย ELF ปกติเริ่มต้นด้วย Offset ที่
45E4 (hex) = 17,892 (dec)
48AC (hex) = 18,604 (dec)
Lin/Bliss สามารถตรวจจับและแก้ไขได้ง่าย แสดงรายละเอียดดัง Figure 10

linux_els_10.jpg
Figure 10 : Lin/Bliss-infected file

2.2 Lin/Desel
Lin/Desel สามารถตรวจพบใน 32 และ 64 Bit ใน RedHat 5.2 โดยชื่อที่เรียกกันคือ Lin/Desel.969 เนื่องจากมีการเพิ่มขนาดไฟล์ขนาด 969 Bytes
ไฟล์ธรรมดามีขนาด 4,892 byte (dec)
ไฟล์ที่ติดไวรัสมีขนาด 5,909 byte (dec)

linux_els_15a.jpg
Figure 15a : Lin/Desel changes bytes at the entry point, not the entry point itsalf

โดยไวรัสจะทำงานเปลี่ยนแปลงตำแหน่ง File Entry จาก 0680 ไปยัง 0A49 ซึ่งเพิ่มมากขึ้นถึง 3C9(h) byte (969dec) โดยแสดงใน Figure 15c

linux_els_15c.jpg
Figure 15c : The Lin/Diesel infaction schema

3. Summary และ Conclusions

Linux Virus มีเทคนิคดังนี้
1. เปลี่ยนแปลง Code ที่ปกติ เป็น Code Virus ในไฟล์
2. เพิ่ม Code Virus ในไฟล์
3. เพิ่ม Section Virus ในไฟล์
4. ขยายขนาด Section และเพิ่ม Code Virus ภายใน
การป้องกันเบื้องต้น
1. เปลี่ยน OS (RedHat) โดยเลือกรุ่น และ Kernel ที่ปลอดภัย
2. ตรวจหา ELF เพื่อหา E-Entry Point ที่ผิดปกติ

สรุป
1. ไฟล์ที่ใช้รูปแบบ ELF ยังคงมีความเสี่ยงในการติดไวรัส
2. Linux Virus นั้นอาจเป็นปัญหาใหญ่ในอนาคต หากมีการใช้ Linux เพิ่มมากขึ้น

ขอบพระคุณที่สนใจอ่าน

Reference

  • Full documentation on the ELF layout is available at various locations on-line. For example,
    http://suncite.unc.edu/pub/Linux/GCC/ELF.doc.tar.gz
  • Download : elf-format.pdf

  • Leave a Reply

    XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>