เมื่อ WordPress คุณถูกแฮ็ก ~ แกะรอยจากสิ่งที่ Hacker ได้ทิ้งไว้

อย่าเพิ่งตกใจกับจั่วหัวกันนะครับ บทความนี้ตั้งใจจะมาเล่าประสบการณ์ให้ได้ทราบกัน เพื่อที่เหล่า Web Developer ให้ได้เตรียมตัวและป้องกันไว้แต่เนิ่น ๆ และก็ไม่ได้จำกัดเฉพาะ WordPress เท่านั้น

Cover-You_have_been_hacked

เรื่องของเรื่องมีอยู่ว่า เว็บนี้ถูก Hack โดยที่ผมไม่รู้ตัวนานถึง 8 เดือน!!

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

สำหรับใครที่รู้จัก WordPress ก็น่าจะพอรู้ว่า WordPress มีระบบหลังบ้านอยู่ เพื่อให้เจ้าของ หรือผู้ที่มี Account ได้ Login เข้าไปปรับแต่งหน้าตาเว็บไซด์ หรือเพิ่มเนื้อหาต่าง ๆ ได้ง่าย ๆ

WordPress Login
WordPress Login

และ WordPress นั้น เขียนอยู่บนภาษา PHP ซึ่ง ณ ตอนนี้ WordPress นั้น ต้องการ php 5.6 ขึ้นไป แต่สามารถใช้งานได้ตั้งแต่ PHP 5.2.4[1]

 

ความเสี่ยงแรก PHP version ล้าสมัย

ทางทีมพัฒนา PHP นั้น ได้ประกาศเลิก Support version 5.4 ไปแล้ว เมื่อ 5 เดือนก่อน[2] [3] นั่นหมายความว่า PHP ตั้งแต่ version 5.4 ลงไป จะไม่มีการอัพเดตในส่วนของ Security fixes อีกแล้ว!!

Keynote จากงาน Code Mania 10
Keynote จากงาน Code Mania 10

หรือแม้แต่ PHP 5.5 เอง ตอนนี้ก็ไม่มีออกอัพเดตฟีเจอร์ใหม่ ๆ แล้ว แต่ยังจะมี Security fixes ให้อยู่ ซึ่งจะสิ้นสุดในอีก 4 เดือนข้างหน้า นั่นหมายความว่า กลางปีนี้ PHP 5.5 หรือเก่ากว่า จะไม่ปลอดภัยแล้วนั่นเอง

Keynote จากงาน Code Mania 10
Keynote จากงาน Code Mania 10
Keynote จากงาน Code Mania 10
Keynote จากงาน Code Mania 10

รูปด้านบน ผมถ่ายมาจากงาน Code Mania 10[4] เมื่อปีที่แล้ว เป็นส่วนของ Keynote ในงาน บรรยายโดยคุณ Pierre Joyle ซึ่งทำงานอยู่ Microsoft และเป็น Core Developer ในการพัฒนาภาษา PHP ซึ่งจะเห็นว่า ได้มีการพูดถึง PHP version อยู่หลายสไลด์เลยทีเดียว

ที่ผมยกประเด็นเรื่อง PHP version ขึ้นมา เพราะว่า Web Hosting ที่ผมใช้เมื่อปีที่แล้ว ยังเป็น PHP 5.3 อยู่ ซึ่งก็น่าจะเป็นจุดเสี่ยงจุดแรกที่ทำให้ Hacker เจาะเข้ามาได้ เพราะเมื่อ PHP version ใหม่ ๆ ออก Security fixes ออกมา ก็เป็นข้อมูลให้กับเหล่า Hacker นี่แหล่ะว่าตรงไหนมันรั่ว!!

เพราะฉะนั้น หากใครใช้ Web Hosting อยู่ แนะนำให้ตรวจสอบ PHP version ก่อนเลย โดยการเขียน PHP script ดังนี้

นำไฟล์ไปไว้บน Host แล้วลองเปิดผ่าน Browser ดู ก็จะเห็น PHP version ดังรูป

phpinfo บน php7
phpinfo บน php7

เมื่อลองเสร็จแล้ว อย่าลืมลบไฟล์นี้ออกไปด้วยนะ เพราะมันแสดงข้อมูลของ Server มากเกินไป จะกลายเป็นข้อมูลให้กับ Hacker ได้

เท่าที่พอรู้มา Web Hosting ที่เปิดมานาน ๆ หลายจ้าว ทั้งไทยและเทศ ส่วนใหญ่จะไม่ค่อยอัพเดตเวอร์ชั่นกัน และที่เคยเช็คเจอบ่อย ๆ คือ PHP 5.3 ซะเยอะเลย

ซึ่งการอัพเดต PHP version หากใช้ Web Hosting เราไม่สามารถทำอะไรเองได้ และส่วนใหญ่ทางผู้ให้บริการก็จะไม่ค่อยยอมอัพเดตให้ด้วย เนื่องจากการใช้ Server เครื่องเดียว แชร์สำหรับลูกค้าหลาย ๆ รายที่มาเช่าบริการ

ก็คงได้แต่ควาญหา Web Hosting รายใหม่ ที่ยอมอัพเดตให้อย่างสม่ำเสมอ ซึ่งก็น่าจะหายากมาก เนื่องจากการอัพเดตเวอร์ชั่น อาจส่งผลให้งานของลูกค้ารายเก่าที่เช่าอยู่ก่อนทำงานไม่ได้ จากการใช้ชุดคำสั่ง PHP ที่ Deprecate ไปแล้ว

ทางเลือกสุดท้ายที่ผมแนะนำ คือการทำ Server เอง ซึ่งในปัจจุบันก็มีบริการ VPS (Virtual Private Server) บน Cloud ให้บริการมากมาย แค่คลิก ๆ แปบเดียวก็ได้ Server มาแล้ว อยากลงอะไรก็ได้ตามใจชอบ แต่ก็ต้องมีสกิล Linux Admin อยู่บ้าง

 

ความเสี่ยงร่วม CMS ชี้รูให้ Hacker

แค่ PHP version คงไม่พอที่จะเจาะได้ ตราบใดที่ไฟล์ PHP ไม่ได้เรียกใช้คำสั่งที่มีรูรั่ว สำหรับ Site ที่ใช้เครื่องมือช่วยอย่าง WordPress, Joomla, Drupal และ CMS อื่น ๆ ก็มีความเสี่ยง[5] เพราะเครื่องมือเหล่านี้นั้นเป็น Open Source ซึ่ง Hacker ก็สามารถไปศึกษา Code เพื่อหาช่องโหว่เจาะเข้ามาได้ และยิ่งหากมีการอัพเดตด้านความปลอดภัยด้วยแล้ว ก็ยิ่งเป็นข้อมูลให้ Hacker ทราบถึงรูรั่ว และใช้เจาะเข้าไปยัง Site ที่ไม่ได้อัพเดตได้ จึงเป็นจุดเสี่ยงสำคัญจุดที่สอง หากว่าไม่หมั่นอัพเดตเวอร์ชั่นอยู่อย่างสม่ำเสมอ

สำหรับเว็บนี้ ผมเจอว่า ถูกเจาะเข้ามาเมื่อ 20 เมษา ปีที่แล้ว น่าจะผ่านทาง WordPress version 4.0.1 ซึ่ง ซึ่งจากการตรวจสอบ Change Log ของการปล่อยอัพเดต WordPress[6] ก็มีการอัพเดตความปลอดภัยในวันถัดมาพอดี

WordPress 4.0.2 Change Log Summary
WordPress 4.0.2 Change Log Summary

 

หมั่นตรวจสอบสิ่งแปลกปลอมอยู่เสมอ

เนื่องจาก WordPress มีระบบหลังบ้าน ทำให้ผมแทบไม่ได้ FTP ไฟล์เข้า Server เลย กว่าจะรู้ก็เกือบสิ้นปีแล้ว 

ถ้าลองเซิจด้วย Keyword ตามในรูป (พยายามที่จะไม่พิมพ์คำใน Blog เดี๋ยว Search Engine มาเจออีก) จะเห็นว่ามีเว็บผมที่ติดอันดับแรก (กลายเป็นเว็บ 18+ ซะอย่างงั้น) มีคำใน Keyword เป็นส่วนหนึ่งของ URL และมี Link จากเว็บอื่น ๆ อีกมากมายที่ทำ Link มาหา ซึ่งก็คงเป็นเหล่าเว็บที่โดนเจาะมาเหมือนกัน โดยเฉพาะเว็บสุดท้ายในรูป ทาง Google ตรวจสอบเจอว่าเป็นเว็บอันตราย

อ้อ เว็บอื่น ๆ ที่โดนเจาะในลักษณะเดียวกัน ไม่ได้ใช้คำเดียวกันนี้นะ

หน้าเว็บ 18+ ที่ถูกสร้างขึ้นจาก Hacker
หน้าเว็บ 18+ ที่ถูกสร้างขึ้นจาก Hacker

เดือนก่อน ๆ เซิจเจอเยอะกว่านี้ ตอนเจอ Link เดียวแล้ว และก็ไม่มีอยู่จริง เคลียร์ไปหมดแล้ว

 

ตรวจสอบ Log ของเว็บเซิฟเวอร์บ้าง

หลาย ๆ Web Hosting มักจะมีระบบ Web Stat หรือ Log Analyzer ให้ใช้งาน ซึ่งเครื่องมือเหล่านี้ มักจะไปกวาดข้อมูลจาก Log ของเว็บเซิฟเวอร์ จึงควรหมั่นเข้าไปตรวจสอบอยู่เสมอ

แต่หากคุณตั้ง Server เอง การเข้าถึง Log ของเว็บเซิฟเวอร์คงไม่ยากนัก ถ้ามีสกิลการใช้คำสั่ง Linux บ้าง แต่ผมแนะนำ ให้หาเครื่องมือมาลงซะ เพื่อช่วยให้การตรวจสอบง่ายขึ้น ตัวที่แนะนำเลยก็คือ AWStats (หากมีตัวไหนเจ๋ง ๆ แนะนำกลับมาบ้างนะครับ)

 

Google รู้ทุกเรื่อง

อย่างที่เห็นในรูปข้างบน Google Search ช่วยหาสิ่งแปลกปลอมได้ วิธีตรวจสอบง่าย ๆ ก็คือให้เซิจด้วย keyword site:domainname เช่น site:artit-k.com เป็นต้น หากเจอ Link แปลกปลอม เว็บคุณตกอยู่ในความเสี่ยงแล้วล่ะ

นอกจากนี้ยังมี Google Analytics ช่วยเก็บสถิติการเข้าใช้งานของเว็บ แนะนำว่าทุกเว็บควรเปิดใช้งานเลย เพราะจะวิเคราะห์การเข้าใช้งานเว็บเราได้เป็นอย่างดี และอาจจะพบการเข้ามาใช้งานเว็บเราที่ผิดปกติในนี้ก็เป็นได้

และ Google ก็ยังมี Google Webmasters เหล่าคนที่ทำ SEO ต้องรู้จักกันเป็นอย่างดี ก็มีส่วนของ Security Issues คอยช่วยตรวจสอบความผิดปกติของเว็บเราได้

Google ทำให้ขนาดนี้ กราบซิ รออะไร

 

Hacker ทำอะไรไว้บ้าง…

จากหัวข้อที่แล้ว สาเหตุที่ผมเจอ ก็เพราะเตรียมที่จะย้าย Host ไปยัง VPS ก็เลย FTP เข้าไป Backup ข้อมูล เลยเจอ Folder แปลก ๆ ตาม Keyword ดังที่เห็นในรูป Google Search ซึ่ง Hacker ได้วางไฟล์ไว้ 2 ไฟล์ กับ 1 Folder ข้างใน Folder มีไฟล์อยู่อีก 4,824 ไฟล์ กินเนื้อที่รวมทั้งหมดประมาณ 300 MB

ไฟล์ที่ Hacker วางไว้
ไฟล์ที่ Hacker วางไว้
ไฟล์ที่ Hacker วางไว้
ไฟล์ที่ Hacker วางไว้

ด้วยความอยากรู้อยากเห็น ผมเลยโหลดไฟล์ทั้งหมดออกมา และทำการแกะ Code ทั้งหมดดู ซึ่งก็พบข้อมูลที่น่าสนใจอยู่หลายจุด จะขออธิบายแยกไปทีละส่วน

เนื้อหาจากจุดนี้ไป จะเป็นการแกะในสิ่งที่เว็บผมได้ถูกบุกรุกมาแล้วให้ได้ชมกัน

 

.htaccess แหกกฎเว็บเซิฟเวอร์

ไฟล์ .htaccess นั้น เป็นไฟล์ที่ไว้กำหนดการเข้าถึงไฟล์ต่าง ๆ ใน Folder ที่มันอยู่ และรวมถึง Folder ย่อย ๆ ลงไปอีก ซึ่ง Apache Web Server จะเป็นผู้อ่านไฟล์ และทำตามเงื่อนไขที่เขียนไว้ในไฟล์นี้ (สำหรับใครที่ใช้ NGINX เป็น Web Server ร่วมกับ PHP โดยตรง ไฟล์นี้จะไม่มีผล)

เมื่อเปิดไฟล์ .htaccess ดู พบว่ามีการใช้งาน Rewrite ซึ่งเป็น Module ของ Apache ที่จำเป็นต้องใช้กับ WordPress ดังนี้

อธิบายง่าย ๆ คือ ถ้าเข้าเว็บมาโดยมี URL เป็น http://domain/SENSOR/foo/bar มันจะไปเรียกไฟล์ที่ http://domain/SENSOR/index.php ทำงาน เทคนิคเดียวกับ WordPress เป๊ะ ๆ เด๊ะ ๆ

 

ตัวการหลัก index.php

จากไฟล์ .htaccess บังคับให้ URL ที่อยู่ใต้ http://domain/SENSOR/ ทั้งหมด วิ่งเข้าหาไฟล์ index.php ซึ่งก็คือตัวการหลักนั่นเอง เมื่อเปิดไฟล์ดู พบกับ PHP Script ดังนี้

PHP Script ในไฟล์ index.php
PHP Script ในไฟล์ index.php

อะไรของมันวะนั่น!!!

อ่านไม่รู้เรื่องกันใช่ไม๊ล่ะครับ จากที่ผมได้ตรวจสอบดูพบว่า ทั้งไฟล์ มีตัวแปรอยู่สองตัว ตัวแรกเป็นการสร้าง String คำว่า create_function ส่วนตัวแปรที่ 2 มีการใช้งานตัวแปรแรกอยู่ และมีการใช้ Function strrev() อยู่ 2 จุด ก็พอจะเดาได้ว่ามันคือการทำ Reverse String นั่นเอง

ว่าแล้วก็เลยเอาหาเว็บที่สามารถ Reverse String ได้มาช่วยแกะคำสั่ง ก็ได้เว็บ string-functions.com มาช่วยแกะ ได้ความว่า ตัวแปรที่สอง แกะเจอคำสั่ง 'eval($a);' ในจุดแรก ซึ่งเป็นการนำตัวแปร String มาสร้างเป็นชุดคำสั่งอีกทีนั่นเอง

ไฮไลท์อยู่ในจุดที่สอง เมื่อแกะเจอคำสั่ง 'eval(base64_decode("ZnVu...DQo="));' ซึ่งมีการเรียกใช้ Function base64_decode() อีกที… เมื่อลองทำ Base64 Decode ดู พบคำสั่งอันตรายหลายจุด

คำสั่งอันตราย ในไฟล์ index.php
คำสั่งอันตราย ในไฟล์ index.php

ตรง Highlight มีการเรียกใช้ Function shell_exec() ซึ่งเป็นการรันคำสั่งใน Shell ของ Linux และมีการเรียกใช้ curl เพื่อทำการ Download ไฟล์อันตรายมาจาก x2.megalolik.com แล้วมาระเบิดใส่เว็บเรา และเมื่อทำงานเสร็จ ก็ลบไฟล์ที่ Download มาทิ้งไป

 

1 Folder กับ 4,824 ไฟล์

แกะไปแล้ว 2 ไฟล์ มาดู 1 Folder กันก่อน…

สังเกตุชื่อ Folder จะมี . นำหน้า บน Linux ไฟล์ หรือโฟลเดอร์ ที่มี . นำหน้า ก็คือการซ่อนไฟล์นั่นเอง และหลัง . ที่เห็นนั่น ไม่ใช่ใครอื่นใด จากการแกะไฟล์ index.php ทำให้รู้ว่า มันคือการนำ Domain artit-k.com ไป Hash ด้วย MD5 นั่นเอง ซึ่งก็ได้ค่าเป็น d5e9b789bc5477dc3385b3fa195afa02 ตรงกันเป๊ะ ๆ

ส่วนไฟล์ข้างในเกือบ 5,000 ไฟล์ เป็นข้อมูลที่เข้ารหัสด้วย Base64 ทั้งหมด และชื่อไฟล์ก็เป็น MD5 เช่นกัน เมื่อ Decode ออกมาดู ก็พบว่าเป็นเว็บ ที่ถูกสร้างขึ้นเลียนแบบ WordPress ณ ตอนนั้น โดยมีการอ้างถึง Theme และ Plugin ต่าง ๆ ที่มีอยู่แล้ว และก็พบว่า ถูกสร้างตอน WordPress 4.0.1

4824 ไฟล์ในโฟลเดอร์ ที่ Hacker วางเอาไว้
4824 ไฟล์ในโฟลเดอร์ ที่ Hacker วางเอาไว้

นั่นก็คือ มี Webpage 18+ เป็นปลิง มาฝังอยู่ในเว็บผมเกือบ 5,000 หน้า โดยใช้ Resource ใน Web Hosting ของเรานั่นเอง

 

เก็บกวาดไฟล์อันตราย

เมื่อพบไฟล์อันตรายฝังอยู่แล้ว ในเบื้องต้น ผมทำการย้าย Folder อันตรายไปไว้ที่อื่น เพื่อไม่ให้สามารถเข้ามาเรียกใช้ไฟล์ index.php อันตรายได้ ซึ่งเป็นช่วงที่ผมกำลังย้ายไฟล์ไปยัง VPS อยู่พอดี ก็เลยไม่ย้ายไฟล์อันตรายไปด้วย และเมื่อ ผ่านไปประมาณ 1-2 วัน ใน Google Webmasters ก็ได้มีการแจ้ง HTTP Error 404 Not found มา นั่นคือ หน้าปลิงเกือบ 5,000 หน้า ได้หายไปแล้ว แต่ยังมีการ Link มาจากเว็บอื่น ๆ อยู่ ซึ่งเราคงไปทำอะไรไม่ได้

Google Webmasters รายงานข้อผิดพลาดให้ทราบ
Google Webmasters รายงานข้อผิดพลาดให้ทราบ

ใน Google Webmasters ยังได้แนะนำว่า หากหน้าที่เกิด 404 ไม่มีอยู่จริง เราไม่จำเป็นต้องทำอะไร แล้วข้อมูลที่เคยเซิจเจอด้วย Google Search ก็จะทะยอยถูกถอดออกไปเอง อย่างที่เห็นว่า ตอนนี้ Google Search เหลือแค่ Link เดียวแล้ว

และตอนนี้เว็บนี้ก็ได้ย้ายไปยัง VPS เรียบร้อยมาเกือบเดือนนึงแล้ว ตามที่ได้ประกาศไป เพราะฉะนั้น ณ ตอนนี้ ปลอดภัยแล้วคร๊าบบบบ

 

ก่อนจบ… ฝากไว้ให้คิด

ฝากไว้ซักนิด สำหรับ Developer รวมถึง System Admin ทั้งหลาย ที่มีความคิดว่า ของเดิมดีอยู่แล้ว ทำไมต้องเปลี่ยน ก็น่าจะเห็นแล้วว่า ถ้าไม่อัพเดต คุณจะตกเป็นเป้าหมายของ Hacker ได้ง่ายมาก

และอีกความคิดที่ว่า อัพเดตไปแล้วกลัว Code มีปัญหา เพราะขี้เกียจแก้ปัญหาจากการอัพเดต Code ให้ทันสมัย ก็เลยเลือกที่จะหนีปัญหา หรือเปล่า!?

 

อ้างอิง :-

[1] WordPress – Requirements

[2] PHP – Supported Versions

[3] PHP – Unsupported Branches

[4] งาน Code Mania 10

[5] Joomla เริ่มตกเป็นเป้าของการโจมตีผู้ใช้งานด้วย Ransomware เตือนผู้ดูแลเว็บตรวจสอบความปลอดภัยโดยด่วน

[6] WordPress Versions

3 Comments


  1. มันจริงๆๆ จับโจรคอมฯ ซับซ้อน๙้อนเงื่อน

    Reply

  2. ขอบคุณสำหรับการแชร์ประสบการณ์ครับ

    ของผมก็เคยโดนแต่จะโดนเป็นแบบเจาะ Backdoor มากกว่า
    มีไฟล์วิเศษ .php อยู่ 1 ไฟล์ที่แทบจะทำได้ทุกอย่าง
    ยังดีที่เจอ มันอยู่ใน Folder cache ไปดูในนั้นได้ไงไม่รู้ -.-

    #ไม่ได้โฆษณานะงับ
    ถ้าใช้พวก Hosting ฝรั่งบางเจ้า (Cpanel) เดี๋ยวนี้ดีหน่อย มันจะ Auto update wp ให้เราเอง และ Auto scan ไฟล์ backdoor หรืออะไรประมาณนี้ให้เรา

    ขนาดผมเอา phpmyadmin ไปใส่มันยังไม่ให้เลย -..-

    Reply
    1. gplus-profile-picture

      ตอนนี้เลิกใช้ Web Hosting แล้วล่ะครับ ทำ VPS เอง สบายใจกว่า…

      Reply

Leave a Reply

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