Эта статья касается не только сайтов opencart. Взлом сайта может быть осуществлен на любой cms. Буквально пару часов назад я столкнулся с такой проблемой и хочу поделиться с вами алгоритмом действий, который я применял для того чтобы вычистить сайт от заразы (пока свежо в памяти)

Стоит оговориться, что это уже не первый мой опыт очистки сайта от зловредного кода.

Как понять, что сайт взломан?

Есть несколько способов определить это

  1. Хостер сообщает, что отправка писем отключена, т.к. их отправляется слишком много с ваших сайтов
    Большинство вирусописателей зарабатывают на спаме, поэтому сначала они заражают ваш сайт, а потом отправляют письма с вашего сайта.
  2. Сайт перестал открывается или идет перенаправление на другой сайт.
    Трафик - еще один способ заработка для хакеров. Он льет трафик с вашего сайта на другой ресурс и получает за это денефку.
  3. На сервере появились php фалы со странными именами и/или странным содержанием
    Правило хорошего хакера: "Файлы должны быть незаметны, а их содержимое должно быть непонятно". Файлы обычно именуются рандомным набором букв (wjgvqmck.php), а содержимое - головоломку для программиста (eval($boshm[1]($boshm[2]));exit();). Чтобы их нельзя было вычислить и заблокировать.

Каким образом сайт ломают?

Чаще всего хакер находит уязвимость и заливает на ваш сайт файл, а остальное уже дело техники. Не всегда это делает человек. Искать уязвимости и заливать файлы может и робот.

Еще встречаются случаи, когда прописывают в файл (например index.php) вредоносный код.

Давайте рассмотрим причины, которые могут повлечь за собой взлом сайта.

  1. Вы качаете модули/плагины/шаблоны бесплатно, которые на других ресурсах продают.
    Это схема №1 в руках злоумышленника. Он покупает шаблон за 2000 р., вставляет в нужное место свой код и распространяет его бесплатно. Счастливые пользователи качают, а хакер зарабатывает. Его маржа прямопропорциональна кол-ву скачавших и обратнопропорциональна стоимости шаблона. Все ж Маркса читали. Нет? :))
  2. Вы храните пароли на почте/в файле или передаете их третьим лицам, которых вы не знаете и потом не сможете найти
    Схема достаточно редкая, но упомянуть ее стоит, а заодно напомнить вам не открывать ссылки из почты напрямую и не запускать подозрительные файлы, скаченные все с тех-же ресурсов из п.1
  3. Вы считаете, что "программисты зажрались".

    Кто напишет в комментариях на какую букву в слове "зажрались" ударение - тому респект и уважуха.

    Суть тут такова: вам называют цену за работу n рублей, а вы ищите и находите программиста за n/5 рублей.
    Профит.
    Вы сэкономили - студент не остался голодным - злоумышленник полетел в отпуск в "Белек".
    Тут конечно не все так очевидно. Порой вы и за n*5 рублей можете попасть. Дельных советов тут не дам. Сами ориентируйтесь.

  4. Я бы озаглавил это причину словами моего сержанта из армейки.

    Каждый человек по своему прав, а по-моему нет.

    Просто не создавайте конфликты и старайтесь избегать конфликтных ситуаций. Не будьте "этим сержантом" - и у вас все будет хорошо.

Как вычищать сайт от вредоносного кода

Предположим вам не повезло и вы не читали ранее эту статью. А может быть вы программист, которого попросили помочь. В любом случае мы добрались до самого интересного.

Больше всего я люблю, когда есть взлом и есть SSH доступ к сайту. К сожалению, в основном SSH доступ есть только на VPS. Но некоторые хостеры предоставляют и к обычному хостингу SSH. Например "Таймвеб" - очень рекомендую к ним присмотреться.

Если вам повезло и вы нашли этот злополучный файл. Не спешите его удалять. Загляните во внутрь и поищите там, среди все этой абры-кадабры человеческие слова. Скорее всего файл обфусцирован, но мне встретились такая строчки "$ncojx[7]($_COOKIE, $_POST)". Естественно, что переменная $ncojx, а вот то, что после - "[7]($_COOKIE, $_POST)" - то, что нам нужно запомнить. Файл-то такой скорее всего не один и нам нужно найти их все.

Алгоритм действий при взломе, если мы знаем что внутри файлов.

  1. Не паниковать. Конечно же паниковать панику! Вас же взломали и дальше будет только хуже.
  2. Подключаемся по SSH к серверу/хостингу
  3. Вводим следующую строку: find -name \*.php | xargs grep -l "\[7\](\$_COOKIE, \$_POST)"
    Если человеческим языком - мы ищем все php файлы, внутри, которых есть та строка, которую мы запомнили.
  4. Внимательно ознакомьтесь со списком файлов.
  5. Если в этом списке есть файл, который используется в cms - нужно открыть его в блокноте, найти там весь код. Он обычно сильно отличается от того, что должно быть в файле.
  6. Удалить только строки, которые не принадлежат оригинальному файлу.
  7. Повторяем команду из п. 3: find -name \*.php | xargs grep -l "\[7\](\$_COOKIE, \$_POST)"
  8. Теперь мы видим, что все файлы имеют рандомный набор букв/цифр
  9. Удаляем файлы такой командой: rm $(find -name \*.php | xargs grep -l "\[7\](\$_COOKIE, \$_POST)")
  10. Повторяем команду из п.3, чтобы убедиться в отсутствии таких файлов

А вот если не повезло? - спросите вы. И мы не знаем какой файл и что там внутри.

Почти наверняка в таких файлах содержится php функция "eval". Но искать "eval" не логично, т.к. в результат попадут файлы, внутри которых есть слова "pereval", "jevalit" и другие. Использовать "eval(" - опять будет много файлов. Советую их просто просмотреть бегло. Мы же помним, что хакеры нас хотят запутать. И они часто прибегают к такому труку: Пишут в коде не eval($fdsgdfg), а eval/*gbhfgdh*/($fdsgdfg). Хитро. Так мы не можем найти его "eval("

Я твой DOM youtube eval 🙂

Алгоритм действий при взломе, если мы НЕ знаем что внутри файлов.

  1. Паниковать еще больше, чем в предыдущем абзаце. Мы же не знаем что внутри файлов 😉
  2. Подключаемся по SSH к серверу/хостингу
  3. Вводим следующую строку: find -name \*.php | xargs grep -l "eval/"
    Если человеческим языком - мы ищем все php файлы, внутри, которых есть та строка, которую мы запомнили.
  4. Внимательно ознакомьтесь со списком файлов.
  5. Если в этом списке есть файл, который используется в cms - нужно открыть его в блокноте, найти там весь код. Он обычно сильно отличается от того, что должно быть в файле.
  6. Удалить только строки, которые не принадлежат оригинальному файлу.
  7. Повторяем команду из п. 3: find -name \*.php | xargs grep -l "eval/"
  8. Теперь мы видим, что все файлы имеют рандомный набор букв/цифр
  9. Удаляем файлы такой командой: rm $(find -name \*.php | xargs grep -l "eval/")
  10. Повторяем команду из п.3, чтобы убедиться в отсутствии таких файлов

Подведем итоги

Если вы хотите, чтобы ваш сайт подвергся взлому:

  1. Качайте модули/плагины/шаблоны только с варезных сайтов
  2. Храните пароли в почте, ну или на крайняк файле
  3. Используйте пароль "123456" ну или в крайнем случае "qwert12345". Словарные слова тоже подойдут.
  4. Всегда открывайте ссылки из почты и запускайте подозрительные файлы
  5. Конфликтуйте с программистом, ведь клиент всегда прав
  6. Нанимайте только тех, кто дает самую низкую цену.
  7. Не читайте эту статью до конца и не пользуйтесь хостингом с SSH

 

Ответы

Ваш e-mail не будет опубликован. Обязательные поля помечены *

+