วิธีตรวจสอบเว็บไซต์ที่โดน Hack #4

(ตอนนี้ จะเน้นการตรวจสอบ Joomla เป็นหลักครับ)

จาก “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #3” ซึ่ง เป็นการตรวจสอบเบื้องต้นว่า มีการบุกรุกผ่านช่องโหว่ต่างๆของ Web Server เข้ามาวาง Backdoor หรือไม่ ซึ่ง ตั้งสมมุติฐานว่า Hacker จะเอาไฟล์ .php มาวางไว้ในไดเรคทอรี่ images/stories เท่านั้น

แต่ความจริงแล้ว … ไม่ใช่เช่นนั้น

เพราะ Hacker ต้องคิดต่อไปอีกขั้นหนึ่ง คือ ต้องวางไฟล์ Backdoor ไว้ในที่อื่นๆด้วย รวมถึง พยายามแก้ไขไฟล์ .php ของ Joomla เพื่อไม่ให้ผิดสังเกต และเป็นช่องในการกลับเข้ามาในภายหลัง

ในบทความนี้ เป็นแนวทางปฏิบัติที่พึงดำเนินการ เพื่อการสืบสวน ค้นหา และทำลาย Backdoor ที่อื่นๆ รวมถึง เสนอแนวทางปฏิบัติ เพื่อผู้ดูแลระบบจะได้ทราบว่า มีไฟล์ใดบ้างที่เปลี่ยนแปลง ในอนาคต

ภาพรวมขั้นตอนการปฏิบัติ

1. ทำการตรวจสอบไฟล์ .php ใน images/stories แล้วเก็บเป็น List เอาไว้
2. ดึงไฟล์ Backdoor ที่พบ มาเก็บไว้ก่อน ด้วยคำสั่ง tar
3. ค้นหาไฟล์ ที่เกิดขึ้นหรือถูกแก้ไข ในเวลาใกล้เคียงกันกับ Backdoor นั้นๆ แล้วเก็บเป็น List เอาไว้
4. ดึงไฟล์ ต้องสงสัย มาเก็บไว้ก่อน แล้ว ตรวจสอบ เป็นรายไฟล์
5. ลบไฟล์ Backdoor จาก List ในข้อ 1.
6. ลบไฟล์ ต้องสงสัย หลังจากการตรวจสอบในข้อ 4.
7. ตรวจสอบ Web User คือใคร
8. ค้นหา Directory ที่ Web User จากข้อ 7. ที่สามารถเขียนได้
9. ค้นหา Backdoor พื้นฐานเพิ่มเติม

รายละเอียดการปฏิบัติ

คำสั่งต่อไปนี้ อยู่บนพื้นฐานที่ว่า
Document Root ของ Web Server อยู่ใน /var/www/ ของแต่ละผู้ใช้
ดังนั้น ขอให้ปรับเปลี่ยนตามระบบของท่าน

1. ทำการตรวจสอบไฟล์ .php ใน images/stories แล้วเก็บเป็น List เอาไว้
ใช้คำสั่งต่อไปนี้

find /var/www/ -name "*.php" -type f | grep 'images/stories' > /tmp/backdoor.txt

2. ดึงไฟล์ Backdoor ที่พบ มาเก็บไว้ก่อน ด้วยคำสั่ง tar เพื่อให้ในการตรวจสอบ และภายหลัง

cat /tmp/backdoor.txt | xargs tar -cvf /tmp/backdoor.tar

ลองตรวจสอบว่า คำสั่งดังกล่าว เก็บไฟล์ได้จริงหรือไม่ ด้วยคำสั่งต่อไปนี้

tar -tvf /tmp/backdoor.tar

3. ค้นหาไฟล์ ที่เกิดขึ้นหรือถูกแก้ไข ในเวลาใกล้เคียงกันกับ Backdoor นั้นๆ แล้วเก็บเป็น List เอาไว้ ให้สร้างไฟล์ ชื่อ findbackdoor.sh แล้วใส่เนื้อหาตามนี้

#!/bin/sh
BD="/tmp/backdoor.txt"
TMP01="/tmp/otherbackdoor.txt"
DMROOT="/var/www/"
for f in $(cat $BD) ; do
    echo ":: $f ::"
    fdate=$(stat $f |grep ^Modify|awk '{print $2}')
    fdate2=$(date +%Y-%m-%d --date="$fdate 1 day")
    find $DMROOT -type f -name "*.php" -newermt $fdate ! -newermt $fdate2  >> $TMP01
    echo "------"
    echo ""
done

แล้วใช้คำสั่ง

sh findbackdoor.sh

โปรแกรมนี้จะทำการค้นหาไฟล์ ที่ถูก “สร้าง/แก้ไข” ในวันที่ backdoor ที่อยู่ใน images/stories ที่พบ และหลังจากนั้น 1 วัน  และ แสดงผลลัพธ์ไว้ในไฟล์ /tmp/otherbackdoor.txt

4. ดึงไฟล์ ต้องสงสัย มาเก็บไว้ก่อน แล้ว ตรวจสอบ เป็นรายไฟล์

cat /tmp/otherbackdoor.txt | xargs tar -cvf /tmp/otherbackdoor.tar

5. ลบไฟล์ Backdoor จาก List ในข้อ 1.
ซึ่งอยู่ในไฟล์ /tmp/backdoor.txt ด้วยคำสั่ง

cat /tmp/backdoor.txt | sudo xargs rm -rf

6. ลบไฟล์ ต้องสงสัย หลังจากการตรวจสอบในข้อ 4.

คำเตือน ตรวจสอบไฟล์ที่ปรากฏใน /tmp/otherbackdoor.txt ** ทุกไฟล์ ** เพราะ ไม่ใช่ทุกไฟล์ในนี้ จะเป็น Backdoor หากตรวจสอบแล้ว พบว่า ไม่ใช่ ก็ให้ลบบรรทัดนั้น ทิ้งไป ให้ในไฟล์ /tmp/otherbackdoor.txt เหลือแต่ไฟล์ backdoor จริงๆ

เมื่อมั่นใจแล้ว ลบด้วยคำสั่ง

cat /tmp/otherbackdoor.txt | sudo xargs rm -rf

ให้เก็บไฟล์ /tmp/backdoor.tar และ /tmp/otherbackdoor.tar เอาไว้ เพราะในนั้น จะปรากฏ วัน เวลา และรายละเอียดของไฟล์เอาไว้ เพื่อจะใช้ในการ ตรวจสอบหาต้นตอ และช่องโหว่ของระบบต่อไป

7. ตรวจสอบ Web User คือใคร
ตั้งสมมุติฐานว่า ท่านใช้ Apache Web Server ซึ่ง จะมีชื่อ Process ว่า httpd หรือไม่ก็ apache (หากใช้ตัวอื่น กรุณาประยุกต์ให้ถูกต้องด้วย) โดยใช้คำสั่ง

ps aux|egrep -i '(apache|httpd)' > /tmp/webuser.txt

ผลที่ได้ ให้ดูใน column แรกของไฟล์ /tmp/webuser.txt โดยทั่วไปแล้ว
CentOS/Fedora/RedHat จะได้เป็น apache
Linux/Debian จะได้เป็น www-data
แต่เคยเจอ บางระบบ ให้ user อื่นเป็นคนทำงาน ดังนั้น ให้ตรวจสอบให้เหมาะสมกับระบบตนเองด้วย

8. ค้นหา Directory ที่ Web User จากข้อ 7. ที่สามารถเขียนได้
สมมุติ Web User ที่ได้จากข้อ 7. ชื่อ www-data และ Document Root อยู่ที่ /var/www
ให้ใช้คำสั่งต่อไป เพื่อตรวจสอบว่า มี Directory ใดบ้าง ที่ Web User ดังกล่าวเขียนได้

find /var/www -user www-data -perm -u+w -type d > /tmp/webuser-dir.txt

หากพบว่า มี Directory ในไฟล์ /tmp/webuser-dir.txt ให้ ทำการปิด ไม่ให้ Web User นั้นเขียนได้ หรือ เปลี่ยนเป็นของ User อื่นแทน วิธีการนี้ จะทำให้ Hacker ไม่สามารถกลับมาเขียน Backdoor เพิ่มได้อีก

9. ค้นหา Backdoor พื้นฐานเพิ่มเติม
ตรวจสอบอีกครั้ง เผื่อจะมี Backdoor อื่นๆซ่อนอยู่ (วิธีการนี้ เป็นเพียง Backdoor ง่ายๆเท่านั้น แต่ดีกว่าไม่ตรวจสอบอะไร)

find /var/www -name "*.php" -exec egrep -l "eval.*base64_decode" {} \; > /tmp/knownbackdoor.txt

 

หาก Google Web Master Tools ซึ่งทางศูนย์คอมพิวเตอร์ดูแล แจ้งว่า มี Website ใด ภายใต้ Domain psu.ac.th ถูก Hack ทางศูนย์คอมพิวเตอร์ ขอดำเนินการตามนี้

  1. ปิดการเข้าถึงจากภายนอก มายัง TCP Port 80/443 ยัง IP Address ของ Web Server นั้นๆ
  2. แจ้ง ผู้ที่รับผิดชอบ Domain ของ Website ดังกล่าว
  3. ให้ผู้รับผิดชอบ ดำเนินการ ตามขั้นตอนข้อ 1-9 ข้างต้น และ ส่งผลเป็นไฟล์ดังต่อไปนี้มา
    backdoor.txt
    backdoor.tar
    otherbackdoor.txt
    otherbackdoor.tar
    webuser.txt
    webuser-dir.txt
    knowbackdoor.txt
    มาให้ศูนย์คอมพิวเตอร์ ตรวจสอบ
  4. เมื่อตรวจสอบเสร็จแล้ว ทางศูนย์คอมพิวเตอร์ อาจจะขอให้ตรวจสอบด้วยคำสั่งอื่นๆ เพื่อให้แน่ใจว่า ไม่มี Backdoor อันตรายหลงเหลืออยู่
  5. เมื่อมั่นใจแล้ว ทางผู้ดูแลระบบเครือข่าย จะเปิดให้ ภายนอก เข้ามายัง TCP Port 80/443 ยัง IP Address ดังกล่าวได้เหมือนเดิม

ขอให้โชคดี

(ใครเอาไปทำแล้ว ได้ผลอย่างไร ขอความกรุณารายงานผลด้วย ขอบคุณครับ)

3 comments for “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #4

Leave a Reply