Tại sao đăng nhập root qua SSH lại tệ đến mức mọi người khuyên nên vô hiệu hóa nó?


83

Mọi người trên Internet đều khuyên nên vô hiệu hóa đăng nhập root thông qua SSH vì đây là một hành vi xấu và lỗ hổng bảo mật trong hệ thống, nhưng không ai giải thích được tại sao nó lại như vậy.

Điều gì là nguy hiểm trong việc kích hoạt đăng nhập root (đặc biệt là với đăng nhập mật khẩu bị vô hiệu hóa)?

Và sự khác biệt giữa tên người dùng biểu tượng X và mật khẩu biểu tượng Y hoặc tên người dùng gốc và mật khẩu biểu tượng X + Y từ quan điểm bảo mật trong trường hợp xác thực mật khẩu được cho phép?


2
Có một người dùng root trong hầu hết các hệ thống là xấu, hãy để một mình kích hoạt đăng nhập SSH cho người dùng đã nói!
Suman

1
Root đăng nhập qua ssh là cần thiết cho ehealth-aussie.blogspot.com/2012/01/ . Mọi thứ đều là sự thỏa hiệp.
emory

2
Umm ... chúng ta có nên chuyển câu hỏi này sang bảo mật không? Vì chủ đề nghiêng về bảo mật hơn nên các hệ thống * nix.
Braiam

1
Có một lý do hành chính để vô hiệu hóa root. Trên các máy chủ thương mại, bạn luôn muốn kiểm soát truy cập theo người. gốc không bao giờ là một người. Thậm chí nếu bạn cho phép một số người dùng có quyền truy cập root, bạn nên buộc họ phải đăng nhập thông qua sử dụng riêng của họ và sau đó su -hoặc sudo -iđể đăng nhập thực tế của họ có thể được ghi lại. Điều này làm cho việc thu hồi tất cả quyền truy cập vào một cá nhân đơn giản hơn nhiều để ngay cả khi họ có mật khẩu gốc, họ cũng không thể làm gì với nó.
Philip Couling

Câu trả lời:


62

Tại sao root qua SSH là xấu

Có rất nhiều bot ngoài đó cố gắng đăng nhập vào máy tính của bạn qua SSH. Những bot này hoạt động theo cách sau.

Họ thực thi một cái gì đó như ssh root@$IPvà sau đó họ thử mật khẩu tiêu chuẩn như "root" hoặc "password123". Họ làm điều này miễn là họ có thể, cho đến khi họ tìm thấy mật khẩu đúng. Trên một máy chủ có thể truy cập trên toàn thế giới, bạn có thể thấy rất nhiều mục nhật ký trong tệp nhật ký của mình. Tôi có thể đi tới 20 mỗi phút hoặc nhiều hơn.

Khi những kẻ tấn công gặp may mắn (hoặc đủ thời gian) và tìm thấy mật khẩu, chúng sẽ có quyền truy cập root và điều đó có nghĩa là bạn đang gặp rắc rối.

Nhưng khi bạn không cho phép root để đăng nhập qua SSH, trước tiên bot cần đoán tên người dùng và sau đó là mật khẩu phù hợp. Vì vậy, giả sử danh sách các mật khẩu hợp lý có Ncác mục nhập và danh sách người dùng hợp lý là Mcác mục lớn. Bot có một tập hợp các N*Mmục để kiểm tra, vì vậy điều này làm cho bot khó hơn một chút so với trường hợp gốc mà nó chỉ là một tập hợp kích thước N.

Một số người sẽ nói rằng bổ sung Mnày không phải là một lợi ích thực sự trong bảo mật và tôi đồng ý rằng nó chỉ là một cải tiến bảo mật nhỏ. Nhưng tôi nghĩ về điều này nhiều hơn vì những khóa móc nhỏ này không an toàn, nhưng chúng cản trở rất nhiều người tiếp cận dễ dàng. Điều này tất nhiên chỉ hợp lệ nếu máy của bạn không có tên người dùng chuẩn khác, như tor hoặc apache.

Lý do tốt hơn để không cho phép root là root có thể gây ra nhiều thiệt hại cho máy hơn so với người dùng tiêu chuẩn có thể làm. Vì vậy, nếu may mắn, họ tìm thấy mật khẩu của bạn, toàn bộ hệ thống bị mất trong khi với tài khoản người dùng chuẩn, bạn chỉ có thể thao tác các tệp của người dùng đó (vẫn còn rất tệ).

Trong các bình luận có đề cập rằng một người dùng bình thường có thể có quyền sử dụng sudovà nếu mật khẩu của người dùng này được đoán thì hệ thống cũng bị mất hoàn toàn.

Tóm lại tôi sẽ nói rằng việc kẻ tấn công lấy mật khẩu của người dùng không thành vấn đề. Khi họ đoán một mật khẩu, bạn không thể tin tưởng vào hệ thống nữa. Kẻ tấn công có thể sử dụng quyền của người dùng đó để thực thi các lệnh sudo, kẻ tấn công cũng có thể khai thác điểm yếu trong hệ thống của bạn và giành quyền root. Nếu kẻ tấn công có quyền truy cập vào hệ thống của bạn, bạn không thể tin tưởng được nữa.

Điều cần nhớ ở đây là mọi người dùng trong hệ thống của bạn được phép đăng nhập thông qua SSH là một điểm yếu bổ sung. Bằng cách vô hiệu hóa root, bạn loại bỏ một điểm yếu rõ ràng.

Tại sao mật khẩu trên SSH là xấu

Lý do để vô hiệu hóa mật khẩu thực sự đơn giản.

  • Người dùng chọn mật khẩu xấu!

Toàn bộ ý tưởng thử mật khẩu chỉ hoạt động khi mật khẩu có thể đoán được. Vì vậy, khi người dùng có mật khẩu "pw123", hệ thống của bạn sẽ không an toàn. Một vấn đề khác với mật khẩu được mọi người lựa chọn là mật khẩu của họ không bao giờ thực sự ngẫu nhiên bởi vì điều đó sẽ khó nhớ.

Ngoài ra, đó là trường hợp người dùng có xu hướng sử dụng lại mật khẩu của họ, sử dụng nó để đăng nhập vào Facebook hoặc tài khoản Gmail của họ và cho máy chủ của bạn. Vì vậy, khi tin tặc lấy được mật khẩu tài khoản Facebook của người dùng này, anh ta có thể xâm nhập vào máy chủ của bạn. Người dùng có thể dễ dàng mất nó thông qua lừa đảo hoặc máy chủ Facebook có thể bị hack.

Nhưng khi bạn sử dụng chứng chỉ để đăng nhập, người dùng sẽ không chọn mật khẩu của mình. Chứng chỉ dựa trên một chuỗi ngẫu nhiên rất dài từ 1024 Bits đến 4096 Bits (~ 128 - 512 ký tự mật khẩu). Ngoài ra, chứng chỉ này chỉ có ở đó để đăng nhập vào máy chủ của bạn và không được sử dụng với bất kỳ dịch vụ bên ngoài nào.

Liên kết

http://bsdly.blogspot.de/2013/10/the-hail-mary-cloud-and-lessons-learned.html

Bài viết này xuất phát từ các bình luận và tôi muốn cho nó một vị trí nổi bật hơn một chút, vì nó đi sâu hơn một chút về vấn đề các botnet cố gắng đăng nhập thông qua SSH, cách chúng thực hiện, cách các tệp nhật ký trông như thế nào và những gì người ta có thể làm để ngăn chặn chúng. Nó được viết bởi Peter Hansteen.


10
Tóm tắt tốt. Nhưng khóa riêng ssh cũng có thể bị đánh cắp.
Faheem Mitha

16
@Faheem Mitha Vâng, nhưng bị đánh cắp khác với đoán, điều mà các bot làm. Ngoài ra, khóa riêng của bạn chỉ nằm trên tay bạn (hoặc ổ cứng) chứ không nằm trong tay của các bên thứ ba như Stack Exchange hoặc Google.
Raphael AhDR

2
+1. Câu trả lời này thực sự có thể sôi lên đơn giản N*M > N. Vì hầu hết các máy chủ * nix đều có rootngười dùng, nếu bạn cho phép root đăng nhập trực tiếp từ máy chủ từ xa, kích thước của ma trận kiểm tra là số lượng mật khẩu để thử; không cho phép đăng nhập gốc trực tiếp, số lượng kết hợp có thể nhân với số lượng tên người dùng bạn muốn kiểm tra (và vẫn không có gì đảm bảo rằng bạn sẽ kiểm tra tên người dùng hợp lệ!).
một CVn

3
@ MichaelKjorling Tôi sẽ nói thêm rằng không khó để có được tên người dùng, vì thông thường tên người dùng không có gì bí mật và tôi có thể có thể yêu cầu bất cứ ai có được. Nhưng nó giúp chống lại Bots và cố gắng đơn giản.
Raphael AhDR

2
@Everyone, nếu tên người dùng có ký hiệu X và mật khẩu Y, có # of X length words* # of Y length wordscác kết hợp có thể thử. Khi tên người dùng được cố định (ví dụ: root) nhưng mật khẩu dài bằng các ký hiệu X + Y, có # of X+Y length wordsthể có mật khẩu. Và # of X+Y length words=# of X length words * # of Y length words
skarap

10

Đây có thể là một số lý do tại sao không nên cho phép đăng nhập root trực tiếp.

  • Nỗ lực Bruteforce. Đăng nhập root trực tiếp có thể dẫn đến thiệt hại nhiều hơn trong một cuộc tấn công tàn bạo thành công.
  • Lỗi cấu hình trên các khóa SSH "không mật khẩu" (xảy ra lỗi con người) có thể khiến máy của bạn tiếp cận với internet

Nhưng đây chỉ là TIP của tảng băng trôi. Bạn cần định cấu hình các hạn chế và cấu hình khác như:

  • Thay đổi cổng mặc định (22)
  • Mật khẩu và mật khẩu mạnh
  • Vô hiệu hóa xác thực dựa trên máy chủ
  • Tạo một danh sách người dùng được phép
  • Cấu hình Hết giờ nhàn rỗi
  • Buộc giao thức SSHv2
  • Vô hiệu hóa mật khẩu trống
  • Sử dụng fail2ban như một biện pháp chống lại bruteforce
  • Đăng nhập mọi thứ
  • Định cấu hình Khóa SSH và chỉ tin tưởng vào các khóa công khai tại .ssh / ủy quyền

5
"Đăng nhập gốc trực tiếp có thể dẫn đến thiệt hại nhiều hơn trong một cuộc tấn công tàn bạo thành công." Không thực sự, nếu so với một sudothiết lập mặc định . Kẻ giết người thực sự là hiệu ứng nhân khi bạn không có bất kỳ tên người dùng nào mà bạn có thể tin tưởng là hợp lệ trên bất kỳ máy chủ nào.
một CVn

@ MichaelKjorling - Vâng, chắc chắn rằng sudo lộn xộn có thể gây hại như PermitRoot;)


1
Thay đổi cổng thực sự gây bất lợi trong nhiều kịch bản. Và không gì khác hơn là bảo mật bằng cách che khuất.
0xC0000022L

+1 khi đề cập đến fail2ban, vì các cuộc tấn công vũ phu không chỉ là mối quan tâm đối với SSH, mà còn đối với mọi thứ khác trên máy. Bạn không cần phải lấy quyền root hoặc hệ thống ở bất cứ đâu để "tiếp quản" máy cho các mục đích thực tế (truy cập dữ liệu riêng tư, sử dụng như một bãi chứa tệp, sử dụng để lừa đảo, v.v.).
Eric Grange

8

Bạn đúng rằng tên người dùng gốc và mật khẩu biểu tượng X + Y ít nhất được bảo mật bằng mật khẩu như tên người dùng ký hiệu X + mật khẩu ký hiệu Y. Trên thực tế, nó thậm chí còn an toàn hơn, vì tên của mọi người rất dễ đoán (bot có thể chỉ thử john, mike, bill, v.v ... và btw: đó là những gì nhiều người trong số họ làm thay vì thử root). Và bạn đặc biệt không gặp may nếu đó là một cuộc tấn công có chủ đích, vì nếu ai đó muốn phá vỡ máy chủ của công ty, việc tìm ra tên (nick) của sysadmin sẽ không thành vấn đề.

Và ngay khi kẻ tấn công có quyền truy cập vào tài khoản, sysadmin sử dụng để đăng nhập ssh (và sau đó sử dụng suhoặc sudothực hiện nhiệm vụ của mình), anh ta có thể lây nhiễm phiên của người dùng đó bằng một chương trình sẽ gửi mật khẩu gốc của kẻ tấn công khi sysadmin gõ tiếp theo thời gian.

Đó là bất kỳ loại thông tin đăng nhập gốc nào (hoặc nên được) coi là các hành vi xấu theo quan điểm bảo mật. Đăng nhập người dùng "bình thường" -> chuỗi su / sudo thêm một dấu vết kiểm toán. Nói một cách dễ hiểu: nó giúp bạn có thể tìm ra ai đã làm gì.

Một trường hợp đặc biệt có thể là một, trong đó chỉ có một người có quyền truy cập root. Trong trường hợp đó, sử dụng người dùng "bình thường" bổ sung sẽ không thêm nhiều giá trị (ít nhất là tôi không bao giờ có thể thấy giá trị đó). Nhưng dù sao đi nữa - dù sao bạn cũng phải có một người dùng đơn giản trên hệ thống (đối với các tác vụ phi quản trị, chạy wget, v.v ;-)).


4

Điều gì là nguy hiểm trong việc kích hoạt đăng nhập root (đặc biệt là với đăng nhập mật khẩu bị vô hiệu hóa)?

Kẻ tấn công (bot / botnet / hacker) chỉ cần đoán mật khẩu và có toàn quyền kiểm soát hệ thống của bạn, nếu bạn mở mạng internet. Ngoài ra, không tài khoản hệ thống nào (dữ liệu www, proxy, v.v.) có thể đăng nhập qua SSH, vì những lý do tương tự.

Nếu bạn đã tắt đăng nhập mật khẩu (ví dụ: sử dụng khóa chung), hãy tính đến việc bất kỳ ai được giữ khóa riêng đều có quyền kiểm soát hoàn toàn hệ thống của bạn. Xem lý do tại sao sử dụng khóa chung với người dùng tốt hơn bên dưới.

Và sự khác biệt giữa tên người dùng biểu tượng X và mật khẩu biểu tượng Y hoặc tên người dùng gốc và mật khẩu biểu tượng X + Y từ quan điểm bảo mật trong trường hợp xác thực mật khẩu được cho phép?

Tên người dùng bổ sung có thể thêm một lớp bảo mật vì: a) kẻ tấn công nên biết cả cặp, tên người dùng và mật khẩu; b) trong trường hợp kẻ tấn công vi phạm hệ thống của bạn, nó sẽ không có quyền truy cập ngay vào tài khoản đặc quyền thêm một chút sắc thái cho kẻ tấn công.

Trong trường hợp này, khóa công khai cũng là một điểm cộng, vì:

  1. Kẻ tấn công cần khóa công khai của bạn
  2. Kẻ tấn công cần mật khẩu (hoặc phương thức xác thực) để có được các đặc quyền nâng cao

1
Rất ít mật khẩu tôi sử dụng có ít hơn khoảng 20 ký tự chữ và số ngẫu nhiên (đặt [A-Za-z0-9] cộng với một vài ký tự đặc biệt). 20 ký tự như vậy (có độ dài 20 trên tổng số 40 ký tự) cung cấp cho bạn theo thứ tự 10 ^ 32 kết hợp. 128 bit của entropy theo thứ tự 10 ^ 38. Không phải là một sự khác biệt quá lớn, tất cả mọi thứ được xem xét và máy chủ SSH có thể tự do thực hiện bất kỳ loại tỷ lệ nào giới hạn nó thích, do đó, không giống như bạn đang thực hiện một cuộc tấn công vũ phu ngoại tuyến trong trường hợp đó. Không có gì sai với mật khẩu, nếu bạn có thể sống với chúng thì khó nhớ như khóa 128 bit.
một CVn

@michael shh ... đừng đưa ra phạm vi, bây giờ tin tặc biết rằng họ nên sử dụng các bảng cầu vồng theo thứ tự 20 ký tự chiều dài ...?
Braiam

6
Bảng @Braiam Rainbow chỉ hữu ích nếu kẻ tấn công có quyền truy cập vào bảng băm để thực hiện tìm kiếm ngoại tuyến. Trong trường hợp ở đây, kẻ tấn công chỉ có phản hồi của máy chủ để xác minh, điều này có thể chỉ giới hạn ở rất nhiều lần thử - và chậm hơn rất nhiều.
Peter

@Peter up, tôi đã làm rối cả từ điển và băm, nhưng trong mọi trường hợp, OP hỏi tại sao anh ta không nên sử dụng mật khẩu yếu hay trống, phù thủy thật lố bịch, do đó tôi đã gặp phải những tình huống vô lý tại sao anh ta không nên. Xin lỗi vì tôi đã không được giải thích theo cách đó và đã được coi là FUD.
Braiam

2
Nếu bạn cảm thấy muốn thử một số mật khẩu 1,8 * 10 ^ 35 (và đó chỉ dành cho phạm vi 18-22 ký tự ngẫu nhiên trong số 40 và bạn không biết ký tự nào bên ngoài bộ [A-Za-z0- 9] Tôi sử dụng), tôi gần như nói vui vẻ. Đó là khoảng 117,1 bit tương đương entropy (2 ^ 117,1 ~ 1,78 * 10 ^ 35) và như @Peter đã chỉ ra, rất có thể bạn cần thực hiện một cuộc tấn công trực tuyến . Lưu trữ tất cả các mật khẩu đó (không dùng đến nén) xuất hiện vì cần khoảng 3,6 * 10 ^ 36 byte hoặc 3 * 10 ^ 24 TiB (và nếu con số đó bị sai bởi một vài bậc độ lớn, ai quan tâm? ). Từ khóa ngẫu nhiên .
một CVn

1

Nó không thực sự xấu miễn là bạn có biện pháp phòng ngừa an toàn. Ví dụ: bạn có thể cài đặt CSF (Cấu hình tường lửa máy chủ) và đặt cho nó số lần thử thất bại được phép, vì vậy nếu ai đó đã thử, hãy nói trên 5 lần thử thất bại?, Sau đó chúng sẽ tự động bị chặn. Vì vậy, toàn bộ phần đầu tiên của câu trả lời hay nhất sẽ không còn là vấn đề nữa. Điều này đã xảy ra với tôi nhiều lần và may mắn là tất cả những người giới thiệu đã bị chặn vĩnh viễn. Tôi đoán đối với máy chủ thì đó không phải là vấn đề lớn nếu bạn là người duy nhất quản lý máy chủ, nhưng tất nhiên nếu có nhiều quản trị viên hệ thống hoặc nếu bạn đang làm việc trong một tổ chức thì rõ ràng không sử dụng nguồn gốc. Ngoài ra đối với máy tính để bàn, tôi đoán sử dụng tài khoản khác sẽ tốt hơn vì có rủi ro bảo mật vì bạn sử dụng nhiều phần mềm, nhưng trong máy chủ, bạn không ' Không dùng phần mềm ngẫu nhiên mà bạn không tin tưởng, bạn đảm bảo giữ cho chúng càng thấp càng tốt. Vì vậy, kết luận là, Không, nó không thực sự có hại nếu bạn biết cách quản lý máy chủ đúng cách.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.