บันทึกการกู้คืน Hacked WordPress เว็บไซต์

พอดีว่าช่วงก่อนงาน WCBKK มีนัดทานข้าวกับเดอะแก๊งแล้วคนนึงเล่าว่าเว็บขึ้นหน้าแดงเตือนว่าเป็นเว็บอันตราย น่าจะโดนเจาะ แล้วก็คิดว่าน่าจะโดนมาซักพักแล้ว แต่ก็ไม่รู้จะทำยังไงต่อดี ตอนนี้เว็บเข้าไม่ได้ไปเรียบร้อยขึ้นหน้าขาวไปแล้ว ก็เลยขอดูหน่อยว่าพอจะช่วยอะไรได้บ้าง เพราะงานที่ทำก็จะมีเคสประมาณนี้มาบ้างนานๆถี่ ถึงแม้ว่าเวลาส่วนใหญ่จะไม่ค่อยได้ใช้ WordPress ก็ตามที แต่หลักการก็น่าจะคล้ายๆกัน (ที่ทำงานใช้ Joomla เป็นส่วนใหญ่ฮะ)

พอทำเสร็จแล้วก็อยากบันทึกเก็บเอาไว้ เพราะเพือนเองเค้าก็อยากรู้ว่าเราทำอะไรไปบ้าง แล้วมันมีวิธีอะไรบ้างที่พอจะป้องกันเว็บไม่ให้โดนเจาะอีก ลดความเสี่ยงลงมาได้นิดนึงก็ยังดี ซึ่งก็ต้องออกตัวไว้ก่อนว่า ให้มองบันทึกนี้เป็นรูปแบบเรื่องเล่าก็แล้วกัน เพราะความจริงการที่จะมากู้คืนระบบอะไรแบบนี้ ขึ้นอยู่กับอะไรหลายๆอย่าง ในบางมุมมันอาจจะไม่ใช่วิธีที่ถูกต้องเท่าไหร่ บางมุมมันอาจจะมีวิธีที่ง่ายกว่านี้ และก็ไม่ได้จำเป็นว่าทำแบบที่กำลังจะเล่าแล้วมันจะแก้ได้เสมอ แต่ step หลักการก็จะประมาณนี้แหละ ก็หวังว่าจะเป็นประโยชน์

Skills WordPress ที่ใช้ในเคสนี้

  • ใช้ WordPress เป็นในระดับ admin คือติดตังเองได้ ตั้งค่าต่างๆใน Settings ได้ จัดการ Users, Plugins ต่างๆได้
  • เข้าใจโครงสร้างของไฟล์ และโฟลเดอร์ ของ WordPress Core เช่น wp-config.php, wp-admin, wp-content ไว้ทำอะไร ไฟล์ข้างในทำงานอะไร (ถ้าลงลึกไปถึงโครงสร้าง table ในฐานข้อมูลของ WordPress ได้ก็จะยิ่งดี..แต่เคสนี้ยังไม่ถึงขนาดนั้น)
  • สร้างและจัดการ localhost ในเครื่องตัวเองได้ ใช้งาน PhpMyAdmin จัดการฐานข้อมูลใน localhost ได้ (ยิ่งถ้าสามารถทำ vitrualhost config ในเครื่องตัวเองได้ยิ่งดี จะมีประโยชน์เวลา plugins migration ใช้งานไม่ได้ ก็ต้อง manual เอา)
  • อ่านโค้ท PHP ได้บ้าง (เพราะนี่ก็ทำได้แค่นั้น เขียนเป็นเรื่องเป็นราวทำไม่ได้เหมือนกัน)
  • การใช้งาน Google Search Console เพื่อให้ verify เว็บของเรา และแก้ไขหน้าแดงๆแจ้งเตือนเว็บอันตราย

Tools ทำเว็บไซต์ต่างๆที่ควรเตรียมเอาไว้ก็ประมาณนี้

  • XAMPP Portable – ไว้สร้าง localhost สะดวกดี เนื่องจากว่าเป็น portable สามารถลงใหม่แบบ clean ใช้เสร็จก็ลบ folder ทิ้งเอาง่ายๆเลย
  • WordPress core – ตัวติดตั้งของ WordPress
  • Plugin : All-in-One WP Migration – ย้ายจาก host ลงมา PC, ใช้ backup แต่ละ stages , ย้ายจาก PC กลับขึ้นไปบน host
  • Plugin : Jetpack – โปรแกรมสามัญประจำ WordPress มี function security พื้นฐานมาให้ด้วย
  • Plugin : Sucuri – system log เอาไว้ดูย้อนว่าอยู่ดีดีมี plugins มาตั้งอะไรยังไงเมื่อไหร่ ช่วยตรวจสอบว่าเว็บเราอยู่ใน blacklist หรือเปล่าด้วย
  • Plugin : itheme – security protection
  • Filezilla – ดาวโหลด wp-content แยกตามมาทีหลัง
  • Chrome – DevTools เอาไว้ inspect พฤติกรรมการทำงานของเว็บ

หลังจากนี้ก็จะเป็นขั้นตอนต่างๆไล่เป็นข้อๆไป ยาวได้อยู่ค่อยๆอ่านกันนะ

(1) หาข้อมูลเกี่ยวกับเว็บไซต์

หลังจากที่เตรียมไฟล์แล้วก็เครื่องต่างๆเรียบร้อยแล้ว (ปรกติคนทำเว็บก็น่าจะมีครบกันอยู่แล้วแหละ) สิ่งที่ต้องทำอย่างแรกก็คือต้องรู้ก่อนว่าเว็บที่เรากำลังจะแก้เป็นเว็บแบบไหนมีระบบอะไรอยู่ข้างในบ้าง เพราะความยากง่ายและความเสี่ยงด้านข้อมูลสูญหายก็จะเพิ่มไปตามความซับซ้อนของเว็บ ซึ่งได้ถามเจ้าของเว็บแล้วก็รู้ว่าเป็นเว็บ online catalog สินค้าทั่วไป มีแค่เนื้อหา text กับ images มี plugin สร้างฟอร์ม แต่ไม่ได้มีระบบสมาชิก หรือ shopping cart อะไร มีเจ้าของเป็นคนใช้งานคนเดียว ไม่มี account user อื่นๆ หลังจากนั้นก็ลองเปิดไปที่หน้าเว็บเลยแล้วดูว่ามันแสดงผลอะไรออกมา ในขั้นตอนนี้ใช้ incognito mode ของ chrome เพราะคิดเอาเองว่า browser ปรกติมันจะมี login ของ google account ค้างไว้แล้วก็ไม่รู้ว่าเว็บมันจะดูดข้อมูลอะไรได้บ้าง ก็เปิดไปแบบ Anonymous ก่อนก็แล้วกัน ในเคสนี้คือจะเจอหน้าแดงๆเตือนเว็บอันตรายของ google แล้วพอกดยอมรับความเสี่ยง (visit this infected site) และจะเข้าไปดูต่อ ก็จะเจอกับหน้า error 500 แล้วก็ไม่มี error อะไรบอก

ในเคสนี้สมมติว่ามี error message บอกว่ามันเกิดที่ไฟล์อะไร บรรทัดที่เท่าไหร่ เราก็สามารถเดาได้ว่าสาเหตุมันมาจาก plugins ตัวไหน (ไฟล์นั้นอาจจะโดนเจาะ) แต่โดยปรกติ web server ที่ดีเค้าจะปิด message ส่วนนี้เอาไว้ เป็นเหตุผลที่เราต้องใช้เครื่องมือ migrate ลงมาที่ localhost เพื่อให้สามารถตรวจสอบ error ได้สะดวกกว่า

– หน้าแจ้งเตือนของ google ถ้าเว็บโดน blacklist –

(2) migrate ได้ไหม (wp-admin, ftp, directadmin)

เมื่อพบว่าหน้าเว็บเข้าไม่ได้ขั้นตอนไปก็ต้องลองดูต่อว่าในส่วน wp-admin สามารถ login เข้าใช้งานได้ไหม และหลังจากกดยอมรับความเสี่ยงจากหน้าแจ้งเตือนของ google ก็ใจชื้นขึ้นมาหน่อยนึงว่าเรายังเข้าไปในส่วน wp-admin ได้ ซึ่งหมายความว่าเราได้ไปต่อซึ่งก็คือเข้าไปตรวจสอบความผิดปรกติ และพยายามติดตั้ง migration plugins เพื่อทำการ migrate ระบบลงมายำที่เครื่องเราที่กำลังจะทำ localhost รอเอาไว้ได้

ในเคสที่ยากกว่านี้คือตัว user admin ของเว็บถูก disable หรือเปลี่ยน password (คือไม่ใช่แค่โดนเจาะแต่โดนยึดเว็บไปด้วย) เราก็จะตรวจสอบอะไรต่อไม่ได้อีก ก็ต้องอ้อมไปจัดการในระดับของ hosting (server) เพื่อ migrate เว็บแบบ manual หรือ เข้าไปแก้ admin password ในตารางฐานข้อมูลผ่าน phpmyadmin ก่อน

– ตัวอย่าง table ที่เก็บข้อมูล Users ของ WordPress –

เมื่อล๊อคอินเข้าไปในส่วน wp-admin ได้แล้วสิ่งแรกที่ทำคือทดลองติดตั้ง plugin All-in-One WP Migration เข้าไปก่อนเลย เพราะวัตถุประสงค์หลักของเราก็คือจะย้ายเว็บลงมายำใน localhost เพราะมันจัดการอะไรได้ง่ายกว่า หลังจากที่รู้แล้วว่าติดตั้งได้ ก็ลอง export เว็บออกมาเอาไว้ก่อนรอบนึง <1> คือเพื่อเป็น backup และ <2> คือทดสอบว่า plugins สามารถทำงานได้ พอได้ backup แล้วก็สบายใจไปอีกเปราะนึงเพราะยังไงก็มี backup แล้ว เราก็มาจัดการกับเว็บต่อได้ แล้วก็มาสำรวจความประหลาดๆอื่นๆต่อ ซึ่งสิ่งที่สังเกตได้มีประมาณนี้

  • มี user Administrator สองคนในระดับ privilege เป็น Administrator (ทั้งๆที่ควรจะมีแค่ user เดียว)
  • มี plugins สองตัวที่มีแต่ชื่อ แต่ไม่มีรายละเอียดของ plugins และ ผู้พัฒนา (ซึ่งผิดผีจากมาตรฐานการรีวิว plugins มาก)
  • plugins หนึ่งในสองตัวนั้น Delete ออกไม่ได้ (อันนี้ไม่ใช่อย่างแรง เจอตอเข้าให้แล้ว)
  • มี posts และ comments หลายอันที่ไม่แน่ใจว่าเป็น spam หรือ demo content (ถามของเว็บแล้วเป็น demo มากับ plugins)
  • มี WooCommerce install อยู่ (ถามเจ้าของเว็บแล้วบอกว่ามันติดมากับตีมแต่ไม่ได้ใช้สรุปก็เอาออกได้)

นอกจาก wp-admin ที่เราลองแล้วว่ายังใช้งานได้ ก็ให้ลองการเชื่อมต่อผ่าน ftp ด้วยว่าสามารถทำได้หรือไม่ ในกรณีนี้ถ้ายังไม่มี ftp account ก็อาจจะต้องขอเข้าไปส่วนจัดการของ web hosting เพื่อสร้างขึ้นมาซักอันนึง ความสำคัญของ ftp account คือเราเอาไว้ดาวโหลดพวกไฟล์สื่อต่างๆในโฟลเดอร์ wp-content ลงมาที่เครื่อง PC เพื่อ (1) เพื่อให้การทำ backup ไฟล์ง่ายและเร็วขึ้น และ (2) เอามาตรวจประเภของไฟล์ด้วย explorer มันง่ายกว่า

สำหรับเคสที่ไม่สามารถ Delete plugin ได้ ก็ลองเข้าไปลบจาก file manager ของ Hosting ก็ยังลบไม่ได้ คือมันสามารถ hidden ตัวมันเองได้ เวลาเปิดดูจะไม่เห็นอะไรเป็น folder เปล่าแต่จริงๆมันมีอะไรแอบอยู่ นอกจากนั้นก็ยังเจอไฟล์แปลกๆเต็มไปหมด ที่มั่นใจว่าไม่ใช่ไฟล์ที่เกี่ยวข้องกับ WordPress แน่ๆ

– พวกนี้ไม่น่าจะสร้างโดยมนุษย์ –

– เดาว่าชุดนี้คือส่วน phishing –

(3) The first cleaning (core, user, plugins)

  1. โดยหลักการแล้วต้อง Update WordPress core ก่อน แต่เนื่องจากมารู้ทีหลังว่าเว็บนี้ยังทำงานอยู่บน php5.3 ก็เลยต้องข้ามส่วนนี้ไปก่อนโดยให้เจ้าของเว็บติดต่อทาง host ไปว่าต้องการย้ายไปอยู่บนเครื่องที่เป็น php7 ขึ้นไป (ตอนนี้เครื่องเป็น 7.2 แล้ว)
  2. จากตัว core ก็มาดูในส่วน user ซึ่งในเคสนี้ต้องมี user ชื่อ admin คนเดียว ที่เหลือมายังไงมาจากไหนไม่รู้ลบทิ้งให้หมด และเพื่อเพิ่มความปลอดภัยเข้าไปอีก สร้าง administrator user ขึ้นมาอีกอัน แล้ว disable user ที่ใช้ชื่อ admin ทิ้งไป (เพราะเวลาโดนเจาะ เค้าจะยิง username admin นี่แหละเข้ามาก่อน)
  3. เก็บรายชื่อ plugins ที่มีเอาไว้ก่อน สั่งพิมพ์หน้า installed plugins เป็น pdf ออกมาเก็บไว้ก่อนก็ได้
  4. deactivated plugins ทิ้งให้หมดทุกตัว
  5. plugins ตัวไหนที่น่าสงสัย ให้ Delete ทิ้ง (เข้าไปลบไฟล์ใน wp-content/plugins ด้วยยิ่งดี)
  6. plugins ตัวไหนก็กด more info แล้วไม่แสดงหน้าของ WordPress Plugins ลบทิ้ง
  7. plugins ตัวไหนที่อัพเดทไม่ได้ หรือมี last update นานมาก ก็ลบทิ้งเช่นกัน อย่าไปเสี่ยง
  8. plugins ที่ยังเหลืออยู่ให้อัพเดทเวอร์ชั่นให้หมด แล้วค่อยๆไล่ activated ทีละตัว
  9. อย่าลืมอัพเดท theme ด้วยนะ
  10. plugins ที่ไม่แน่ใจว่ายังต้องใช้อยู่ไหม ถ้าอัพเดทได้ให้อัพเดทแต่คงสถานะ deactivated ไว้ ถ้าอัพไม่ได้ก็เอาออก (ยังไงก็ไม่น่าเก็บไว้)
  11. ทดลองติดตั้ง plugins ด้าน security เพิ่มเติมซึ่งในเคสนี้คือ itheme กับ sucuri เพื่อให้มัน monitor การทำงานของเว็บอีกที เช่น หลังจากที่เรา update plugins ทั้งหมดแล้ว ถ้ามีอะไรก็ตามมาเปลี่ยน PHP code ของ plugins ใดใดอีก sucuri มันจะแจ้งเตือนว่ามีการ alter code เกิดขึ้นนะใช่เธอหรือเปล่า
  12. พวก security ถ้าติดตั้งได้ก็ติดทิ้งไว้เลย ถ้าติดไม่ได้ไม่เป็นไร เดี่ยวมาลองใน localhost อีกที (พอรู้ว่าอยู่บน PHP เวอร์ชั่นเก่าก็จะต้องมีลุ้นๆกันหน่อยแบบนี้) ถึงจุดนี้จริงๆแล้วถ้าเราเปิดเว็บอีกทีมันไม่ควรจะมี error500 แล้ว เพราะเราติดตั้ง core ใหม่ จัดการ plugins ใหม่หมด แต่ในเคสนี้เรา update WordPress ไม่ได้ แล้วก็จำได้ไหมว่ามี plugins ตัวนึงที่เล่าให้ฟังว่ามันลบออกไม่ได้ (ตัวแม่เอเลียนที่สามารถแทรก code เข้าไปใน index.php ได้ทั้งๆที่ plugins status ของตัวเองเป็น deactivated ลองสร้าง index.html ไปขวางไว้ มันแก้ชื่อไฟล์ index.html ได้ด้วย..แน๊ะ) ในจุดนี้เราทำอะไรต่อไม่ได้แล้วก็ต้องคงสถานะแบบนั้นไว้ในเว็บ แต่ถ้าเป็น localhost เราทำได้ทุกอย่าง เพราะฉะนั้นก็ลุยกันต่อ

(4) migrate ลงมายำที่ localhost

การ migrate เว็บลงมาจะแบ่งเว็บออกเป็นสองส่วนฮะ
<1> ส่วน WP core คือไฟล์หลักของ WordPress ตีม และ ฐานข้อมูล
<2> ส่วนไฟล์ plugins ซึ่งประกอบไปด้วยสคริป PHP ต่างๆ กับไฟล์มีเดีย ซึ่งก็คือพวกรูปภาพ เสียง วีดีโอ หรือไฟล์เอกสารที่อัพโหลดขึ้นไปผ่านส่วน Media ของ WordPress

– All-in-One WP Migration export setting –

โดยส่วนที่ <1> เราจะใช้ All-in-One WP Migration plugins ในการ export เว็บออกมาโดยเลือก options ในการ export ให้ยกเว้นทุกอย่างเหลือแต่เพียง Core file กับ ฐานข้อมูล สำหรับไฟล์ในส่วนที่ <2> เราจะใช้ Filezilla เชื่อมต่อไปยัง server แล้วก็ดาวโหลดโฟลเดอร์ wp-content แยกต่างหากลงมา โดยสาเหตุที่ต้องดาวโหลดแยกออกมาต่างหากเพราะว่า

  1. จะทำการ clean ทีละส่วนโดยจัดการกับตัว core ของ WordPress ก่อนโดยในกระบวนการ import กลับเข้าไปจะต้องมีตัว core เวอร์ชั่นล่าสุดติดตั้งพร้อม All-in-One WP Migration รอเอาไว้ซึ่งตัว core นั้นจะใหม่กว่า สะอาดกว่า กำจัด code เดิมที่อาจจะถูกแก้ไขจาก malware ออกไป
  2. สำหรับไฟล์ plugins เดิมซึ่งมีความเสี่ยงมากกว่า ทั้งตัวที่เล่าให้ฟังก่อนหน้าว่าลบไม่ได้จากส่วน wp-admin แต่เราสามารถลบทิ้งได้จาก file explorer และตัวอื่นๆที่มีแนวโน้มมากว่าจะถูกแก้ไขด้วย malware จะโดนแยกออกมาต่างหาก และสามารถไล่ติดตั้งคืนได้ด้วยไฟล์ที่สะอาด และเวอร์ชั่นล่าสุดจาก WordPress plugins เว็บไซต์
  3. โฟลเดอร์ wp-content/uploads ซึ่งปรกติใช้เก็บพวกไฟล์สื่อต่างๆ เป็นแหล่งกบดานชั้นดีซึ่งมักจะมี script malware (php, js, html) ไปแอบอยู่ข้างใน ซึ่งการตรวจสอบด้วย file explorer มันง่ายกว่าตรวจบน server ด้วย filezilla ก็เลยต้องแยกดาวโหลดออกมาตรวจก่อนเหมือนกัน
  4. All-in-One WP Migration เวอร์ชั่นฟรี มีข้อจำกัดขนาดไฟล์ export / import ที่ 500 M export น้อยๆไฟล์เล็กๆ ดาวโหลดไวไว โอกาสเนตช้า เนตตัดในระหว่างดาวโหลดก็ลดน้อยลง

(5) เตรียมเครื่อง localhost

ในระหว่างที่รอดาวโหลดไฟล์ backup เราก็มาเตรียมเครื่อง localhost กัน โดนส่วนตัวจะชอบใช้ XAMPP portable แม้ว่าข้อเสียของมันคือกิน ram เยอะแล้วก็ต้องมาคอยเปิดๆปิดๆ แต่มันมีความเป็นนินจาสูงดี เวลาจะใช้งานก็แตก zip แล้วก็ run ตัว control เวลาเลิกใช้ก็ลบทิ้งไปได้ทั้ง folder ไม่ทิ้งอะไรเหลือไว้ ซึ่งในเคสนี้ไม่อยากให้เว็บที่มีปัญหา มาใช้สภาพแวดล้อมเดียวกับเว็บอื่นๆที่เราทดสอบอยู่ เราก็ rename โฟลเดอร์เดิมของเรา แล้วก็ติดตั้งตัว portable ใหม่ๆโล่งๆ เอาไว้จัดการเว็บที่โดนเจาะเว็บเดียว ในขั้นตอนนี้ไม่มีอะไรซับซ้อน คิดตั้ง xampp เรียก localhost สร้างฐานข้อมูล ติดตั้ง WordPress แล้วก็ติดตั้ง All-in-One WP Migration รอไว้

เนื่องจากปัญหาการอัพเดทเวอร์ชั่นของเว็บต้นทางบน server ในเคสนี้เพื่อลดโอกาสความผิดพลาดก็เลยเลือกที่จะติดตั้ง WordPress care เป็นเวอร์ชั่น 4.9.9 แทนที่จะเป็น version 5 ฮะ (ถ้า import ได้ไม่มีปัญหา มาอัพเวอร์ชั่นทีหลังก็ได้)

– xampp | xampp-control.exe –

(6) import to localhost

ขั้นตอนนี้คือเราจะ login เข้าไปใน WordPress บนเครื่อง localhost ของเราแล้วก็ใช้ All-in-One WP Migration เพื่อ import ไฟล์ .wpress กลับเข้าไปเพื่อ restore เว็บ ระหว่างทางจะมีคำเตือนเรื่อง WordPress Core version และ PHP version ว่า localhost มันใหม่กว่านะ แต่ก็สามารถ import เว็บกลับเข้าไปได้ไม่มีปัญหาอะไร ผลที่ได้ ณ จุดนี้คือสามารถเปิดเว็บผ่าน http://localhost/websitename ได้แล้วไม่ขึ้นหน้าขาวแล้ว สามารถ login เข้าไปใน wp-admin ได้ไม่มีปัญหาอะไร plugins ส่วนใหญ่ถูก deactivated เพราะว่ามันหาไฟล์ของตัวเองไม่เจอ แล้วหน้าเว็บก็จะไม่มีรูปอะไรแสดงเลย (เพราะเราดาวโหลดแยกออกมา จำได้ไหม)

ความยากอย่างหนึ่งของการ migrate WordPress เว็บไซต์ก็คือเรื่องของ permalinks ซึ่งแก้ไขได้ด้วยการใช้ migration plugins นี่แหละ ชีวิตง่ายขึ้นมาก

(7) จัดการไฟล์ plugins cleaning

เมื่อส่วน migration ผ่านไปด้วยดี ขั้นตอนต่อไปคือเอา plugins กลับมาใส่ ถึงตรงนี้เจ้า plugins เจ้าปัญหาก็ถูกลบออกไปจากหน้า installed plugins ได้แล้ว สำหรับ plugins อื่นๆที่ต้องใช้งาน ให้เราเลือก copy จากที่เราดาวโหลดผ่าน filezilla มาใส่ไว้ใน localhost (ซึ่งควรจะเป็น /xampp/htdocs//wp-content/plugins/) ค่อย copy มาทีละตัวซึ่งปรกติแล้วชื่อโฟลเดอร์กับชื่อ plugins ก็มักจะสัมพันธ์กันอยู่แล้วเดาไม่อยาก ค่อยๆย้ายมา แล้วก็ค่อยๆ activated ทีละตัว แล้วก็ refresh หน้าเว็บของ localhost ทีละครั้งเพื่อตรวจว่าเว็บยังทำงานได้ปรกติดีอยู่หรือไม่

– นี่คือไฟล์จาก plugin เจ้าปัญหาที่ต้องดาวโหลดมาเปิดใน localhost และดูยังไงก็ไม่น่าคบ –

ถ้ายังจำ plugins เจ้าปัญหาลบไม่ออกตอนที่อยู่บน server กันได้ แต่ทำไมตอนนี้ลบออกได้แล้ววเพราะตอน import ลงใน localhost ไม่ได้เอาไฟล์ plugins ตัวนั้นมาด้วย ซึ่ง malware code บน server มันล๊อคตัวเองเอาไว้ไม่ให้ WordPress สามารถลบโฟลเดอร์ทิ้งได้ ชื่อ plugins ลบยังไงก็เลยลบไม่ออกเพราะตอนเปิดมามันก็ยังเห็น folder นี้อยู่ใน wp-content/plugins ตัว WordPress มันก็บันทึกกลับไปในฐานข้อมูลมันว่า plugins นี้ยังอยู่นะ แต่ใน localhost เราไม่ได้เอามันมาด้วยพอสั่งลบออกจาก database แล้วมันหาโฟลเดอร์ ไม่เจอเราก็เลยไม่เห็น

(8) จัดการไฟล์ media cleaning

เมื่อส่วน plugins ผ่านไปด้วยดี ขั้นตอนต่อไปคือเอาความสดใสกลับมาสู่เว็บกับไฟล์มีเดียต่างๆ ซึ่งไฟล์มีเดียพวกนี้ตามโครงสร้างการทำงานของ WordPress มันจะถูกเก็บอยู่ในโฟลเดอร์ wp-content/uploads และมันไม่ควรจะมีไฟล์ประเภท code ทั้งหลายอยู่ในนั้นเลย เพราะฉะนั้นถ้าเราไปเจอไฟล์ php, js , html หรืออะไรประมาณนี้แอบอยู่ ให้สงสัยไว้ก่อนว่ามันต้องไม่ใช่ไฟล์ประสงค์ดีแน่ๆ วิธีในการตรวจแบบง่ายๆก็คือใช้ File Explorer ใน Windows นี่แหละ เปิดไปที่ โฟลเดอร์ uploads แล้วให้แสดงผลการค้นหาทุกไฟล์ ( * ) โดยเรา view ในแบบ detail แล้วให้ sort ด้วยประเภทไฟล์ อะไรที่ไม่ใช่่ไฟล์มีเดีย ก็ให้ cut แล้วแยกออกมาเก้บไว้ในโฟลเดอร์ข้างนอกที่เราสร้างแยกไว้ ขั้นตอนต่อไปให้ view ในแบบ thumbnail ถ้ามีเดียอันไหนไม่มี preview ให้ดู ให้สงสัยไว้ก่อนว่ามันไม่ใช่ไฟล์มีเดียจริงๆ มันเป็นไฟล์ script ปลอมตัวมา ก็ cut ออกมาแปะไว้ในโฟลเดอร์ข้างนอกต่างหากเช่นกัน

(9) Final cleaning

ถึงจุดนี้แล้วเว็บไซต์ควรจะสามารถเข้าชม และแสดงผลได้ปรกติแล้ว ในเคสนี้เนื่องจากว่ามีเนื้อหาอยู่น้อย ก็สามารถกดไล่เปิดตามเมนู และลิงค์ได้เลย ถ้าเกิดว่าเจอรูปหาย หรือการแสดงผลแปลกๆ ก็อาจจะ open images in new tab เพื่อเข้าไปดู urls ของรูปแล้วไปดาวโหลดเฉพาะไฟล์นั้นจากบน server ด้วย filezilla ได้

หลังจากที่ตรวจสอบการทำงานด้านหน้าจนพอใจแล้ว ให้ล๊อคอินเข้าไปในส่วน wp-admin อีกรอบนึงเพื่อ อัพเดททุกอย่าง WordPress core, Themes และ plugins เมือคิดว่าไม่มีปัญหาในการใช้งานแล้ว ให้ทำการ export เว็บที่ถูก clean แล้วด้วย All-in-One WP Migration เตรียมไว้สำหรับ restore ขึ้นบน server

ในระหว่างการทดลองใช้งานเว็บ ให้เปิด chrome devtools แล้ว inspects ในส่วนของ network ไปด้วยคอยสังเกตว่ามี error 404 ว่ามีการเรียกไฟล์อะไรแปลกๆที่ฟ้องว่าหาไม่เจอหรือไม่โดยเฉพาะพวกไฟล์ script ทั้งหลาย js, php (พยายาม load malware script จากภายใน) หรือมีการเรียกหาไฟล์ประหลาดจากเว็บไซต์ที่ไม่คุ้นคยบ้างหรือไม่ (พยายามแอบดาวโหลดอะไรบางอย่างมาติดตั้ง) ซึ่งเป็นอาการที่แสดงว่ายังมี script บางอย่างแอบอยู่ในเว็บ และพยายามจะเปิดช่องโหว่ให้เจาะอยู่

– เราสงสัยว่าไฟล์ js นี้เรียกมาจากไหน DevTools ก็บอกได้ว่าไฟล์นี้เป็นของ google เองนะจ๊ะ –

(10) Back to business

ขั้นตอนสุดท้ายก็คือการเอาเว็บที่แก้ไขแล้วกลับขึ้นไปบน server และวิธีการที่แนะนำก็คือให้ทาง web hosting ลบไฟล์ทุกอย่างทิ้ง ลบฐานข้อมูลทิ้ง ในเคสนี้เนื่องจากว่าทาง hosting เค้าจะย้ายบัญชีเราให้ไปใช้ เครื่อง PHP7 ก็เลยประสานงานว่าอยากได้ fresh account โล่งๆเลย จากนั้นให้เราสร้างฐานข้อมูลใหม่ ติดตั้ง WordPress ใหม่พร้อมกับ All-in-One WP Migration รอไว้เท่านั้น หลังจากนั้น import file กลับเข้าไปทดสอบการทำงานก่อน แล้วก็ upload ส่วน wp-content ขึ้น server ด้วย filezilla ตรวจสอบการทำงานอีกครั้ง พร้อมกับ inspects การเรียกไฟล์ต่างๆผ่าน chrome DevTools อาจจะต้องคอยเข้ามาเรียกดูทุกวันประมาณสัปดาห์ เพื่อให้มันทำงานจริงๆแล้วคอยตรวจสอบ log จาก sucuri plugins ว่ามีพฤติกรรมอะไรแปลกๆเกิดขึ้นหรือไม่ ถ้าไม่มีอะไรเกิดขึ้นในส่วนของการ restore WordPress เว็บไซต์ก็หมดลงที่ตรงนี้ แต่ก็ยังไม่จบซะทีเดียว

(11) Verify with google

ถึงแม้เราจะมั่นใจว่าเว็บเราสะอาด ปลอดภัยแล้ว แต่ google เค้ายังไม่รู้แล้วก็ยังแปะป้ายแดงเถือกเตือนหราอยู่ว่าบ้านของเรานี้อันตราย เราก็ต้องไปบอก google ก่อนว่าเราจัดการไปหมดแล้วนายมาตรวจดูซิ ซึ่งส่วนนีต้องเชื่อมต่อกับส่วนของ google search console (webmaster tools เดิม) โดยขั้นตอนแรกต้องมี google account ก่อน หลังจากนั้นก็ต้อง verify เราเป้นเจ้าของเว็บด้วยการไปที่ setting > ownership verification ในเคสนี้เนื่องจากกว่าเรา verify แล้วก็ตรงไปเคลียร์ได้เลยโดยให้ไปที่ security issue

เราจะเห็นหน้าต่างเตือนขึ้นมา พร้อมกับปุ่มขอรับการตรวจสอบ ถ้าแก้ไขแล้วให้แจ้งทางนี้ เราก็แจ้งไปพร้อมคอมเม้นว่า เราได้ลบเว็บทิ้งไปแล้วนะแล้วก็ทำใหม่ ส่งไปแล้วก็รอ ใช้เวลาประมาณ 24-48 ชม ถ้าทุกอย่างโอเคแล้วก็จะมีจดหมายส่งมาบอกว่า เคลียร์ให้แล้ว เท่านี้ก็ถึงจะถือได้ว่าเสร็จสิ้นภารกิจจริงๆแล้วฮะ

ทั้งหมดทั้งมวลข้างบนก็เป็นรายละเอียดคร่าวๆว่าทำอะไรไปบ้าง อาจจะมีเร่งๆเล็กน้อยในช่วงท้ายๆเพราะกระบวนการเอาขึ้นใช้งานจริงๆส่วนใหญ่ก็จะวนลูปซ้ำๆกัน copy ไฟล์ , activate plugin, testing, backup วนซ้ำไปเรื่อยๆทีละส่วน ทีละ plugin ที่เห็นเป็นแค่กระบวนการสำหรับเว็บปรกติที่มี page อยู่ไม่ถึงสิบหน้า และไม่มีระบบซับซ้อน ไม่ต้องพูดถึงว่าถ้าเป็นเว็บ e-commerce จะมีขั้นตอนที่มากกว่านี้ ต้องตรวจละเอียดกว่านี้ มีความเสี่ยงของข้อมูลสูญหาย และการ cleaning ไม่หมดเหลือไฟล์รอดเป็นช่องไว้ให้ถูกเจาะได้อีกมากกว่านี้ เพราะฉะนั้นเรื่องของการจัดการ web และงาน IT ทั้งหมด เรื่องของการป้องกันยังไงต้นทุนก็ยังถูกกว่าการกู้คืน หรืออย่างน้อยๆถ้ามี backup เอาไว้เรื่อยๆก็จะยิ่งช่วยได้มาก เหนือสิ่งอื่นใดอะไรที่ไม่ได้ใช้ก็ไม่ควรเก็บเอาไว้ในเว็บ และอะไรที่พอจะอัพเดทได้ก็จงอัพเดท เพราะยิ่ง CMS หรือ Application ใดมีความนิยมมากแค่ไหนก็ยิ่งตกเป็นเป้ามากเท่านั้นฮะ

– ลองติดตั้ง Jetpack ไว้ในเว็บก็ได้แล้วแวะมาดูว่าวันๆนึงมีคนพยายามเจาะเว็บเรากี่ครั้ง –

ถ้าอ่านมาถึงตรงนี้ก็ต้องขอบคุณมากๆที่สละเวลามา (เพราะมันยาวมาก) แล้วก็หวังว่าจะได้ประโยชน์ไปบ้างไม่มากก็น้อยฮะ

รวมลิงค์เครื่องมือต่างๆที่ใช้
+ https://wordpress.org/download/
+ https://search.google.com/search-console/
+ https://wordpress.org/plugins/all-in-one-wp-migration/
+ https://wordpress.org/plugins/better-wp-security/
+ https://wordpress.org/plugins/sucuri-scanner/
+ https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/
+ https://filezilla-project.org/download.php?type=client
+ https://developers.google.com/web/tools/chrome-devtools/