อะไรคือข้อดี / ข้อเสียของวิธีการต่าง ๆ เพื่อป้องกันการโจมตีแบบ SSH กำลังดุร้าย?


20

มีแพ็กเกจที่แตกต่างกันจำนวนมากเพื่อปิด IP ที่การโจมตี SSH แบบดุร้ายกำลังเปิดตัวในระบบของคุณ ตัวอย่างเช่น:

อะไรคือข้อดี / ข้อเสียของสิ่งเหล่านี้หรืออื่น ๆ

โซลูชันปัจจุบันของฉันคือการนำอีเมลที่logwatchสร้างขึ้นทุกวันและทิ้งที่อยู่ IP ที่น่าเกรงขามลงในไฟล์ข้อความที่ฉันป้อนลงในสคริปต์ที่สร้าง iptables ขึ้นมาใหม่ มันแฮ็คใช้เวลานานและเป็นคู่มือและฉันต้องการวิธีที่ดีกว่า

(โปรดทราบว่าฉันไม่ได้ถามว่าวิธีไหน "ดีที่สุด" ในการแก้ปัญหาเพราะไม่มีวิธี "ดีที่สุด" ในการทำอะไร)

คำตอบ:


15

ฉันใช้ DenyHosts ดังนั้นอย่างน้อยฉันจึงสามารถตอบได้ว่า:

ข้อดี

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

จุดด้อย

ฉันไม่มีข้อเสียใด ๆ ที่แก้ไขไม่ได้ตราบใดที่คุณใช้อย่างถูกต้อง:

  • ในการกำหนดค่าเริ่มต้นมันจะไม่เตือนคุณถึงโฮสต์ที่ขึ้นบัญชีดำใหม่ดังนั้นหากใครบางคนกำลังโจมตีเครือข่ายของคุณจากที่อยู่หลายร้อยที่แตกต่างกันคุณอาจไม่สังเกตเห็นได้ทันทีเหมือนที่คุณทำหากคุณกำลังตรวจสอบบันทึกของคุณด้วยตนเอง ส่วนข้อดี) สามารถส่งอีเมลถึงคุณหรือเรียกใช้ไฟล์ปฏิบัติการเพื่อแจ้งเตือนคุณเมื่อมีการเพิ่มโฮสต์ใหม่
  • โดยค่าเริ่มต้นมันจะขึ้นบัญชีดำครอบครัวของคุณเช่นเดียวกับคนอื่น ๆ /etc/hosts.allowดังนั้นคุณอาจต้องการที่จะเพิ่มให้ ฉันล็อคตัวเองเพียงครั้งเดียวที่ล้มเหลวในการพิมพ์รหัสผ่านของฉันและเมื่อมีคนจากที่ทำงานพยายามลงชื่อเข้าใช้บัญชี root ของฉันเป็นเรื่องตลกและขึ้นบัญชีดำที่ทำงาน IP ของฉันและใช้เวลาสองสามวันเพื่อหาสาเหตุว่าทำไมฉันจึงไม่สามารถเชื่อมต่อได้ ไปยังเครือข่ายของฉันจากการทำงานอีกต่อไป

19

อีกอันหนึ่งคือfail2banซึ่งขึ้นอยู่กับ iptables (ดังนั้นจึงสามารถทำงานกับบริการใด ๆ ได้ไม่ใช่แค่ ssh) ด้วย fail2ban คุณสามารถ:

  • ระบุพา ธ ไปยังไฟล์บันทึกใด ๆ (apache, ssh, nginx, เมลเซิร์ฟเวอร์, ... )
  • ระบุ regex สำหรับรูปแบบการโจมตี (เช่นมากกว่า 10 "ข้อผิดพลาด 404" โดย ip เดียวกันบนบันทึกการเข้าถึง nginx ใน 6 วินาที)
  • ระบุ regex เพื่อข้ามรูปแบบบางอย่าง (มีประโยชน์มาก!)
  • ระบุเวลาห้าม
  • ส่งอีเมล (หรือการแจ้งเตือนอื่น ๆ ... )
  • ปรับแต่งได้อย่างเต็มที่ (คุณสามารถเขียนคำเตือนและตัวกรองของคุณเอง)

"ข้อเสีย" อย่างหนึ่งของ DenyHosts คือต้องใช้ tcp wrappers ดังนั้นมันจะทำงานกับบริการที่ดูที่ไฟล์ /etc/hosts.deny เท่านั้น แต่เพื่อความเป็นธรรมกับ DenyHosts, sshd ถูกรวบรวมเพื่อใช้ TCP Wrappers ในการกระจาย Linux ส่วนใหญ่ ฉันยังพบว่า DenyHosts นั้นง่ายต่อการกำหนดค่าออกจากกล่องมากกว่า fail2ban (แต่มีประสิทธิภาพน้อยกว่า)

อ้างอิงถึงคำถาม SF ที่คล้ายกัน


fail2ban ขอบคุณยังทำงานร่วมกับ pf - ไม่ใช่แค่ iptables
บุคคลที่ดี

10

การป้องกันที่ง่ายและในทางปฏิบัติที่มีประสิทธิภาพต่อการโจมตีจากการสแกนไม่ได้ใช้พอร์ตมาตรฐาน 443 (พอร์ต https) ทำให้คุณได้รับการโจมตีแบบเดรัจฉานแบบบังคับซึ่งจะไม่ถอดรหัสผ่านรหัสผ่านที่อ่อนแอของคุณและอาจทำงานผ่านไฟร์วอลล์มากกว่าพอร์ตเริ่มต้น (22)

วิธีการส่วนใหญ่ในการป้องกันการโจมตีแบบ SSH เป็นวิธีที่ยอดเยี่ยมในการทำ DoS ด้วยตนเอง (อุ๊ปส์ฉันทำให้การกำหนดค่าแย่ลง! โอ๊ะฉันทำ rsync แบบรวดเร็วและตอนนี้ถูกแบนสำหรับวันนี้!) หรือช่วยตัวเองด้วย DoS (โอ๊ะ ผู้โจมตีมาจาก / เปลี่ยนเครื่องในเครือข่ายย่อยเดียวกันกับฉัน (ช่วง IP แบบไดนามิกเครือข่ายวิทยาลัย ... ) และฉันถูกแบนเช่นกัน!)

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

การมี ssh daemon ที่ฟังเฉพาะการเชื่อมต่อ IPv6 ควรป้องกันคุณจากการสแกนเป็นเวลาสองสามปี แต่ไฟร์วอลล์จำนวนมากจะไม่ยอมให้คุณส่ง IPv6 ด้วยวิธีการที่สมเหตุสมผล

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

หากคุณมีรหัสผ่านที่ดีหรือคุณสามารถอยู่ได้โดยไม่ต้องมีการตรวจสอบรหัสผ่านให้ปิดการใช้งานการตรวจสอบรหัสผ่าน (คีย์และรหัสผ่านครั้งเดียวนั้นเพียงพอสำหรับกรณีส่วนใหญ่ที่ใช้งาน: หากคุณไม่เชื่อถือเครื่องไคลเอนต์เพียงพอที่จะจัดเก็บคีย์ ssh คุณไม่เชื่อใจว่าจะไม่มี keylogger เช่นกัน) จากนั้นเดรัจฉานโจมตีแรงคุณจะใช้บิตของ CPU และแบนด์วิดธ์ แต่ไม่เปิดเผยให้คุณการบุกรุก (ตราบเท่าที่คุณได้ตรวจสอบไม่มีคีย์ของคุณมาจากDebian ต่ำเอนโทรปี OpenSSL )

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


1
ฉันยอมรับว่าจะต้องมีการฝึกฝนที่จะไม่ห้ามตัวเอง ;-) การเปลี่ยนพอร์ตเริ่มต้นและไม่ต้องพึ่งพารหัสผ่าน แต่ใช้รหัสป้องกันด้วยรหัสผ่านก็เป็นคำแนะนำที่ดีเช่นกัน แต่ฉันไม่รู้จริงๆว่าทำไมฉันจึงควรให้เครือข่ายบอทเติมไฟล์บันทึกการเข้าถึงขณะที่ ssh และเว็บเซิร์ฟเวอร์ต้องปฏิเสธคำขอนับพันต่อชั่วโมง ด้วย fail2ban ล็อกการเข้าถึงของฉันสะอาดและแอปพลิเคชันเซิร์ฟเวอร์ของฉันไม่เห็นทราฟฟิกนี้เลย (ยกเว้น X คำขอแรกที่ไม่ดี :-))
บาร์เธเลมี

การใช้พอร์ตที่ไม่ได้มาตรฐานนั้นไม่ได้เพิ่มการป้องกันมากนัก การสแกนหา SSH บนพอร์ตที่ไม่ได้มาตรฐานใช้เวลาเพียงไม่กี่นาทีจากนั้นทำการสแกนหา SSH ที่พอร์ต 22 (สมมติว่าแครกเกอร์ทำการสแกนและการสแกนไม่ได้ถูกบล็อกโดย IDS แต่ถ้าคุณมี IDS แล้วพอร์ต obfuscation อาจไม่จำเป็น ) ถ้าฉันเป็นคนแคร็กเกอร์และฉันพบ SSH บนพอร์ตที่ไม่ได้มาตรฐานฉันจะสนใจมากกว่านี้เพราะฉันรู้ว่าผู้ดูแลระบบคิดว่าบริการนี้มีค่าพอที่จะซ่อนตัวและพึ่งพาความปลอดภัยด้วยความสับสน
Stefan Lasiewski

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

1
@tefan ฉันเห็นว่าพอร์ตที่ไม่ได้มาตรฐานเป็นวิธีที่มีประสิทธิภาพในการสร้างความรำคาญ (การสแกนแบบ brute-force) และไม่ใช่มาตรการรักษาความปลอดภัย (เช่นป้องกันไม่ให้ใครบางคนควบคุมเซิร์ฟเวอร์ของฉัน)
บาร์เธเลมี

1
@sudowned การระบุพอร์ตอื่นนั้นแทบจะไม่น่ารำคาญเลย .ssh/configมันเป็นเพียงหนึ่งเส้น การปิดเป็นปัญหาหากไฟร์วอลล์ไม่ยอมให้คุณผ่านและทางออกที่ง่ายที่สุดคือติดกับพอร์ต 22 และฟังบน 443 ฉันยอมรับว่าการสลับพอร์ตไม่ได้ปรับปรุงความปลอดภัยอย่างแท้จริงบางทีฉันควรทำให้ชัดเจนขึ้น . ฉันไม่รู้ว่าทำไมคุณถึงคิดว่าเป็นไปไม่ได้สำหรับ SSH daemon ที่จะไม่สนับสนุนการตรวจสอบรหัสผ่าน: มันเป็นเพียงเรื่องของการเพิ่มบรรทัดให้sshd_configกับ OpenSSH ซึ่งเป็นการนำไปใช้ที่พบบ่อยที่สุด
Gilles 'หยุดชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.