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 top
lệ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.
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 top
lệ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.
Câu trả lời:
Linux kernel kể từ 3.3 chứa hỗ trợ cho các quá trình ẩn cho người dùng khác.
Nó được thực hiện bởi hidepid=
và gid=
các tùy chọn gắn kết cho / Proc như được mô tả trong cam kết tương ứng và Tài liệu / hệ thống tập tin / Proc.txt .
Debian Wheezy cũng bao gồm tính năng này.
Các top
lệ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.c
và ma thuật chi tiết ma quỷ đằng sau nó nằm trong hijacks.c
tệ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_getattr
biể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
.
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.
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
bạn có thể ghi đè argv của bạn [0] bằng một tên khác ... nhưng nói một cách nghiêm túc, bạn đang tìm kiếm một loại rootkit nào đó. điều này có thể giúp bạn hiểu rõ: http://stupefydeveloper.blogspot.com/2008/10/linux-change- Process-name.html
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 top
lệnh và sửa đổi nó cho phù hợp. Sau đó, bạn có thể thay thế top
lệnh trong /usr/sbin
(hoặc bất cứ nơi nào) bằng phiên bản của bạn.
top
lệnh.
this_is_not_the_process_you_are_looking_for
?