 |
|
|
|
ThaiCERT:
Thai Computer Emergency Response Team
ศูนย์ประสานงานการรักษาความปลอดภัยคอมพิวเตอร์ ประเทศไทย |
|
| |
| |
|
ชื่อเรื่อง : วิธีการตรวจสอบความสมบูรณ์ของไฟล์
เรียบเรียงโดย : ชวลิต ทินกรสูติบุตร
เรียบเรียงเมื่อ : 9 กันยายน 2546
กล่าวนำ
โดยทั่วไปผู้ดูแลระบบ หรือผู้ใช้งานคอมพิวเตอร์มักจะละเลยขั้นตอนการตรวจสอบความสมบูรณ์ของซอร์ดโค้ด
หรือโปรแกรมที่ดาวน์โหลดจากเว็บไซต์ ก่อนการติดตั้งเสมอ การตรวจสอบความสมบูรณ์ของไฟล์เป็นวิธีการหนึ่งในการยืนยันว่าไฟล์ที่ดาวน์โหลดมานั้นเป็นไฟล์ที่สร้าง
หรือรวบรวมจากเจ้าของผลิตภัณฑ์นั้นจริง หากผลของการตรวจสอบความสมบูรณ์ไม่ถูกต้องอาจมีความเป็นไปได้ที่ไฟล์ดังกล่าวถูกแก้ไขจากผู้ไม่ประสงค์ดี
โดยการแทรกโปรแกรมม้าโทรจัน (Trojan Horse Code) หรือ โปรแกรม Back door ซึ่งส่งผลกระทบต่อความปลอดภัยของระบบหลังจากการติดตั้งโปรแกรมดังกล่าว
ในบทความนี้จะกล่าวถึงวิธีการตรวจสอบความสมบูรณ์ของไฟล์ในระบบปฏิบัติการตระกูลยูนิกซ์
Verify Software
การตรวจสอบความคงอยู่ หรือความสมบูรณ์ของไฟล์นั้นสามารถทำได้โดยอาศัยหลักการสองประเภท
ได้แก่ การตรวจสอบค่า Checksum (เช่น การใช้ฟังก์ชั่น md5 hash) และการตรวจสอบจากการเข้ารหัสลายมือชื่ออิเล็กทรอนิกส์
(Cryptographic Signature เช่น PGP) ในบทความนี้จะกล่าวถึงการตรวจสอบความสมบูรณ์ของไฟล์
3 วิธีดังต่อไปนี้
1. การตรวจสอบความสมบูรณ์ของไฟล์ด้วยวิธี Checksum ด้วยโปรแกรม md5
- หากในระบบไม่มีคำสั่ง md5 สามารถดาวน์โหลดได้จากเว็บไซต์ ftp://ftp.cerias.purdue.edu/pub/tools/unix/crypto/md5
- ทำการติดตั้งผ่านคำสั่ง
# make
และ
# cp md5 /usr/bin/
- ในบทความนี้ขอยกตัวอย่างการตรวจสอบความสมบูรณ์ของไฟล์ apache_1.3.28.tar.gz
จากเว็บไซต์ http://www.apache.org/dist/httpd/
ในเว็บไซต์นี้จะปรากฎไฟล์ชื่อ apache_1.3.28.tar.gz.md5 เป็นไฟล์ที่เก็บค่า Checksum
ของโปรแกรม apache_1.3.28.tar.gz ให้ดาวน์โหลดไฟล์ apache_1.3.28.tar.gz และ
apache_1.3.28.tar.gz.md5 พร้อมกันเพื่อตรวจสอบความสมบูรณ์
- ตรวจสอบค่า Checksum ของไฟล์ apache_1.3.28.tar.gz ที่ดาวน์โหลดมาด้วยคำสั่ง
# md5 apache_1.3.28.tar.gz
ผลของคำสั่ง
MD5 (apache_1.3.28.tar.gz) = 2cdece7b4881d541e072de6a2b65db77
- ตรวจสอบค่า Checksum ที่ถูกต้องจากไฟล์ apache_1.3.28.tar.gz.md5 ด้วยคำสั่ง
# cat apache_1.3.28.tar.gz.md5
ผลของคำสั่ง
MD5 (apache_1.3.28.tar.gz) = 2cdece7b4881d541e072de6a2b65db77
- สังเกตได้ว่าค่าของตัวเลข Checksum ของทั้งสองคำสั่งเหมือนกันคือ 2cdece7b4881d541e072de6a2b65db77
แสดงว่าไฟล์ apache_1.3.28.tar.gz ที่ดาวน์โหลดมานี้มีความสมบูรณ์ และถูกต้องจากผู้พัฒนาโปรแกรม
apache
2. การตรวจสอบความสมบูรณ์ของไฟล์ด้วยวิธี Cryptographic Signature ด้วยโปรแกรม
gnupg
- ดาวน์โหลดโปรแกรม gnupg จากเว็บไซต์ http://www.gnupg.org
- ติดตั้งด้วยคำสั่ง
# ./configure
และ
# make
และ
# make install
- เช่นเดียวกันกับการตรวจสอบด้วยคำสั่ง md5 บทความนี้จะทดสอบกับไฟล์
apache_1.3.28.tar.gz โดยดาวน์โหลดไฟล์ apache_1.3.28.tar.gz ไฟล์ apache_1.3.28.tar.gz.asc
ไฟล์ apache_1.3.28.tar.gz.asc.md5 และไฟล์ KEYS
- ก่อนอื่นต้อง import คีย์ของผู้พัฒนาโปรแกรม apache ผ่านไฟล์ KEYS ด้วยคำสั่ง
# gpg --import KEYS
- ตรวจสอบความสมบูรณ์ของไฟล์รหัสลายมือชื่ออิเล็กทรอนิกส์ที่ชื่อ apache_1.3.28.tar.gz.asc
ด้วยขั้นตอนของคำสั่ง md5 ด้วยคำสั่ง
# md5 apache_1.3.28.tar.gz.asc
ผลของคำสั่ง
MD5 (apache_1.3.28.tar.gz.asc) = fa7e903b17afc2d90c8f7036c6ee5c03
และ
# cat apache_1.3.28.tar.gz.asc.md5
ผลของคำสั่ง
MD5 (apache_1.3.28.tar.gz.asc) = fa7e903b17afc2d90c8f7036c6ee5c03
- ถ้าผลของค่า Checksum ของไฟล์ทั้งสองตรงกันก็แสดงว่าไฟล์รหัสลายมือชื่ออิเล็กทรอนิกส์ที่ชื่อ
apache_1.3.28.tar.gz.asc นั้นสมบูรณ์
- ต่อจากนั้นต้องตรวจสอบว่าไฟล์ apache_1.3.28.tar.gz มีความสมบูรณ์หรือไม่โดยผ่านการตรวจสอบรหัสลายมือชื่ออิเล็กทรอนิกส์ด้วยคำสั่ง
# gpg --verify apache_1.3.28.tar.gz.asc
ผลของคำสั่ง
gpg: Signature made Thu 17 Jul 2003 03:42:54 AM ICT
using DSA key ID 08C975E5
gpg: Good signature from "Jim Jagielski <jim@apache.org>"
gpg: aka "Jim Jagielski <jim@jaguNET.com>"
gpg: aka "Jim Jagielski <jim@jimjag.com>"
gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 8B39 757B 1D8A 994D F243 3ED5 8B3A 601F 08C9 75E5
จากข้างต้นมีความหมายว่าไฟล์ apache_1.3.28.tar.gz ถูกเข้ารหัสลายชื่ออิเล็กทรอนิกซ์โดยผู้พัฒนาที่ชื่อ
Jim Jagielski <jim@apache.org> โดยสังเกตจากบรรทัดที่มีข้อความว่า
gpg: Good signature from "Jim Jagielski <jim@apache.org>"
และไฟล์ apache_1.3.28.tar.gz ถูกตรวจสอบแล้วยังมีความสมบูรณ์เหมือนเดิม โดยสังเกตจากคำว่า
"Good signature" แต่หากไฟล์ apache_1.3.28.tar.gz ไม่สมบูรณ์ผลของคำสั่งจะเป็นดังต่อไปนี้
# gpg --verify apache_1.3.28.tar.gz.asc
ผลของคำสั่ง
gpg: Signature made Thu 17 Jul 2003 03:42:54 AM ICT
using DSA key ID 08C975E5
gpg: BAD signature from "Jim Jagielski <jim@apache.org>"
สังเกตเห็นได้ว่าหากไฟล์ apache_1.3.28.tar.gz ไม่ใช่ไฟล์ที่ถูกต้องสมบูรณ์ หรือไม่ถูกเข้ารหัสลายมือชื่ออิเล็กทรอนิกส์จากผู้พัฒนาที่ชื่อ
Jim Jagielski <jim@apache.org> แล้วผลของคำสั่งการตรวจสอบจะปรากฏคำว่า
"BAD signature" แทนคำว่า "Good signature"
3. การตรวจสอบความสมบูรณ์ของเพ็กเกจโปรแกรมชนิด rpm ของระบบปฎิบัติการ Red
Hat
สำหรับผู้ใช้งานระบบปฏิบัติการ Red Hat ต้องการตรวจสอบความสมบูรณ์ของเพ็กเกจ rpm
ที่ดาวน์โหลดจากเว็บไซต์ของ Red Hat สามารถทำได้ดังนี้
- ทำการ import คีย์ของผู้พัฒนา Red Hat ด้วยคำสั่ง
# gpg -import /usr/share/rhn/RPM-GPG-KEY
- ทดสอบโดยการโหลดไฟล์ httpd-2.0.40-21.i386.rpm
จากเว็บไซต์ของ Red Hat
- ตรวจสอบความสมบูรณ์ของไฟล์ด้วยคำสั่ง
# rpm -Kv httpd-2.0.40-21.i386.rpm
ผลของคำสั่ง
httpd-2.0.40-21.i386.rpm:
Header V3 DSA signature: OK, key ID db42a60e
Header SHA1 digest: OK (07f842ed646307ecdd9b6fb2f34ef9c3edf59260)
MD5 digest: OK (5902e67c6ee8239ea8ed8a1a11a99e0f)
V3 DSA signature: OK, key ID db42a60e
จากข้างต้นพบว่าไฟล์ httpd-2.0.40-21.i386.rpm ที่ดาวน์โหลดมานั้นมีความสมบูรณ์ถูกต้อง
และถูกเข้ารหัสลายชื่ออิเล็กทรอนิกส์อย่างถูกต้อง แต่หากไม่ถูกต้องผลของคำสั่งอาจจะเป็นดังต่อไปนี้
httpd-2.0.40-21.i386.rpm:
Header V3 DSA signature: OK, key ID db42a60e
Header SHA1 digest: OK (07f842ed646307ecdd9b6fb2f34ef9c3edf59260)
MD5 digest: BAD Expected(5902e67c6ee8239ea8ed8a1a11a99e0f) != (5fafb39553ad399dd3904cafd6c04ad0)
V3 DSA signature: BAD, key ID db42a60e
บทส่งท้าย
การตรวจสอบความถูกต้อง และสมบูรณ์ของไฟล์โปรแกรมที่ดาวน์โหลดจากเว็บไซต์ก่อนการติดตั้งนั้นเป็นสิ่งสำคัญที่จำเป็นต้องทำทุกครั้ง
เพราะไม่เช่นนั้นท่านจะเสี่ยงต่อความเสียหายที่จะเกิดขึ้นกับโปรแกรมม้าโทรจัน หรือโปรแกรม
Back door ที่แทรกมากับไฟล์ดังกล่าว การตรวจสอบความสมบูรณ์ด้วยวิธีการตรวจสอบการเข้ารหัสลายมือชื่ออิเล็กทรอนิกส์นั้นเป็นวิธีที่ดีกว่า
การตรวจสอบด้วยวิธี Checksum เพราะหากเว็บไซต์ หรือเอฟทีพีไซต์ (FTP Site) ถูกผู้ประสงค์ร้ายบุกรุกเพื่อเข้าไปแทรกไฟล์ด้วยโปรแกรมม้าโทรจัน
หรือโปรแกรม Back door และเปลี่ยนแปลงไฟล์ผลของค่า Checksum ให้ตรงกับไฟล์ที่ถูกแก้ไข
ดังนั้นเมื่อผู้ใช้งานไม่สามารถรู้ได้ว่าไฟล์ที่จะดาวน์โหลดนั้นเป็นไฟล์ของผู้บุกรุกหรือไม่
ฉะนั้นควรเลือกดาวน์โหลดไฟล์จากเว็บไซต์ที่สนับสนุนการตรวจสอบความสมบูรณ์ด้วยวิธีการตรวจสอบการเข้ารหัสลายมือชื่ออิเล็กทรอนิกส์เป็นหลัก
นอกจากนี้ควรตรวจสอบข่าวสารว่าเว็บไซต์ที่ท่านจะดาวน์โหลดไฟล์โปรแกรมเคยถูกบุกรุก
หรือไม่ ตัวอย่างเช่นในกรณีของ โปรแกรม sendmail โปรแกรม tcpdump หรือ GNU ftp
site (จากเอกสารอ้างอิง[2] ถึง [4]) เป็นต้น เพราะอาจจะมีผลกระทบต่อขั้นตอนของการตรวจสอบความถูกต้องสมบูรณ์ของไฟล์ได้เช่นกัน
เอกสารอ้างอิง
[1] The GNU Privacy Guard
http://www.gnupg.org
[2] CERT Advisory CA-2003-21 GNU Project FTP Server Compromise
http://www.cert.org/advisories/CA-2003-21.html
[3]CERT Advisory CA-2002-28: Trojan Horse Sendmail Distribution
http://www.cert.org/advisories/CA-2002-28.html
[4] CERT Advisory CA-2002-30: Trojan Horse tcpdump and libpcap Distributions
http://www.cert.org/advisories/CA-2002-30.html