อย่าเพิ่งตกใจกับจั่วหัวกันนะครับ บทความนี้ตั้งใจจะมาเล่าประสบการณ์ให้ได้ทราบกัน เพื่อที่เหล่า Web Developer ให้ได้เตรียมตัวและป้องกันไว้แต่เนิ่น ๆ และก็ไม่ได้จำกัดเฉพาะ WordPress เท่านั้น
เรื่องของเรื่องมีอยู่ว่า เว็บนี้ถูก Hack โดยที่ผมไม่รู้ตัวนานถึง 8 เดือน!!
อย่าเพิ่งรีบปิดเว็บหนีไปนะครับ ผมได้ทำการถอนรากถอนโคนออกไปหมดแล้ว และคิดว่าถึงเวลาที่ต้องมาแฉ ในสิ่งที่ Hacker นั้นทำไว้ รวมถึงวิธีการตรวจสอบต่าง ๆ แนวทางป้องกัน เผื่อว่าใครที่ตกอยู่ในภาวะเสี่ยงแบบเดียวกับผม จะได้ป้องกันได้
สำหรับใครที่รู้จัก WordPress ก็น่าจะพอรู้ว่า WordPress มีระบบหลังบ้านอยู่ เพื่อให้เจ้าของ หรือผู้ที่มี Account ได้ 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 อีกแล้ว!!

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


รูปด้านบน ผมถ่ายมาจากงาน 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 ดังนี้
1 |
<?php phpinfo(); ?> |
นำไฟล์ไปไว้บน Host แล้วลองเปิดผ่าน Browser ดู ก็จะเห็น PHP version ดังรูป

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

เดือนก่อน ๆ เซิจเจอเยอะกว่านี้ ตอนเจอ 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


ด้วยความอยากรู้อยากเห็น ผมเลยโหลดไฟล์ทั้งหมดออกมา และทำการแกะ Code ทั้งหมดดู ซึ่งก็พบข้อมูลที่น่าสนใจอยู่หลายจุด จะขออธิบายแยกไปทีละส่วน
เนื้อหาจากจุดนี้ไป จะเป็นการแกะในสิ่งที่เว็บผมได้ถูกบุกรุกมาแล้วให้ได้ชมกัน
.htaccess แหกกฎเว็บเซิฟเวอร์
ไฟล์ .htaccess นั้น เป็นไฟล์ที่ไว้กำหนดการเข้าถึงไฟล์ต่าง ๆ ใน Folder ที่มันอยู่ และรวมถึง Folder ย่อย ๆ ลงไปอีก ซึ่ง Apache Web Server จะเป็นผู้อ่านไฟล์ และทำตามเงื่อนไขที่เขียนไว้ในไฟล์นี้ (สำหรับใครที่ใช้ NGINX เป็น Web Server ร่วมกับ PHP โดยตรง ไฟล์นี้จะไม่มีผล)
เมื่อเปิดไฟล์ .htaccess ดู พบว่ามีการใช้งาน Rewrite ซึ่งเป็น Module ของ Apache ที่จำเป็นต้องใช้กับ WordPress ดังนี้
1 2 3 4 5 |
RewriteEngine On RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /SENSOR/index.php [L] |
อธิบายง่าย ๆ คือ ถ้าเข้าเว็บมาโดยมี URL เป็น http://domain/SENSOR/foo/bar
มันจะไปเรียกไฟล์ที่ http://domain/SENSOR/index.php
ทำงาน เทคนิคเดียวกับ WordPress เป๊ะ ๆ เด๊ะ ๆ
ตัวการหลัก index.php
จากไฟล์ .htaccess บังคับให้ URL ที่อยู่ใต้ http://domain/SENSOR/
ทั้งหมด วิ่งเข้าหาไฟล์ index.php ซึ่งก็คือตัวการหลักนั่นเอง เมื่อเปิดไฟล์ดู พบกับ PHP Script ดังนี้

อะไรของมันวะนั่น!!!
อ่านไม่รู้เรื่องกันใช่ไม๊ล่ะครับ จากที่ผมได้ตรวจสอบดูพบว่า ทั้งไฟล์ มีตัวแปรอยู่สองตัว ตัวแรกเป็นการสร้าง 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 ดู พบคำสั่งอันตรายหลายจุด

ตรง 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

นั่นก็คือ มี 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 ยังได้แนะนำว่า หากหน้าที่เกิด 404 ไม่มีอยู่จริง เราไม่จำเป็นต้องทำอะไร แล้วข้อมูลที่เคยเซิจเจอด้วย Google Search ก็จะทะยอยถูกถอดออกไปเอง อย่างที่เห็นว่า ตอนนี้ Google Search เหลือแค่ Link เดียวแล้ว
และตอนนี้เว็บนี้ก็ได้ย้ายไปยัง VPS เรียบร้อยมาเกือบเดือนนึงแล้ว ตามที่ได้ประกาศไป เพราะฉะนั้น ณ ตอนนี้ ปลอดภัยแล้วคร๊าบบบบ
ก่อนจบ… ฝากไว้ให้คิด
ฝากไว้ซักนิด สำหรับ Developer รวมถึง System Admin ทั้งหลาย ที่มีความคิดว่า ของเดิมดีอยู่แล้ว ทำไมต้องเปลี่ยน ก็น่าจะเห็นแล้วว่า ถ้าไม่อัพเดต คุณจะตกเป็นเป้าหมายของ Hacker ได้ง่ายมาก
และอีกความคิดที่ว่า อัพเดตไปแล้วกลัว Code มีปัญหา เพราะขี้เกียจแก้ปัญหาจากการอัพเดต Code ให้ทันสมัย ก็เลยเลือกที่จะหนีปัญหา หรือเปล่า!?
อ้างอิง :-
[3] PHP – Unsupported Branches
[5] Joomla เริ่มตกเป็นเป้าของการโจมตีผู้ใช้งานด้วย Ransomware เตือนผู้ดูแลเว็บตรวจสอบความปลอดภัยโดยด่วน
Permalink
มันจริงๆๆ จับโจรคอมฯ ซับซ้อน๙้อนเงื่อน
Permalink
ขอบคุณสำหรับการแชร์ประสบการณ์ครับ
ของผมก็เคยโดนแต่จะโดนเป็นแบบเจาะ Backdoor มากกว่า
มีไฟล์วิเศษ .php อยู่ 1 ไฟล์ที่แทบจะทำได้ทุกอย่าง
ยังดีที่เจอ มันอยู่ใน Folder cache ไปดูในนั้นได้ไงไม่รู้ -.-
#ไม่ได้โฆษณานะงับ
ถ้าใช้พวก Hosting ฝรั่งบางเจ้า (Cpanel) เดี๋ยวนี้ดีหน่อย มันจะ Auto update wp ให้เราเอง และ Auto scan ไฟล์ backdoor หรืออะไรประมาณนี้ให้เรา
ขนาดผมเอา phpmyadmin ไปใส่มันยังไม่ให้เลย -..-
Permalink
ตอนนี้เลิกใช้ Web Hosting แล้วล่ะครับ ทำ VPS เอง สบายใจกว่า…