Debian.pro

Блог для пользователей и администраторов Debian


Обеспечиваем безопасность LAMP методом «в лоб». Защищаемся от php-шеллов и прочих игрушек скрипт-киддисов. Библиотека amon.so

Собственно… меня снова начали спрашивать куда я пропал… Да-да-да… стыдно. На выходных сплю по 18 часов, а в будни — смотрим тег #yakit в твиттере. Ну и работа стала отнимать намного больше времени, в связи с вводом в строй кластера. А ещё на днях начну пробовать UEC (его же допилили, да?) на рекордных 5 серверах! хД

Ну а теперь перейдем к делу. Спросили меня тут — как быстрее всего защитить систему (ну в смысле сам Linux) от тех, кто может загружать php-файлы на сервер. Я немного подумал и решил, что нужна защита от php-шеллов. Как обычно, я оказался прав. Решение нашлось отличное, пуленепробиваемое, работающее…. Ну в общем мы воткнем библиотеку amon.so. Решение работает, как в Debian, так и в мильёне остальных дистрибутивов.

Если нет компилятора, поставим его:
root@host:~# apt-get install build-essential

Скачаем библиотеку amon:
root@host:~# wget http://www.lucaercoli.it/amon/amon.c

Скомпилируем её:
root@host:~# gcc -fPIC -shared -ldl -o amon.so amon.c

Положим в более адекватный каталог:
root@host:~# mv ./amon.so /lib/

Далее, представим, что мы используем mod_php для apache2. В файл /etc/apache2/envvars впишем строчку:
export LD_PRELOAD=amon.so

Ну и перезапустим apache:
root@host:~# /etc/init.d/apache2 restart

Если всё проделано правильно — на страничке вывода phpinfo мы увидим упоминание библиотеки amon.so. Теперь через php можно выполнить только следующие системные команды:

"/usr/sbin/sendmail"
"/usr/lib/sendmail"
"/etc/alternatives/lib.sendmail"
"/usr/lib/sm.bin/sendmail"
"/usr/bin/mail"
"/bin/mv"
"/bin/rm"
"/usr/bin/unlink"
"/bin/rmdir"
"/bin/cp"
"/bin/date"
"/bin/bzip2"
"/bin/gunzip"
"/bin/gzip"
"/usr/bin/unzip"
"/bin/tar"
"/usr/bin/host"
"/usr/bin/file"
"/usr/bin/uptime"
"/bin/grep"
"/usr/bin/diff3"
"/bin/pwd"

В общем-то при правильных правах на файлы системы повредить при помощи этих команд будет уже проблематично. Хотя и можно. Навскидку — корень забить +)


Комментарии (7):

  1. Serj :

    Забавно, я найти такое в свое время не смог. Будет интересно почитать еще пару статтей про защиту.

    Больше спасибо

  2. Bravo :

    А если у меня nginx как быть с

    В файл /etc/apache2/envvars впишем строчку:
    export LD_PRELOAD=amon.so

    ??

  3. inkvizitor68sl :

    Ответил на почту, оно по сути под апач собрано. Пробуйте в php.ini вписывать.

  4. Taz :

    apt-get install build-essential

    а удалять кто будет? гцц постоянно не сервере не нужен.

  5. Скорее всего, пригодится в ближайшее время.
    Правильным было бы собрать дебку по соседству, согласен.

  6. Здравствуйте. Сделал все по инструкции, после ребута апача получаю:
    # /etc/init.d/apache2 restart
    Restarting web server: apache2/etc/init.d/apache2: line 75: /bin/pidof: Нет такого файла или каталога
    /etc/init.d/apache2: line 77: /bin/cat: Нет такого файла или каталога
    /etc/init.d/apache2: line 75: /bin/pidof: Нет такого файла или каталога
    /etc/init.d/apache2: line 77: /bin/cat: Нет такого файла или каталога
    /etc/init.d/apache2: line 75: /bin/pidof: Нет такого файла или каталога
    /etc/init.d/apache2: line 77: /bin/cat: Нет такого файла или каталога
    /etc/init.d/apache2: line 107: /bin/pidof: Нет такого файла или каталога
    /etc/init.d/apache2: line 202: /usr/bin/env: Нет такого файла или каталога
    /lib/lsb/init-functions: line 320: /bin/echo: Победа

    Как избавиться? Можно на почту ответ.

  7. Вам все проблемы написали по русски.

Написать комментарий