Как работает безфайловое вредоносное ПО в Linux?

10

Я понимаю определение вредоносного ПО без файлов:

Вредоносный код, который не основан на файлах, но существует только в памяти ... В частности, вредоносный код без файлов ... присоединяется к активному процессу в памяти ...

Может кто-нибудь объяснить, как работает добавление себя к активному процессу в памяти?

Кроме того, что (ядро) защита / защита от таких атак?

Мартин Вегтер
источник
Например, с помощью переполнения буфера в сетевом приложении, а затем для загрузки вредоносного кода, который запускается внутри приложения и распространяется по сети. Файлы не включены. Вторая часть вопроса очень широка, она сводится к тому, «какие существуют контрмеры против вредоносных программ»?
dirkt
На этот вопрос лучше ответить на https://security.stackexchange.com/ .
Rubynorails
@rubynorails - меня интересуют только конкретные ответы Linux. SecuritySE является общим. Если я запрошу конкретный ответ Linux, они отправят меня сюда.
Мартин Вегтер

Ответы:

6

Безфайловое вредоносное ПО атакует цель, используя уязвимость, например, в плагине Flash браузера или по сетевому протоколу.

Процесс Linux может быть изменен с помощью системного вызова ptrace(). Этот системный вызов обычно используется отладчиками для проверки и управления внутренним состоянием целевого процесса и полезен при разработке программного обеспечения.

Например, давайте рассмотрим процесс с PID 1234. Все адресное пространство этого процесса можно просмотреть в псевдофайловой системе /procв этом месте /proc/1234/mem. Вы можете открыть этот псевдофайл, а затем присоединиться к этому процессу через ptrace(); после этого вы можете использовать pread()и pwrite()для записи в пространство процесса.

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);

(Код взят здесь . Еще одна статья о подвиге ptrace доступна здесь .)

Что касается ориентированной на ядро ​​защиты от этих атак, единственным способом является установка исправлений вендора ядра и / или отключение определенного вектора атаки. Например, в случае ptrace вы можете загрузить модуль блокирования ptrace в ядро, которое отключит этот конкретный системный вызов; ясно, что это также делает вас неспособным использовать ptrace для отладки.

dr_
источник
Как и этот другой ответ , он тоже устарел - как объяснено здесь, вам больше не нужно отслеживать процесс, чтобы читать или записывать его /proc/PID/mem. Я надеюсь, что вы менее устойчивы, чем другие, к обновлению и исправлению своего ответа, вместо того, чтобы увековечивать мифы и дезинформацию.
pizdelect
... что в этом случае может иметь последствия, поскольку люди могут ошибочно предположить, что, отслеживая процесс, они могут помешать другим процессам читать его память.
pizdelect
@pizdelect Спасибо за ссылку. Было бы хорошо, если вы добавите контент в качестве другого ответа.
Dr_
Нет, я не собираюсь добавлять другой ответ. Я ожидаю, что ты исправишь свое.
pizdelect
Помните, что вы также можете редактировать ответы других людей. Похоже, вы лучше меня разбираетесь в этой конкретной теме, так что вы можете это сделать.
dr_
1

Когда вам удается завершить процесс, вы можете заставить процесс вставить данные в память. Очень популярный способ сделать это - использовать переполнение буфера .

Как это работает ? Например, вы знаете, что процесс прослушивает порт x и имеет буфер для определенной функции, скажем, размером 15 байт. Вы вызываете эту функцию с 15 байтами данных + n байтов (ваш код должен быть выполнен). Если программа не проверяет данные должным образом, она перезапишет соседнюю память вашим кодом и, таким образом, код будет храниться в памяти. Если вы можете выполнить этот код, вы владеете системой. Существуют ограничения, например, процесс не может записывать в память за пределами своего выделенного пространства .

Во всех ОС существует длинный список уязвимостей, где переполнение буфера позволяет взломщикам вводить данные в память цели.

thecarpy
источник