Задать вопрос

Как узнать какой скрипт PHP создал файл?

Система Ubuntu Server 14.04, стоит Apache2, PHP и прочее. В системе завелся вирус, какой-то из скриптов создает периодически новые скрипты, рассылающие с сервера спам. Есть ли возможность отследить, какой скрипт создает эти файлы?
  • Вопрос задан
  • 2572 просмотра
Подписаться 3 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 3
daager
@daager
можно попробовать так:
Поиск файлов со строчкой "mail("
grep -iRI 'mail(' /var/www
или поставить maldet, или clamav, или
поиск php-файлов измененных за последние сутки
find /var/www -type f -name '*.php' -mtime -1
Ответ написан
Комментировать
@justin69
А вы логи самого почтового сервера смотрели? /var/log/ и там уже в зависимости от того, как у вас сервер установлен.
Ответ написан
Комментировать
@younghacker
Стандартных возможностей я не знаю.

Чтобы быстро "заткнуть" вопрос, поставьте на все файлы и каталоги которые не должны изменяться атрибут immutable при помощи chattr. Это ликвидирует возможность создать или изменить файл на диске до тех пор пока не будут повышены привилегии до рута. В каталогах куда пишутся временные файлы установите .htaccess с запретом инерпретации любых файлов как исполняемые.
php_flag engine 0
AddType "text/html" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp
и сам файл запретите изменять при помощи immutable:
chattr +i .htaccess

Можете сделать bash-python-php скрипт запускаемый по крону который будет бегать по указанному каталогу и подкаталогам и сверять список файлов с эталонным и обнаружив "левые" файлы или каталоги будет переносить их в специальный каталог-карантин недоступный снаружи и сразу создавать дамп системных журналов с момента своего последнего запуска. Это позволит получить франменты логов непосредственно предшествующих внесению изменений на диск.
Скрипт запускать ежеминутно, но отслеживать файлы именно по списку по критериям имя размер времена атрибуты. Не искать ничего внутри файлов чтобы не нагружать сервер. Обнаруживаете чужеродный файл — переносите в карантин. В конце часа шлёте себе оповещение. После этого у Вас будет материал для анализа проблемного места.

Скрипты рассылающие спам отлавливаются и другим способом. Для этого в iptables добавляете правила которые блокируют SMTP трафик и пишут лог. Например:

-A OUTPUT -o br0 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -d 127.0.0.1 -j ACCEPT
-A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -m owner --gid-owner mail -j ACCEPT
-A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -m owner --uid-owner root -j ACCEPT
-A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -m owner --uid-owner smfs -j ACCEPT
-A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -j LOG --log-uid --log-prefix "Reject outgoing SMTP "
-A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -j REJECT --reject-with icmp-admin-prohibited


После этого настраиваете свой rsyslog или что там у Вас, можно и zabbix, таким образом чтобы он слал оповещение когда в логе появляются записи "Reject outgoing SMTP ". В этих правилах вы видите разрешение работать почтовику поэтому стандартным мейлером скрипт-спамер сможет рассылать спам. Сделайте для него временно́е окно, ваша задача состоит в том чтобы отловить спамер-скрипт и проанализировать логи. Особенно http что там вызывали и с какими параметрами. Если можете поступить круче то вообще запретите вещание со всех портов кроме разрешённых 22, 80, и 443 (только очень аккуратно: — не лишите себя удалённого управления сервером).

Есть также возможность поставить утилиту которая будет мониторить изменения в каталоге и его вложениях. Например, incron : Inotify cron system. Она будет следить за указанными каталогами и как-только произойдут выбранные вами события выполнит скрипт. А в скрипте анализировать проблема это или легальная операция.

Из перспективных возможностей, пропатчить php так чтобы он при операциях и диском (создание и изменение файлов), он писал в специальный журнал. Это вполне реально, но разрабочики php не считают это важным и нужным. Хотя допускаю, что я плохо информирован и они уже работают или сделали эту фичу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы