File Inclusion และ Arbitrary Code Execution: เดือนนี้ เว็บไซต์จองตั๋วเครื่องบินที่สร้างบน WordPress ถูกแฮก ทำให้ข้อมูลส่วนตัวของผู้เข้าชมหลายแสนคนถูกเปิดเผย ในบทความก่อนหน้าที่พูดถึง "ทำไมแฮกเกอร์ถึงแฮก" เราได้อภิปรายเหตุผลทั้งหมดที่แฮกเกอร์แฮก รวมถึงการขโมยข้อมูล การส่งอีเมลสแปม การใช้เทคนิค SEO สีดำเพื่อจัดอันดับผลิตภัณฑ์ของตัวเอง (อ่านเพิ่ม: pharma hack) ฯลฯ
การเรียนรู้ว่าแฮกเกอร์แฮกเว็บไซต์อย่างไร เป็นกุญแจสำคัญในการป้องกัน ซึ่งเป็นเหตุผลที่เราได้ระบุรายการการโจมตีแฮกทั่วไปบนเว็บไซต์ WordPress ในบทความก่อนหน้า
เมื่อพูดถึงการโจมตีแฮกทั่วไป คุณน่าจะคิดถึง Brute force attacks แต่คุณรู้ไหมว่า File Inclusion และ Arbitrary Code Execution ก็เป็นหนึ่งในการโจมตีแฮกที่พบบ่อยที่สุดบนเว็บไซต์ WordPress ในบทความนี้ เราจะเจาะลึกลงไปในการโจมตีเหล่านี้เพื่อเข้าใจรายละเอียด
เพื่อเข้าใจว่าการโจมตีเหล่านี้ทำงานอย่างไร สิ่งแรกที่คุณต้องรู้คือ มันเกี่ยวข้องกับไฟล์ PHP คุณอาจสงสัยว่าทำไม? เพราะทั้ง File Inclusion และ Arbitrary Code Execution เกี่ยวข้องกับการใช้ไฟล์ PHP
ไฟล์ PHP คืออะไร? ลองนึกภาพตู้ครัว ภายในตู้มีหลายสิ่ง เช่น น้ำตาล เกลือ เครื่องเทศ อุปกรณ์ครัว ฯลฯ ทุกอย่างมีวัตถุประสงค์ในการทำอาหาร ไฟล์ PHP เหมือนตู้ และโค้ดภายในไฟล์คือสิ่งของที่ทำให้ฟังก์ชันที่แฮกเกอร์ต้องการทำงานได้ นี่คือเหตุผลที่แฮกเกอร์ชอบอัปโหลดไฟล์ PHP มากกว่าไฟล์อื่นๆ เช่น JPEG หรือ PDF ไฟล์ JPEG และ PDF ไม่สามารถรันได้ (non-executable) แฮกเกอร์ไม่สามารถใช้ไฟล์เหล่านี้รันฟังก์ชันใดๆ ได้ อ่าน (ดู) ได้อย่างเดียว ไม่สามารถใช้ทำการเปลี่ยนแปลงบนไซต์ที่ถูกแฮกได้
แฮกเกอร์ที่อัปโหลดไฟล์ PHP ไปบนเซิร์ฟเวอร์เว็บไซต์ของคุณ สามารถใช้มันทำอะไรก็ได้บนเว็บไซต์ของคุณ และนี่คือเหตุผลที่ไฟล์ PHP ถูกใช้รันการโจมตี File Inclusion และ Arbitrary Code Execution
File Inclusion Attack คืออะไร?
วิธีที่ดีที่สุดในการเข้าใจการโจมตีเว็บไซต์ที่ซับซ้อนอย่างนี้ คือการยกตัวอย่างสถานการณ์จริง สมมติว่าคุณดูแลเว็บไซต์สถาบันชื่อ college.com คุณอนุญาตให้นักศึกษาบางคนเข้าถึงไซต์เพื่อโพสต์รูปภาพจากกิจกรรมล่าสุด บางคนใช้สิทธิ์เข้าถึงผิดวิธี โดยอัปโหลดไฟล์ PHP อันตราย (ชื่อ hack.php) เข้าไปในเว็บไซต์ วัตถุประสงค์คือควบคุมเว็บไซต์สถาบัน เมื่อนักศึกษาอัปโหลดไฟล์ PHP อันตราย มันจะถูกเก็บในโฟลเดอร์ Uploads ตามค่าเริ่มต้น ทุกคนที่รู้ โครงสร้างพื้นฐานของ WordPress รู้ว่าไฟล์ที่อัปโหลดไปอยู่ที่ไหน
ไฟล์ทำหน้าที่เหมือนประตูที่เปิดให้แฮกเกอร์โต้ตอบกับไฟล์จากระยะไกล โปรดสังเกต แฮกเกอร์ยังไม่มีการควบคุมไซต์ พวกเขาเพียงมีหน้าต่างสื่อสารเท่านั้น เพื่อให้เข้าใจง่ายขึ้น ลองนึกภาพ: คน A อยากไปประเทศที่เขาไม่ได้รับอนุญาต ดังนั้นเขาส่งตัวแทน คน B คน A คือแฮกเกอร์ ประเทศคือเว็บไซต์สถาบัน และคน B คือไฟล์ hack.php
ไฟล์ PHP ที่อัปโหลดเข้าเว็บไซต์สถาบัน —-> ไฟล์ถูกเก็บบนเซิร์ฟเวอร์เว็บไซต์
คน B ได้รับการฝึกอบรมเพียงบางอย่าง และทำได้ไม่มาก คน A จึงต้องสั่งการให้ทำต่อไป ในทางเดียวกัน ไฟล์ PHP สร้างหน้าต่างการสื่อสาร และรอคำสั่งเพิ่มเติมจากแฮกเกอร์
สมมติว่า hack.php ถูกสร้างขึ้นเพื่อให้อัปโหลดไฟล์เพิ่มเติมเข้าเว็บไซต์ได้ แฮกเกอร์สร้างไฟล์ (ชื่อ control.php) ที่จะอัปโหลดโดยใช้ hack.php ที่อยู่บนเซิร์ฟเวอร์อยู่แล้ว ไฟล์ใหม่ control.php จะทำให้แฮกเกอร์เข้าถึงเว็บไซต์ได้เต็มที่ เขาใช้หน้าต่างที่ hack.php เปิดไว้ เพื่ออัปโหลด control.php เข้าไซต์ กระบวนการอัปโหลดไฟล์ control.php โดยใช้ไฟล์ (hack.php) ที่อยู่บนเซิร์ฟเวอร์เว็บไซต์อยู่แล้ว เรียกว่า Local File Inclusion (LFI)
ตัวอย่างที่ดีของ Local File Execution คือ ช่องโหว่ที่พบในปลั๊กอิน Easy Forms for MailChimp (v 6.0.5.5) โดยใช้ปลั๊กอิน MailChimp เจ้าของเว็บสามารถเพิ่มฟอร์มหลายประเภทเข้าเว็บไซต์ WordPress ช่องโหว่อนุญาตให้แฮกเกอร์อัปโหลดไฟล์ PHP เข้าเซิร์ฟเวอร์เว็บไซต์ผ่านฟอร์ม MailChimp เมื่อไฟล์ถูกเก็บบนเซิร์ฟเวอร์ แฮกเกอร์สามารถสื่อสารกับมันและรันโค้ดที่จะให้พวกเขาควบคุมเซิร์ฟเวอร์หรือทำลายไซต์ได้หลายวิธี
นี่คือสถานการณ์: เว็บไซต์สถาบันมีไฟร์วอลล์ติดตั้ง ดังนั้นแฮกเกอร์จึงไม่สามารถอัปโหลด control.php ได้ ในขณะที่เขาไม่สามารถอัปโหลดไฟล์แยกต่างหากได้ เขาสามารถ "include" ไฟล์ได้ หมายถึงเขาสามารถแทรกไฟล์เข้าไปใน hack.php ที่อยู่บนเซิร์ฟเวอร์แล้ว หากแฮกเกอร์อัปโหลด control.php ได้ เซิร์ฟเวอร์จะอ่านไฟล์และรันโค้ดภายในซึ่งจะให้แฮกเกอร์ควบคุมไซต์ได้ทุกอย่าง แต่เพราะเขาอัปโหลดไม่ได้ เขาต้องหาวิธีอื่นให้เซิร์ฟเวอร์อ่าน control.php เส้นทางที่แฮกเกอร์สร้างมีอยู่ออนไลน์ และเซิร์ฟเวอร์ของเว็บไซต์สถาบันควรอ่านได้ ดังนั้น แฮกเกอร์สร้างเส้นทางและทำให้มีอยู่ออนไลน์ เพื่อให้เซิร์ฟเวอร์เว็บไซต์สถาบันอ่านได้ เซิร์ฟเวอร์จึงเริ่มรันโค้ดที่ได้จากเส้นทางนั้น และเนื่องจากโค้ดเขียนไว้เพื่อให้แฮกเกอร์ควบคุมไซต์เต็มที่ การแฮกจึงควบคุมเว็บไซต์สถาบันได้ กระบวนการทำให้เซิร์ฟเวอร์อ่านไฟล์จากระยะไกล เรียกว่า Remote File Inclusion (RFI)
กรณีช่องโหว่ TimThumb เป็นตัวอย่างยอดนิยมของ Remote File Inclusion TimThumb เป็นปลั๊กอิน WordPress ที่แก้ไขรูปภาพบนเว็บไซต์ WordPress ได้ง่าย มันอนุญาตให้ใช้รูปภาพจากเว็บแชร์รูป เช่น imgur.com และ flickr.com TimThumb รับรู้ imgur เป็นไซต์ที่ถูกต้อง (whitelisted) แฮกเกอร์เอาข้อนี้เปรียบ สร้างไฟล์พร้อม URL ที่ระบุไซต์ถูกต้อง เช่น https://www.imgur.com.badsite.com เมื่อพวกเขาอัปโหลดไฟล์อันตรายพร้อม URL แบบที่กล่าวมา ปลั๊กอินถูกหลอกให้เชื่อว่าไฟล์มาจากเว็บไซต์ที่ถูกต้อง และอนุญาตให้อัปโหลดไฟล์อันตรายเข้าเซิร์ฟเวอร์เว็บไซต์ กระบวนการรวมไฟล์อันตรายจากภายนอกเซิร์ฟเวอร์เว็บไซต์ โดยใช้ประโยชน์จากช่องโหว่ในปลั๊กอิน เรียกว่า Remote File Inclusion หลังจากไฟล์ PHP อันตรายถูกเก็บบนเซิร์ฟเวอร์ แฮกเกอร์สามารถสื่อสารกับมันเพื่อดำเนินการที่ต้องการ
Arbitrary Code Execution Attack คืออะไร?
ตอนนี้เรารู้แล้วว่า Local และ Remote File Inclusion คืออะไร มาเข้าใจ Arbitrary Code Execution กัน File Inclusion และ arbitrary code inclusion เกี่ยวข้องกัน ในทุกกรณีของ File Inclusion เป้าหมายของแฮกเกอร์คือการรัน arbitrary code บนเว็บไซต์ กลับไปที่ตัวอย่าง Local File Inclusion ที่แฮกเกอร์อัปโหลด hack.php เข้าเว็บไซต์สถาบัน และอัปโหลด control.php ด้วยความช่วยเหลือของ hack.php คำว่า Arbitrary Code Execution อธิบายถึงความสามารถของแฮกเกอร์ในการรันคำสั่งใดๆ ที่เขาต้องการบนเว็บไซต์ที่ถูกแฮก เมื่อไฟล์ PHP (hack.php และ control.php) อยู่บนเซิร์ฟเวอร์แล้ว แฮกเกอร์สามารถรันโค้ดใดๆ ที่เขาต้องการ กระบวนการรันโค้ดจากไฟล์ที่เขาอัปโหลด เรียกว่า Arbitrary Code Execution
การแฮกซับซ้อน ในบทความนี้เราพยายามอธิบายให้เข้าใจง่ายที่สุด แต่ถ้ามีส่วนไหนไม่เข้าใจ เราขอเชิญชวนผู้อ่านเขียนมาหาเรา ในบทความต่อไป เราจะพูดถึงการโจมตีแฮกทั่วไปอีกอย่างบน WordPress ชื่อ Cross-Site Scripting (XSS) ติดตามได้เลยครับ