การบล็อกที่อยู่และการล็อกบัญชีเป็นสองกลไกที่ต่างกัน และล้มเหลวในทิศทางตรงกันข้าม การห้ามที่อยู่หยุดต้นทางเดียวและบัญชีเป้าหมายยังเข้าถึงได้จากที่อื่น การล็อกบัญชีหยุดตัวตนนั้นทุกที่ รวมถึงบนแล็ปท็อปของผู้ใช้เอง

สำหรับ VPN ที่มอบหมายการพิสูจน์ตัวตนให้ PAM ตัวนับคือสิ่งที่สแตก PAM เข้าถึง ไม่ใช่สิ่งที่ผู้ฟังบันทึก

ตัวนับสองตัว เหยื่อสองแบบ

ตัวจำกัดอัตราดูต้นทางและถามว่ามีความพยายามกี่ครั้งที่มาจากที่นั่นเมื่อเร็ว ๆ นี้ การล็อกดูตัวตนและถามว่าบัญชีสะสมความล้มเหลวกี่ครั้ง อย่างแรกปกป้องความพร้อมใช้งาน อย่างที่สองปกป้องข้อมูลรับรอง ไม่มีอันใดแทนที่กัน

ดังนั้นประโยคที่ว่าเราบล็อก IP หลังจากล้มเหลวห้าครั้งจึงไม่ใช่คำตอบต่อรายงานการเติมข้อมูลรับรอง ผู้โจมตีสลับต้นทาง แต่ละแห่งได้ความพยายามน้อย และบัญชีไม่เคยถูกนับ ตรงกันข้าม การล็อกที่ไม่มีการควบคุมต้นทางทำให้ผู้โจมตีล็อกบัญชีไว้ได้ไม่จำกัดด้วยการล้มเหลวโดยเจตนา

การควบคุมทั้งสองมีเรื่องการกู้คืนที่ต่างกัน การห้ามที่อยู่หมดอายุตามตัวจับเวลาที่ไม่มีใครต้องคิด การล็อกบัญชีอาจต้องใช้ผู้ดูแล ระยะรอที่บันทึกไว้ หรือการรีเซ็ตด้วยตนเอง

ค้นหาที่เก็บที่มีจำนวนอยู่แล้ว

ก่อนเพิ่มสิ่งใด ให้ค้นหาว่ามีที่เก็บความล้มเหลวอยู่แล้วหรือไม่ บัญชี Linux ในเครื่อง บริการไดเรกทอรี และผู้ให้บริการตัวตนภายนอกต่างเก็บจำนวนของตน และโมดูล PAM ที่วางไว้ข้างหน้าจะสร้างอันที่สองแทนที่จะขยายอันแรก

grep -rnE 'faillock|pam_tally|pam_unix' /etc/pam.d/
ls -l /etc/pam.d/ | head -20

อ่านไฟล์บริการที่ VPN ระบุจริงและตามบรรทัดการรวมของมัน ในหลายดิสทริบิวชัน บริการ VPN รวมไฟล์ร่วม ซึ่งหมายความว่าจำนวนที่คุณปรับใช้กับ SSH และการเข้าสู่ระบบในเครื่องด้วย

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

pam_faillock มีตำแหน่งเรียกสามตำแหน่ง ไม่ใช่หนึ่ง

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

นี่คือที่ที่การย้ายจากโมดูลนับรุ่นเก่ามักผิดพลาด การคัดลอกบรรทัดจากตัวอย่าง pam_tally2 ที่ใช้งานได้ไปยังสแตก pam_faillock ไม่ใช่การเปลี่ยนชื่อ การตั้งค่าที่บันทึกไว้แตกต่าง และการเรียกที่วางผิดที่อาจบันทึกความล้มเหลวโดยไม่เคยตรวจสอบ

faillock --user alice
faillock --user alice --reset

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

ชื่อบริการเฉพาะไม่ใช่การแยก

การให้ VPN มีไฟล์บริการ PAM ของตัวเองทำให้เห็นนโยบายที่ตั้งใจ แต่ไม่ได้จำกัดผลกระทบ การรวมไฟล์ร่วมใด ๆ นำสิ่งที่ไฟล์นั้นทำมารวมด้วย รวมถึงจำนวนสำหรับทั้งระบบ

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

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

ยอมรับลำดับ ไม่ใช่การปฏิเสธครั้งเดียว

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

faillock --user test-vpn-01
journalctl -u openvpn-server@lab -n 30 --no-pager | grep -i 'auth\|pam'

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

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

บทความที่เกี่ยวข้อง