Phần mềm độc hại không hoạt động trên linux như thế nào?


10

Tôi hiểu định nghĩa của phần mềm độc hại không tên:

Mã độc hại không dựa trên tệp mà chỉ tồn tại trong bộ nhớ. Đặc biệt hơn, mã độc hại không mã hóa được gắn vào một quy trình hoạt động trong bộ nhớ.

Ai đó có thể vui lòng giải thích làm thế nào điều này nối thêm vào một quá trình hoạt động trong bộ nhớ hoạt động?

Ngoài ra, những gì (hạt nhân) bảo vệ / làm cứng có sẵn chống lại các cuộc tấn công như vậy?


Ví dụ: bằng cách khai thác lỗi tràn bộ đệm trong ứng dụng mạng và sau đó để tải xuống mã độc chạy bên trong ứng dụng và lây lan qua mạng. Không có tập tin liên quan. Phần thứ hai của câu hỏi rất rộng, về cơ bản nó có nghĩa là "những biện pháp đối phó chống phần mềm độc hại tồn tại"?
dirkt

Câu hỏi này có thể được trả lời tốt hơn tại /security// .
rubynorails

@rubynorails - Tôi chỉ quan tâm đến câu trả lời cụ thể của linux. Bảo mật là chung. Nếu tôi yêu cầu câu trả lời cụ thể của linux ở đó, họ sẽ gửi cho tôi ở đây.
Martin Vegter

Câu trả lời:


6

Phần mềm độc hại không tên tấn công mục tiêu bằng cách khai thác lỗ hổng, ví dụ như trong plugin Flash của trình duyệt hoặc trong giao thức mạng.

Một quy trình Linux có thể được sửa đổi bằng cách sử dụng lệnh gọi hệ thống ptrace(). Cuộc gọi hệ thống này thường được sử dụng bởi các trình gỡ lỗi để kiểm tra và quản lý trạng thái bên trong của quy trình đích và rất hữu ích trong việc phát triển phần mềm.

Chẳng hạn, hãy xem xét một quy trình với PID 1234. Toàn bộ không gian địa chỉ của quá trình này có thể được xem trong hệ thống tệp giả /proctại vị trí /proc/1234/mem. Bạn có thể mở tệp giả này, sau đó đính kèm vào quy trình này thông qua ptrace(); sau khi làm như vậy, bạn có thể sử dụng pread()pwrite()ghi vào không gian quy trình.

char file[64];
pid = 1234;

sprintf(file, "/proc/%ld/mem", (long)pid);
int fd = open(file, O_RDWR);
ptrace(PTRACE_ATTACH, pid, 0, 0);

waitpid(pid, NULL, 0);
off_t addr = ...; // target process address

pread(fd, &value, sizeof(value), addr);
// or
pwrite(fd, &value, sizeof(value), addr);

ptrace(PTRACE_DETACH, pid, 0, 0);
close(fd);

(Mã được lấy từ đây . Một bài báo khác về khai thác ptrace có sẵn ở đây .)

Liên quan đến phòng thủ hướng kernel chống lại các cuộc tấn công này, cách duy nhất là cài đặt các bản vá của nhà cung cấp kernel và / hoặc vô hiệu hóa vectơ tấn công cụ thể. Ví dụ, trong trường hợp ptrace, bạn có thể tải mô-đun chặn ptrace vào kernel sẽ vô hiệu hóa lệnh gọi hệ thống cụ thể đó; rõ ràng điều này cũng làm cho bạn không thể sử dụng ptrace để gỡ lỗi.


Cũng giống như câu trả lời khác , điều này cũng đã lỗi thời - như đã giải thích ở đây, bạn không còn cần phải thực hiện một quy trình để đọc hoặc viết cho nó /proc/PID/mem. Tôi hy vọng bạn ít chịu lửa hơn so với cá nhân khác để cập nhật và sửa câu trả lời của bạn, thay vì tiếp tục truyền thuyết và thông tin sai lệch.
pizdelect

... Trường hợp này có thể có hậu quả, vì mọi người có thể sai lầm khi cho rằng bằng cách tạo ra một quy trình, họ có thể ngăn các quá trình khác đọc bộ nhớ của nó.
pizdelect

@pizdelect Cảm ơn liên kết. Sẽ tốt hơn nếu bạn thêm nội dung dưới dạng câu trả lời khác.
dr_

Không, tôi sẽ không thêm câu trả lời. Tôi hy vọng bạn sẽ sửa chữa của bạn.
pizdelect

Hãy nhớ rằng bạn cũng có thể chỉnh sửa câu trả lời của người khác. Bạn dường như có kiến ​​thức tốt hơn tôi về chủ đề đặc biệt này, vì vậy bạn được chào đón để làm như vậy.
dr_

1

Khi bạn quản lý để phá vỡ một quy trình, bạn có thể khiến quy trình chèn dữ liệu vào bộ nhớ. Một cách rất phổ biến để làm điều này là sử dụng tràn bộ đệm .

Cái này hoạt động ra sao ? Ví dụ, bạn biết rằng một quá trình đang lắng nghe trên cổng x và có một bộ đệm cho một chức năng nhất định, ví dụ, 15 Byte lớn. Bạn gọi hàm đó với 15 byte dữ liệu + n byte (mã của bạn sẽ được thực thi). Nếu chương trình không xác thực dữ liệu đúng cách, nó sẽ ghi đè lên bộ nhớ liền kề với mã của bạn và do đó, mã nằm trong bộ nhớ. Nếu bạn có thể lấy mã này để thực thi, bạn sở hữu hệ thống. Có những hạn chế, ví dụ, một quá trình không thể ghi vào bộ nhớ ngoài không gian được phân bổ của nó .

Có một danh sách dài các lỗ hổng trên tất cả các hệ điều hành 'nơi tràn bộ đệm cho phép các trình bẻ khóa đưa dữ liệu vào bộ nhớ của mục tiêu.

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.