Làm thế nào để ngăn chặn và phát hiện bom ngã ba


14
#include <stdlib.h>
#include <unistd.h>

int main()
{
   while(1)
      fork();
}

Đây là mã cho một quả bom ngã ba.

Trong trường đại học của chúng tôi, chúng tôi kết nối qua telnet tức là giao thức phục vụ khách hàng. Một số hệ thống 100 được kết nối với máy chủ. Đột nhiên chúng tôi thấy máy chủ trở nên chậm chạp, và sau một thời gian nó bị sập. Tôi biết rằng sombody đã thực hiện một quả bom ngã ba.

Làm thế nào chúng ta có thể phát hiện trên hệ thống nào mà bom ngã ba được thực hiện? Và làm thế nào chúng ta có thể ngăn chặn nó?

Một phương pháp là giới hạn số lượng quá trình tối đa mà một người dùng có thể sở hữu. Có phương pháp nào để ngăn chặn nó và để biết nó đã được thực hiện từ hệ thống nào không?


19
Telnet? Nghiêm túc? Bạn thực sự nên sử dụng SSH ...
ThiefMaster



Vâng, nó đã được di chuyển dưới dạng SO nhưng một câu trả lời có thể ở cấp độ kernel. một số bản vá đã được thực hiện tạm thời nhưng dường như không có gì để đáp ứng. Quan điểm của tôi là: làm thế nào để phát hiện ra nó: bất kỳ uer nào cũng sẽ biết nó không thể sử dụng hệ thống nữa, vì vậy điểm phát hiện có lẽ không phải là điểm chính. Làm thế nào để phục hồi? Câu trả lời hiện tại là khởi động lại, tôi sẽ nói: một cách để bảo kernel chỉ chạy một tiến trình (quy trình bạn muốn dọn dẹp mớ hỗn độn) và ngăn chặn tất cả những người khác dù họ đang ở đâu. Đây có thể là một tính năng chỉ có thể truy cập trong bảng điều khiển hệ thống.
philippe lhardy 16/03/13

Câu trả lời:


16

Một cách là giới hạn số lượng quy trình, người dùng có thể chạy.

Chỉ cần đăng nhập bằng root và chỉnh sửa tệp này, để thêm người dùng và định cấu hình, giới hạn của họ.

# vi /etc/security/limits.conf

Thêm dòng này vào tập tin

john hard nproc 10

Bây giờ người dùng john chỉ có thể tạo 10 quy trình.


Tôi nghĩ bạn phải khởi động lại để các cài đặt mới /etc/security/limits.confcó hiệu lực.
Dan D.

2
Không. Nhưng chúng được áp dụng bởi PAM nên chúng chỉ áp dụng cho thông tin đăng nhập mới.
ThiefMaster

14

Để ngăn chặn một quả bom ngã ba đang chạy, bạn có thể sử dụng killall <name>để tiêu diệt tất cả các quá trình của quả bom. Tuy nhiên, vì một quả bom ngã ba thường dẫn đến tải cực lớn trên hệ thống, bạn có thể không thể SSH vào nó hoặc thực hiện điều đó. Vì vậy, khởi động lại có thể là cần thiết hoặc ít nhất là nhanh hơn nhiều.

Nếu mỗi người dùng có tài khoản riêng trên hệ thống, bạn chỉ cần kiểm tra thư mục chính của mọi người và tìm kiếm tệp thực thi. Rất có thể anh ấy cũng đã tải lên mã nguồn vì vậy việc tìm kiếm nó không quá khó. Nếu đó là một tài khoản được chia sẻ cho tất cả các sinh viên, bạn sẽ không gặp may. Đặc biệt là sau khi phiên telnet hoặc ssh của người dùng chấm dứt, bạn không có cơ hội tìm ra ai đã bắt đầu nó.

Tuy nhiên, thay vì trừng phạt người dùng đã kích nổ quả bom nĩa đó, bạn nên sửa cấu hình của hệ thống để giải giáp bom ngã ba. Bạn có thể đặt giới hạn quy trình cho mỗi người dùng bằng cách sử dụng /etc/security/limits.confvà do đó ngăn bom ngã khỏi tầm kiểm soát - ví dụ: chỉ 50 quy trình, một quả bom nĩa sẽ không gây ra nhiều thiệt hại.


nó không thể phát hiện từ hệ thống nào sắp tới aa?
Rajesh M

@ user1670364: Không rõ bạn đang hỏi gì. Bạn có ý nghĩa gì bởi "nó đến"? Bạn có thể cho biết những gì người dùng sở hữu quá trình, những gì bạn muốn biết?
David Schwartz

@DavidSchwartz ý tôi là có thể phát hiện bom ngã ba trên hệ thống nào nó đang được thực hiện?
Rajesh M

@ user1670364: Nếu bạn muốn nói rằng hệ thống thực sự đang chạy bom ngã ba, thì đó là hệ thống chậm. Nếu bạn có nghĩa là người dùng chịu trách nhiệm, thì đó là người dùng sở hữu các quy trình đang giả mạo.
David Schwartz
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.