Cross-Site Request Forgery (รู้จักว่า CSRF หรือ XSRF) เป็นหนึ่งในการแฮ็กที่รุนแรงที่สุดที่เว็บ WordPress เผชิญ การแฮ็กนี้เกิดจากช่องโหว่ในปลั๊กอิน WordPress ที่ติดตั้งบนเว็บ
ที่นี่ แฮกเกอร์หลอกผู้ใช้เว็บไซต์ให้ดำเนินการอันตราย ที่เป็นอันตรายต่อทั้งเจ้าของเว็บและผู้ใช้ การโจมตี CSRF อาจมีผลกระทบรุนแรงต่อทั้งสองฝ่าย และต้องป้องกันตั้งแต่แรก!
ด้วย CSRF แฮกเกอร์สามารถควบคุมเว็บไซต์เต็มที่ และใช้รันกิจกรรมอันตรายใดๆ พวกเขาอาจเปลี่ยนเส้นทางผู้เยี่ยมชมไปไซต์อันตราย หรือหลอกให้ดาวน์โหลดมัลแวร์ พวกเขายังอาจขโมยเงินจากคุณและลูกค้า!
ไม่ chỉนั้น สิ่งเลวร้ายอาจสะสมเพิ่ม Google อาจแบนเว็บ และโฮสติ้งอาจระงับเว็บ
หากคุณเป็นเหยื่อการแฮ็กนี้ หรือต้องการป้องกัน เราพร้อมช่วย ในบทความนี้ เราจะแสดงวิธีแก้ไขการโจมตี CSRF และวิธีป้องกัน
TL;DR: หากเว็บถูกแฮ็ก คุณต้องแก้ทันที เราแนะนำดาวน์โหลดและติดตั้ง ปลั๊กอินกำจัดการโจมตี CSRF บนเว็บ เพื่อสแกนลึก (deep scan) และทำความสะอาดทันที เมื่อเว็บสะอาดแล้ว ปลั๊กอินจะปกป้องจากโจมตีในอนาคต
สารบัญ
→ การโจมตี CSRF (Cross-Site Request Forgery) คืออะไร?
→ ช่องโหว่ CSRF WordPress เกิดขึ้นบนเว็บของคุณอย่างไร?
→ วิธีป้องกันการโจมตี CSRF บนเว็บ WordPress?
→ มาตรการป้องกัน CSRF สำหรับนักพัฒนาปลั๊กอิน
→ มาตรการป้องกัน CSRF สำหรับเจ้าของเว็บ WordPress
การโจมตี CSRF (Cross-Site Request Forgery) คืออะไร?
การโจมตี CSRF WordPress ค่อนข้างซับซ้อน แต่เราจะแยกให้เข้าใจง่ายที่สุด
บนเว็บที่มีการสมัครสมาชิก สมาชิก หรือล็อกอิน ทุกผู้ใช้มีสิทธิ์เข้าถึงบัญชีของตนเองบนเว็บ ตัวอย่างเช่น บัญชี Amazon, Gmail หรือการธนาคารออนไลน์
เว็บไซต์แบบนี้ให้ข้อมูลล็อกอิน – ชื่อผู้ใช้และรหัสผ่าน เพื่อยืนยันตัวตนผู้ใช้ ดังนั้น เมื่อผู้ใช้ล็อกอิน พวกเขาใส่ username และ password เพื่อยืนยันตัวตน วิธีนี้ ทำให้เว็บสร้างความไว้วางใจกับผู้ใช้และเบราวเซอร์ของพวกเขา
ในการโจมตี CSRF แฮกเกอร์หลอกผู้ใช้ที่ยืนยันตัวตนแล้ว ให้ดำเนินการอันตราย
1. เข้าใจ 'Cross Site' (ข้ามเว็บ)
เพื่ออธิบายวิธีเกิด ให้ใช้ตัวอย่าง สมมติผู้ใช้ล็อกอิน Site A และทิ้งเปิดอยู่บนแท็บในเบราวเซอร์ (จำไว้ว่า Site A ล็อกอินอยู่ – สำคัญ)
สมมติแฮกเกอร์มีอีเมลผู้ใช้ ส่งอีเมลให้ผู้ใช้ เกี่ยวกับส่วนลดน่าตื่นเต้นหมดอายุในไม่กี่ชั่วโมง ผู้ใช้ถูกหลอกคลิกลิงก์ในอีเมล เปิดเว็บ Site B (ที่แฮกเกอร์ดูแล)
บน Site B ต้องกรอกฟอร์มหรือใส่อีเมลเพื่อรับส่วนลด ผู้ใช้คลิกปุ่ม 'submit' ที่ดูปกติ
แตเบื้องหลังปุ่ม 'submit' บน Site B แฮกเกอร์แทรกสคริปต์อันตราย
จำได้ไหม Site A ที่เปิดอยู่บนแท็บอื่น สคริปต์นี้ส่งคำขอไป Site A และรันการกระทำอันตราย นี่คือเหตุผลที่เรียกว่า 'cross-site'
2. เข้าใจ Request (คำขอ)
สคริปต์ของแฮกเกอร์ส่งคำขอจาก Site B ไป Site A แทนผู้ใช้ การกระทำอันตรายอาจเป็นอะไรก็ได้ จากการเปลี่ยนรหัสผ่านแอดมิน จนถึงโอนเงินออกบัญชีธนาคาร!
3. เข้าใจ 'Forgery' (ปลอมแปลง)
สุดท้าย เนื่องจากแฮกเกอร์ใช้การยืนยันตัวตนของผู้ใช้หลอก Site A จึงเป็น 'forgery' ดังนั้นชื่อ 'Cross-site Request Forgery'
สรุปคือ แฮกเกอร์ทำให้ Site A คิดว่าคำสั่งอันตรายเป็นคำขอที่ถูกต้องจากผู้ใช้ที่ยืนยันตัวตน แต่มันเป็นไปได้ไงที่ Site B ส่งคำขอไป Site A? เราจะลึกลงไปในส่วนต่อไป
หมายเหตุ: ส่วนนี้เป็นเทคนิค และเหมาะสำหรับผู้ใช้ WordPress มืออาชีพหรือนักพัฒนา หากต้องการข้ามไปยังการป้องกัน CSRF บนเว็บของคุณ โปรดข้ามไป มาตรการป้องกัน CSRF สำหรับเจ้าของเว็บ WordPress
[กลับด้านบน ↑]
ช่องโหว่ CSRF WordPress เกิดขึ้นบนเว็บของคุณอย่างไร?
เพื่ออธิบายการเกิดช่องโหว่ เราต้องเข้าใจการสื่อสารระหว่างเบราวเซอร์ผู้ใช้และเว็บไซต์
1. เข้าใจ Browser Requests (คำขอเบราวเซอร์)
ที่นี่ เราจะพูดถึง 2 ประเภทของ HTTP requests และ browser cookies:
i. HTTP GET Request
เมื่อคุณเยี่ยมชมเว็บ คุณส่ง HTTP GET request ไปเซิร์ฟเวอร์เว็บ คำขอนี้ขอข้อมูลที่ต้องการแสดง frontend เซิร์ฟเวอร์ตอบสนองและส่งข้อมูลที่ขอ เนื้อหาเว็บโหลดบนเบราวเซอร์
เมื่อคนไม่ได้ล็อกอิน พวกเขาเป็น unauthenticated user ดังนั้น เมื่อส่ง GET และ POST requests ไม่ใช้คุกกี้ ไม่มีปัญหาความปลอดภัย แต่เมื่อผู้ใช้ล็อกอิน พวกเขากลายเป็น authenticated user
เว็บใช้คุกกี้ (cookies) ระบุและบริการผู้ใช้ คนนี้ อาจใช้คุกกี้สร้างข้อมูลที่เกี่ยวข้องกับ unique ID เฉพาะ ช่วยล็อกอินง่าย แสดงโฆษณาตามความชอบ หรือแสดงสินค้าที่ชอบ ฯลฯ
ii. กระบวนการ CSRF
กลับมาที่ช่องโหว่ CSRF เกิดขึ้นอย่างไร เพื่อการโจมตีนี้มีผล แฮกเกอร์ต้องใช้ authenticated user ที่ใช้คุกกี้
เราจะอธิบายด้วยตัวอย่าง ที่นี่เราจะแสดงว่าอย่างไรแฮกเกอร์เข้าควบคุมบัญชีผู้ใช้ และใช้แฮกเว็บด้วยช่องโหว่ CSRF
→ สิ่งที่เกิดฝั่งผู้ใช้?
- ผู้ใช้ล็อกอิน targetwebsite.com บนเบราวเซอร์
- ต่อมา แฮกเกอร์หลอกผู้ใช้คลิก trickwebsite.com โดยส่งอีเมลบอกให้เยี่ยมไซต์และสมัครรับ $50 (ลิงก์เหล่านี้อาจแทรกบน targetwebsite.com ด้วยช่องโหว่อื่น)
- สมมติเหยื่อคิดว่า trick website ถูกต้อง และ หลงผิด ที่นี่ พวกเขากรอกฟอร์มและคลิก 'Submit'
- บน trickwebsite.com แฮกเกอร์วางโค้ด HTML ให้นำปุ่ม 'Submit' นี้ เมื่อคลิก จะส่ง POST request ไป targetwebsite.com (ที่ผู้ใช้ล็อกอินอยู่) แทนผู้ใช้
→ สิ่งที่เกิดฝั่งเว็บไซต์?
- ด้วยคุกกี้ targetwebsite.com ยืนยันผู้ใช้ (และเบราวเซอร์) และ อนุญาตคำขอ คำขอนี้ดูถูกต้อง เพราะมาจาก authenticated user
- แตคำขอ POST มีสคริปต์อันตรายที่อาจทำลายเว็บ ตัวอย่าง สคริปต์อาจมีคำสั่ง เปลี่ยนรหัสผ่านปัจจุบันเป็น "newpassword123"
- เมื่อคำขอถูกยอมรับโดย targetwebsite.com โค้ดจะรันและเปลี่ยนรหัสผ่าน แล้ว แฮกเกอร์จะล็อกอินเข้าบัญชี ด้วยรหัสใหม่ และควบคุมเต็มที่
- ต่อไป แฮกเกอร์รันการโจมตีเพิ่มบนเว็บ ขึ้นอยู่กับสิทธิ์ของผู้ใช้ พวกเขาอาจเข้าถึง targetwebsite.com's database และ ควบคุมฟังก์ชัน ได้
นี่เป็นเพียงตัวอย่างหนึ่งของสิ่งที่แฮกเกอร์ทำได้ด้วย CSRF มีสถานการณ์อื่นอีกมาก ที่ทั้งผู้ใช้และเว็บได้รับผลกระทบ
[กลับด้านบน ↑]
วิธีป้องกันการโจมตี CSRF บนเว็บ WordPress?
เว็บ WordPress เปิดโอกาสโจมตี CSRF เพราะปลั๊กอินมีช่องโหว่อนุญาตให้เกิดขึ้น
ตามรายงาน full disclosure จาก PluginVulnerabilities.com ปลั๊กอินยอดนิยมหลายตัวมีปัญหาความปลอดภัยทำให้เว็บเปราะบางต่อ CSRF เพื่อป้องกัน CSRF นักพัฒนาปลั๊กอินต้องนำมาตรการความปลอดภัยบางอย่างมาใช้ เราจะพูดสั้นๆ แล้วบอกว่าคุณ بصفเจ้าของเว็บ WordPress สามารถทำอะไรได้
- มาตรการป้องกัน CSRF สำหรับนักพัฒนาปลั๊กอิน
- มาตรการป้องกัน CSRF สำหรับเจ้าของเว็บ WordPress
i. มาตรการป้องกัน CSRF สำหรับนักพัฒนาปลั๊กอิน
หากคุณเป็นนักพัฒนาปลั๊กอิน นี่คือมาตรการป้องกัน CSRF:
1. Anti-CSRF Tokens
Anti-CSRF token เป็นค่าที่ซ่อน ส่งพร้อมคุกกี้และคำขอของผู้ใช้เฉพาะ ทำงานดังนี้:
- เว็บเซิร์ฟเวอร์สร้าง token นี้ และ วางเป็นฟิลด์ซ่อน บนฟอร์ม
- เมื่อผู้ใช้กรอกและส่งฟอร์ม token จะรวมอยู่ใน POST request
- เซิร์ฟเวอร์จะ เปรียบเทียบ token ที่สร้าง และ token ที่ผู้ใช้ส่ง
ถ้าตรงกัน คำขอถูกต้อง หากไม่ตรง คำขอถือว่าไม่ถูกต้อง ป้องกัน CSRF ได้
นักพัฒนาสามารถเพิ่ม token นี้ขณะสร้างหรืออัปเดตปลั๊กอิน
2. การใช้ Nonces
แม้ใช้แทนกันได้ แต Anti-CSRF Tokens และ Nonces ต่างกัน Nonce (numbers used once) เหมือนรหัสผ่านครั้งเดียว สร้างสำหรับคำขอ
เมื่อส่ง HTTP request จะสร้าง nonce ยืนยันคำขอ แต่ใช้ครั้งเดียว nonce จะถูกทำลาย ผู้ใช้ไม่สามารถส่งฟอร์มซ้ำด้วย nonce เดิม
3. Same-Site Cookies
การโจมตี CSRF เป็นไปได้เพราะ cross-site requests ใช้คุกกี้เดียวกัน Same-site cookie หมายถึง คุกกี้ส่งได้ก็ต่อเมื่อคำขอจากเว็บเดียวกับที่สร้างคุกกี้
ปัญหาของวิธีนี้ คือ ยกเว้น Chrome, Firefox และเบราวเซอร์บางตัว ไม่ใช่ทุกเบราวเซอร์รองรับ same-site cookies
วิธีนี้ใช้เป็นชั้นป้องกันเพิ่มเติมได้ แต่ไม่ควรใช้เพียงอย่างเดียวป้องกัน CSRF
เราจะไม่ลึกลงไปในมาตรการป้องกันเพิ่ม เพราะเกือบทุกวิธีถูกแฮกเกอร์繞道 (bypass) ได้ในปัจจุบัน แฮกเกอร์อัจฉริยะขึ้นทุกวัน และพัฒนาเทคนิคใหม่เอาชนะมาตรการป้องกัน
เราจะไปที่มาตรการเชิงรุกและเชิงตอบสนอง ที่คุณในฐานะเจ้าของเว็บ WordPress สามารถทำได้ เพื่อปกป้องจาก CSRF
[กลับด้านบน ↑]
ii. มาตรการป้องกัน CSRF สำหรับเจ้าของเว็บ WordPress
เหมือนที่กล่าว นักสร้างปลั๊กอินควรทํามาตรการทำให้แอปพลิเคชันปลอดภัย แตถ้าพวกเขาไม่ทำ คุณจะรู้ไงว่าปลั๊กอินไหนนำมาตรการ anti-CSRF ไปใช้?
WordPress นادرًا ما تقف وحدها (rarely stands alone) ปลั๊กอินเล่นบทบาทสำคัญในฟังก์ชันและการออกแบบเว็บ ดังนั้น แม้เว็บต้องการปลั๊กอิน คุณเพียงเชื่อว่าปลั๊กอินมีมาตรการความปลอดภัยเหมาะสม?
ไม่! เจ้าของเว็บต้องคอยเฝ้าระวัง และนำมาตรการความปลอดภัยของตัวเองไปใช้ แม้นักพัฒนาปลั๊กอินไม่ทำ
นี่คือสิ่งที่คุณทำได้ เพื่อปกป้องจาก CSRF:
1. ใช้ปลั๊กอิน Anti-CSRF
ไม่มีปลั๊กอินมากในคลัง WordPress ที่มุ่งเน้น CSRF โดยเฉพาะ นี่คือ 2 ตัวที่เราพบ:
(A) Comment Form CSRF Protection – ปลั๊กอิน WordPress นี้เพิ่ม anti-CSRF token ให้ฟอร์มความคิดเห็น Token มีค่าเฉพาะตัวที่เก็บความลับและเดายากไม่เป็นไปได้ ดังนั้น หากผู้ใช้ส่งฟอร์ม token ลับจะส่งไปด้วย เฉพาะถ้าตรงกัน คำขอส่งฟอร์มจะถูกยอมรับ
(B) Same-site cookies – ปลั๊กอินนี้ทำงานบนเบราวเซอร์ที่รองรับ รวม Chrome, Firefox, IE และ Edge มันรับรองว่าเมื่อส่ง HTTP requests คุกกี้ที่ส่งมาจากเว็บเดียวกัน บล็อก cross-site requests ทั้งหมด และดังนั้น บล็อกการโจมตี CSRF ทั้งหมด
2. ติดตั้งปลั๊กอินความปลอดภัย WordPress ครบวงจร
มี ปลั๊กอินความปลอดภัย มากมายสำหรับเว็บ WordPress ปลั๊กอินเหล่านี้เก็บเว็บปลอดภัยจากแฮกเกอร์ทุกประเภท รวมถึง CSRF แตไม่ใช่ทุกปลั๊กอินให้ระดับความปลอดภัยเท่ากัน
เพิ่มเติม การโจมตี CSRF ล้มลึก 숨김 (tricky to find) แฮกเกอร์ปลอมแปลงมันดีจากเจ้าของเว็บและผู้ใช้ จึงหลบพ้นการสังเกต คุณต้องการปลั๊กอินที่ตรวจจับมัลแวร์ที่ปลอมแปลงได้
ในการเลือกปลั๊กอินความปลอดภัย คุณต้องแน่ใจว่ามันทำดังนี้ เพื่ออยู่ปลอดภัยจาก CSRF:
- สแกน เว็บไซต์เป็นประจำ เพื่อหาสคริปต์อันตราย
- สแกนลึกทุกไฟล์และฐานข้อมูล ของเว็บ
- มีความสามารถ ตรวจจับมัลแวร์ทุกประเภท – รวมถึงใหม่ ซ่อน หรือปลอม (บางปลั๊กอินค้นหาแค่มัลแวร์ที่ค้นพบแล้ว)
- แจ้งเตือน หากมีกิจกรรมน่าสงสัยบนเว็บ
- ให้ แดชบอร์ดอิสระ (independent dashboard) เพื่อทำความสะอาดเว็บ แม้แฮกเกอร์ล็อกคุณนอกบัญชีแอดมิน
ปลั๊กอินที่ให้การป้องกันและฟีเจอร์แบบนี้คือ MalCare ติดตั้งปลั๊กอินบน WordPress จะช่วยกำจัดการโจมตี CSRF และ กำจัดมัลแวร์ WordPress ที่แฮกเกอร์อาจเพิ่มระหว่างแฮ็ก
เว็บจะได้รับการป้องกันด้วยไฟร์วอลล์เชิงรุก (proactive firewall) ที่บล็อก IP อันตรายและบอทร้าย ไม่ให้เข้าชมเว็บ
หากแฮกเกอร์แฮกเว็บด้วย cross-site request อันตราย ปลั๊กอินความปลอดภัยนี้จะแจ้งเตือนทันที คุณสามารถดำเนินการทันทีด้วยปลั๊กอินเดียวกัน
3. แข็งตัวเว็บไซต์ (Harden Your Website)
WordPress.org แนะนำมาตรการแข็งตัวเว็บ บางอย่าง ทำให้แฮกเกอร์ยากที่จะเจาะ เราครอบคลุมบางจุดสั้นๆ แต่ แนะนำอ่านคู่มือ WordPress Hardening แบบละเอียด
เนื่องจากหลายจุดค่อนข้างเทคนิค คู่มือละเอียดจะช่วยเข้าใจดีขึ้น นี่คือมาตรการแข็งตัวเพื่อป้องกันหรือลดความเสียหายจาก CSRF:
ก. ใช้การยืนยันตัวตนสองปัจจัย (Two-Factor Authentication)
การมี 2FA เพิ่มชั้นยืนยันตัวตนเพิ่ม ผู้ใช้ใส่ข้อมูลล็อกอิน แล้วต้องใส่รหัสที่สอง อาจเป็น OTP ส่งอีเมลหรือเบอร์โทรที่ลงทะเบียน หรือหมายเลขยืนยันจากแอปอย่าง Google Authenticator
ข. บล็อกการรัน PHP ในโฟลเดอร์ที่ไม่น่าเชื่อถือ
หากการโจมตี CSRF ให้แฮกเกอร์เข้าถึงไฟล์เว็บ พวกเขาสามารถรันฟังก์ชัน PHP ทำงานอันตราย (PHP function คือบล็อกโค้ดเขียนในโปรแกรม) คุณสามารถปิดการรัน PHP ในที่ที่ไม่จำเป็น
ค. ปิด File Editor
หากแฮกเกอร์เข้าบัญชีแอดมิน WordPress พวกเขาควบคุมเว็บเต็มที่ บนแดชบอร์ด เข้าถึง "Editor" ใต้ปลั๊กอินหรือธีม ที่นี่ พวกเขาแก้ไขหรืออัปโหลดสคริปต์ของตัวเอง แสดงเนื้อหา พวกเขา ทำลายเว็บ SEO สแปมผู้ใช้ ฯลฯ
ง. เปลี่ยน Security Keys
คุณอาจสังเกต ไม่ต้องใส่ข้อมูลล็อกอินทุกครั้งที่เข้าหมาย WordPress มันกรอกอยู่ในฟิลด์แล้ว เพื่อให้ข้อมูลนี้ปลอดภัยจากแฮกเกอร์ WordPress ใช้ security keys เข้ารหัสและจัดเก็บข้อมูล หากแฮกเกอร์แฮกเข้าเว็บด้วย CSRF พวกเขาอาจเข้าถึงข้อมูลนี้ พวกเขาสามารถเปลี่ยนเป็นอย่างอื่น และใช้ล็อกอินเข้าบัญชีแอดมินเว็บเมื่อต้องการ
- คุณสามารถนำมาตรการแข็งตัวเหล่านี้ไปใช้ด้วยตนเอง ตามคู่มือที่แนะนำ หรือใช้ MalCare นำไปใช้ได้ในไม่กี่คลิก
4. ลบธีมและปลั๊กอินที่ไม่ได้ใช้ทั้งหมด
ยิ่งมีปลั๊กอินและธีมติดตั้งมาก ยิ่งโอกาสให้แฮกเกอร์ใช้ประโยชน์มาก ขั้นที่ดีคือ ลบปลั๊กอินและธีมที่ไม่ได้ใช้ และเก็บเฉพาะที่ใช้
นอกจากนี้ คุณยังดำเนินมาตรการเพิ่ม เช่น ย้ายจาก HTTP ไป HTTPS ติดตั้ง ปลั๊กอินความปลอดภัย และ ปกป้องหน้าล็อกอิน
[กลับด้านบน ↑]
ข้อความปิดท้าย
การโจมตี CSRF มีผลกระทบรุนแรงต่อทั้งผู้ใช้และเว็บ
หากแฮกเกอร์ประสบความสำเร็จรันสคริปต์ผ่าน HTTP request พวกเขาสามารถครอบครองเว็บ หลังจากนี้ ไม่รู้ว่าจะทำอะไรได้ พวกเขาอาจทำลายหน้าเว็บแสดงโฆษณาของตัวเอง หรือขายสินค้า/ยาไม่ hợp法 พวกเขายังอาจเปลี่ยนเส้นทางผู้เยี่ยมชมไปเว็บของพวกเขา
เว็บเหล่านี้มักเป็นเว็บผู้ใหญ่ ขายสินค้าผิดกฎหมาย หรือหลอกผู้เยี่ยมชมดาวน์โหลดมัลแวร์
- ในฐานะเจ้าของเว็บ คุณต้องดำเนินมาตรการให้อยู่ปลอดภัยจากโจมตีเหล่านี้ เราแนะนำ ใช้ปลั๊กอินความปลอดภัย เช่น MalCare บนเว็บ WordPress เพราะให้การป้องกันครบวงจร
- เราแนะนำ นำมาตรการแข็งตัวเว็บไซต์ ไปใช้ เพื่อทำให้แฮกเกอร์ยากเจาะ
- สุดท้าย ระมัดระวังในการใช้ปลั๊กอินและธีม ติดตั้งธีมและปลั๊กอินที่น่าเชื่อถือ จากคลัง WordPress หรือตลาดอย่าง ThemeForest และ CodeCanyon
เรามั่นใจว่าหากคุณนำมาตรการเหล่านี้ไปใช้บนเว็บ WordPress คุณจะปลอดภัยจากแฮกเกอร์!
ปกป้องเว็บ WordPress ด้วย MalCare!