ป้องกันการโจมตีด้วยกำลังดุร้ายกับ ssh หรือไม่?


49

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

นี่คือกล่อง FreeBSD แต่ฉันคิดว่ามันจะใช้ได้ทุกที่

คำตอบ:


25

นี่คือโพสต์ที่ดีเกี่ยวกับเรื่องนั้นโดย Rainer Wichmann

มันอธิบายข้อดีข้อเสียของวิธีการเหล่านี้:

  • รหัสผ่านที่แข็งแกร่ง
  • การพิสูจน์ตัวตน RSA
  • ใช้ 'iptables' เพื่อป้องกันการโจมตี
  • การใช้บันทึก sshd เพื่อป้องกันการโจมตี
  • ใช้ tcp_wrappers เพื่อป้องกันการโจมตี
  • พอร์ตเคาะ

39

ฉันใช้fail2banซึ่งจะล็อค IP ออกหลังจากพยายามหลายครั้งไม่สำเร็จตามระยะเวลาที่กำหนด

รวมสิ่งนี้กับการทดสอบความแข็งแรงของรหัสผ่าน (โดยใช้john (John the Ripper)) เพื่อให้มั่นใจว่าการโจมตีด้วยเดรัจฉานจะไม่สำเร็จ


4
Fail2ban ยอดเยี่ยม มันก็ง่ายที่จะขยายการตรวจสอบ / var / log / maillog และได้รับมันจะห้ามการส่งอีเมลขยะถาวรจากการตีเซิร์ฟเวอร์อีเมลของฉัน
เดฟเชนีย์

Fail2ban สามารถใช้ร่วมกับเชน iptables ที่ส่งปริมาณข้อมูล tcp ไปยังTARPITเป้าหมายหากคุณรู้สึกไม่พอใจ (จาก xtables-addons)
Tobu


16
  • เปลี่ยนพอร์ตที่ใช้ (ตามที่กล่าวไว้ในเทรนต์ )
  • ต้องใช้คีย์เข้ารหัสแทนรหัสผ่าน http://novosial.org/openssh/publickey-auth/
  • บัญชีดำโจมตี ips
  • รายการที่อนุญาตให้ผู้ใช้รู้จักเพื่อป้องกันการขึ้นบัญชีดำโดยไม่ตั้งใจ (ตามที่ Samiuela พูดถึง)

15

หนึ่งในวิธีที่ง่ายที่สุดในการหลีกเลี่ยงการโจมตีเหล่านี้คือการเปลี่ยนพอร์ตที่ sshd ฟัง


1
ถ้าแน่นอนคุณสามารถยืนได้
C. Ross

13
ความปลอดภัยผ่านความสับสนมีผลบังคับใช้ทุกครั้ง
Chris Ballance

1
ฉันจะไม่เปลี่ยนใจพอร์ตเท่าไหร่ แต่ฉันได้เรียนรู้ว่าไฟร์วอลล์ส่วนใหญ่ (นอกเหนือจากของฉันเอง) มักจะล็อคพอร์ตทั้งหมดนอกเหนือจากพอร์ตทั่วไป (80,22, 443 ฯลฯ ) หากฉันอยู่หลังไฟร์วอลล์เหล่านั้นฉันไม่สามารถไปยังเซิร์ฟเวอร์ที่บ้านของฉันบนพอร์ตที่ไม่ได้มาตรฐาน สำหรับฉันนั่นคือไม่ไป
เสียใจ

@grieve แล้วเปลี่ยนไฟร์วอลล์ของเราเพื่อให้พอร์ตนั้นหมด
Rory

@ Roy ฉันกำลังพูดถึงไฟร์วอลล์นอกเหนือจากที่ฉันเป็นเจ้าของ ตัวอย่างเช่นถ้าฉันต้องการ ssh เข้าไปในเครื่องที่บ้านของฉันจาก Starbucks ไฟร์วอลล์ของพวกเขาจะบล็อกพอร์ตขาออก ฉันไม่สามารถเปลี่ยนแปลงได้ (ฉันเพิ่งใช้สตาร์บัคส์เป็นตัวอย่างฉันไม่ทราบว่าพอร์ตใดที่พวกเขาบล็อกจริงหรือไม่)
เสียใจ

12

ตามที่ Chris ชี้ให้เห็นให้ใช้คีย์เข้ารหัสแทนรหัสผ่าน

เพิ่มไปที่:

  • ใช้บัญชีขาวที่เป็นไปได้

คุณต้องการผู้คนหรือสถานที่ (ที่มี IP สาธารณะลอยตัว) เข้าถึงการเชื่อมต่อ ssh สาธารณะของคุณจริงๆ?

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

หากวิธีนี้ใช้ได้ผลกับคุณก็สามารถทำให้ค่าใช้จ่ายในการดูแลระบบของคุณง่ายขึ้น


2
การขึ้นบัญชีขาวนั้นมีความสำคัญอย่างมากหากคุณกำลังทำบัญชีดำทุกชนิดเว้นแต่คุณต้องการปลดล็อค
Ryaner

2
+1 สำหรับรายการที่อนุญาตพิเศษ
Chris Ballance

3
+1 สำหรับการมีคำตอบที่ดีที่สุด สองสิ่งนี้เป็นขั้นตอนที่สมเหตุสมผลเท่านั้นและมีประสิทธิภาพอย่างแท้จริง ทั้งคู่เป็นสิ่งที่คุ้มค่าและทั้งคู่ก็รวมกันเป็นอย่างมาก Boo ในคำตอบอื่น ๆ ที่เรียกร้องความปลอดภัยผ่านความสับสน!
dwc

11

นอกเหนือจากคำแนะนำที่ดีอื่น ๆ สิ่งหนึ่งที่ทำได้ง่าย ๆ คือการเชื่อมต่อขาเข้าที่ จำกัด อัตรา จำกัด การเชื่อมต่อ 3 ครั้งต่อนาทีต่อ IP:

iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

ฉันอาจเข้าใจผิดบางอย่าง แต่เบราว์เซอร์กระแสหลักจำนวนมากเชื่อมต่อระหว่างการเชื่อมต่อ 4-6 ครั้ง - แม้ว่ามาตรฐาน HTTP จะกำหนดไว้ที่ 2
Joshua Enfield

1
ใช่นั่นจะเป็นปัญหาหากคุณพยายามที่จะ จำกัด อัตราพอร์ต 80 คุณไม่ได้เชื่อมต่อกับ ssh ด้วยเว็บเบราว์เซอร์ของคุณและเซสชัน ssh เป็นเซสชันที่มีอายุการใช้งานยาวนานซึ่งรักษาสถานะไม่ใช่เซสชันไร้สัญชาติแบบสั้น ๆ เช่น http การขนานเซสชัน ssh แบบนั้นไม่สมเหตุสมผล นั่นไม่ได้หมายความว่าจะไม่มีการใช้งานเฉพาะของ ssh ที่จะทำลาย แต่ก็หายาก
sherbang

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

ดีใจที่ได้รู้จักตัวเลือกนี้เช่นกัน ...
ZEE

6

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

คุณสามารถ จำกัด ผู้ใช้ให้เข้าสู่ระบบจากโฮสต์เฉพาะ

เช่น,

AllowUsers user1 user2@host.example.com

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

สิ่งนี้ไม่ได้หยุดการโจมตีที่ดุร้ายอย่างสิ้นเชิง แต่จะช่วยลดความเสี่ยง


3

ใช้อะไรแบบนั้นกับ PF:

ตาราง <ssh-brute>
บล็อกคงอยู่ในบันทึกอย่างรวดเร็วจากฉลาก ssh_brute
ส่งผ่านใน $ ext_if proto tcp ถึง ($ ext_if) พอร์ต ssh ปรับสถานะ \
(max-src-conn-rate 3/10, โอเวอร์โหลด flush ทั่วโลก)


2

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


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

2

บริบทเป็นสิ่งสำคัญ แต่ฉันขอแนะนำบางอย่างเช่น:

  • เนื่องจากคุณใช้ FreeBSD ให้พิจารณาใช้ไฟร์วอลล์ PF และใช้คุณสมบัติการ จำกัด อัตราการเชื่อมต่อที่แน่นหนา วิธีนี้จะช่วยให้คุณสามารถส่งเดรัจฉานเดรัจฉานไปยังบัญชีดำหากพวกเขาเชื่อมต่อเป็นประจำ
  • หากต้องเข้าถึงกล่องนี้จากโลกภายนอกให้พิจารณาใช้กฎ PF rdr เพื่อไม่อนุญาตการรับส่งข้อมูลไปยังพอร์ต 22 แต่เพื่อเปลี่ยนเส้นทางพอร์ตที่คลุมเครือบางส่วนไป หมายความว่าคุณต้องเชื่อมต่อกับพอร์ต 9122 แทนที่จะเป็น 22 มันคลุมเครือ
  • พิจารณาย้ายไปใช้การพิสูจน์ตัวตนแบบใช้คีย์เท่านั้นทำให้การโจมตีพจนานุกรมไร้ประโยชน์

2

นอกจาก ข้อเสนอแนะที่ จำกัด อัตราของ sherbangแล้วความยาวของการล่าช้าก็สำคัญ ด้วยการเพิ่มการหน่วงเวลาระหว่างกลุ่มของการพยายามเข้าสู่ระบบ 3 ครั้งจาก 2 นาทีถึง 20 นาทีจำนวนที่อยู่ IP ที่แตกต่างกันซึ่งทำให้พยายามลงชื่อเข้าใช้มากกว่าสามครั้งลดลงเปรียบเทียบช่วงเวลาสองสัปดาห์ที่ยาวนานกับเครื่องหนึ่งของฉันจาก 44 ครั้งถึง 3 . ไม่มีที่อยู่เหล่านี้สามรายการที่พยายามนานเกินกว่า 11 ชั่วโมง

เกร็ดเล็กเกร็ดน้อยมาก แต่ auth.log กลายเป็นที่อ่านได้ง่ายขึ้นมากสำหรับฉัน ...


1

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


-1 เคยได้ยินเรื่องการโจมตี DoS หรือไม่?
Chris Ballance

8
ใช่เพราะ SSH เป็นบริการเดียวที่ไวต่อการโจมตีด้วยกำลังดุร้าย หากคุณมีพอร์ตที่เปิดสู่อินเทอร์เน็ตคุณสามารถใช้เครื่องของคุณเป็นเครื่องลืมได้ คุณอาจจะใส่เซิร์ฟเวอร์ HTTP ของคุณในพอร์ตแปลกเกินไปและอยู่เบื้องหลังพอร์ตเคาะเพื่อ "หลีกเลี่ยงการโจมตี DoS" ...
womble

1

ติดตั้ง OSSEC ไม่เพียงแค่ตรวจสอบการลงชื่อเข้าใช้ซ้ำ ๆ เท่านั้น แต่จะเข้าสู่บล็อกชั่วคราวที่มี iptables สำหรับ ip ที่ละเมิด และในตอนท้ายมันจะส่งรายงานระบุรายละเอียดให้คุณ มันบันทึกทุกอย่างซึ่งดี มีคนลองชื่อล็อกอินมากกว่า 8000 ชื่อเพื่อลงชื่อเข้าใช้ด้วย ฉันแยกวิเคราะห์บันทึกและได้รายชื่อผู้ใช้ที่ดีออกไปจากข้อตกลง;)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.