The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Использование amon для дополнительной защиты PHP-интерпретатора от выполнения внешних программ
Для экспресс-блокировки выполняемых при работе определенного PHP-скрипта
внешних программ удобно использовать библиотеку amon.so
(http://www.lucaercoli.it/amon.html), которая подменяет своим обработчиком
системный вызов execve() и контролирует его выполнение. Библиотека amon.so
рассчитана на тесное взаимодействие с PHP и учитывает особенности его работы,
позволяя защититься от простейших атак и блокировать работу бэкдоров, подобных r57shell.

Так как библиотека amon пока отсутствует в стандартных пакетах, загрузим и
соберем её вручную (пример для Debian/Ubuntu).

Устанавливаем необходимые для сборки компоненты:

   apt-get install build-essential

Загружаем amon:

   wget http://www.lucaercoli.it/amon/amon.c

Открываем файл amon.c и находим в верхней части строку "char * cmds []", в
которой определен список допустимых команд. При необходимости правим список на
своё усмотрение.

По умолчанию список разрешенных программ выглядит следующим образом:

   "/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"

Компилируем amon
 
   gcc -fPIC -shared -ldl -o amon.so amon.c

Копируем amon.so в директорию /lib:

   mv ./amon.so /lib/

В простейшем случае для защиты php-скрипта, запущенного в командной строке или
в режиме CGI можно использовать следующий скрипт (php5-cgi-wrapper):

   #!/bin/sh
   export LD_PRELOAD=amon.so
   exec /path/del/vero/php5-cgi "$@"

При использовании механизма suEXEC, этот скрипт можно прописать вместо вызова
php, например, указать в конфигурации apache:

   ScriptAlias /php_amon/ "/usr/local/bin/"
   AddHandler php-script .php
   Action php-script /php_amon/php5-cgi-wrapper

В случае необходимости работы php в виде модуля (libapache2-mod-php5),
работающего внутри Apache, добавляем в /etc/apache2/envvars:

   export LD_PRELOAD=amon.so

и перезапускаем apache:

   /etc/init.d/apache2 restart

Для проверки загрузилась ли библиотека создадим и запустим простейший скрипт, в
выводе которого должно быть упоминание amon.so:

   <?php
   phpinfo();
   ?>

Для php-скриптов, работающих в режиме FastCGI через mod_fcgid, достаточно
написать промежуточный shell-скрипт, который использовать для запуска основного php-скрипта:

   #!/bin/sh
   export PHPRC=/etc/php5/cgi
   export LD_PRELOAD = amon.so
   exec /usr/lib/cgi-bin/php


В ситуации, когда php-скрипт попытается запустить, допустим, /bin/sh, операция
будет блокирована, а в error.log будет оставлена запись:

   sh: command_name: command not found
 
25.04.2011 , Источник: http://www.howtoforge.com/amon.so-h...
Ключи: php, security, limit, sysctl, apache, block, execve / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Ограничение доступа и ресурсов, безопасность

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, apparmor (?), 21:42, 25/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    apparmor же есть
     
     
  • 2.2, mma (?), 06:13, 26/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    тсссс, не мешай людям изобретать велосипед. Еще чуть-чуть и selinux уже начнут изучать
     
     
  • 3.7, sa10 (ok), 17:41, 27/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Еще чуть-чуть и selinux уже начнут изучать

    А не подскажете где изучить selinux который внутри контейнера openvz работает?


     
     
  • 4.8, Аноним (-), 22:14, 27/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    use KVM/XEN Luke
     
  • 4.10, mma (?), 07:02, 28/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    ну это надо спрашивать с разработчиков openvz
    LXC дружит с selinux.
     
  • 2.3, Аноним (-), 11:36, 26/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > apparmor же есть

    Статья про Debian.

     

  • 1.4, WbxC (?), 21:34, 26/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что, красиво придумано: хакерскими методами - против самих же хакеров. Клин клином вышибают.
     
     
  • 2.5, axe (??), 02:16, 27/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    феерический костыль
     
     
  • 3.6, V (??), 11:39, 27/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    не то слово
     
     
  • 4.9, Аноним (-), 06:48, 28/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > не то слово

    да, костыль редкостный

     

  • 1.11, Василий (??), 17:26, 20/11/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подскажите пожалуйста, а как его собрать на 8 дебиане 64 бит

    на команду
    gcc -fPIC -shared -ldl -o amon.so amon.c
    сыпет кучу ошибок вроде:

    /usr/include/x86_64-linux-gnu/bits/fcntl.h:40:5: error: unknown type name ‘__off_t’

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру