Як видалити вірус, троян або шкідливий код зі свого сайту

  1. Пошук і правка шкідливого коду на локальній копії сайту
  2. Корисні рекомендації
  3. На завершення

З заголовка має бути все зрозуміло - ми будемо займатися пошуками шкідливого коду на сайті під керуванням CMS (Content Management System) розробленої на мові програмування PHP З заголовка має бути все зрозуміло - ми будемо займатися пошуками шкідливого коду на сайті під керуванням CMS (Content Management System) розробленої на мові програмування PHP. Таких CMS досить багато і вони дуже популярні, наприклад: Wordpress, Joomla, DataLifeEngine, InstantCMS, E107, PhpBB і т.п. Сайт може працювати також на самопісний движку, в загалом не важливо, тому що принципи впровадження зловредів в код PHP всюди дуже схожі.

Принципи пошуку та чистки шкідливого коду, що я приведу нижче, можна використовувати практично на будь-якому сайті, що працює на будь-якому движку, який написаний не тільки на мові PHP а й на інших скриптових мовах.

Даний мануал швидше за все для тих веб-майстрів, які знають хоча-б ази PHP, оскільки потрібно буде проводити невеличкий аналіз коду і зуміти зрозуміти яка частина потрібна для сайту, а яка підозріла і становить загрозу.

Ну що ж, до справи ...

зміст:

  1. Пошук і правка шкідливого коду на локальній копії сайту
  2. Корисні рекомендації
  3. На завершення

Пошук і правка шкідливого коду на локальній копії сайту

Насамперед нам потрібно зробити повну резервну копію нашого сайту на локальний комп'ютер. Це необхідно, оскільки потрібно буде проводити пошук в файлах по їх вмісту, а по FTP або SFTP це здійснити складно і дуже дорого по тимчасових витратах.

Заходимо на свій хостинг в панель управління і запускаємо менеджер файлів, пакуємо всі скрипти сайту в архів і завантажуємо собі на комп'ютер по FTP або той же файловий менеджер. Хочу зауважити що завантажувати всі файли сайту (призначені для користувача фото, відео, мультимедіа контент) не обов'язково, головним чином нас цікавлять скрипти і настройки. Якщо сайт великий то мультимедіа контенту може бути досить таки багато, він нам буде зайвим і відніме тільки цінний час і ресурси, швидше за все в картинках і відео у вас на сайті немає нічого що може нашкодити сайту, оскільки веб-сервер не обробить скрипт написаний на PHP і перейменований в jpg або mp4.

У разі якщо у вас VPS то можна досить швидко упакувати сайт в архів за допомогою консольного архиватора 7z, ось приклад простої упаковки директорії з сайтом на ОС Ubuntu Linux:

# Apt-get install p7zip-full # 7z a site_com_backup.zip / var / www / data / site_com / * /var/www/data/site_com/.htaccess

  • / Var / www / data / site_com / - Шлях до директорії з сайтом.
  • а - параметр що вказує архіватор зробити упаковку файлів (Add).
  • / Var / www / data / site_com / * - вказуємо: потрібно пакувати все що є в директорії.
  • /var/www/data/site_com/.htaccess - додатково вказуємо що файл .htaccess теж пакувати (за замовчуванням такі файли виключаються)

У випадку з VPS архів досить надійно і безпечно качати по протоколу SFTP (SSH 22 порт) використовуючи програму WinSCP (Windows Secured Copy) - програма безкоштовна і може працювати в портабельная режимі. Свіжу версію завжди можна завантажити на офіційному сайті - http://winscp.net/

Для роботи нам знадобиться Total Commander, швидше за все у вас він вже встановлений, оскільки без нього в вебмастерскіх справах як без рук. Якщо у вас немає цього коммандера то його потрібно встановити, можна скачати з офіційного сайту програми - http://www.ghisler.com/download.htm

Тепер, коли у нас є архів з сайтом, потрібно його розпакувати в будь-яку зручну тимчасову директорію, наприклад в с: / TEMP. Розпакувати можна використовуючи Тотал Коммандер або будь-який з поширених архіваторів (7Zip, WinRAR, WinZIP), також Windows за замовчуванням підтримує роботу з стислими папками ZIP.

Заходимо Тотал командер в директорію з розпакованими файлами і починаємо викликаємо вікно пошуку файлів комбінацією клавіш ALT + F7 (пошук).

Там де "Шукати файли" ставимо зірочку * для пошуку по всіх файлах або * .php - для пошуку тільки по скриптах, ставимо галочку біля поля "З текстом" і нижче галочку "Регулярні вирази".

В поле "З текстом" пишемо рядок-регулярний вираз для пошуку, вона складається зі списку фрагментів коду, який будемо шукати

http: | href = | display | base64 | eval \ (| chr \ (

Коли все заповнено натискаємо "Почати пошук" і чекаємо завершення операції, тривалість залежить від потужності процесора вашого комп'ютера, а також від швидкості роботи з файлами вашого жорсткого диска (досить швидко шукає якщо у вас SSD).

За допомогою регулярного виразу ( Wiki: регулярні вирази ) Ми проводимо пошук в скриптах движка, які можуть містити шкідливий код.

Ось що ми шукаємо:

  • http: - так найчастіше починаються посиланням, крім того так можуть починатися і внутрісайтовие (корисні) посилання, потрібно буде переглянути уважно.
  • href = - те ж саме що і http:.
  • display - пошук CSS коду для прихованих блоків, в які часто ховають ссилочку в шаблонах і скриптах, як приклад: <a href="злосайт.ком" style="display:none"> сайт </a> в даному випадку посилання індексується але на сайті не відображається ніколи.
  • base64 - класика жанру, найбільш поширений спосіб шифрування PHP коду з різним шкідливим функціоналом - від проставляння посилання до трояна або бекдора. Ця функція з мови PHP також використовується в мирних, корисних цілях, наприклад в скриптах для відправки пошти і т.п., тому потрібно буде провести побіжний аналіз знайдених фрагментів коду.
  • eval (- функція виконання PHP коду переданого в рядку як аргумент. Часто використовують в комплексі з base64. Крім того дана функція часто використовується в мирних цілях, для ініціалізації змінних в движку і т.п.
  • chr (- функція виведення символу з зазначеним кодом, такими функціями можна зашифрувати будь-який шматок коду, тому якщо зустрінеться велика кількість таких викликів функції зібраних разом в одному скрипті то це цілком може бути обфусцірованний (спотворений, зашифровані) скрипт.

Увага: можливо ви ще зустрічали хитрі і незвичайні маскування коду з використанням інших порівняно рідкісних функцій PHP - відпишіться в коментарях, буде корисно мені і тим хто буде читати цю статтю!

По завершенню пошуку якщо файли знайдені то вони будуть відображені з повними абсолютними шляхами, тиснемо кнопочку "Файли на панель" щоб вивести всі ці файли в панелі Total Commander.

Для подальшої роботи нам знадобиться дуже зручний і функціональний редактор коду Notepad ++. Програма безкоштовна, завантажити її можна на сайті - notepad-plus-plus.org/ , Викачуємо, встановлюємо і запускаємо!

Тепер переглядаємо файли, переважно з розширенням * .php і по черзі відкриваємо їх в Notepad ++, хоча ... навіщо по черзі? - можна адже відразу відкрити всі! Для цього правою клавішею мишки виділяємо потрібні файли і затиснувши ліву кнопку миші на одному з виділених перетягуємо в вікно відкритого редактора Notepad ++ - і ось воно чудо: всі файли відкриті для редагування. ))

Далі натисканням комбінації клавіш CTRL + F викликаємо вікно пошуку. У вкладці Find в поле "Find what" вводимо рядок-регулярне вираження, по якому ми проводили пошук файлів:

http: | href = | display | base64 | eval \ (| chr \ (

У групі "Search mode" вибираємо "Regular expression" і натискаємо кнопку "Find all in all Opened Documents". Після цього в нижній частині редактора з'явиться вікно зі списком файлів і знайдених фрагментів коду для кожного з них.

Заздалегідь хочу вас попередити що знайдених файлів може бути досить багато, все залежить від движка і його структури, тому можна обмежитися пошуком найбільш небезпечних функцій:

base64 | eval \ (

Виробляємо перегляд коду і в разі виявлення дивного шматка клацають двічі на ньому щоб відкрити даний файл для редагування в основному вікні редактора.

По ходу виявлення і правок шкідливих ділянок коду вам потрібно записувати в блокнот повні шляхи і імена файлів в яких були зроблені зміни (це нам стане в нагоді при оновленні живого сайту). Щоб довго не морочитися, повний шлях до файлу можна скопіювати вибравши його вкладку в редакторі, клацнувши на ній правою клавой мишки і вибрати пункт "Full FIle Path to Clipboard", тепер йдемо в блокнот і натискаємо CTRL + V.

Щоб довго не морочитися, повний шлях до файлу можна скопіювати вибравши його вкладку в редакторі, клацнувши на ній правою клавой мишки і вибрати пункт Full FIle Path to Clipboard, тепер йдемо в блокнот і натискаємо CTRL + V

Після всіх правок файлів зміни в них потрібно зберегти - для цього натискаємо комбінацію клавіш CTRL + SHIFT + S.

Отже у нас є копія сайту з уже зробленими правками, а також в блокноті список файлів (і шляхів до них), в яких були зроблені зміни. Чи не розумно було-б заливати назад весь сайт, тому вам потрібно відшукати файли з блокнота і просто оновити їх на хостингу вашого сайту.

Зі свого досвіду можу сказати що таких файлів, в разі наявності зарази на вашому сайті, буде не так вже й багато - всього 1-5 в кращому випадку, так що оновлення скриптів на хостингу займе мінімум часу.

Корисні рекомендації

До доповнення до всього сказаного вище раджу вам уважно переглянути кореневої (в верхньому рівні директорій) файл .htaccess. Останнім часом почастішали випадки наявності в ньому різних редиректів на всякі сайти (при заході використовуючи мобільні пристрої) в слідстві злому або отримання доступу через бекдор ( Вікі: Бекдор ).

Дана методика не є панацеєю від усіх бід, складність скриптів і хитрість кулхацкер зростає з великою швидкістю, тому дозволю собі дати вам ще кілька порад якщо ваш сайт часто ламають:

  • Не купуйте сайтів у незнайомих джерел, яким ви не можете довіряти хоча б на 80%, такий сайт в разі наявності в ньому бекдора або трояна і розміщений на кульовому хостингу поруч з іншими вашими сайтами може заразити їх усіх. Перед установкою купленого сайту рекомендую провести пошук шкідливого коду описаним вище методом, а також зробити огляд того що вам упакували в якості файлів.
  • Ваш хостер, сам не підозрюючи того, може мати "дірки", які дозволяють користувачам з інших акаунтів використовуючи нехитрі особливості скриптів читати (а іноді навіть і писати ... буває і таке) довільні файли на сайтах вашого облікового запису знаючи відносні або повні шляхи до ним (їх обчислити не так вже й складно, наприклад php при досить високому рівні відображення помилок в разі виникнення помилки може розкрити повні шляхи до файлів в інформаційному повідомленні). Використовуйте сертифіковані або ж перевірені часом хостинги, про відгуки і рейтинги можна почитати на http://hosting101.ru/ або інших подібних сайтах, на додаток пошукайте відгуки про вашому хостингу на форумах, блогах.
  • Ваш хостер може виявитися "брудним", в якому працює частково "гнилої" персонал. Такий хостер може продавати іншим навмисне зроблені дірки на вашому сайті, тому ви можете собі довго попарити мозку перш ніж зрозумієте в чому вся суть проблем.
  • Найбільш, мабуть, надійний варіант це - свій VPS або виділений сервер, там ви сам собі Бог і самі все вирішуєте і тримайте під контролем. Досить непоганий хостинг FastVPS.ru - VPS від 2.9Е, працював з ними кілька років, сервера дуже швидкі, головне все добре налаштувати - в цьому плані вам також допоможуть, якщо немає необхідних навичок.

На завершення

Ну ось мабуть і все про що хотів поділитися в даній статті. Бажаю вам удачі в боротьбі з нечистю на вашому постраждалому сайті і нехай вона обходить ваші проекти 100500й дорогий!

Навіщо по черзі?