Есть различные типы атак на систему. Сегодня мы изучим механизмы запуска
внешних команд из приложения. Обычно это командный процессор запущеный под
правами владельца приложения. Второй тип атак основан на переполнении
буфера, они дают атакующему возможность выполнения своих инструкций кода.
Последний, третий основной тип атаки основан на ситуации перехвата (race
condition) - промежутке времени между двумя инструкциями, в течение
которого изменяется системный компонент (обычно файл) в то время как приложение
уверено, что он остался тем же.
Первые два типа атак обычно пытаются запустить командный процессор с
привилегиями владельца приложения, в то время как третий тип нацелен на
получение прав записи на защищенные системные файлы. Доступ по чтению иногда
является результатом слабой защиты системы (личные файлы, письма, файл паролей
/etc/shadow, псевдоконфигурационные файлы ядра в
/proc).
Целью атак в основном являются программы с установленым битом Set-UID (или
Set-GID). Однако атаки также можно производить на любое приложение запущеное под
ID отличным от ID пользователя. Большую часть таких программ представляют
системные демоны. Демон - приложение, обычно запускаемое при загрузке,
выполняющееся в фоне без управляющего терминала, которое делает
привелигерованную работу для любого пользователя. Например демон
lpd позволяет любому пользователю посылать документ на принтер,
sendmail - принимает и перенаправляет электронную почту, или
apmd - запрашивает у Bios статус батареи портативного компьютера.
Некоторые демоны управляют связью с внешними пользователями по сети (Ftp, Http,
Telnet... сервисы). Сервер, называемый inetd, управляет
соединениями многих из этих сервисов.
Мы можем сделать вывод, что программа может быть атакована, как только она
взаимодействует - даже очень скупо - с пользователем отличным от запустившего
его. При разработке приложений такого типа, вы должны быть осторожны и помнить о
риске, который появляется при использовании функций о которых мы будем здесь
говорить.