Case Study: Web sites hacked, WordPress โดนแฮก และการแกะรอยแฮกเกอร์ #2

ต่อจากบทความที่แล้ว

Case Study ก็คือแฮกเกอร์ทำการเจาะเข้าไปในระบบ (เจาะผ่านช่องทางไหน?) เพื่อเปลี่ยนแปลงข้อมูลเว็บไซต์ (ส่วนมากแล้ว หน้าแรก index ไฟล์) ส่วนข้อมูลใหม่ที่แสดงก็ขึ้นอยู่กับกลุ่มแฮกเกอร์เหล่านั้นใช้รูปภาพสัญญาลักษณ์อะไร หรืออาจถ้อยคำไม่สุขภาพ เป็นต้น แต่ที่สำคัญ case นี้แฮกเกอร์ไม่ได้ทำเท่าที่ว่ามา มีการรันสคริปต์ผ่านเว็บเบราว์เซอร์เพื่อให้ในการดึงข้อมูลระบบมาแสดง (รายละเอียดอธิบายด้านล่างครับ)

Indonesian Cyber Army

Indonesian Cyber Army

Indonesian Cyber Army

Indonesian Cyber Army

มาเริ่มเลยล่ะกัน

[ขั้นตอนที่ 1] – ให้สำรองไดรเรกทอรีที่ติดเชื้อไว้ทั้งหมด (ไดร์เรกทอรี WordPress)

[ขั้นตอนที่ 2] – สั่งหยุดการทำงานของเว็บเซิร์ฟเวอร์ (Apache)

[ขั้นตอนที่ 3] – แก้ไขปัญหาที่เกิดขึ้นอย่างรวดเร็ว (แบบชั่วคราวก่อน)

[3.1] ตรวจสอบไดร์เรกทอรี “wp-connent/uploads/” ว่ามีไฟล์แปลกบ้างไหม (ปกติ WordPress จะไม่มีไฟล์ PHP ในไดร์เรกทอรีนี้) หรือใช้วิธีเปรียบเทียบไฟล์กับข้อมูล backup ก็ได้

find . -wholename '*wp-content/uploads/*.php' -exec ls -al {} \;

ผลลัพธ์ที่ได้ (คัดลอกมาเป็นตัวอย่าง)

lrwxrwxrwx 1 apache apache 33 May 27 20:13 ./wp-content/uploads/sTein/news .. config.php -> /home/news/public_html/config.php
lrwxrwxrwx 1 apache apache 33 May 27 20:13 ./wp-content/uploads/sTein/pcap .. config.php -> /home/user1/public_html/config.php
lrwxrwxrwx 1 apache apache 42 May 27 20:13 ./wp-content/uploads/sTein/user1.. conf_global.php -> /home/user1/public_html/conf_global.php
lrwxrwxrwx 1 apache apache 34 May 27 20:13 ./wp-content/uploads/sTein/gdm .. Settings.php -> /home/gdm/public_html/Settings.php

lrwxrwxrwx 1 apache apache 38 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/haldaemon .. config.php -> /home/haldaemon/public_html/config.php
lrwxrwxrwx 1 apache apache 36 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/nscd .. wp-config.php -> /home/user1/public_html/wp-config.php
lrwxrwxrwx 1 apache apache 39 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/operator .. Settings.php -> /home/operator/public_html/Settings.php
lrwxrwxrwx 1 apache apache 34 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/avahi .. config.php -> /home/user1/public_html/config.php
lrwxrwxrwx 1 apache apache 38 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/user1.. Settings.php -> /home/user1/public_html/Settings.php
lrwxrwxrwx 1 apache apache 41 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/vmail .. configuration.php -> /home/vmail/public_html/configuration.php
lrwxrwxrwx 1 apache apache 35 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/root .. Settings.php -> /home/root/public_html/Settings.php
lrwxrwxrwx 1 apache apache 35 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/sshd .. Settings.php -> /home/sshd/public_html/Settings.php
lrwxrwxrwx 1 apache apache 42 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/operator .. conf_global.php -> /home/operator/public_html/conf_global.php
lrwxrwxrwx 1 apache apache 44 May 28 18:03 ./wp-content/uploads/products_img/JAMBAN/shutdown .. configuration.php -> /home/shutdown/public_html/configuration

ก่อนที่จะลบอาจใช้วิธีค้นหาไฟล์ที่มีการแก้ไขใน 24 ชั่วโมงที่ผ่าน (trick ดูเฉพาะไฟล์ที่เป็น utf8)

find . -mmin -1440 -iname "*.php"

จากนั้นให้ลบไฟล์เหล่านั้นทิ้งอย่างให้เหลือ :-

find . -wholename '*wp-content/uploads/*.php' -exec rm -rf {} \;

สคริปต์แฮกเกอร์จัดเต็มอะไรให้เราบ้าง (ไดร์เรอทอรีที่สร้างขึ้น) มาดูกันครับ ไล้ลบให้หมดครับ

./INDISHELL/
./wp-content/uploads/sTein/
./wp-content/uploads/products_img/
./wp-content/uploads/products_img/JAMBAN/
./wp-content/uploads/products_img/index.php
./confkiller.php
./index.php

จากนั้นลบไฟล์ที่ติดเชื้อ (Infected PHP files)

find . -iname "*utf*.php" -exec rm -rf {} \;

ระหว่างนี้สามารถสตาร์เซิร์ฟเวอร์เว็บเซิร์ฟเวอร์ได้ (เพื่อตรวจสอบ)

[โอเคดูเหมือนเว็บไซต์สามารถให้บริการต่อได้แล้ว] มาต่อเรื่องทางเทคนิคของแฮกเกอร์กันเลย

แล้วแฮกเกอร์มาจากไหน? ลำดับแรกให้ตรวจสอบ access_log (ขอโดเมน)

– ตรวจสอบไอพีแอดเดรสว่ามาจากที่ไหนมีที่ชุมหัวนอนหรือเปล่า โดยใช้ Web Tools ต่างๆ เช่น www.maxmind.com, www.ip2location.com

180.244.249.92 (อินโดนีเซีย) มาจากกลุ่ม Indonesian Cyber Army
Location: Bogor, Indonesia, Asia
ISP: PT Telkom Indonesia

“วาว ว่าว ว้าว” มีที่หลับนอนซะด้วย (การแฉกลุ่มคนเหล่านี้ไม่จำเป็นต้องซ่อนไอพีแอดเดรส)

180.244.249.92 - - [28/May/2013:14:53:14 +0700] "GET /files.php?sws=sym HTTP/1.1" 200 2202

แฮกเกอร์เรียกฟังก์ชั่น sws=sym ซึ่งสคริปต์จะสร้าง symlink ต่างๆ นาๆ

180.244.249.92 - - [28/May/2013:14:54:09 +0700] "GET /files.php?sws=read HTTP/1.1" 200 2600

แฮกเกอร์เรียกฟังก์ชั่น Bypass Read

180.244.249.92 - - [28/May/2013:14:54:11 +0700] "GET /confkiller.php HTTP/1.1" 200 4842

จากนั้นแฮกเกอร์เอกซคิวไฟล์ confkiller.php โดยที่สคริปต์จะไปสร้างไดร์เรกทอรี Indishell, INDISHELL พร้อมกำหนดสิทธ์ให้เป็น 0777

180.244.249.92 - - [28/May/2013:14:54:12 +0700] "GET /wp-content/uploads/products_img/idca.php?y=/var/www/html/โดเมน/httpd/html/shop/&x=upload HTTP/1.1" 200 13665
180.244.249.92 - - [28/May/2013:14:54:15 +0700] "GET /wp-content/uploads/products_img/idca.php?y=/var/www/html/โดเมน/httpd/html/shop/ HTTP/1.1" 200 136865

แฮกเกอร์เริ่มใช้ช่องธีมของ WordPress ชื่อธีม eShop (สำหรับคนไหนใช่อยู่ อ่านมาถึงตรงนี้น่าจะรู้สึกร้อนๆ หนาวๆ)

180.244.249.92 - - [28/May/2013:14:54:20 +0700] "GET /wp-content/uploads/products_img/idca.php?y=/var/www/html/ HTTP/1.1" 200 22856

หลังจากอัพโหลดไฟล์ผ่านช่องโหว่ WordPress + ธีม ก็ได้เวลาสั่งให้สคริปต์ทำงาน

ถ้าดูจาก log จะเห็นว่าแฮกเกอร์ใช้เวลาไม่ถึง 5 นาที รายละเอียดโค๊ดสคริปต์สามารถดูได้จากไฟล์ files.php (ไม่ขออัพโหลดสคริปต์ขึ้นให้ดูนะครับ เพื่อนความปลอดภัยเดี๋ยวนำไปใช้ในทางที่ไม่เหมาะสม)

ขั้นตอนถัดมาให้ดาวน์โหลดไฟล์ที่แฮกเกอร์สร้างขึ้น แล้วเปิดด้วยโปรแกรม Text editor เพื่อดูสคริปต์ว่าไปยุมยามอะไรที่ไหนบนไดร์เรกทอรีระบบบ้าง (บางไฟล์สคริปต์มีการเข้ารหัส ต้อง decode)


แนวทางการแก้ไข:

ดาวน์โหลดไฟล์ /eShop/upload/index.php และ upload.php เปิดด้วยโปรแกรม Text Editor ตรวจสอบว่า filetypes ที่อัพโหลดได้เป็นนามสกุลไรบ้าง (วิธีป้องการชั่วคราวก็แค่ไม่อนุญาตให้อัพโหลดไฟล์ php)
แต่ถึงแม้ไม่อนุญาตให้อัพโหลดไฟล์นามสกุล PHP ได้ แต่ถ้าอัพโหลด png เป็นรูปโป้ ก็เหมือนเดิม

ช่องโหว่นี้ลำดับแรกต้องแก้ไขที่ themes ก่อนค่อยไปอุดช่องโหว่ที่เว็บเซิร์ฟเวอร์

ตัวอย่างโค๊ดจะ redirect ไปหน้า home page

/var/www/html/ช้อปปิ้ง.โดเมน.คอม/httpd/html/shop/wp-content/themes/wpshop/upload/​index.php​
<!--?php <br ?-->if (!isset($_SERVER['HTTP_REFERER'])){
header("Location: /");
exit;
}


คำแนะนำ:

– อัพเกรด Apahce, PHP
– อัพเกรด WordPress เป็นเวอร์ชั่นล่าสุด
– เปลี่ยนยูสเซอร์ และรหัสผ่าน ทั้ง WordPress admin และ MySQL (ปกติเก็บเป็น plain text ที่ไฟล์ wp-config.php)


How to exploit deface web shopping

– อัพโหลดไฟล์สคริปต์
//ช้อปปิ้ง.โดเมน.คอม/wp-content/themes/wpshop/upload/

– รันไฟล์สคริปต์
//ช้อปปิ้ง.โดเมน.คอม/wp-content/uploads/products_img/สคริปต์.php


เครื่องมือที่ใช้:

– Base64 Decoder
//www.base64decode.org/

– PHP Decoder
//www.unphp.net/


Reference :

//hillmandesign.com/2011/04/04/how-to-fix-a-hacked-wordpress-blog/
//danhilltech.tumblr.com/post/18085864093/if-you-get-eval-base64-hacked-on-wordpress-dreamhost
//wiki.dreamhost.com/WordPress_Hacks

Leave a Reply

Your email address will not be published. Required fields are marked *

Please validate : * Time limit is exhausted. Please reload CAPTCHA.