it-swarm-vi.com

Port Knocking có phải là một ý tưởng tốt?

Thông thường đối với một máy chủ tôi muốn khóa SSH và các dịch vụ ngoài công cộng khác để chỉ có thể truy cập bằng một số địa chỉ IP nhất định. Tuy nhiên, điều này không phải lúc nào cũng thực tế nếu doanh nghiệp không có địa chỉ IP tĩnh hoặc nếu các nhà phát triển bên ngoài cần truy cập.

Tôi đã nghe nói về Port Knocking một thời gian trước đây và cuối cùng đã có cơ hội xem xét nó như là một giải pháp cho vấn đề trên. Do đó, tôi có rất nhiều câu hỏi, tôi hy vọng mọi người có thể giúp tôi.

  • Có ai đã triển khai nó trong Doanh nghiệp/Tổ chức của họ và có thể đưa ra bất kỳ lời khuyên nào không?
  • Daemon gõ tốt nhất để chạy trong Linux là gì?
  • Các máy khách tốt nhất cho Linux, Windows và OSX là gì?
  • Độ dài đề xuất cho chuỗi gõ là gì và tốt nhất là sử dụng TCP, UDP hoặc Cả hai?
  • Nhược điểm liên quan và các vấn đề với việc sử dụng nó là gì?
  • Có phải nó chỉ bảo mật thông qua che khuất?
  • Có bất kỳ lựa chọn thay thế cho phương pháp gõ cổng?
41
Mark Davidson

Trong khi tôi chưa triển khai nó, tôi biết nhiều người đã triển khai nó. Mỗi một người trong số họ đã ghi nhận việc giảm đáng kể lượng băng thông được sử dụng bởi những thứ như các cuộc tấn công vũ trang SSH.

Tuy nhiên, điều đó không có nghĩa là không có nhược điểm. AFAIK, không có triển khai gõ cổng dựa trên kernel có sẵn, mà đối với tôi sẽ là chìa khóa thực sự để áp dụng. Cổng gõ daemon dựa vào việc đọc các mục nhập tệp nhật ký thất bại (và được lọc/cấm) từ hệ thống tường lửa. Đó là tất cả tốt và bảnh bao, nhưng điều gì xảy ra nếu hệ thống tập tin đã đầy? Điều gì xảy ra khi daemon bị giết vì một quá trình chạy trốn ăn hết hệ thống RAM và trao đổi? Điều gì xảy ra nếu một trong hai điều khác phụ thuộc vào chỉ dừng lại và ngừng hoạt động? khả năng kết thúc với một máy chủ mà bạn sẽ phải truy cập vật lý. Điều đó có thể gió lên là tốn kém hơn là hợp lý, đặc biệt là nếu bạn có nhiều hơn một vài chục dặm từ máy chủ và không có bất cứ ai mà bạn có thể gọi đến đến đó vội vàng.

Một điều mà tôi có thể nói là nó không phải là "bảo mật thông qua che khuất". Cổng gõ là một hình thức xác thực, và giống như bất kỳ hệ thống xác thực nào, nó có thể được thực hiện đơn giản hoặc phức tạp như mong muốn. Một cái gì đó đơn giản như "gõ vào cổng 10.000 + realPortNumber" có thể được thực hiện, điều này có thể dẫn đến một sự phá vỡ tầm thường, hoặc chính việc gõ cổng có thể được sử dụng để truyền một số dạng xác thực thực (giả sử, 1 khối dữ liệu được mã hóa AES được cung cấp khóa có nguồn gốc từ một số phương pháp khác). Tuy nhiên, sẽ không khả thi khi sử dụng cổng gõ để truyền một lượng lớn dữ liệu, bởi vì sẽ mất nhiều thời gian hơn so với việc chỉ gửi một gói và nếu gói đó kết thúc TCP ít nhất nó có thể được biết nếu nó đã được nhận thành công hoặc gặp một số dạng lỗi.

Tuy nhiên, một câu hỏi thú vị mà điều này đưa ra là làm thế nào để quản lý các tệp nhật ký --- việc triển khai vùng người dùng chủ yếu yêu cầu các tệp nhật ký để xác định xem có phải một cú gõ đã được gửi thành công hay không, và điều gì xảy ra nếu những nhật ký đó bị rò rỉ? Dữ liệu xác thực được biết đến, và đó rõ ràng không phải là một điều rất tốt.

Tôi không thể cho bạn biết có nên sử dụng cổng gõ trong thiết lập của bạn hay không. Tôi chưa, và tôi không chắc chắn 100% rằng tôi sẽ trở thành. Nó có ý nghĩa hơn đối với tôi khi sử dụng các hệ thống xác thực mạnh dựa trên mật mã mạnh (chẳng hạn như cơ sở hạ tầng PKI) hơn là để ném cổng theo cách. Ngoài ra, việc thêm một điểm không truy cập vào cơ sở hạ tầng quan trọng, đối với tôi, dường như là một ý tưởng tồi và khó hỗ trợ đúng đắn hơn với bất kỳ loại bảo đảm nào. Tuy nhiên, một lần nữa, điều đó dựa trên khái niệm phần mềm gõ cổng không được tích hợp với tường lửa ở cấp nhân hệ điều hành; nếu điều đó thay đổi, tôi cũng có thể thay đổi cách tôi cảm nhận về việc sử dụng nó.

34
Michael Trausch

Việc gõ cổng không chỉ là một mật khẩu văn bản đơn giản khác - ít nhất là khi được sử dụng để bảo vệ các dịch vụ nghe trên một cổng TCP như SSH. Việc gõ cổng ngụ ý rằng việc khám phá dịch vụ với nmap không còn có thể vì sử dụng chính sách tường lửa thả mặc định SSHD cũng có các lỗ hổng có thể khai thác từ xa và chúng không liên quan gì đến mật khẩu yếu. Tôi không muốn bất kỳ ai có thể kích hoạt nmap và thấy rằng tôi có nghe SSHD.

Ngoài ra, có một biến thể mạnh hơn của gõ cổng được gọi là "Cấp phép gói đơn", nhưng nó cũng là một sơ đồ xác thực hoàn toàn thụ động để nó giữ lại các lợi ích của việc gõ cổng nhưng giải quyết các hạn chế của nó (tấn công lại rất dễ, tấn công DoS rất dễ, v.v. .).

13
Michael Rash

Một thực tế dễ dàng được xác minh là tất cả các dịch vụ phải đối mặt với internet đều có lỗ hổng bảo mật tương đối thường xuyên - các dịch vụ như SSH, OpenSSL, v.v. Các cuộc tấn công trên chúng đều được thử trên mạng, nhắm vào bất kỳ hệ thống nào có cổng mở phù hợp.

Cổng gõ, trong tâm trí của tôi, có mục đích để tránh xa những kẻ tấn công ngẫu nhiên này khỏi internet, đang tìm kiếm các lỗ hổng chung. Đó là, không nên tránh xa một kẻ tấn công chuyên dụng, hoặc hình thành bất kỳ phần nào trong bảo mật thực tế của các dịch vụ. Lợi ích của việc gõ cổng phải là, thực sự, đủ đơn giản để có thể không có bất kỳ lỗi nào có thể khai thác được trong đó.

Cách sử dụng này có nghĩa là việc gõ cổng có thể lỏng lẻo nhất có thể, miễn là nó tránh xa phần lớn của những kẻ tấn công. Nó có thể chỉ là bảo mật bằng cách che khuất, nhưng cách tốt hơn là sử dụng nó như một hình thức xác thực "mật khẩu" yếu.

Vì vậy, dịch vụ gõ cổng "tốt nhất" sẽ là một dịch vụ không thể tưởng tượng được khi có bất kỳ cuộc tấn công nào, nhưng đủ tầm thường để bất kỳ người dùng hợp pháp nào sử dụng từ bất kỳ loại máy khách nào.

9
Nakedible

Cổng gõ không phải là an ninh thông qua che khuất. Đó là phòng thủ theo chiều sâu. Nó giống như đỗ xe của bạn bên cạnh một chiếc xe dễ đánh cắp hơn - nó sẽ không làm được gì nhiều để ngăn chặn một cuộc tấn công bị nhắm mục tiêu, nhưng nó có thể khiến những kẻ cơ hội nhìn theo hướng khác.

8
jl6

Theo nhận xét của tôi ở nơi khác, mặc dù có rất nhiều triển khai sử dụng tất cả các loại thủ thuật đặc biệt để đáp trả tiếng gõ, nhưng nó có thể được thực hiện hoàn toàn sử dụng iptables trên hệ thống Linux. tức là đây thực sự là một thực hiện gõ cổng dựa trên kernel

Vì tiếng gõ có thể nhìn thấy trên mạng, sử dụng chuỗi nhiều hơn 3 tiếng gõ mang lại rất ít lợi ích. Tôi khuyên bạn nên sử dụng TCP - mặc dù nó sẽ chậm hơn, bạn đã có một đảm bảo tốt hơn rằng tiếng gõ đã được chuyển.

Tuy nhiên, mặc dù nó phụ thuộc vào các chương trình không gian người dùng, nhưng sở thích của tôi là fail2ban vì nó không yêu cầu thêm các bước/phần mềm để kết nối, chạy một cách đáng tin cậy và nếu nó không thành công thì nó sẽ không ngăn tôi truy cập vào máy chủ .

Điều đó làm tôi ngạc nhiên rằng có rất ít việc áp dụng nhận dạng được mã hóa - mặc dù RFC1413 chỉ đề cập đến cách tiếp cận khả thi này bằng cách sử dụng giao thức thay vì xác định cách thức hoạt động của nó.

Nhưng tất nhiên, bạn nên đảm bảo rằng bạn đã hạn chế quyền truy cập nhiều nhất có thể độc lập với điều này (nghĩa là không đăng nhập root, hạn chế quyền truy cập vào nhóm được chỉ định, nếu thực tế, yêu cầu các cặp khóa). SSH được thiết kế để bảo mật - và trong lịch sử đã có tương đối ít lỗ hổng trong việc triển khai luồng chính. Lý do mà các cuộc tấn công thành công thường là do sự kết hợp của tên người dùng có thể đoán được, mật khẩu đơn giản và các cuộc tấn công vũ phu hoặc kỹ thuật xã hội. Lưu ý rằng tôi không ủng hộ bạn thực thi xác thực cụm mật khẩu phức tạp (ngoài độ dài tối thiểu) cũng như bạn không yêu cầu người dùng tiếp tục thay đổi mật khẩu của họ, có những cách tiếp cận tốt hơn (ví dụ: hai yếu tố), nhưng rất tiếc, rất ít triển khai.

7
symcbean

Tôi đã không thực hiện gõ cổng trong một số năm, tuy nhiên, tôi nghi ngờ rằng nó không thay đổi đáng kể về nguyên tắc. Các bình luận khác chứa nhiều điểm hợp lệ và tôi sẽ không chỉ đơn giản lặp lại chúng ở đây.

Một khía cạnh của việc gõ cổng mà tôi luôn thực hiện như một vấn đề tất nhiên là căn cứ vào chuỗi gõ của giá trị giả ngẫu nhiên nhưng có thể lặp lại, chẳng hạn như ngày và giờ hiện tại. Chiến lược này không loại bỏ sự nguy hiểm của một cuộc tấn công chơi lại, tuy nhiên, nó hạn chế sự phơi bày của một chuỗi tiếng gõ nhất định. Rõ ràng để điều này thành công một thời gian được đồng bộ hóa, trong ví dụ của tôi, nguồn sẽ được yêu cầu cho tính nhất quán.

4
Tok

Port Knocking chỉ là một mật khẩu văn bản đơn giản. Nó có thể bị ép buộc, phát hiện, bắt giữ và phát lại như bất kỳ mật khẩu văn bản đơn giản nào khác. Tại sao lại phát minh đăng nhập telnet?

Bạn phải tin tưởng một cái gì đó. Vì vậy, hãy giả sử bạn tin tưởng vào ngăn xếp mạng hệ điều hành của bạn và bạn tin tưởng sshd khi chạy với nén chậm, tách đặc quyền và chỉ cho phép một số hình thức xác thực hai yếu tố hợp lý (giả sử dựa trên khóa).

Bạn có thể sử dụng các dịch vụ "đơn giản" như sshd để gọi authpf để bảo vệ các dịch vụ dễ bị tổn thương, phức tạp hơn của bạn.

authpf cho phép bạn sửa đổi các quy tắc tường lửa dựa trên người xác thực thành công với sshd, vì vậy chỉ các địa chỉ IP quản lý để đăng nhập vào cổng ssh của bạn mới được phép kết nối với trang trại biên dịch/tính toán/cơ sở dữ liệu của bạn.

2
Alex Holst