як працює без файлу шкідливе програмне забезпечення на Linux?


10

Я розумію визначення зловмисного програмного забезпечення без файлів:

Шкідливий код, який не заснований на файлах, але існує лише в пам'яті ... Більш конкретно, безфайловий шкідливий код ... додає себе до активного процесу в пам'яті ...

Чи можете хтось пояснити, як працює це додавання до активного процесу в пам'яті?

Крім того, яка (ядро) захист / загартовування доступна від таких атак?


Наприклад, використовуючи переповнення буфера в мережевому додатку, а потім завантажуючи шкідливий код, який працює всередині програми, і поширюється по мережі. Немає файлів. Друга частина питання дуже широка, вона по суті становить "які контрзаходи проти зловмисного програмного забезпечення існують"?
dirkt

На це питання краще відповісти на https://security.stackexchange.com/ .
рубінові перила

@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 для налагодження.


Як і інша відповідь , і ця застаріла - як пояснено тут, вам більше не потрібно чітко проробляти процес для того, щоб його читати чи писати /proc/PID/mem. Я сподіваюся, що ви менш затримливі, ніж інший, до оновлення та виправлення своєї відповіді, а не для увічнення міфів та дезінформації.
pizdelect

... що в цьому випадку може мати наслідки, оскільки люди можуть помилково припустити, що, проробляючи процес, вони можуть перешкодити іншим процесам читати його пам'ять.
pizdelect

@pizdelect Дякую за посилання. Було б добре, якщо ви додасте вміст як іншу відповідь.
dr_

Ні, іншої відповіді я не збираюсь додавати. Я чекаю, що ти поправиш свою.
pizdelect

Пам’ятайте, що ви також можете редагувати відповіді інших людей. Ви, здається, володієте кращими знаннями, ніж я, про цю конкретну тему, тому можете запросити це зробити.
dr_

1

Коли вам вдасться збити процес, ви можете змусити процес вставити дані в пам'ять. Дуже популярний спосіб зробити це - використовувати переливи буфера .

Як це працює? Ви знаєте, наприклад, що процес прослуховує порт x і має буфер для певної функції, яка, скажімо, становить 15 байт. Ви викликаєте цю функцію з 15 байт даних + n байтів (ваш код, який потрібно виконати). Якщо програма не перевіряє дані належним чином, вона замінить суміжну пам’ять з вашим кодом, і, таким чином, код живе в пам'яті. Якщо ви можете виконати цей код, ви володієте системою. Існують обмеження, наприклад, процес не може записати в пам'ять за межами виділеного простору .

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.