Автоматическое сканирование на вирусы загружаемых файлов

Предположим, что имеется сервер, которым пользуется много клиентов. Клиенты при этом могут загружать на сервер свои файлы (например, у клиента стоит свой WordPress, через который он грузит картинки и прочие вещи).

Клиенты, как известно, как малые дети — тянут в рот всякую каку. В том смысле, что либо сами какую малварь могут загрузить, либо установить на свой сайт что-то очень дырявое, через которое злоумышленник может загрузить свои вредоносные файлы (чтобы далеко не ходить за примером, можно вспомнить про нашумевшуюуязвимость в TimThumb).

Нашей задачей, соответственно, будет недопущение подобных ситуаций.

Если у вас есть лишние $50, очень рекомендую ConfigServer eXploit Scanner .Если нет — читаем дальше.

Нам понадобятся: расширение для PHP под названием Suhosin (именно Suhosin extension, а не Suhosin patch, хотя патч тоже не повредит) и антивирус, способный работать из консоли, например, ClamAV .

После установки всего необходимого нужно немного изменить конфигурацию Suhosin (/etc/php5/conf.d/suhosin.ini или аналогичный файл): нужно найти строку suhosin.upload .verification_script и изменить её на что-то вида

suhosin.upload.verification_script = «/opt/upload-scanner.sh»

Затем создать файл /opt/upload-scanner .sh с таким содержанием:

#! /bin/sh

[ -n "$(clamscan --infected --no-summary "$1")" ] && echo 0 || echo 1

Затем нужно сделать файл исполняемым:

chmod +x /opt/upload-scanner.sh

и перезапустить Apache/PHP.

В случае, если есть возможность использовать clamdscan, лучше использовать именно его — это значительно ускорит процесс сканирования:

#! /bin/sh[ -n "$(clamdscan --fdpass --infected --no-summary "$1")" ] && echo 0 || echo 1

Проверить конфигурацию можно при помощи стандартного теста EICAR . Если всё настроено нормально, то в логе сервера при попытке загрузить такой файл будет ошибка вида

Jun 17 01:47:02 sjinks suhosin[1275]: ALERT - fileupload verification script disallows file - file dropped (attacker '1.2.3.4', file '/home/wordpress/wp-admin/async-upload.php')

Ключевая фраза — fileupload verification script disallows file.

Сам скрипт можно доработать, чтобы в случае попытки загрузки заражённого файла отправлялось оповещение на e-mail, файл помещался в карантин (вместо удаления), и т.д. — но это уже остаётся в качестве упражнения читателю.

Источник: http://blog.sjinks.pro/php/1128-scan-uploaded-files-for-viruses/