"Можно сделать защиту от дурака, но только от неизобретательного". Закон Нейсдра
Введение
Большинство ресурсов современного Интернета существует исключительно за счет рекламы. Владельцы сайтов стремятся увеличить количество показов баннеров всеми возможными – и честными, и нечестными – средствами. Рекламодателю, понятное дело, не улыбается тратить свои кровные впустую, оплачивая показы баннеров, которых никто не видел.
Извечное противостояние щита и меча – злоумышленник изыскивает способы обмануть рекламодателя, а рекламодатель, в свою очередь, всеми силами стремится распознать обман злоумышленника.
Эта статья раскрывает те хитрости, включая нетрадиционные и малоизвестные, к которым прибегают злоумышленники для обмана своих спонсоров. Технические детали атак опущены – статья ориентирована не на взлом, а на защиту, и рассчитана в первую очередь на разработчиков собственных баннерных сетей. Автоматизированная накрутка
Основу автоматизированной "крутилки" баннеров составляет скрипт, посылающий определенные HTTP-запросы и исполняющийся, как правило, на удаленном сервере, предоставляющим бесплатный хостинг, реже – на компьютере клиента.
Если злоумышленник, накручивая баннер, не будет при каждом запросе менять свой IP-адрес, он выдаст себя с головой. Традиционное оружие обмана – анонимные Proxy-сервера, выполняющие запрос злоумышленника от своего имени. Существует не столь уж много таких серверов – какой-то десяток тысяч, а то и меньше. Вполне реально собрать их в один список и проверять IP-адрес клиента на совпадение. Просто? Да! Эффективно? Нет!
Хитрому злоумышленнику такая проверка – не помеха. Скрыть свой IP можно десятками способов – для этого вовсе не обязательно обращаться к Proxy-серверу. Ничуть не хуже подойдет telnet, http с поддержкой cgi, анонимный ftp-сервер… Использование анонимных ftp-серверов для подмены IP адреса
Об использовании ftp-серверов для сокрытия своего IP-адреса следует сказать особо. Во-первых, анонимных ftp-серверов много больше, чем Proxy и telnet всех вместе взятых. Во-вторых, об этом способе знают далеко не все, а кто не знает – тот и не защищается!
Кратко о сути приема. Из документа RFC-959 можно узнать, что для своей работы протокол FTP требует по крайней мере двух соединений: одно – для приема команд от пользователя, а второе – для приема (передачи) файлов. Причем адрес узла-получателя файла не обязательно должен совпадать с адресом клиента! Отдавая серверу команду PORT, клиент самостоятельно назначает адрес и порт хоста, который будет использоваться как активный участник соединения по каналу передачи данных. И ничто не помешает ему выбрать сервер спонсора (точнее, почти ничего, об ограничениях будет сказано ниже) ‑ анонимный ftp-сервер установит с WEB-сервером спонсора TCP-соединение и передаст ему файл, содержащий команды HTTP-протокола, имитирующие запрос браузера на показ баннера. Если злоумышленник корректно подделает все поля, сервер не сможет отличить такой запрос от запроса браузера!
Единственная проблема, с которой может столкутся злоумышленник, – проверка ftp-сервером корректности номера порта. Некоторые ftp-серверы не позволяют устанавливать соединения со стандартными портами, в том числе и восьмидесятым. Но, во-первых, именно некоторые, а не все. Во-вторых, можно использовать любой не анонимный Proxy-сервер, работающий через нестандартный порт (использование не анонимных Proxy в большинстве случаев разрешается), и, в-третьих, сервера некоторых спонсоров сами работают через нестандартные порты, например 8081.
Таким образом, накрутки через анонимные ftp-сервера представляют собой вполне серьезную угрозу. Как ей противостоять? Создать список всех-всех анонимных ftp невозможно – число их огромно и с каждым днем продолжает расти. Уж лучше попытаться установить соединение с клиентом по двадцать первому порту, проверяя наличие установленного ftp-сервера. Подавляющее большинство клиентов не имеют своего ftp-сервера и такой метод идентификации злоумышленника вполне надежен. Единственный его недостаток – увеличение нагрузки на сервер, что не всегда приемлемо. Но лучшего решения, по-видимому, просто не существует. Впрочем, злоумышленник направленным SYN-штормом может запросто переполнить очередь соединений ftp-сервера и тогда такой метод проверки не сработает.
Словом, IP-адрес не позволяет надежно идентифицировать клиента и его контроль отсекает лишь самых глупых и неопытных злоумышленников. Поэтому помимо IP-адреса рекомендуется использовать и другие способы идентификации клиента. Другие способы идентификации клиента
Весьма популярный способ идентификации клиента заключается в использовании cookies: сервер вместе с баннером передает браузеру специальную метку, которую тот, при условии что поддержка cookies включена, сохраняет на диске. При последующих запросах сервер проверяет наличие cookies у клиента и если его нет, считает, что запрос выполнен не браузером, а скриптом злоумышленника.
На самом деле такую проверку легко обойти. Злоумышленнику не составит включить в свой скрипт полноценную поддержку cookies (например в Perl для этой цели существует готовая библиотека), а вот у легальных пользователей могут возникнуть проблемы. Некоторые из них по соображениям безопасности отключают поддержку cookies, тем самым становясь (с точки зрения сервера) похожими на скрипт злоумышленника.
Несколько надежнее использовать cookies для предотвращения повторных попыток входа на коротком отрезке времени и в качестве счетчика посещений. Злоумышленнику придется имитировать заход одного пользователя с различных IP-адресов и хранить множество cookies на сервере, что довольно проблематично.
Очень хороший результат дает анализ информации, возвращенной бразузером: версия операционной системы и самого браузера, языковая страница и т.д. Статистика использования того или иного программного обеспечения хорошо известна и довольно стабильна. Причем каждый бразузер и каждая операционная система обладают своим характерным "почерком", который легко проанализировать, но довольно трудно подделать.
Вообще же, большинство злоумышленников останавливаются на имитации поля UserAgent и дальше не идут, поэтому их остановит даже такая простая проверка. Статистика – наука точная?
Как бы злоумышленник не пытался изменить свой IP адрес, автоматизированные "крутилки" легко распознаются статистическим анализом. В простейшем случае это: слишком высокая интенсивность и строгая периодичность заходов, неестественно большое отношение количества нажатий к числу показов баннера, слишком короткий интервал времени между запросом баннера и нажатием на него (а некоторые "крутилки" и вовсе кликают по баннеру без предварительного запроса). Не правда ли странен пользователь, который через регулярные промежутки времени заходит на сайт и тут же тянется мышкой к еще не успевшему загрузится баннеру?
Однако программу "накрутки" очень легко доработать так, чтобы она вела себя практически неотличимо от пользователя – запрашивала баннер через случайные промежутки времени и в одном-двух из десяти случаев кликала по нему, выждав для большего правдоподобия несколько минут.
Если только злоумышленник не станет "нащелкивать" миллионы кликов в день, а лишь в полтора-два раза увеличит свою посещаемость, то даже такая простая имитация введет рекламодателя в заблуждение.
Теоретически можно анализировать кривую зависимости количества посещений от времени суток, учитывая географические местоположения посетителей и многие другие факторы, но приложенные усилия ничем не будут оправданы. Злоумышленник может, основываясь на статистике реальных посещений своего сайта, увеличивать количество посещений в единицу времени, не искажая вид кривых, а лишь приподнимая ее немного "вверх".
С другой стороны, если количество реальных заходов невелико, то никаким обманом злоумышленнику не удастся их увеличить. Страница в стиле "Я и моя собака", собирающая несколько тысяч посетителей в день, мгновенно вызовет подозрения у рекламодателя. А если создать действительно интересный и интенсивно посещаемый ресурс – какой смысл его "накручивать"? Не проще ли разместить вдвое больше баннеров?
Примечание: владельцы некоторых WEB-ресурсов требуют перед входом на сайт обязательного нажатия на баннер, поэтому, не во всех случаях по отношению кликов к показам можно распознать накрутку. Накрутка на стороне клиента
Качественная имитация пользователя – чрезвычайно сложная задача, требующая для своей реализации достаточно высокого программистского мастерства. Те же, кто обладает такой квалификацией, вряд ли будут связываться с накруткой баннеров. Во всяком случае, в сети не существует ни одной по настоящему добротной программы. Встречаются лишь едва-едва работающие макеты, содержащие множество ошибок и написанные, по-видимому, в процессе освоения языка Си и\или Perl. Ни одна из таких поделок не представляет серьезной угрозы и легко распознается простейшим анализатором.
Но зачем имитировать клиента, когда под рукой есть живой экземпляр? Для "ослепления" статистических методов злоумышленники прибегают к накрутке на клиентской стороне. Ниже рассмотрены четыре таких способа и ни от одного из них пока не придумано надежной защиты. Баннеры-невидимки
Зависимость доходов от количества баннеров на странице отнюдь не линейна. Изобилие баннеров отрицательно сказывается на посещаемости, помимо того склоняет посетителей к использованию "баннеро-резалок" – программ, блокирующих загрузку баннеров, и за счет этого обеспечивающих большую скорость работы.
Нередко злоумышленниками предпринимаются попытки сокрытия факта присутствия баннеров уменьшением их размера до нуля пикселей. Это не препятствует загрузке баннеров с сервера, но в таком виде они не портят дизайн страницы и не отталкивают посетителей. Довольны все, за исключением рекламодателя.
Большинство спонсоров запрещают каким-либо образом изменять HTML-код, отображающий баннер, но злоумышленникам такой запрет – не указ. Одних запретов мало – спонсор должен уметь контролировать целость своего кода. А это отнюдь не так просто, как может показаться на первый взгляд!
Загружая картинку с сервера, браузер не сообщает ему адреса текущей страницы и сервер не может определить откуда пришел запрос. Как же тогда он сможет проконтролировать не искаженность своего кода?
На первый взгляд, проблему можно решить принудительной передачей адреса текущей страницы. Поскольку Java допускает установку соединения только с тем узлом, с которого была загружена страница, приходится идти на хитрость – с помощью функции write "на лету" вставлять в страницу тег img, автоматически исполняющий cgi-скрипт, расположенный на сайте рекламодателя и передающий ему URL текущей страницы с помощью метода location объекта document. Упрощенно это может выглядеть так:
Неоправданная популярность данного приема вызывает удивление. Вот далеко не полный перечень присущих ему недостатков. Во-первых, URL страницы может содержать конфиденциальные данные, например пароли посетителя или номера его кредитных карт. Если пользователи узнают, что эти сведения передаются в чужие руки – может разразится громкий скандал. Во-вторых, для динамических страниц, взаимодействующих с клиентом методом POST, понятие URL теряет всякий смыл. В-третьих, злоумышленник может так подправить код, чтобы он всегда возвращал адрес заранее заготовленной страницы, а не той, которую просматривает пользователь. Рекламодатель может лишь убедиться в неискаженности собственного HTML-кода на некоторой страничке, но бессилен определить – эту ли страницу просматривают пользователи или совсем другую.
Наконец, верификация HTML-кода многократно увеличивает нагрузку на сервер рекламодателя, что не всегда приемлемо. Поэтому большинство рекламодателей по экономическим соображениям отказываются от автоматизированного контроля целостности своего HTML-кода.
Проверить: действительно посетители страницы увидели баннер или нет – невозможно. Некоторые, достаточно многие, рекламодатели предпочитают оплачивать только клики, но не засчитывают "холостые" показы, сколько бы их ни было. В этом случае владелец WEB-страницы должен сам заботится о том, чтобы посетители видели баннеры и как можно чаще нажимали на них. Авто-клик
Существует множество способов заставить посетителя нажать на баннер. Например, для доступа к такому-то ресурсу можно потребовать пароль – третье слева слово в заголовке сайта спонсора. Хочешь не хочешь, а нажимать надо. Некоторые, особо алчные даже заставляют излазить сайт спонсора вдоль и поперек, а то и зарегистрироваться на нем!
Подобные приемы абсолютно законны с точки зрения рекламодателя, но очень напрягают посетителей, уменьшая их количество. Возникает задача: как и страницу спонсора открыть, и посетителям угодить.
Чаще всего злоумышленники прибегают к автоматически открывающимся страницам, вставляя JavaScript приблизительно следующего содержания: 'window.open("http://mysponsor.com")'. Однако большинство посетителей успевают закрыть "лишние" окна задолго до их полной загрузки, и это позволяет спонсору легко распознать левые накрутки – достаточно засчитывать только те заходы на страницу, когда все ее элементы загружаются целиком.
Некоторые злоумышленники используют более продвинутый способ обмана – открывают страницы в фреймах нулевого размера. Они загружаются скрыто от посетителей, даже и не подозревающих, что происходит за их спиной! Практически все современные браузеры поддерживают фреймы, поэтому такой трюк никаких проблем не вызывает.
Может ли рекламодатель разоблачить обман? Разумеется да, – если пользователь зашел на страницу, но не нажал ни одной ссылки, то, скорее всего, это никакой не пользователь, а его имитация и такой заход засчитывать на надо. Правда, это решение может вызвать протест легальных WEB-мастеров: если пользователь зашел к спонсору, но так ничем и не заинтересовавшись, ушел оттуда, – это проблема рекламодателя, а не того, кто его рекламирует!
С другой стороны, при необходимости злоумышленник сможет имитировать и нажатие ссылок, причем вполне правдоподобно. Для этого ему достаточно на разных страницах своего сайта прятать в фреймах разные страницы спонсора. Статистический анализ не позволит распознать обман и придется прибегать к довольно сложным приемам – например создавать ссылки в виде графических объектов и передавать на сервер координаты мыши в момент их нажатия. Злоумышленнику будет достаточно сложно правдоподобно имитировать клики, частотный анализ выдаст его с головой. Правда, он, в свою очередь, может использовать такие же ссылки на своей странице и передавать мышиные координаты серверу, в точности имитируя поведение посетителя на скрытой странице.
Одним словом – классическое противостояние меча и щита. Совершенствуются механизмы защиты, но и злоумышленники не сидят на месте, придумывая все более хитрые трюки, и… все возвращается на круги своя. Не пиши мне письмо…
Многие злоумышленники настолько ленивы, что не могут найти сил для создания даже примитивного сайта "Я и моя собака". Вместо этого они вставляют баннеры в письма и рассылают их сотням тысяч, а то и миллионам адресатов.
Большинство почтовых клиентов поддерживает HTML-формат и просмотр полученного письма равносилен посещению WEB-страницы. Разница лишь в том, что владелец настоящей WEB-страницы должен сидеть-дожидаться, когда же к нему зайдет пользователь (ну да, жди у моря погоды), а спамер фактически сам инициирует заход пользователя! Причем не одного, а очень многих сразу!
Не всем спонсорам понравится, что их рекламируют таким варварским способом, но в общем случае, с точки зрения рекламодателя, спам – реклама честная. За исключением, быть может, автоматически открывающихся окон и хитроумно спрятанных страниц (они ничуть не хуже себя чувствуют и в теле письма).
Существует принципиальная, но еще пока ничем не реализованная возможность создания автономного Интернет-червая, который, используя ошибки реализации почтовых серверов и почтовых клиентов, получал бы список пользователей, зарегистрированных на сервере и адресов из "Адресной книги". В кратчайшие сроки удалось бы разослать рекламные письма десяткам миллионов получателям, а это – деньги, большие деньги!
Пользователям, не желающим становиться орудием чужого обогащения, можно порекомендовать отключить поддержку скриптов в своем почтовом клиенте. Правда, после этого некоторые письма читать станет невозможно. Вирусы и легальные программы
Развивая тему вирусов – в принципе, возможны такие вирусы, которые, попав на компьютер своей жертвы, обращаются к сайту рекламодателя, имитируя загрузку страницы из браузера, но в целях конспирации не отображают ее пользователю. Обнаружить такие накрутки можно с помощью графических ссылок, отслеживающих координаты мыши в момент их нажатия. Вирус не сможет правдоподобно имитировать их.
Сказанное выше применимо не только к вирусам. Точно так действуют и легальные программы. Обратите внимание – не могут, а уже действуют. Существуют даже готовые пакеты "накруток", предназначенные для интеграции в другие приложения, например, AddGateway. Причем многие из них нагло прописывают себя в автозагрузке и крутят баннеры не только в момент своей работы, но и в любое другое время! (При условии, конечно, что пользователь находится в сети).
Не все разработчики упоминают этот факт в документации, и пользователь зачастую узнает о нем лишь тогда, когда замечает, что модем подозрительно часто мигает, а все файлы и web-страницы грузятся несколько медленнее, чем обычно.
Разработчики антивирусов, похоже, не видят ничего опасного в таких программах и не выдают предупреждающих сообщений при их проверке. А следовало бы… Пользователю, не особо разбирающемуся в тонкостях операционной системе, обнаружить и защитится от подобных "гостей" очень трудно. Персональные межсетевые экраны, наподобие AtGuard, здесь бесполезны, поскольку не могут достоверно определить: кто устанавливает исходящее соединение – легальный пользователь или нехорошая программа. Тем более, что "совсем нехорошие" программы крутят банеры с помощью браузера, делая невидимым его окно.
При возникновении подозрений рекомендуется запустить утилиту msconfig в Windows 9x или "Панель управления->Администрирование->Управление компьютером" и удалить все лишние программы из "Автозагрузки". Затем с помощью утилиты Depends (входит в WindowsSDK) посмотреть: какие модули импортируют подозреваемые программы. Большинство "накрутчиков" выдают себя наличием модуля ws2_32.dll, необходимого для установки и поддержания TCP-соединений.
Большинство, но не все! Ведь ничто не мешает запустить браузер с помощью утилиты start.exe или API-функции CreateProcess, а затем скрыть его окно вызовом ShowWindow. Для полной уверенности необходимо дизассемблировать и подробно проанализировать каждое потенциально опасное приложение. Такая работа доступна далеко не всякому специалисту, не говоря уже о простых пользователях!
Словом, было бы очень хорошо, если бы разработчики антивирусов наконец-то обратили на эту проблему свое внимание. Накрутка – как средство конкурентной борьбы
Баннер мало показать. Надо знать, кому его показать! Например реклама крановых электродвигателей, вывешенная на ботаническом сайте, будет чрезвычайно малоэффективна, хотя с точки зрения многих баннерных компаний вполне законна.
Причем сам рекламодатель, купивший столько-то своих показов, зачастую не имеет никакого представления о том, кому и где они будут показаны (и будут ли показаны вообще)! Конкуренты могут воспользоваться этим фактом для размещения его баннеров на таких страницах, где их увидит совсем другая целевая аудитория. И хотя все показы будет засчитаны, ожидаемого результата реклама не принесет, и деньги, затраченные на нее, окажутся выброшенными впустую.
Впрочем, от этого очень легко защититься. Покупая показы, необходимо всегда оговаривать тематику сайтов, на которых они будут расположены. В противном случае эффективность рекламы будет неоправданно низкой даже и без вмешательства конкурентов. Так ли надежны независимые источники?
Большинство поисковых серверов отслеживают, какие сайты выбирает пользователь, и на этом основании вычисляют их рейтинг. Очень часто предлагается использовать эту информацию для оценки посещаемости того или иного сайта и выявления левых накруток. В принципе, такой подход достаточно надежен, но не следует забывать, что злоумышленник может легко повысить свой рейтинг теми же самыми средствами, которые использовал для накруток баннеров. С его точки зрения и баннеры, и ссылки в поисковом сервере – идентичны. Причем поисковые сервера в своей массе не очень-то ответственно подходят к составлению рейтинга и не выполняют тщательных проверок на предмет выявления автоматизированных запросов. Оно и понятно – недостоверный рейтинг не приносит им никакого убытка, зачем же напрягаться?
С другой стороны, поисковых серверов очень много и не у всякого злоумышленника хватит терпения накрутить каждый из них. Как правило, они ограничиваются только парой-тройкой самых популярных систем, игнорируя остальные. И этим полностью разоблачают себя! Действительно, слишком большой дисбаланс рейтингов позволяет легко установить факт накрутки.
Ситуация с счетчиками полностью аналогична. Несмотря на некоторые предохранительные меры (например Rambler не фиксирует заходы с Proxy-серверов), счетчики очень легко накрутить до требуемого значения. Их показания ни о чем не говорят и не позволяют установить истинную посещаемость страницы.
Самые надежные оценки популярности ресурса дает подсчет количества ссылок на эту страницу. Чем больше людей ссылается на данный сайт, тем больше на него заходит посетителей. Соответственно, ресурс, на который не ссылается никто, никому и не интересен, – не стоит ожидать у него большой пользовательской аудитории.
Теоретически злоумышленник может увеличить количество ссылок на свой ресурс, просто создав несколько сотен, а то и тысяч сайтов, "поддерживающих" друг друга. Но если он попробует посчитать сколько потребуется времени и сил, то сразу же откажется от этой затеи. Розница и опт
Существует два подхода к продаже рекламы: либо оплачивается каждый показ (клик) банера, либо спонсор выплачивает держателю сайта некую фиксированную сумму, зависящую от его посещаемости. Последний способ считается более предпочтительным, поскольку, приблизительную посещаемость ресурса можно определить и визуально безо всяких счетчиков.
Однако такой подход крайне непрактичен и неудобен. И хуже всего – он подходит только для крупных сайтов. Владельцам же домашних страничек никто оптом за рекламу платить не будет. И не потому что их посещаемость невозможно оценить. Просто вручную контролировать огромное количество ресурсов физически невозможно, поэтому придется либо прибегать к автоматизированным средствам (а их легко обмануть), либо иметь дело только с несколькими тысячами держателей крупнейших WEB-проектов, которые заведомо не будут жульничать в силу своего авторитета.
Последнее не приемлемо в первую очередь для самих рекламодателей, стремящихся своей рекламой охватить как можно большую аудиторию и готовых ради этого идти на неизбежный риск.
В магазинах самообслуживания воровство покупателей компенсируют увеличением цен товаров. Точно так, в стоимость рекламы включен (вернее, правильнее сказать, исключен) обман злоумышленников.
Вообще же, проблема вокруг накрутки баннеров, на мой взгляд, сильно раздута. Обилие рекламы наглядно свидетельствует, что, несмотря ни на какие накрутки, она окупает себя. В каком-то высшем смысле обман спонсоров приносит больше пользы, чем вреда. Чем больше обманщиков, тем ниже эффективность рекламы, а значит - меньше и самой рекламы! Трудно найти посетителя, который бы горячо не приветствовал такое развитие событий! Вместо заключения
Отсутствие надежных средств идентификации пользователя – одна из центральных проблем современного Интернета. Именно анонимность позволяет злоумышленникам совершать атаки, оставаясь ненаказанными. Если рекламодатели действительно хотят донести информацию до клиента, им необходимо настоять на доработке HTTP-протокола и внесению в него команд, предназначенных специально для загрузки баннеров.
Пусть некий третейский арбитр выдает каждому абоненту Интернета специальный ключ, позволяющий однозначно идентифицировать клиента. Посылая запрос на загрузку баннера, клиент передает на сервер и зашифрованный ключ, подтверждая аутентичность своего запроса. Обхитрить такую схему очень нелегко, если вообще возможно. За исключением одного "но". Не будет ли справедливо выплачивать деньги не держателю сайта, а самому клиенту за просмотр рекламы?
Боюсь, что клиент никаких денег не получит, а протокол HTTP и сами браузеры в скором будущем будут доработаны так, чтобы доступ к ресурсу открывался только после просмотра рекламы. Ходят упорные слухи, что коммерсанты усиленно давят на политиков, требуя запретить "баннеро-резки", как вредоносные программы, приносящие убыток владельцам сайтов.
Пока это только слухи, но кто поручится, что завтра они не станут действительностью? Тем более, что первые шаги к этому уже сделаны. Однако, это тема совсем другого разговора…