มาตรฐานความปลอดภัย WordPress: บทบาทผู้ใช้ การยืนยันตัวตนสองขั้นตอน และการป้องกันการเข้าสู่ระบบ
หนึ่ง เริ่มจากนับบัญชี: เว็บส่วนใหญ่มีผู้ดูแลระบบมากเกินไป
ก้าวแรกของการบุกรุก WordPress คือหน้าเข้าสู่ระบบเสมอ และหน้าเข้าสู่ระบบจะถูกเจาะได้ก็ต่อเมื่อผู้โจมตีมีชื่อผู้ใช้กับรหัสผ่านที่ใช้ได้อยู่ในมือ ดังนั้นจุดเริ่มต้นของความปลอดภัยไม่ใช่การติดปลั๊กอิน แต่คือการนับให้ชัดว่ามีคนที่เข้าไปหลังบ้านได้กี่คน
หลายเว็บเปิดมาสองปี สะสมบัญชีผู้ดูแลระบบไว้เจ็ดแปดบัญชี: ของคนที่จ้างมา ของคนที่ลาออกไปแล้ว ของที่ใช้ทดสอบ บางบัญชีตั้งรหัสผ่านเป็น 123456 ด้วยซ้ำ บัญชีใดบัญชีหนึ่งในนี้รั่วไหล ก็เท่ากับเปิดประตูหลังบ้านทิ้งไว้
ตัวอย่างที่หนึ่ง: เว็บหนึ่งถูกลิงก์ดำ ตรวจ log ย้อนหลังพบว่าเข้าสู่ระบบด้วยบัญชีของคนที่จ้างมาซึ่งลาออกไปเมื่อครึ่งปีก่อน คนลาออกแล้วแต่บัญชียังไม่ลบ รหัสผ่านก็ยังเป็นชุดเดิมที่เคยส่งในประวัติแชท ผู้โจมตีไม่ต้องใช้ช่องโหว่ใดๆ เลย
วิธีวางแผนบัญชีตอนเลือกเทคโนโลยี ดูได้ที่เทคโนโลยีสำหรับเว็บไซต์แบรนด์ของตัวเองบน WordPress ส่วนขั้นตอนการเก็บกวาดหลังถูกบุกรุก ดูได้ที่หลังเว็บไซต์ถูกแฮก。
| บทบาท | ขอบเขตสิทธิ์ | ควรให้ใคร |
|---|---|---|
| ผู้ดูแลระบบ | ทั้งเว็บ: ติดปลั๊กอิน แก้โค้ด ลบผู้ใช้ | คนที่ดูแลจริง ไม่เกิน 2 คน |
| บรรณาธิการ | จัดการเนื้อหาและคอมเมนต์ทั้งหมด | ผู้รับผิดชอบเนื้อหา |
| ผู้เขียน | เขียนและจัดการบทความของตัวเองเท่านั้น | นักเขียนที่ส่งบทความ |
| ผู้มีส่วนร่วม | เขียนฉบับร่างได้ แต่เผยแพร่ไม่ได้ | คนที่รับงานเขียนจากภายนอก |
| สมาชิก | คอมเมนต์ได้เท่านั้น | ผู้เข้าชมทั่วไป |
สอง สิทธิ์น้อยที่สุด: อย่าให้คนเขียนบทความติดปลั๊กอินได้
หลักของสิทธิ์คือ: สิ่งที่บัญชีหนึ่งทำได้ ต้องพอดีกับขอบเขตน้อยที่สุดที่งานนั้นต้องใช้ คนที่เขียนบล็อกไม่จำเป็นต้องติดปลั๊กอินหรือแก้ธีม ให้เป็น Editor หรือ Author ก็พอ มีแต่คนที่ดูแลเว็บจริงๆ เท่านั้นที่ควรได้ Administrator
การจัดการตอนลาออกต้องทำสองขั้น: ลดสิทธิ์และปิดการใช้งานก่อน รอดูหนึ่งถึงสองสัปดาห์เพื่อยืนยันว่าไม่มีงานอัตโนมัติที่พึ่งพาบัญชีนั้น แล้วค่อยลบ ถ้าลบทันทีอาจเสียชื่อผู้เขียนของบทความที่บัญชีนั้นเผยแพร่ไป
ต้องลบชื่อผู้ใช้ admin ที่เป็นค่าเริ่มต้นออกด้วย เครื่องมือเดารหัสหลายตัวลองชื่อบัญชี admin เป็นอย่างแรก ถ้าหลังบ้านของคุณมีชื่อนี้อยู่ ก็เท่ากับมอบรหัสผ่านไปครึ่งหนึ่งแล้ว
รหัสผ่านต้องยาวพอด้วย เลขล้วนแปดหลักในยุคนี้แทบเท่ากับไม่มีรหัส สำหรับรหัสผู้ดูแลระบบแนะนำให้ใช้สิบสองหลักขึ้นไป ผสมตัวพิมพ์ใหญ่พิมพ์เล็กและสัญลักษณ์ และอย่าใช้รหัสเดิมซ้ำกับหลายบัญชี การใช้รหัสซ้ำคือสาเหตุหลักที่ทำให้การเดารหัสจากฐานข้อมูลที่รั่วไหลสำเร็จ
| ตำแหน่ง | บทบาทที่แนะนำ | ไม่ควรให้สิทธิ์ |
|---|---|---|
| เจ้าของเว็บ/ผู้ดูแลเทคนิค | ผู้ดูแลระบบ | — |
| บรรณาธิการคอนเทนต์ | บรรณาธิการ | ติดตั้งปลั๊กอิน แก้โค้ด |
| นักเขียน | ผู้เขียน | แก้บทความคนอื่น แก้ธีม |
| นักเขียนรับจ้างภายนอก | ผู้มีส่วนร่วม | เผยแพร่ได้เลย |
| เด็กฝึกงาน/ชั่วคราว | ผู้มีส่วนร่วม | สิทธิ์เผยแพร่ใดๆ |
สาม การยืนยันตัวตนสองขั้นตอน: เพิ่มอีกชั้นนอกเหนือจากรหัสผ่าน
ประโยชน์ของ Two-Factor Authentication (2FA) คือ แม้รหัสผ่านรั่วไหล ผู้โจมตีก็ยังเข้าสู่ระบบไม่ได้หากไม่มีรหัสยืนยันแบบไดนามิกบนมือถือของคุณ นี่คือชั้นป้องกันที่มีประสิทธิภาพที่สุดในการรับมือการโจมตีแบบ credential stuffing เพราะการโจมตีลักษณะนี้พึ่งพา “รหัสผ่านที่รั่วไหลจากที่อื่น” นั่นเอง
เลือกใช้แอป TOTP (อย่าง Google Authenticator หรือ Authy) ไม่ควรใช้ SMS เพราะรหัสทาง SMS ถูกดักจับได้ด้วยการสวมซิม ส่วน TOTP สร้างขึ้นในเครื่อง ไม่ต้องพึ่งเครือข่ายมือถือ
นโยบายบังคับใช้แบ่งเป็นสองขั้น: บทบาท Administrator บังคับเปิดทันที ไม่เปิดก็ไม่ให้เข้าสู่ระบบ ส่วนบทบาทอื่นให้ผ่อนผันสองสัปดาห์ เกินกำหนดแล้วล็อกอัตโนมัติ วิธีตั้งค่าดูได้ที่การเสริมความปลอดภัย การเสริมความปลอดภัยเว็บไซต์อิสระ。
ตัวอย่างสถานการณ์ที่สาม: ทีมห้าคน ตอนแรกมีแค่ผู้ดูแลเทคนิคที่เปิดการยืนยันสองขั้นตอน ครั้งหนึ่งอีเมลรั่วทำให้รหัสผ่านของฝ่ายปฏิบัติการหลุด ผู้โจมตีลองเดารหัสเข้าหลังบ้าน เพราะบัญชีฝ่ายปฏิบัติการไม่ได้เปิด 2FA ชั้นล็อกที่สองจึงไร้ความหมาย สองสัปดาห์ต่อมาจึงบังคับเปิดทั้งทีม ความเสี่ยงแบบนี้ถึงปิดสนิทจริง
| วิธี 2FA | ความปลอดภัย | คำแนะนำ |
|---|---|---|
| แอป TOTP | สูง สร้างในเครื่อง ไม่ต่ออินเทอร์เน็ต | แนะนำให้ทุกคนใช้ |
| รหัสทาง SMS | ปานกลาง ถูกสวมซิมดักจับได้ | ไม่แนะนำให้ใช้เป็นวิธีหลัก |
| รหัสทางอีเมล | ต่ำ อีเมลมักรั่วพร้อมรหัสผ่าน | ใช้เป็นตัวสำรองเท่านั้น |
| ฮาร์ดแวร์คีย์ | สูงสุด | ผู้ดูแลระบบเลือกติดตั้งได้ |
สี่ การป้องกันการเข้าสู่ระบบ: จำกัดความถี่และล็อกได้ผลกว่าการเปลี่ยนพาธ
ตรงนี้ต้องแก้ความเข้าใจผิดที่แพร่หลาย หลายบทเรียนสอนให้เปลี่ยน /wp-admin เป็นพาธแปลกๆ แล้วคิดว่าผู้โจมตีจะหาหลังบ้านไม่เจอ ความจริงแล้วผู้โจมตีแบบเจาะจงจะใช้เครื่องมือสแกนหาว่าหน้าเข้าสู่ระบบอยู่ตรงไหน การเปลี่ยนพาธแค่เพิ่มความยุ่งยากนิดหน่อยเท่านั้น กันการเดารหัสไม่ได้
สิ่งที่ได้ผลจริงมีสองอย่าง: ล็อก IP นั้นชั่วคราวเมื่อเข้าสู่ระบบผิดห้าครั้ง (เช่น 15 นาที) ทำให้การเดารหัสอัตโนมัติเดินต่อไม่ได้ และปิดวิธีเผยแพร่ผ่าน XML-RPC ซึ่งเป็นทางเข้าของสคริปต์เดารหัสแบบเป็นชุดจำนวนมาก
ตัวอย่างสถานการณ์ที่สอง: ในบันทึกเห็น IP หนึ่งลองรหัส 800 ชุดในหนึ่งชั่วโมง ชื่อผู้ใช้ล้วนเป็นชื่อที่พบได้ทั่วไป หลังเปิดล็อกเมื่อผิดห้าครั้ง IP นี้ถูกกันตั้งแต่ครั้งที่หก ความพยายามครั้งต่อๆ มาถูกปฏิเสธทันทีทั้งหมด
ยังมีรายละเอียดอีกอย่าง: ทำให้หน้าเข้าสู่ระบบตอบสนองช้าลงเล็กน้อยทุกครั้งที่ล้มเหลว ต้นทุนการลองรหัสเป็นชุดของสคริปต์ก็จะสูงขึ้น เมื่อเว็บใหญ่ขึ้น ค่อยวาง cloud WAF อีกชั้นหน้าชั้นเข้าสู่ระบบ การเดารหัสแบบกระจายจะถูกสกัดก่อนถึง WordPress
| การป้องกัน | หน้าที่ | ข้อจำกัด |
|---|---|---|
| ล็อก IP เมื่อผิดห้าครั้ง | หยุดการเดารหัสอัตโนมัติ | การโจมตีแบบกระจายต้องใช้ WAF บนคลาวด์ช่วย |
| ปิด XML-RPC | ปิดช่องสคริปต์ยิงรหัส | ถ้าใช้ App โพสต์ต้องเปิดไว้ |
| ซ่อนเลขเวอร์ชัน WP | ไม่ให้เห็นช่องโหว่เวอร์ชันเก่า | แค่ลดการเปิดเผยข้อมูล |
| เปลี่ยน path หลังบ้าน | เพิ่มต้นทุนการสแกนนิดหน่อย | กันการโจมตีแบบเจาะจงไม่ได้ |
| ปิดการแก้ไฟล์ในหลังบ้าน | กันคนที่ล็อกอินได้ไปแก้ธีม | ต้องแก้โค้ดผ่าน SFTP |
ห้า ระบบประกอบ: แบ็กอัป มอนิเตอร์ และลดช่องโจมตีให้เหลือน้อยที่สุด
ต่อให้ทำความปลอดภัยดีแค่ไหน ก็ต้องสมมติว่าวันหนึ่งจะถูกเจาะ ดังนั้นแบ็กอัปคือประกันชั้นสุดท้าย แยกสำรองฐานข้อมูลกับไฟล์ เก็บคนละที่ และซ้อมกู้คืนไตรมาสละครั้ง เพราะแบ็กอัปที่กู้คืนไม่ได้ก็เท่ากับไม่มี ดูวิธีได้ที่กลยุทธ์แบ็กอัปเว็บไซต์。
ช่องโจมตีต้องลดลงเรื่อยๆ ลบปลั๊กอินและธีมที่ไม่ใช้ เพราะปลั๊กอินที่วางทิ้งไว้แต่ละตัวคือช่องโหว่ที่รอวันระเบิด ส่วนมอนิเตอร์หลังบ้านต้องแจ้งเตือนการล็อกอินผิดปกติ เช่น ผู้ดูแลระบบล็อกอินจากพื้นที่ที่ไม่คุ้นเคยหรือนอกเวลางาน ดูเกณฑ์การตั้งค่ามอนิเตอร์ได้ที่ระบบมอนิเตอร์เว็บไซต์。
ยังมีเส้นตายอีกข้อ พอพบว่ารหัสผ่านใดเคยรั่วจากที่อื่น ต้องเปลี่ยนรหัสผ่านทุกบัญชีทั้งเว็บ เพราะการโจมตีแบบ credential stuffing จะเอารหัสชุดนั้นมาลองล็อกอินหลังบ้าน และการป้องกันทั้งหมดที่ว่ามาจะล้มเหลวทันทีเมื่อรหัสผ่านถูก
| การดำเนินการ | ความถี่ | เกณฑ์ผ่าน |
|---|---|---|
| สำรวจบัญชีผู้ดูแลระบบ | ทุกเดือน | administrator ไม่เกิน 2 บัญชี |
| ตรวจปลั๊กอินและธีมที่ไม่ได้ใช้ | ทุกไตรมาส | ปิดใช้แล้วลบทิ้ง |
| ซ้อมกู้คืนจากแบ็กอัป | ไตรมาสละ 1 ครั้ง | กู้คืนได้ภายใน 2 ชั่วโมง |
| แจ้งเตือนการล็อกอินผิดปกติ | เรียลไทม์ | ล็อกอินต่างถิ่นแจ้งทันที |
| เปลี่ยนรหัสผ่านหมุนเวียน | ทันทีที่รั่ว | ทุกคนเปลี่ยนรหัสและเปิด 2FA |
FAQ คำถามที่พบบ่อย
ติดปลั๊กอินความปลอดภัยตัวเดียวใน WordPress พอแล้วหรือ?
เปลี่ยน /wp-admin เป็น path อื่นกันแฮกเกอร์ได้ไหม?
ยืนยันตัวตนสองปัจจัยด้วยรหัส SMS ได้ไหม?
บัญชี WordPress ของพนักงานที่ลาออกควรจัดการยังไง?
ควรเหลือบัญชี Administrator กี่บัญชีจึงจะเหมาะสม?
ตอนถูก brute force หน้าตาใน log เป็นอย่างไร?
ทิ้งท้าย
ความปลอดภัยของ WordPress เป็นเรื่องที่สวนสัญชาตญาณ: คุณคิดว่าต้องพึ่งปลั๊กอินซับซ้อนและกฎขั้นสูง แต่สิ่งที่กำหนดชะตาของเว็บจริง ๆ คือได้ลบบัญชี Administrator ที่เกินมาหรือยัง และได้เพิ่มกุญแจดอกที่สองให้ทุกบัญชีหรือยัง สองเรื่องนี้ไม่เสียเงิน แต่สกัดการบุกรุกส่วนใหญ่ได้
ลงมือสามขั้นตอน: วันนี้ตรวจรายชื่อผู้ใช้และลด administrator ให้เหลือไม่เกิน 2 บัญชี บังคับเปิด TOTP สองปัจจัยให้ Administrator ทุกบัญชี ล็อกเมื่อเข้าสู่ระบบล้มเหลว 5 ครั้ง และปิด XML-RPC จากนั้นตรวจบัญชีเดือนละครั้ง และซ้อมกู้คืนไตรมาสละครั้ง
ประโยคที่จำง่าย: ความปลอดภัยไม่ใช่การทำกุญแจให้หรูหราแค่ไหน แต่คือการเก็บกุญแจคืนจากคนที่ไม่ควรมีตั้งแต่แรก
