Безфайловое вредоносное ПО атакует цель, используя уязвимость, например, в плагине 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 для отладки.