Pull to refresh

Хак сайта на WordPress, кому все это нужно и советы как этого избежать

Reading time 11 min
Views 43K

Привет хабраUser!


Эта история началась около 2-х месяцев назад, когда мой хороший друг Александр, оказывающий услуги хостинга, при очередной проверке всех виртуальных машин антивирусом обнаружил подозрительный .js файл в корневой директории моего сайта, в VDS которую обслуживаю я сам, тогда я не придал этому значение… Но думаю любой администратор хостинга сразу забеспокоился бы.
Закончилось все, спустя только 2 месяца, после блокировки моего сайта корпорацией добра:
image

По тексту, я хочу рассказать Вам:


1. С какими проблемами я сталкивался и как воспринимал их.
2. Как нужно было бы реагировать на самом деле.
3. Кто мне помог в решении проблем и в чем заключалась помощь.
4. Какие выводы я сделал для себя, оказавшись на грани срыва.
5. Кому все это нужно?
6. Практические советы.
7. Подарю новогоднее настроение если позволит НЛО.


Краткое содержание:


Взлом, дальше с VDS начали происходить интересные вещи: Спам рассылки по нескольким тысяч адресатов, установка подозрительных скриптов, появление странных файлов в корне основного сайта. Скажу честно — было страшно… Но похоже я победил тьму).


Вступление:


Я пишу эту статью, еще и как записную книжку, что бы можно было к ней вернуться в случае повторения проблем. Кому интересен процесс борьбы со зловредами, он будет описан ниже. Букв будет много, поэтому, кому нужны практические советы — листаем до конца.

Как взломали мой сайт на моем же хостинге на Debian Wheezy или Хак сайта на WordPress и кому все это нужно


С какими проблемами я сталкивался и как воспринимал их.

Я успокоился сразу после того как не нашел тот самый js скрипт у себя на сайте. Сейчас понимаю, что это было роковой ошибкой.
Мой сайт крутится на Debian Wheezy, установлена панель управления хостингом i-mscp (преемница ispcp), есть еще несколько сайтов, тоже личные, поэтому администратор я один и ни кому не даю доступ на свою VDS.

Все было настроено хорошо, думал я, и поэтому не парился по поводу безопасности, пользовался рутовым ssh и ставил скрипты сторонних писателей на сайт для экспериментов. Сайт на WordPress и для него просто неимоверное количество плагинов. На проверку которых я не уделял времени. Сайт рос и пополнялся все новыми плагинами и скриптами…
Зачем тебе нужные все эти плагины\расширения\скрипты?

Спросил однажды меня мой друг. Я ответил, что мне нужен “социализированный” сайт и мне нравится экспериментировать с различными скриптами, видеть как они влияют функционал сайта и его внешний вид. Я Все время пытался что то улучшить…

Проблема номер два

Прошло 2 недели, после того как я не отреагировал на первую угрозу. Я поимел следующую проблему.
Сижу на работе, и вдруг, мне в почту gmail, в папку spam начинают падать сообщения от моего почтового сервера postfix (там у меня настроена пересылка на личную почту) о том что, такое то сообщение не доставлено. Примерно 50 сообщений, о недоставке, в секунду.
Захожу на сервер и смотрю лог:
tail -f /var/log/mail.log

А там просто неимоверная скорость записи сообщений, останавливаю почтовик:
/etc/init.d/postfix stop

Спам прекращается, пытаюсь выяснить как идет рассылка, но из-за нехватки опыта ни чего не понимаю.
Опытным путем удается выяснить, что если переименовать корневую директорию основного (sysrtfm точка ру) сайта или заблокировать домен в панели управления хостинга, то спам прекращается.
Приходит осознание того, что подломали основной сайт, но как?
Очищаю ВСЮ очередь почтовика на всякий:
postsuper -d ALL
(удаляется ~10000 писем)
часов 8 проверял руками директории сайта на наличие левых скриптов, отключал все плагины, запускал почтовик и снова получал рассылку( грустная рожица

Тут случайно, в корневой директории сайта, обнаруживаю папку css с файлом /css/sys0972500-1.php. Зная примерную структуру своей CMS, понимаю, что его такого файла быть не должно. Скачиваю резервную копию за прошлый месяц, распаковываю, и вижу, что файла там точно быть не должно. Как он там оказался? Этот вопрос пока без ответа, но права у него такие же как у остальных файлов.
Читаем лог апача:
tail -f /var/log/apache2/sysrtfm.ru.log

и видим там:
"POST /css/sys0972500-1.php HTTP/1.1" 404 55665 "-" "-" 

почти каждые 30 секунд.
Видимо кто то запускает этот скрипт издалека, инициируя рассылку.
Казалось бы, заблокировать IP и все, но он почти так же часто меняется. Удалил директорию с файлом, рассылки прекратились. Не приняв, практически, ни каких противодействий, т.к. не понял как произошёл взлом, оставил проблему как есть. Только сменил рутовый пароль на более сложный и по отключал плагины и скрипты которыми уже не пользуюсь.

Следующей обнаруженной проблемой стало, то что, на столько популярный движок WordPress, что его пытается подломать все кому не лень. Почитав логи Apache2, понял, что идет постоянная brute-force login attack на форму входа в административную панель. Но т.к. я об этом давно подозревал, у меня уже был установлен плагин блокировки пользователя после нескольких неудачных попыток входа (User Locker).
tail -f /var/log/apache2/sysrtfm.ru.log

видим там:
"POST /wp-login.php HTTP/1.0" 200 6891 "http://sysrtfm.ru/wp-login.php" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10"

С очень высокой периодичностью. Защита от этого метода атаки, это тема для отдельного разговора. Тут я пока поставил дополнительный плагин, блокирующий атакующего по ip адресу после нескольких попыток входа.

Проблема номер три

Прошло 3 недели без спама и левых скриптов.
Зашел на VDS проверить логи и обнаруживаю, что в корне сайта все тот же файл, и опять запускается рассылка, но в гораздо меньших объемах… Взялся за голову.
Начинаю сканировать сайт online антивирусами:

Поиск по форумам результата не дает. Но нахожу одну статейку, которая мне очень помогла) До сих пор, вкладку с ней держу открытой.
В ней описывается процесс включения расширенного логирования почтового сервера, для того чтобы понять какой скрипт запускает рассылку.

Исходный текст статьи под спойлером
Итак, имеем сервер на базе Debian.
Жалоба на исходящий спам с сервера.

Задача: очистить очередь отправлений и обнаружить причину.
Решение: вариантов, конечно, много. Рассмотрим один из них.

1. Подключаемся по SSH и смотрим очередь писем:
mailq

Да, писем много.

2. Отключаем почтовый сервер (стоит postfix)
/etc/init.d/postfix stop


3. Смотрим на соединения на 25й порт:
netstat -apn | grep :25

Если Established нет — значит, спам рассылается не через вредоносный скрипт, который отправляет почту в обход локального почтового сервера.

4. Очищаем очередь писем
Exim:
exipick -i | xargs exim -Mrm

Postfix:
postsuper -d ALL

Sendmail:
rm -rf /var/spool/mqueue/*

Конечно, при условии, что мы это сделать можем (в очереди могут быть реальные письма реальным пользователям).
postsuper -d ALL
postsuper: Deleted: 72849 messages


5. Пробуем включить расширенное логирование почты:
mv /usr/sbin/sendmail /usr/sbin/sendmail.org
touch /usr/sbin/sendmail
chmod +x /usr/sbin/sendmail

echo -n '#!/bin/bash
logger -p mail.info sendmail-ext-log: site=${HTTP_HOST}, client=${REMOTE_ADDR}, script=${SCRIPT_NAME}, pwd=${PWD}, uid=${UID}, user=$(whoami)
/usr/sbin/sendmail.org -t -i' > /usr/sbin/sendmail


6. Запускаем почтовый сервер
/etc/init.d/postfix start


7. Смотрим логи
tail -f /var/log/mail.info

Видим что-то вроде:
Jan 23 16:25:25 danma logger: sendmail-ext-log: site=, client=, script=send.php, pwd=/var/www/danma/data/www/site.ru, uid=33, user=www-data
Jan 23 16:25:25 danma postfix/pickup[11520]: E3CD259403D: uid=33 from=
Jan 23 16:25:25 danma postfix/cleanup[11522]: E3CD259403D: message-id=


Обращаю внимание, что это один из вариантов действий.
Если есть ID письма в жалобе — стоит посмотреть его в логах отправлений.
Бывает так, что на сервере стоит опенрелей.
А еще бывает, что просто подобрали пароль к ящику — на это так же стоит обратить внимание!

Взято от сюда, Автору спасибо!

После включения логирования я увидел, что спам рассылка запускается от этого скрипта (/css/sys0972500-1.php), но это было уже после того когда файл с директорией css появился в 3-й раз…
Как все таки меня подломали? Где? пока я это выяснял меня заразили еще чем то…

Проблема номер четыре

В этот раз мне написал друг, сказав, что на мой сайт его не пускает антивирус касперского,
image
а с другого компа не пускает гугл хром, показывая ту самую красную заглушку из шапки этой статьи… Я был очень огорчен увидев, что гугл забанил мой сайт, написав в панели инструментов вэбмастера примерно следующее:
“С вашего сайта производилась установка вредоносного ПО на клиентские ПК пользователей. Ссылки с которых производилась установка ниже:
Несколько ссылок с сайта”

Яндекс ни чего не подозревал…

Сразу скажу, проблему получилось победить достаточно быстро. Вот что я делал:
  1. Отключил кэширующий плагин CMS, для того чтобы файлы генерировались снова, а не брались вредоносные из кэша
  2. Еще раз проверил сайт по базам online антивирусов, реально пригодился больше всего вот этот antivirus-alarm ru
  3. т.к. в этой проверке было написано:
    содержит сомнительную ссылку по версии гугла: feeds feedburner com
    содержит сомнительную ссылку по версии гугла: www facebook com
    содержит сомнительную ссылку по версии гугла: www liveinternet ru

    То снова по отключал пачку сторонних плагинов Wordpress, социальные кнопки, комментарии итд…
    Переход на сайты соц сетей, куда был кроспостинг моих статей были так же запрещены гуглом, из-за того, что там содержались материалы с моего сайта
  4. Создал запрос в тех поддержку гугл на пересмотр решения о блокировке (на той же странице где описана причина блокировки, раздел “Проблемы безопасности”)
  5. Заполнил форму для сообщения о неверном предупреждении о фишинге.
  6. Т.к. 2 последних пункта рассматриваются 24 часа, я начал активно искать причину возможного взлома. Тут до меня доходит, что я не проверял ftp!
  7. Читаем лог proftpd сервера:
    cat /var/log/proftpd/xferlog
    

    находим там очень интересное:
    176.28.52.119 42278 /var/www/virtual/sysrtfm.ru/htdocs/css/sys0972500-1.php a _ i r admin@sysrtfm.ru ftp 0 * c
    

    И тут я все понял….(грустный смайлик( подломали аккаунт admin@sysrtfm.ru, я быстро поменял пароль и логин. А так же заблокировал все остальные ftp аккаунты. Проверив, что они ни где не задействованы.
    Нашел еще запись:
    31.7.234.34 0 /var/www/virtual/sysrtfm.ru/htdocs/css/c3x.php b _ o r admin@sysrtfm.ru ftp 0 * c
    

    Это все из той же оперы, файлы удалил, но причина блокировки была не в этом.
  8. Дальше завел тему в форуме технической поддержки вэбмастеров гугл тут.
    Там добрые люди, нашли в скриптах, загружаемых с сайтом интересные вещи)
    Что сделал зловред:
    — Модифицировал через ftp файл wp-content/plugins/usernoise/js/usernoise.js приписав в самый конец еще один скрипт: /wp-includes/images/smilies/skynet.js
    Оказалось, что этот скрипт выполнялся только если браузер не гугл хром, загружая на ПК пользователя вредоносное ПО.
    — Затем был заражен файл /wp-content/plugins/lazy-load/js/lazy-load.js в который был прописан скрипт /wp-includes/images/crystal/gocubs.js
  9. Скачал программой WinSCP сайт на свой локальный диск, запустил total commander, перешел в скачанную директорию и запустил поиск выражений по всем файлам:
    cr"±"ipt
    skynet.js
    doc​ument.write
    

    Все найденные вхождения почистил. И вроде даже ни чего лишнего не удалил.
  10. Проверил вручную все скрипты, загружаемые браузером на наличие этих вхождений. Ни чего больше не обнаружил

Спустя 12 часов гугл разблокировал мой сайт, но статистика все равно просела(
Сейчас проблема решена, но теперь я сделал много выводов….

Как нужно было бы реагировать на самом деле.

Сейчас я понимаю, что таких проблем на сайтах любого уровня допускать нельзя, от этого зависит не только ваша безопасность и финансовое положение, но и наиболее важная финансовая безопасность ваших клиентов…
Если бы я отреагировал правильно еще 2 месяца назад, на сообщение моего друга о найденном подозрительном файле js в папке с картинками. Все было бы иначе.
Это стало мне серьезным уроком и теперь я буду более серьезно смотреть на такие вещи! Чего советую и всем начинающим вэб программистам и не только!

Кто мне помог в решении проблем и в чем заключалась помощь

  1. Александр Крайнев — техническая и моральная поддержка, подсказки и советы, хостинг с защитой от ddos (itservices.su) на котором лежит мой сайт.
  2. Google аналитика — не только инструмент для SEO, но и средство поиска уязвимости. Там я смотрел куда чаще всего стучатся пользователи, как и в более примитивном инструменте статистики сайта AWStats. Например у меня, в топ 10 посещаемых страниц входит в первое место страница авторизации WP)))) как не странно тот самый брут форс, нужно что то с этим делать.
  3. Форум инструментов вэбмастеров гугл — очень полезная, оказалось, штука!, всем советую.
  4. Панель отладки Google Chrome — без нее я вообще ни чего не сделал бы… (жмем F12 на исследуемой странице и исследуем исследуем исследуем).
  5. Putty, WinSCP, TotalCommander — как без них) всегда под рукой!


Какие выводы я сделал для себя, оказавшись на грани срыва

Нельзя доводить проблему до такого состояния. Возникшие проблемы с моим сайтом, и возможные проблемы с сайтами клиентов — только моя проблема из-за нехватки компетенции, которую буду наращивать в усиленном режиме ближайшее время.

Кому все это нужно?

Кому все это нужно? Все эти атаки, вирусы, шпионские программы? Многие знают ответ на эти вопросы. Я опишу свою точку зрения:

Есть множество людей\программистов\зловредов которые зарабатывают на том, чтобы предоставить ресурс для рекламных площадок или собирают информацию для ее дальнейшего использования все в тех же рекламных целях. Я думаю, что большинство атак на сайты и зловредных программ существуют для этих целей.
Рекламные компании в последующем покупают этот ресурс, чтобы подороже продать своим клиентам эту рекламную площадку.
Только представьте сеть из 100000 взломанных сайтов на бесплатном движке для блога — их взломал программист-зловред. Продал этот ресурс рекламной компании, рекламная компания готовит материал или ссылки для публикации, а программист в несколько кликов запускает всю эту компанию на взломанных сайтах, этот огромный трафик приносит колоссальные деньги по всему интернету.
Естественно возможных применений может быть масса, от безвредных школьников, которые просто учатся взламывать, до установки вредоносного ПО и кражу личных данных пользователей (передача 3-им лицам параметров кредитных карт, логинов и паролей от соц сетей) Все это носит глобальный характер и программисты-зловреды постоянно ищут уязвимости сайтов и популярных ресурсов.

Практические советы

Таких советов в интернете великое множество, я соберу тут действительно стоящие ИМХО:
  1. Никогда, ни в коем случае не оставляйте стандартные и простые имена пользователей для авторизации на своих сервисах (admin, user, login, administrator итд). Это позволит повысить защищенность на 50% минимум. Плюс к этому используйте капчу или проверку на человечность;
  2. Всегда делайте бэкап, тут не может быть вопросов, резервная копия должна быть всегда! Я например делаю РК локально и раз в ночь сливаю скриптом на яндекс диск через Webdav, а с диска раз в неделю перемещаю все на домашний компьютер:
    Bash скрипт монтирования ЯД, копирования РК и отправки уведомления:
    #!/bin/sh
    # время, когда запускается бэкап
    STARTB="`date +%Y-%m-%d-%H:%M:%S`" 
    # расположение резервных копий
    BACKUPDIR1="/var/www/virtual/sysrtfm.ru/backups/"
    # куда смонтирован яндекс диск
    YDISK="/mnt/yandex.disk"
    # папка на яндекс диске в которую копируем РК
    BTDIR="siteback"
    # путь до папки для РК на ЯД
    TARGETDIR="${YDISK}/${BTDIR}/"
    DATETIME="`date +%Y-%m-%d-%H_%M_%S`"
    # уникальное имя логфайла
    LOGFILEDATE="`date +%Y%m%d`"
    # путь до логфайла
    LOGFILE="/var/log/backupall-${LOGFILEDATE}.log"
    echo `date +%Y-%m-%d-%H:%M:%S`" старт бэкапа" >> $LOGFILE
    # размонтируем диск на всякий пожарный
    umount -f $YDISK >> $LOGFILE
    # монтируем ЯД
    echo `date +%Y-%m-%d-%H:%M:%S` "монтируем ${YDISK}" >> $LOGFILE
    mount -t davfs https://webdav.yandex.ru:443 $YDISK >> $LOGFILE
    #запуск РК
    echo `date +%Y-%m-%d-%H:%M:%S` "бэкапим в ${TARGETDIR}${DATETIME}" >> $LOGFILE
    mkdir ${TARGETDIR}${DATETIME} >> $LOGFILE
    cd $BACKUPDIR1 >> $LOGFILE
    cp -r -f -p * ${TARGETDIR}${DATETIME} >> $LOGFILE
    umount -f $YDISK >> $LOGFILE
    #отправляем админу уведомление
    ENDB="`date +%H:%M:%S`"
    # тема сообщения
    STARTEND="Backup script Start of ${STARTB} End of ${ENDB}"
    mail -s "${STARTEND}" email@domain.com < $LOGFILE
    exit
    


  3. Как бы это не банально звучало, но теперь я всем советую генерировать или придумывать гораздо более сложный пароль. Пароли можно хранить или в блокнотике (АНикиБеники туда не доберутся) или запомнить с 10 раза. Но в любом случае это проще чем восстанавливать доступ и решать проблемы из-за утечки информации;
  4. Если используете популярные web скрипты или CMS, следите за их обновлениями т.к. дырки есть всегда. Старайтесь не использовать не проверенные скрипты без отзывов. Не используйте старые и не поддерживаемые WEB скрипты;
  5. Всегда есть возможность защитить административный WEB интерфейс либо плагином, либо настройкой авторизации через .httpasswd (мастер генерации таких файлов, которые просто нужно положить в защищаемую директорию)
  6. Если есть возможность включения SSL доступа к вашим сервисам — включите его! SFTP, HTTPS, Четыре шага в защите SSH;
  7. Берегите свою почту, на которую все завязано! Сильный пароль, двухэтапная авторизация маст хэв!


Еще более маниакальных советов очень много. Но я считаю, приведенные выше самыми первыми для реализации. Дальше каждый сам для себя решит на сколько далеко он может зайти в защите своих сервисов.

PS:


И так, я победил тьму, и я очень рад) опыт накоплен, сайт работает, система живет) осталось теперь только обсудить это с уважаемым сообществом habrahabr, но для ответа в комментариях мне нужен инвайт, поэтому я прошу НЛО запостить эту статью и подарить мне на Новый Год инвайт)

И я тогда, в свою очередь, зарегистрируюсь в проекте анонимных дедов морозов и подарю залежавшиеся полезные мелочи Хабраюзерам:

С Уважением Иван Левкин.
IMG_0081
Термокружка Canon EF 24-105 с блендой — точная копия одноименного объектива. Кружка оснащена металлической термоколбой для сохранения постоянной температуры напитков, а так же герметично завинчивающейся крышкой с резиновой прокладкой.
sku_35741_4
Compact Slim Retractable Cable Style USB 2.0 Optical Mouse — Black (80CM-Cable)
sku_48166_1
EDUP Ultra-Mini Nano USB 2.0 802.11n 150Mbps Wifi/WLAN Wireless Network Adapter
Tags:
Hubs:
+2
Comments 30
Comments Comments 30

Articles