Làm thế nào để làm cho một quá trình vô hình cho người dùng khác?


19

Làm thế nào bạn có thể khởi chạy một quá trình và làm cho nó vô hình với toplệnh? Quá trình được bắt đầu bởi một người dùng bình thường (không phải root) và không thể hiển thị cho những người dùng bình thường khác.


1
Đó là loại đánh bại mục đích hàng đầu và sẽ quá dễ dàng để lạm dụng. Tại sao không chỉ đơn giản là đổi tên quá trình? this_is_not_the_process_you_are_looking_for?

tôi hiểu rồi, còn việc giấu người dùng thì sao?

5
Vui lòng cho chúng tôi biết bạn không cố gắng viết root-kit. Bạn có thể giải thích kịch bản của mình để có lẽ chúng tôi có thể đề xuất một kiến ​​trúc bảo mật tốt hơn thay vì một cấu trúc thường được coi là hành vi "xấu xa" không?
Caleb

2
Bạn có thể sử dụng grsecurance hoặc SELinux . Cả hai đều yêu cầu can thiệp root cho thiết lập ban đầu.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:



11

Các toplệnh đọc dữ liệu từ proc, được cung cấp trực tiếp từ hạt nhân. Để ẩn các tiến trình, bạn phải sử dụng mã bên trong kernel để thực hiện mặt nạ.

Ngoài việc sử dụng một khung bảo mật như SELinux và grsecurance (được đề cập trong các câu trả lời khác), mã kiểu rootkit là tùy chọn duy nhất còn lại của bạn. Tôi nói "phong cách" bởi vì "rootkit" tự nó không tệ, đó là cách nó được sử dụng. Có những lý do hoàn toàn chính đáng đằng sau các quy trình ẩn từ những người dùng khác, đó là lý do tại sao khả năng này tồn tại trong các khung bảo mật.

Lộ trình cơ bản mà bạn phải tuân theo để làm việc này là nối vào (hoặc chiếm quyền điều khiển, tùy thuộc vào cách bạn nhìn vào nó) (các) chức năng trong nhân linux cung cấp /proc/pid/dữ liệu. Tôi trình bày một phương pháp nối vào các hàm kernel linux trong một mô-đun bảo mật mà tôi đã viết:

https://github.com/cormander/tpe-lkm

Mã "cấp độ cao" cho điều này nằm trong hijack_syscalls()phương thức security.cvà ma thuật chi tiết ma quỷ đằng sau nó nằm trong hijacks.ctệp.

Bạn có thể sẽ tìm thấy (các) chức năng mà bạn muốn nối vào trong fs/proc/thư mục mã nguồn của kernel linux. Hãy nhớ rằng linux không cung cấp ABI ổn định, do đó mã của bạn sẽ cần thay đổi một chút để nó hoạt động trong các phiên bản khác nhau của kernel linux. Ngoài ra, hãy nhớ rằng bạn cần quyền truy cập root đầy đủ vào máy để có thể chèn mã này.

CẬP NHẬT:

Nếu bạn bọc pid_getattrbiểu tượng kernel bằng một số mã bổ sung để thực hiện điều này thật dễ dàng. Gần đây tôi đã thêm một cái gì đó ẩn các quy trình vào mô-đun hạt nhân ở trên:

https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3

Bạn có thể làm điều gì đó tương tự bằng cách làm cho các quy trình của một người dùng hoặc nhóm nhất định không thể xem được bởi bất kỳ ai ngoại trừ root và người dùng đó. Làm điều đó bằng tên quy trình phức tạp hơn một chút, nhưng có thể. Có một cái nhìn vào exe_from_mm()chức năng. Lưu ý rằng có thể có ý nghĩa về hiệu suất của việc sử dụng nó bên trong pid_getattr.


4

Có vẻ như hai lựa chọn chính.

  • Selinux hoạt động bằng cách đưa những người khác nhau vào các lĩnh vực bảo mật khác nhau và theo nghĩa là đấm bốc họ để họ không thể nhìn thấy những thứ khác. Điều này được bao phủ trong câu hỏi này . Vì selinux đang nhanh chóng trở thành khung bảo mật thực tế trong thế giới Linux, đây có lẽ là hướng bạn nên xem xét.

  • Cái khác là sự an toàn như được đề cập bởi marioosh và như được hỏi trong câu hỏi này . Một số distro có các gói kernel thay thế với các bản vá bảo mật được áp dụng. Nếu bạn có cái này bạn có thể xem xét sử dụng chúng.

Nếu vì lý do nào đó bạn muốn làm điều này mà không cần thêm khung bảo mật như selinux hoặc bảo mật, vui lòng giải thích cách bạn đang làm không viết root-kit.


1

Nó không đơn giản như vậy trên hộp linux tiêu chuẩn. Nhìn vào grsecurity , nhưng nó đòi hỏi vá hạt nhân, vv


2
Tôi nghĩ rằng điều này đi kèm với một tiêu chuẩn với một hạt nhân selinux.
dùng606723


0

Bạn có thể viết một lệnh tương đương hoạt động giống như top, nhưng không hiển thị các quy trình khớp với một tên cụ thể. Ngoài ra, bạn có thể lấy mã nguồn của toplệnh và sửa đổi nó cho phù hợp. Sau đó, bạn có thể thay thế toplệnh trong /usr/sbin(hoặc bất cứ nơi nào) bằng phiên bản của bạn.


2
Thay thế 'top' không ngăn người dùng thực hiện những gì hàng đầu làm.
Tim Post

2
Không, nhưng câu hỏi hỏi làm thế nào để làm cho các quy trình trở nên vô hình với toplệnh.
LawrenceC
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.