Как не заразить посетителей своего сайта (Александр Сидоров, Пётр Волков)
1. как не заразить посетителей
своего сайта
Александр Сидоров, Пётр Волков
2. Почему мы об этом рассказываем
• 1400 новых заражений сайтов в сутки
• 230k заражённых сайтов
– проверяем около 20m URL в сутки
• за год 122 заражения сайтов, известных всем
• в основном – обычные, массовые заражения
2
3. Мартовское обострение
• заражённые сайты в сумме теряют от 0.4m до 1.2m
переходов с Яндекса в сутки
Показы предупреждений об опасных сайтах на выдаче Яндекса
3
4. Зачем нужна безопасность -
• пользователям – не терять время, деньги, репутауцию
• интернету – быть полезным для людей + электронные
платежи
• злоумышленникам – заниматься чем-то полезным
4
5. Зачем нужна безопасность - $$$
• сайту – чтобы его трафик, пользователи (→ деньги) не
доставались другим
– редиректы, заражение, чужая реклама
– имидж и доверие
– если при взломе вставили malware, то – 99% трафика
– если поисковый спам, то до – 100% трафика
• поисковой системе – чтобы было, чем отвечать на запросы
пользователей
5
7. • не дать злоумышленникам взломать сайт и разместить
на нём malware
• не размещать вредоносных редиректов и блоков из
непроверенных источников
• не давать размещать malware пользователям в UGC
7
Как не дать сайту заразиться
8. • контроль ввода данных (WAF)
• контроль операций ( Insecure Direct Object References )
• обновлять серверное ПО
• сложные пароли
Как помешать злоумышленникам
8
9. • защитить компьютер вебмастера
• минимум данных о серверном ПО наружу
• анти-кликджекинг
• хостингам – регулярно проверять свои сайты, например,
через Safe Browsing API
Как помешать злоумышленникам 2
9
10. • блоки и реклама – только от проверенных партнёрских
программ
• дистрибутивы CMS, виджеты, библиотеки – из
проверенных источников
• контроль служебного доступа
• качественный хостинг
Как не заразить сайт своими руками
10
11. • антиробот
• валидация данных
• проверять ссылки, например, через Safe Browsing API
Яндекса
• проверять загружаемые файлы, например с помощью
virustotal.com Public API
Как не дать заразить через UGC
11
12. 12
Как вылечить
• узнать
• найти client-side malware
• остановить веб-сервер, устранить причины заражения
• найти и удалить веб-серверное malware
время = посещения и заражения = деньги и репутация
13. обычно с exploit pack’ом,
a. определяет версию
браузера и его
компонентов
b. выдаёт в браузер
вредоносный код под
уязвимости именно этих
браузеров и компонентов
Как работает drive-by-download атака
13
14. • Windows XP на виртуальной машине
• разные браузеры, без cookies и истории посещений
• Java, Acrobat Reader, Flash
• несколько анонимных прокси-серверов
• после каждого просмотра страницы – revert
Браузерное malware: подготовка
14
15. • разными браузерами
• с поисковой выдачи и напрямую
• через прокси и без
• с разными user-agent, включая мобильные:
User Agent Switcher
Как получить client-side malware
15
16. • анализировать, что загружается: Fiddler , HttpAnalyzer
• смотреть полученные от сервера данные
• глазами и антивирусом
Client-side malware: анализ
16
19. Дополнительные признаки malware
• длинные нечитаемые скрипты
• лишние операции со строками (переопределение, замена
подстрок, смещение символов, конкатенация)
• посторонний код в js-библиотеках
• переопределение элементов DOM
19
20. Где может быть серверное malware
• в серверных скриптах
• в шаблонах CMS
• в настройках веб-сервера или интерпретатора
• сайт статический? утечка реквизитов доступа, либо
заражение всего сервера
20
21. • посторонний код
o дата модификации
o несоответствие версии из VCS, backup
• обфусцированный код
o нечитаемый
o неструктурированный
o закодированный
Как найти веб-серверное malware
21
23. Как устранить причины заражения
• остановить веб-сервер
• в 90% случаев на сервере есть backdoor – найти!
• проверить антивирусом рабочие станции вебмастеров
• обновить ПО
• сменить пароли: root, FTP, SSH, админ-панели хостинга,
CMS; удалить везде лишних пользователей
23
24. Вредоносный код можно удалить только
после устранения причины заражения,
иначе его быстро восстановят
24
25. • посторонний код ( конфликт VCS )
• жалобы пользователей
• предупреждения в Opera, Я.Интернете , FF с Я.Баром
• сообщения в Я.Вебмастере
• уведомления по email: whois + стандартные email-адреса
– там спам? ПДД
• поиск на форумах «ваш_домен заражён»: Подписки и ППБ
• трафик сайта и статистика переходов: Метрика
Как вовремя узнать о заражении
25
26. Что ещё может быть полезным
• предупреждения о заражённых сайтах в Opera, Я.Интернете,
FF с Я.Баром
• детали заражения в Я.Вебмастере, вкладка «Безопасность»
• safesearch.ya.ru, в котором мы пишем об актуальных
заражениях
• тех. поддержка Яндекса
– только если больше ничего не помогло
– email – в статьях на help.yandex.ru
26
28. Safe Browsing API
• проверка на malware + phishing
• 6.7m пользователей в день
• 230k опасных сайтов
• max 100 мс на проверку URL
• ключ на 100k проверок в сутки – free
• пишите на safesearch@yandex-team.ru
28
29. • у меня вирусов нет!
• все антивирусы, кроме Яндекса, не находят вирус
• Яндекс то размечает, то не размечает
• антивирус Яндекса реагирует на гуглоаналитику?
• что такое поведенческий анализ?
• почему сайт не перепроверили за 2 часа?
• это не вирус, а просто счётчик
Тех. поддержка - FAQ
29
30. Мы всегда рады подробностям о заражении
• где именно на сервере был найден вредоносный код
• его примеры, как он работает, логи
• как он смог попасть на сервер
• подробности о серверном ПО, аномалиях
• virus-samples@yandex-team.ru
Сделаем интернет безопаснее вместе!
Тех. поддержка - сэмплы
30
31. Это может случиться с каждым
• среднее время заражения 90 ч., если активно лечить
• трафик минус 99%, заразившийся посетитель не вернётся
• 1000 заражений = $20 для злоумышленника
• сайт популярнее → бюджет на взлом больше
31
32. Главное, что нужно сделать
1. примените правила или OWASP, чтобы не допустить
2. приготовьтесь обнаружить, устранить причину и вылечить
3. не откладывайте, сделайте это сегодня
32
33. Спасибо!
Вопросы?
• Служба безопасного поиска, safesearch.ya.ru https://twitter.com/#!/yasafesearch
• Александр Сидоров, sidorov@yandex-team.ru https://twitter.com/#!/asidorov83
• Пётр Волков, peevo@yandex-team.ru
Notas do Editor
в сутки Яндекс находит более 1400 новых заражений сайтов
всего Яндексу известно более 230k заражённых сайтов
за год было 121 случай заражения сайтов, которые знают все
обычные массовые заражения
(в 99% случаев пользователи не переходят на заражённые сайты, на выдаче – по 10 документов)
2 массовых заражения со взломами, 1 партнёрская система, заражающая пользователей через свои блоки на «выгодных» для сайтов условиях
пользователям
не терять деньги (кража, мошенничество), ценные данные, время на лечение компьютеров, репутацию
интернету
существовать (быть полезным для людей), без DDoS’ов, накрутки, спама
интернет-индустрия сможет получать больше денег, если в интернете станет безопаснее (онлайн-банкинг, электронные платёжные системы, веб-магазины)
злоумышленникам
пойти заниматься чем-нибудь полезным
сайту – чтобы его трафик, пользователи (→ деньги) не доставались другим
не редиректить на другие сайты
не заражать компьютеры пользователей
не показывать чужих ссылок и рекламы
не терять имидж и доверие
заражение – 99% трафика, поисковый спам до – 100% трафика
поисковой системе – чтобы было, чем отвечать на запросы пользователей
заражённые, испорченные, перенаправляющие сайты – это плохой ответ
контроль ввода данных (WAF) – защита от атак XSS, Injection
контроль операций ( Insecure Direct Object References ) – защита от IDOR, CSRF, закрытие доступа к админкам, бэкапам, SVN
обновлять CMS и серверное ПО, минимум «кустарных» модулей, отключать лишнее, следить за новостями об уязвимостях своей CMS
Пример другого серверного ПО – OpenX, phpMyAdmin
сложный пароль от веб-сервера (FTP, SSH, админ-панели хостинга, CMS)
компьютер вебмастера – тоже защищён от malware
минимум служебных данных (например, версия сервера или CMS)
анти-кликджекинг
Js-проверки
if (top != window) top.location = window.location
top.location = 'http://example.com'
HTTP-Header
X-FRAME-OPTIONS SAMEORIGIN
X-FRAME-OPTIONS DENY
блоки и реклама
избегать «уникальных предложений» (подозрительно высокая плата за счётчики и блоки, монетизация мобильного трафика) – вместо денег отсутствие трафика и потеря позиций в поисковых системах
использовать партнёрские программы со скрытыми блоками – опасно
блоки и реклама – только от проверенных систем
по возможности принимать только статический контент (ссылки, картинки. Не скрипты и не фреймы)
о новых партнерках – искать отзывы, проверять, что через них приходит
рассказ про траффбиз
дистрибутивы
осторожнее с дистрибутивами CMS из сомнительных источников, виджетами и чужими библиотеками
случай с DLE
постоянные проблемы с wordpress-темами
всякие радио-виджеты для ucoz
контроль служебного доступа
рассказ про утечку базы FTP
та же ситуация с различными фрилансерами – периодически приходят жалобы на заражения после их работы (особенно если их обидели, ну и утечь может от них)
качественный хостинг
телекомы тоже страдают (см. статью в блоге)
валидация данных
нет javascript в <script>, тегах, гиперссылках
нет <iframe>, <object>, <embed>, список разрешённых HTML-тегов
В двух словах:
На зараженном сайте происходит подгрузка/перенаправление на систему распределения траффика, цель которой
– отфильтровать потенциальных жертв по критериям:
1. Уникальный заход (1 перенаправление на 1 ip, cookie итп).
2. Уязвимые версии операционной системы, браузера и прочего ПО, например flash, acrobat, JRE.
3. Проверка подгрузки с зараженного сайта с реферером поисковой выдачи.
4. Различные попытки отсева запросов поисковых роботов и антивирусных систем.
5. Дополнительные критерии, например время суток.
Если все критерии пройдены – перенаправление на связвку эксплоитов для заданных ОС и ПО.
Задача связки эксплоитов – установить в ОС вредоносное ПО ( бинарный файл ).
Действия вредоносного ПО внутри ОС зараженного компьютера – тема для отдельной презентации.
по возможности посмотреть через прокси / попросить товарища посмотреть из дома
тестовый стенд
Windows XP на виртуальной машине, IE+FF+Chrome+Opera без cookies и истории посещений
Желательно IE6 и не последние версии Java, Acrobat Reader, Flash
после каждого просмотра страницы – revert к исходному образу
0. в коде
<?php
header(“Location: evil.com”);
?>
в настройках веб-сервера или интерпретатора
.htaccess
php_value auto_append_file “\tmp\evil.txt«
если сайт статический
на соседнем сайте shared-хостинга, а также, вероятнее всего, утечка реквизитов доступа, либо заражение всего сервера
если серверный редирект, в т.ч. работающий только для мобильных – .htaccess, в т.ч. конструкции для mod_rewrite
если строки в конце страниц – в шаблонах CMS
если до или после обычного блока <html> – возможно, в настройках веб-сервера или интерпретатора
в 90% случаев на сервере есть backdoor – найти!
обычно web-shell, но бывают и tcp-bind шеллы
И потом 2 недели следить
вообще надо сказать, что хорошо помимо, регистрации стандартных абуз-адресов, указать их на сайте в разделе контакты и удостовериться, что администратор регулярно обрабатывает сообщения в них (просто формально класть в issue tracker недостаточно)
трафик сайта и статистика переходов: Метрика
аномалии
книга жалоб для пользователей
нужно поддерживать форму для отправки жалоб и/или указать email-адреса администратора
+ Яндекс.XML: результаты поиска + информация о заражённых документах
мы стараемся для вас, и помогаем вам вылечить ваши сайты
мы понимаем, что потеря трафика – это плохо для сайта, но не давать пользователям заразиться - важнее
Яндекс размечает, только если действительно обнаружил malware, точность – от 99.5% до 99.98% (для разных детекторов разная)
ваш сайт тоже может заразиться самым неожиданным способом, если вы не нашли malware на сайте – поищите ещё раз
если антивирусы не находят – это тоже не значит, что malware нет
мы не реагируем только по факту обфускации, или если блок находится в неположенном месте, а детектируем именно вредоносный код
бывает, что нас пытаются обмануть, но это нам очень хорошо видно, не надо тратить на это время