Анализируем вредоносный iframe или По тропе из Eval.

Тропа из Eval

На прошедшей неделе мы работали с некоторыми вредоносными и очень любопытными инъекциями. Разработчики и специалисты по безопасности часто думают, что скрытые iframe обеспечивают поисковый спам или служат для работы другого вредоносного ПО, которое легко обнаружить. Посмотрите, скажем, на эту инъекцию:

Инъекция

Это не простой iframe src=’http://… код. Вы можете видеть вредоносный код в примере на изображении выше. Это основная проблема для создателей вредоносных iframe, поскольку, если его легко обнаружить, то также легко и очистить сайт от него. Вот почему следующим шагом для создателей таких зловредов является обфускация или скрытие инъекций.

Обнаружение обфусцированного кода

Есть несколько способов сокрытия вредоносного кода с использованием CharCode или URLEncode. В общем случае, обфусцированный вредоносный код выглядит так, как показано на изображении ниже, но, конечно, сама техника может быть менее или более изощренной. Мы здесь стараемся писать о более сложных вещах :)

Инъекция iframe

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

Так это вредоносная программа?

Вся хитрость заключается в функции, которая и создает CSS правило.

last_style_node.addRule(selector, declaration);

Для того, чтобы понять, вредоносен код или нет, нужно его проанализировать. Давайте найдем место, где вызывается функция:

createCSS(‘#va’, ‘background:url(data:,String.fromCharCode)’);

Код устанавливает бэкграунд для #va selector. Как вы понимаете, String.fromCharCode — это не валидный URL. В рассматриваемом примере злоумышленники пытаются скрыть функцию в CSS. Теперь, когда мы знаем где находится угроза, можно посмотреть, как она восстанавливается в этих строках:

CSS malware function

Собираем все вместе

Во фрагменте кода, приведенном выше, мы видим, что переменная vkk используется как fromCharCode function, а переменная uu содержит строку va.

injection in CSS

Такой прием очень выйгрышен для хакера, поскольку ничего не хранится на виду (иначе, было бы достаточно легко обнаружить и удалить такой код). В показанном случае, давайте для примера возьмем переменную t; Она содержит число 2. В данном случае это значение получается путем вычитания из 2 числа секунд, хранящихся в переменной knr. Это довольно сложный приме, не так ли?

Эта переменная t используется для умножения всех элементов массива xt.

Далее есть пустая функция g, которая используется в hhhu переменной. Как видно, при склейке e + uu + l получаем eval.

Подготовлено по материалам Фиорованте Соуза