====== 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