====== secure 1.04.2019 ======
===== Установка модуля disable_eval для php7.2 =====
Данный модуль отключает опасные функции php, такие как eval.\\
wget https://wiki.mikbill.ru/_media/billing/php_diseval_extension-master.tar
tar xvf php_diseval_extension-master.tar
cd PHP_diseval_extension-master/source
для сборки модуля необходим phpize из пакета php-devel (centos) или php7.2-dev (debian):\\
phpize
./configure
make
sudo make install
Подключим его к php:
touch /etc/php.d/10-diseval.ini
echo "extension=diseval" > /etc/php.d/10-diseval.ini
Так же если php-fpm использует отдельные модули, diseval необходимо подключить и к нему.\\
Для того что бы web подтянул новый модуль необходимо перезапустить nginx/httpd/php-fpm
===== Установка модуля disable_eval для php5.3 =====
для сборки модуля необходим phpize из пакета php-devel (centos) или php-dev (debian):
wget http://download.suhosin.org/suhosin-0.9.33.tgz --no-check-certificate
tar -xvf suhosin-0.9.33.tgz
cd suhosin-0.9.33
phpize
./configure
make
make install
echo 'extension=suhosin.so' > /etc/php.d/suhosin.ini
echo 'suhosin.executor.disable_eval = On' >> /etc/php.ini
echo 'suhosin.executor.func.blacklist = strip_tags' >> /etc/php.ini
echo 'suhosin.executor.eval.blacklist = strip_tags' >> /etc/php.ini
Так же если php-fpm использует отдельные модули, diseval необходимо подключить и к нему.
Для того что бы web подтянул новый модуль необходимо перезапустить nginx/httpd/php-fpm
===== Установка модуля disable_eval для php5.4 =====
для сборки модуля необходим phpize из пакета php-devel (centos) или php-dev (debian):
wget https://download.suhosin.org/suhosin-0.9.38.tar.gz --no-check-certificate
tar -xvf suhosin-0.9.38.tar.gz
cd suhosin-0.9.38
phpize
./configure
make
make install
echo 'extension=suhosin.so' > /etc/php.d/suhosin.ini
echo 'suhosin.executor.disable_eval = On' >> /etc/php.ini
echo 'suhosin.executor.func.blacklist = strip_tags' >> /etc/php.ini
echo 'suhosin.executor.eval.blacklist = strip_tags' >> /etc/php.ini
Так же если php-fpm использует отдельные модули, diseval необходимо подключить и к нему.
Для того что бы web подтянул новый модуль необходимо перезапустить nginx/httpd/php-fpm
==== Изменение memory_limit после установки disable_eval ====
Так как disable_eval отключает возможность выставлять размер памяти из php скриптов, необходимо внести изменения в php.ini:\\
Текущий лимит памяти можно посмотреть выполнив:\\
php -i | grep memory_limit
Для изменения лимита необходимо выполнить:\\
sed -i "s|memory_limit =|memory_limit = -1;|g" /etc/php.ini
Где /etc/php.ini это путь к .ini параметрам php (cli), аналогично нужно сделать и для fpm если он использует другой конфиг (обычно такое встречается у debian).\\
Найти путь к php.ini для cli и fpm можно командой:
find /etc -type f -name "php.ini"
===== Скрипт проверки на заражение =====
#!/bin/bash
FILES=(
/var/www/mikbill/stat/data/lib/new_js.php
/var/www/mikbill/stat/app/log/daily_draws.png
/var/www/mikbill/stat/app/log/monthly_draws.png
/var/www/mikbill/admin/res/fsb/css/plugins/datapicker/main.php
/var/www/mikbill/admin/res/fsb/css/plugins/datapicker/index.php
/var/www/mikbill/stat/sys/user_null/uid_null-2week.png
/var/www/mikbill/stat/data/template/olson/css/images/ui-icons_d38f41_256x240.png
/var/www/mikbill/stat/data/template/olson/font/fontawesome-webfontb31e.eot
/var/www/mikbill/stat/data/template/olson/font/fontawesome-webfontd94d.eot
)
for ITEM in ${FILES[*]}
do
if [ -f "$ITEM" ]; then
echo "suspicious file: $ITEM"
fi
done
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" \) -exec grep -H 'file_get_contents(.font_xpattr)' {} \;
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" -and ! -name "*.js" \) -exec grep -H '], .black_list' {} \;
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" -and ! -name "*.js" \) -exec grep -H 'eval(' {} \;
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" -and ! -name "*.js" \) -exec grep -H 'hooks.slack.com/services' {} \;
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" -and ! -name "*.js" \) -exec grep -H 'stripslashes' {} \;
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" -and ! -name "*.js" \) -exec grep -H 'get_magic_quotes_gpc' {} \;
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" -and ! -name "*.js" \) -exec grep -H '_is_curl_installed' {} \;
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" -and ! -name "*.js" \) -exec grep -H 'strip_tags' {} \;
find /var/www/mikbill/ -type f \( ! -name "*.log" -and ! -name "*.gz" -and ! -name "*.so" -and ! -name "*.js" \) -exec grep -H 'get_loaded_extensions' {} \;
Если в результате были найдены файлы и они не относятся к phpmyadmin, необходимо удалить/заменить на оригинальные файлы и запланировать [[billing:mikbill_goto_server|переустановку сервера]].\\
Удалить найденные файлы можно командой **rm -f путь_к_файлу**\\
Если выбивает ошибку то сделать **chattr -i путь_к_файлу** и повторить удаление.\\
Так же на чистый сервер советуем поставить IDS AIDE или Tripware.
===== Чистые файлы лк от версии 3.03.03 =====
Скачать архив {{ :billing:stat.tar |}} и распаковать его:
cd /var/www/mikbill/stat
rm -rf data
rm -rf res/paysystems
rm -f main.php
rm -f pay.php
wget https://wiki.mikbill.ru/_media/billing/stat.tar
tar xvf stat.tar
Далее необходимо поправить права и владельца файлов:
find /var/www/mikbill/stat -type f -exec chmod 644 -- {} +
find /var/www/mikbill/stat -type d -exec chmod 755 -- {} +
chown apache:apache -R /var/www/mikbill/stat