Напомню, что целью атак Drive-by-Download является распространение вредоносного кода, а реализуются они через привлечение жертв на вредоносный сайт с последующей эксплуатацией уязвимостей в ПО (браузер, flashplayer, pdfviewer, компоненты ActiveX и т.п.).
Для того, чтобы вредоносный сайт подольше жил, злоумышленники предпринимают целый ряд защитных мер (о них подробно написано в нашей статье «Drive-by-Download по-тихому или Маскируем вредоносные сайты от wepawet и его друзей» в сентябрьском номере Хакера ), среди которых:
– отделяют уязвимых пользователей от неуязвимых (страницу с эксплойтом не хочется показывать абы кому);
– отделяют посетителей-человеков от роботов (роботы, а тем более боты всяких AV-производителей мало того, что не подвержены эксплойтам, так они еще могут заклеймить домен как вредоносный, что приведет к снижению времени его эффективной работы);
– отделяют новых посетителей от возвращающихся (вредоносному сайту не нужно повышенное внимание).
… и т.п.
Сегодня я хочу поделиться с вами одной идеей, с помощью которой можно отделить роботов от человеков. Итак, задача (упрощенно):
1. Есть страница X, на которую приходят (перенаправляются) посетители, в отношении коих будет проводиться атака Drive-by-Download.
2. Есть страница Y, на которой размещен непосредственно эксплойт.
Требуется: реализовать переход со страницы X на страницу Y таким образом, чтобы до страницы Y не дошли роботы, но дошли все или почти все человеки.
Усложним себе задачу, сделав следующие допущения:
1. Все роботы умеют интерпретировать Javascript. Иначе задача решается тривиально.
2. Все роботы построены на основе WebKit, а пользователи работают из-под браузера Google Chrome. Таким образом, методы fingerprinting’а также не применимы.
Сначала перечислим well-known варианты решения:
1. CAPTCHA. Не годится, ибо мы хотим свести к минимуму взаимодействие с пользователем. Кроме того, CAPTCHA на простой странице вызывает подозрения.
2. Можно регистрировать события от мыши и клавиатуры: мол, если есть – то человек, иначе – электронный болван. Но такие события эмулируются на раз.
Что же предлагается? Идея заключается в том, что типичные пользователи до автоматизма довели свою реакцию на раздражающие факторы: всплывающую рекламу или звук – немедленно выключить. Таким образом, делаем следующее: при переходе на нашу страницу пользователю демонстрируем всплывающую рекламу (полностью отрисованную с помощью Javascript), заслоняющую почти всю страницу. Нормальный пользователь тут же закроет такую рекламу. Бот – нет. Соответственно, зарегистрировав закрытие такого окна, перенаправляем пользователя на страницу Y, в противном случае – на сайт Диснейленда.
Обсуждая эту идею с Владимиром Воронцовым , получил справедливую критику метода: а что если с помощью WebKit мы будем делать скриншоты текущего окна (пример, как это работает – тут ) и распознавать в полученных картинках крестики для закрытия рекламы, вычислять X и Y и эмулировать туда click мышью?
Можно в самой рекламе разместить много похожих крестиков. Например, показать смеющуюся японскую девочку anime-style – у них, как известно, глазки крестиком :)
Если мысль моя не нова, прошу кинуть ссылкой на первоисточник. Google мне ничего не сказал…