Анализируем вредоносный iframe или По тропе из Eval.
На прошедшей неделе мы работали с некоторыми вредоносными и очень любопытными инъекциями. Разработчики и специалисты по безопасности часто думают, что скрытые iframe обеспечивают поисковый спам или служат для работы другого вредоносного ПО, которое легко обнаружить. Посмотрите, скажем, на эту инъекцию:
Это не простой iframe src=’http://… код. Вы можете видеть вредоносный код в примере на изображении выше. Это основная проблема для создателей вредоносных iframe, поскольку, если его легко обнаружить, то также легко и очистить сайт от него. Вот почему следующим шагом для создателей таких зловредов является обфускация или скрытие инъекций.
Обнаружение обфусцированного кода
Есть несколько способов сокрытия вредоносного кода с использованием CharCode или URLEncode. В общем случае, обфусцированный вредоносный код выглядит так, как показано на изображении ниже, но, конечно, сама техника может быть менее или более изощренной. Мы здесь стараемся писать о более сложных вещах :)
На первый взгляд этот код выглядит как CSS скрипт, то есть часть внешнего визуального интерфейса вашего сайта, которую вы не хотели бы трогать, ведь это может привести к поехавшей верстке, что отпугнет посетителей и создаст вам самим дополнительные проблемы. Но это именно то, что вредоносная программа хочет, чтобы вы подумали.
Так это вредоносная программа?
Вся хитрость заключается в функции, которая и создает CSS правило.
last_style_node.addRule(selector, declaration);
Для того, чтобы понять, вредоносен код или нет, нужно его проанализировать. Давайте найдем место, где вызывается функция:
createCSS(‘#va’, ‘background:url(data:,String.fromCharCode)’);
Код устанавливает бэкграунд для #va selector. Как вы понимаете, String.fromCharCode — это не валидный URL. В рассматриваемом примере злоумышленники пытаются скрыть функцию в CSS. Теперь, когда мы знаем где находится угроза, можно посмотреть, как она восстанавливается в этих строках:
Собираем все вместе
Во фрагменте кода, приведенном выше, мы видим, что переменная vkk используется как fromCharCode function, а переменная uu содержит строку va.
Такой прием очень выйгрышен для хакера, поскольку ничего не хранится на виду (иначе, было бы достаточно легко обнаружить и удалить такой код). В показанном случае, давайте для примера возьмем переменную t; Она содержит число 2. В данном случае это значение получается путем вычитания из 2 числа секунд, хранящихся в переменной knr. Это довольно сложный приме, не так ли?
Эта переменная t используется для умножения всех элементов массива xt.
Далее есть пустая функция g, которая используется в hhhu переменной. Как видно, при склейке e + uu + l получаем eval.
Подготовлено по материалам Фиорованте Соуза