Понимание принципов атаки
Основные цели атаки - системные вызовы. Этот метод выбран злоумышленниками по двум причинам: потому что это самый простой способ получить управления над скомпрометированной машиной, а также потому, что системные вызовы дают большие возможности атакующему. Системные вызовы - основные функции, используемые операционной системой. Например, они используются для чтения и записи данных в файлы, для получения доступа к различным устройствам, для запуска исполняемых файлов и т.д.
В текущей стабильной версии ядра Linux около 230 системных вызовов, и примерно 290 в ядре 2.6.9. Обратите внимание, что количество системных вызовов зависит от версии ядра. Полный список всех системных вызовов вашего ядра всегда доступен в файле file /usr/include/asm/unistd.h. Также нужно заметить, что обычно не все системные вызовы модифицируются злоумышленником, однако есть несколько популярных. Это системные вызовы, представленные в таблице 1. Они должны быть внимательно проверены администраторами, и конечно, средствами обнаружения вторжений. Те, кого интересуют подробности, могут найти полное описание каждого системного вызова в "Linux Programmers Manual".
Имя системного вызова |
Краткое описание |
ID | |||
sys_read |
Используется для чтения из файлов |
3 | |||
sys_write |
Используется для записи в файлы |
4 | |||
sys_open |
Используется для создания или открытия файлов |
5 | |||
sys_getdents/sys_getdents64 |
Используется для получения листинга содержимого директории (также и /proc) |
141/220 | |||
sys_socketcall |
Используется для управления сокетами |
102 | |||
sys_query_module |
Используется для запроса загруженных модулей |
167 | |||
sys_setuid/sys_getuid |
Используется для управления UIDs |
23/24 | |||
sys_execve |
Используется для исполнения бинарных файлов |
11 | |||
sys_chdir |
Используется для изменения текущей директории |
12 | |||
sys_fork/sys_clone |
Используется для создания процесса потомка |
2/120 | |||
sys_ioctl |
Используется для работы с устройствами |
54 | |||
sys_kill |
Используется для отправки сигналов процессам |
37 |
Обратите внимание, что в таблице выше, ID это точка входа в таблице системных вызовов. Здесь приведены ID, используемые в ядре 2.4.18-3.
Несмотря на то, что все примеры, представленные в этой статье было проверены на Red Hat 7.3 с ядром 2.4.18-3, они могут быть воспроизведены на других версиях ядра, включая последние версии 2.6.x. Однако могут быть некоторые различия во внутренних структурах ядра 2.6.x. Например, адрес таблицы системных вызовов хранится внутри функции syscall_call, вместо обработчика системного вызова system_call.