Лечение сайта от внедрений php-кода
Материал из 1GbWiki.
Версия 13:46, 7 мая 2014 (править) Rekby (Обсуждение | вклад) (→Файлы с расширением НЕ php, содержащие php код) ← К предыдущему изменению |
Текущая версия (13:34, 10 февраля 2018) (править) (отменить) Nans (Обсуждение | вклад) (→Файлы, которые лежат там, где лежать не должны) |
||
(11 промежуточных версий не показаны.) | |||
Строка 36: | Строка 36: | ||
===Файлы, содержащие подозрительные команды=== | ===Файлы, содержащие подозрительные команды=== | ||
- | grep -Hn "eval.*base64" -r . --include="*.php" | + | grep -Hn "eval.*base64" -r . --include="*.php" |
- | grep -lHnz -E 'base64_decode.*eval\s* | + | grep -lHnz -E 'base64_decode.*eval\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'shell_exec\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'exec\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'eval\s*(' -r . --include="*.php" |
- | grep -Hn "assert\s*( | + | grep -Hn 'mail\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'assert\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'create_function\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'gzuncompress\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'gzinflate\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'str_rot13\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'preg_replace\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'file_get_contents\s*(' -r . --include="*.php" |
- | grep -Hn | + | grep -Hn 'curl_exec\s*(' -r . --include="*.php" |
- | + | grep -Hn 'move_uploaded_file\s*(' -r . --include="*.php" | |
===Файлы с подозрительно длинными строками=== | ===Файлы с подозрительно длинными строками=== | ||
Строка 61: | Строка 61: | ||
Например для joomla при взломе php код часто попадает в папку с картинками | Например для joomla при взломе php код часто попадает в папку с картинками | ||
find http/images/ -type f -name "*.php" | find http/images/ -type f -name "*.php" | ||
- | + | ||
+ | for j in `for i in images js css img javascript; do find . -type d -iname $i; done`; do find $j -iname '*.php'; done | ||
===Посмотреть точное время изменения файла для поиска по логам=== | ===Посмотреть точное время изменения файла для поиска по логам=== | ||
ls --full-time 123.php | ls --full-time 123.php | ||
+ | ===Поиск base64 и обфускации кода, в которые очень часто шифруется всякая дрянь=== | ||
+ | Одна команда найдет практически все факты заражения - но и много нормальных здоровых файлов, поэтому её следует использовать с осторожностью и повышенной внимательностью | ||
+ | egrep -r '[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+' . | ||
- | ===Сложные случаи=== | ||
- | ====Сканеры с подробным отчетом==== | ||
- | Яндекс и гугль выдают только факт заражения сайта/страницы, без уточнения деталей. Для более подробного ответа можно воспользоваться другими сканерами, например | ||
- | http://sitecheck.sucuri.net/scanner/ | ||
- | |||
- | ====Проверка трафика==== | ||
- | # Установите программу-прокси [http://fiddler2.com/ Fiddler2], при запуске она сама прописывается в качестве прокси по умолчанию в популярные браузеры, потом при завершении снова отключается. | ||
- | # Очистите кэш и куки браузера - это важно, часть вирусов проверяют куки и выдаются каждому посетителю только 1 раз | ||
- | # Зайдите на сайт и посмотрите есть ли подозрительные запросы, особенно на сторонние домены | ||
- | # Если нет - попробуйте сначала найти сайт в поисковике, потом перейдите на него из поисковика - это тоже может учитываться. | ||
[[Категория:Безопасность]] | [[Категория:Безопасность]] |
Текущая версия
Данная статья предназначена для технических специалистов. Вы должны знать основы программирования, уметь пользоваться консольными программами и официальной документацией от разработчиков. В связи с тем, что на сервере могут обновиться версии программ, измениться конфигурация приложений, документация в статье может не соответствовать действительности, поэтому вы должны быть готовы разобраться с возможными проблемами самостоятельно или с помощью специалистов из платной поддержки http://1gbsup.ru/paidsu/, обычная поддержка хостинга не оказывает консультации по установке и отладке скриптов и лечению сайтов. |
Примерный список действий, которые необходимо выполнить. Предполагается что у вас есть доступ к сайту по ssh. В каждом пункте дано краткое описание того что нужно сделать и примеры команд.
Для вычищения кода сайта необходимо найти и вручную проверить подозрительные файлы. Потом поискать на сайте все файлы, которые могут быть похожи на найденные. Когда файлы найдены нужно посмотреть время их изменения, посмотреть логи веб-сервера за указанное время, поискать подозрительную активность. Если что-то нашлось - посмотреть все запросы с этого же ip адреса, возможно выявятся какие-то новые, ранее не найденные дырки. Через такой анализ логов можно понять как сайт был заражен и лечить его местно.
После проведения ручной чистки нужно удалить с сайта всё что не требуется для его работы - старые копии сайта, содержимое кэша (он создастся заново), файлы из временных папок.
Если сайт на каком-то популярном движке - ПОСЛЕ вычищения всего вредоносного кода нужно обновить его до последней версии.
[править] Проверить .htaccess
Проверьте .htaccess на предмет наличия подозрительных записей. При проверке нужно включить в редакторе перенос длинных строк, т.к. часто злоумышленники добавляют в начало вредоносных строк много пробелов, чтобы при беглом взгляде вредоносный код был незаметен. Так же стоит просмотреть весь .htaccess а не только видимое начало - перед вредоносным блоком может быть много пустых строк.
[править] Найти последние измененные файлы
Посмотреть какие файлы менялись за последнее время (3 дня, неделю, месяц)
find . -type f -mtime -3 find . -type f -mtime -7 find . -type f -mtime -30 find . -type f -mtime -30 -name="*.php"
Файлы, которые были созданы в последний месяц
find . -type f -ctime -30
Можно посмотреть файлы, которые менялись больше недели назад и меньше месяца назад
find . -type f -mtime +7 -mtime -30
[править] Файлы, содержащие подозрительные команды
grep -Hn "eval.*base64" -r . --include="*.php" grep -lHnz -E 'base64_decode.*eval\s*(' -r . --include="*.php" grep -Hn 'shell_exec\s*(' -r . --include="*.php" grep -Hn 'exec\s*(' -r . --include="*.php" grep -Hn 'eval\s*(' -r . --include="*.php" grep -Hn 'mail\s*(' -r . --include="*.php" grep -Hn 'assert\s*(' -r . --include="*.php" grep -Hn 'create_function\s*(' -r . --include="*.php" grep -Hn 'gzuncompress\s*(' -r . --include="*.php" grep -Hn 'gzinflate\s*(' -r . --include="*.php" grep -Hn 'str_rot13\s*(' -r . --include="*.php" grep -Hn 'preg_replace\s*(' -r . --include="*.php" grep -Hn 'file_get_contents\s*(' -r . --include="*.php" grep -Hn 'curl_exec\s*(' -r . --include="*.php" grep -Hn 'move_uploaded_file\s*(' -r . --include="*.php"
[править] Файлы с подозрительно длинными строками
grep -Hn -E '[^\ ]{200,}' -r . --include="*.php"
[править] Файлы с расширением НЕ php, содержащие php код
grep -lHnz -E '<\?(php)?[[:space:]].*\?>' -r . --exclude="*.php"
[править] Файлы, которые лежат там, где лежать не должны
Например для joomla при взломе php код часто попадает в папку с картинками
find http/images/ -type f -name "*.php" for j in `for i in images js css img javascript; do find . -type d -iname $i; done`; do find $j -iname '*.php'; done
[править] Посмотреть точное время изменения файла для поиска по логам
ls --full-time 123.php
[править] Поиск base64 и обфускации кода, в которые очень часто шифруется всякая дрянь
Одна команда найдет практически все факты заражения - но и много нормальных здоровых файлов, поэтому её следует использовать с осторожностью и повышенной внимательностью
egrep -r '[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+' .