Linux - статьи

Понимание принципов атаки


Основные цели атаки - системные вызовы. Этот метод выбран злоумышленниками по двум причинам: потому что это самый простой способ получить управления над скомпрометированной машиной, а также потому, что системные вызовы дают большие возможности атакующему. Системные вызовы - основные функции, используемые операционной системой. Например, они используются для чтения и записи данных в файлы, для получения доступа к различным устройствам, для запуска исполняемых файлов и т.д.

В текущей стабильной версии ядра 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.



Содержание раздела