Зловмисне програмне забезпечення без файлів атакує ціль, використовуючи вразливість, наприклад, у 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 для налагодження.