Найти вирусы в php файлах

Тема в разделе "Администрирование серверов", создана пользователем Vishez, 27 апр 2017.

Модераторы: mefish
  1. Vishez

    Vishez

    Регистр.:
    19 авг 2013
    Сообщения:
    170
    Симпатии:
    81
    Кто нибудь знает команды в консоли для поиска вирусов(шеллов и тд) в пхп файлах? Думаю должно быть что-то типа такого

    grep -rn --include=*.php ./ -e 'eval'

    Только вместо 'eval' должна быть строка с включениями для разных вирусов. Eval впринципе кое-что находит но список слишком большой(сайты на джумле в основном) и файлов нужно просматривать много. По ctime найти не получается, так как менял права на все файлы и папки и теперь там везде практически одинаковое значение ctime

     
    Последнее редактирование: 27 апр 2017
  2. Viodele

    Viodele Ex. "Механик"

    Регистр.:
    17 дек 2011
    Сообщения:
    131
    Симпатии:
    554
    Самый банальный вариант - это поиск, с возможностью искать фразы в файлах. Список функций, которые могут неявно вызывать код можно глянуть тут: https://habrahabr.ru/post/215139/
     
    Vishez нравится это.
  3. luciolo

    luciolo Создатель

    Регистр.:
    28 сен 2016
    Сообщения:
    31
    Симпатии:
    20
    latteo и Vishez нравится это.
  4. Well-Web.net

    Well-Web.net Создатель

    Регистр.:
    27 апр 2017
    Сообщения:
    32
    Симпатии:
    7
    Лучше всего просканировать ai-bolit
    это будет и качетсвенней и покажет уязвимости, которые могут быть не только eval
     
  5. glavriba

    glavriba Создатель

    Регистр.:
    15 апр 2013
    Сообщения:
    48
    Симпатии:
    1
    Мне кажется, проще у себя на жестком диске чем-нибудь прогнать.
     
  6. SpackJarrow

    SpackJarrow Создатель

    Регистр.:
    25 мар 2017
    Сообщения:
    32
    Симпатии:
    18
    Значительно проще поступаю... Поставьте на сервер антивирусный пакет ClamAv, выполните обновление баз и запустите поиск по нужной директории, а лучше от корня. Лучше это не делать в час наибольшей нагрузки на сервак только.
     
  7. khokhlov.aser

    khokhlov.aser Постоялец

    Регистр.:
    1 дек 2015
    Сообщения:
    81
    Симпатии:
    129
    Вирусы могут быть не только через эвал.
    Давайте разберем:

    Для начала можно узнать какие файлы php были изменены за последние 7 дней (к примеру вы знаете что последнюю неделю ничего не меняли. Кол-во дней можно изменить)

    find . -type f -name '*.php' -mtime -7

    Следующие команды ищут php файлы содержащие атакующие сценарии.

    find . -type f -name '*.php' | xargs grep -l "eval *(" --color
    find . -type f -name '*.php' | xargs grep -l "base64_decode *(" --color
    find . -type f -name '*.php' | xargs grep -l "gzinflate *(" --color


    первый параметр поиска это директория поиска, точка означает текущий каталог (и все вложенные каталоги). Можно изменить этот параметр в любое существующее имя каталога для уменьшения результатов поиска

    Если вы удалите опцию -l из grep, он будет показывать текст совпавшего файла. Чтобы пойти дальше я бы воспользовался этой объединенной командой, которая является более общей

    find . -type f -name '*.php' | xargs grep -l "eval *(str_rot13 *(base64_decode *(" --color

    Совет: расширьте выражение для поиска функций, которые могут быть использованы злонамеренно, такие как mail, fsockopen, pfsockopen, stream_socket_client, exec, system и passthru. Можно скомбинировать все эти значения в одну команду:

    find . -type f -name '*.php' | xargs egrep -i "(mail|fsockopen|pfsockopen|stream_socket_client|exec|system|passthru|eval|base64_decode) *\("

    ---
    Наконец, вот не менее известный способ, что бы скрыть код:

    preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'5b19fxq30jD8d/wp5C3tQoMx4CQ

    FILE GOES ON FOR A LONG TIME......

    lnSELWEZJakW9R3f7+J+uYuFiiC318gZ9P8C'\x29\x29\x29\x3B",".");


    preg_replace с e модификатором будет исполнять этот код, он выглядит необычно, однако это просто сжатый в формате base64 php код использующий некоторые шестнадцатеричные коды символов.
    \x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28 переводится как eval ( gzinflate ( base64_decode (, а \x29\x29\x29\x3B, как )) ) ;

    Эта команда поможет вам найти использование preg_replace:
    find . -type f -name '*.php' | xargs egrep -i "preg_replace *\((['|\"])(.).*\2[a-z]*e[^\1]*\1 *," --color

    Совет: если вы получаете тонну результатов выполнения данной команды, можно сохранить результат в файл или перенаправить их в другую программу под названием less, которая позволяет просматривать результаты по одной странице за раз. Клавиша f отвечает за прокрутку вперед, клавиша q за выход.

    find . -type f -name '*.php' | xargs grep base64_ | less
    find . -type f -name '*.php' | xargs grep base64_ > results.txt


    ---
    Из своего опыта: часто код с вирусом располагается сразу после открытия тега <?php куча табуляций код вируса
    Тем самым скрывая себя при просмотре в текстовом редакторе.

    Совет: Используйте систему контроля версий (git, hg и т.д.) для того чтобы можно было быстро найти изменения и откатить их.
    Совет: Регулярно обновляйте вашу CMS и все ее пакеты. По возможности отключите возможность отправки файлов в формах.
    Совет: Регулярно меняйте пароли с админке/серверу/бд
    Совет: Не авторизуйтесь в админку/FTP/SSH на чужом компьютере. Это крайне не безопасно. Используйте обновленное антивирусное обеспечение.
     
  8. gsm-doctor

    gsm-doctor Писатель

    Регистр.:
    9 ноя 2013
    Сообщения:
    7
    Симпатии:
    1
    А как его поставить? У меня есть ftp для заливки файлов, куда его загрузить?
     
  9. khokhlov.aser

    khokhlov.aser Постоялец

    Регистр.:
    1 дек 2015
    Сообщения:
    81
    Симпатии:
    129
    Если у вас только хостинг, не выделенный сервер либо виртуальный сервер, то вы не сможете устанавливать пакеты самостоятельно. Но вы всегда можете спросить у службы поддержки о том какое антивирусное обеспечение они используют, как можно его использовать в вашей ситуации и возможно ли установить чтото еще.
     
  10. Tedjasudu

    Tedjasudu Создатель

    Регистр.:
    8 июл 2013
    Сообщения:
    18
    Симпатии:
    1
    Я бы рекомендовал также запретить использование опасных функций на уровне пхп. Это можно сделать через htaccess или конфиг пхп. Большинство из перечисленных функций никогда не используются популярными CMS, но востребованы для шелов.
    Для .htaccess
    php_value disable_functions 'exec, system, passthru, scandir, popen, shell_exec, proc_open, proc_close, proc_nice, get_current_user, getmyuid, posix_getpwuid, apache_get_modules, virtual, posix_getgrgid, getmyinode, fileowner, filegroup, getmypid, apache_get_version, apache_getenv, apache_note, apache_setenv, disk_free_space, diskfreespace, dl, ini_restore, openlog, syslog, highlight_file, show_source, symlink, disk_total_space, ini_get_all, get_current_user, posix_uname'

    для php.ini
    disable_functions = 'exec, system, passthru, scandir, popen, shell_exec, proc_open, proc_close, proc_nice, get_current_user, getmyuid, posix_getpwuid, apache_get_modules, virtual, posix_getgrgid, getmyinode, fileowner, filegroup, getmypid, apache_get_version, apache_getenv, apache_note, apache_setenv, disk_free_space, diskfreespace, dl, ini_restore, openlog, syslog, highlight_file, show_source, symlink, disk_total_space, ini_get_all, get_current_user, posix_uname';

    Для пхп-фпм:

    php_admin_value[disable_functions] = 'exec, system, passthru, scandir, popen, shell_exec, proc_open, proc_close, proc_nice, get_current_user, getmyuid, posix_getpwuid, apache_get_modules, virtual, posix_getgrgid, getmyinode, fileowner, filegroup, getmypid, apache_get_version, apache_getenv, apache_note, apache_setenv, disk_free_space, diskfreespace, dl, ini_restore, openlog, syslog, highlight_file, show_source, symlink, disk_total_space, ini_get_all, get_current_user, posix_uname'