Компания
536,48
рейтинг
8 апреля 2014 в 15:58

Разное → Вирус Sality модифицирует DNS-сервис роутеров

Семейство файловых инфекторов Win32/Sality известно уже давно и использует ботнет на основе P2P еще с 2003 г. Sality может выступать как в роли вируса, так и даунлоадера других вредоносных программ, которые используются для рассылки спама, организации DDoS, генерации рекламного трафика или взлома VoIP аккаунтов. Команды и файлы, передаваемые через сеть Sality, зашифрованы с использованием RSA (т. н. цифровая подпись). Модульная архитектура вредоносной программы, а также долговечность ботнета показывает насколько хорошо злоумышленники подошли к созданию этого вредоносного кода.



Мы отслеживали ботнет Win32/Sality в течение долгого времени и наблюдали более 115 000 доступных IP-адресов, которые инструктировались «супер-узлами» (super peers) для поддержки ботнета в рабочем состоянии и их координации. Мы видели схожие компоненты Sality, которые он загружал на зараженные компьютеры. Некоторые из них были похожи и различались только поведением. Однако, в последнее время, мы обнаружили новый компонент с ранее незамеченными свойствами. В отличие от уже известных компонентов Sality, которые используются для кражи паролей от FTP-аккаунтов и рассылки спама, он имеет возможность подменять адрес основного DNS-сервера роутера (DNS hijacking). Согласно нашим данным телеметрии, этот компонент появился в конце октября 2013 г. Он получил название Win32/Rbrute.

Компонент Win32/RBrute добавляет действительно новые возможности в работу Win32/Sality. Первый модуль, обнаруживаемый ESET как Win32/RBrute.A, осуществляет поиск веб-страниц панелей упраления роутера через сканирование определенного набора IP-адресов, чтобы изменить запись основного DNS-сервера. Новый мошеннический DNS-сервер перенаправляет пользователей на поддельную веб-страницу установки браузера Google Chrome в том случае, когда они обращаются к веб-сайтам, содержащим в названии домена слова «google» или «facebook». Вместо браузера пользователю загружается вредоносный файл самого Win32/Sality. Таким образом, злоумышленники обеспечивают себе новые ее установки и расширение ботнета этого семейства вредоносных программ.

IP-адрес, который используется в качестве основного DNS-сервера на скомпрометированном роутере, на самом деле, является частью сети Win32/Sality. Существует еще одна модификация вредоносной программы – Win32/RBrute.B, она устанавливается Sality на скомпрометированных компьютерах и может выступать в качестве DNS или HTTP прокси-сервера для доставки поддельного установщика браузера Google Chrome к пользователям, которые были перенаправлены через вредоносный роутер.

Можно сказать, что техника модификации основного DNS роутера уже достаточно распространена для различных целей, начиная, с целей кражи данных онлайн-банкинга и заканчивая блокированием подключений клиента к веб-сайтам security-вендоров. Особенно это стало актуально в связи с недавним обнаружением уязвимостей в firmware различных моделей роутеров. Win32/RBrute.A пытается найти административные веб-страницы роутеров путем сканирования диапазона IP-адресов, полученных с C&C-сервера. В дальнейшем, отчет об этой операции будет отправлен обратно на C&C-сервер. На момент проведения нашего анализа, Win32/RBrute.A использовался для получения доступа к следующим моделям роутеров:

  • Роутеры Cisco, которые содержат строку «level_15_» в атрибуте realm HTTP-протокола
  • D-Link DSL-2520U
  • D-Link DSL-2542B
  • D-Link DSL-2600U
  • Huawei EchoLife
  • TP-LINK
  • TP-Link TD-8816
  • TP-Link TD-8817
  • TP-Link TD-8817 2.0
  • TP-Link TD-8840T
  • TP-Link TD-8840T 2.0
  • TP-Link TD-W8101G
  • TP-Link TD-W8151N
  • TP-Link TD-W8901G
  • TP-Link TD-W8901G 3.0
  • TP-Link TD-W8901GB
  • TP-Link TD-W8951ND
  • TP-Link TD-W8961ND
  • TP-Link TD-W8961ND
  • ZTE ZXDSL 831CII
  • ZTE ZXV10 W300

Если веб-страница будет найдена, C&C-сервер посылает боту небольшой список из десяти паролей для перебора (brute force). В случае, когда бот подобрал нужный пароль и может войти в аккаунт роутера, он приступит к изменению настроек DNS-сервера. Интересно отметить, что для получения доступа к аккаунту административной панели используется только метод перебора паролей без эксплуатации какой-либо уязвимости. Аутентификация может быть выполнена с именами пользователей «admin» или «support», хотя предыдущие версии также пытались применить «root» и «Administrator». Ниже приведен список паролей, которые передавались с C&C-сервера боту:

  • пустая строка
  • 111111
  • 12345
  • 123456
  • 12345678
  • abc123
  • admin
  • Administrator
  • consumer
  • dragon
  • gizmodo
  • iqrquksm
  • letmein
  • lifehack
  • monkey
  • password
  • qwerty
  • root
  • soporteETB2006
  • support
  • tadpassword
  • trustno1
  • we0Qilhxtx4yLGZPhokY

В случае успешного входа в аккаунт, вредоносный код изменяет адрес основного DNS-сервера на поддельный, сообщает об операции успешного заражения на C&C и продолжает сканирование диапазона IP-адресов. После того как произведена такая модификация DNS, все запросы на резолвы адресов будут проходить через этот сервер злоумышленников, который будет ретранслировать их на веб-страницы с поддельными установщиками браузера Google Chrome, в случае присутствия доменов «facebook» или «google» в оригинальном запросе.


Рис. Веб-страница в случае успешного перенаправления домена, который содержит слово «google».

Эта вредоносная программа чем-то напоминает известный DNSChanger, который перенаправлял пользователей на установку вредоносных программ через рекламу поддельного ПО. На сами рекламные сайты пользователь перенаправлялся через вредоносный DNS.

В случае с Sality, как только компьютер подвергается заражению через запущенный пользователем поддельный установщик браузера Google Chrome, настройка DNS-сервера в Windows изменяется вредоносным кодом на значение «8.8.8.8» через модификацию параметра реестра NameServer на указанное значение в разделе HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{network interface UUID}. Этот IP-адрес не является вредоносным и принадлежит альтернативному DNS-серверу Google.

После того как операция установки DNS-сервера завершена, DNS-запись роутера для этого ПК становится бесполезной и ОС будет использовать явным образом прописанный в реестре сервер. С другой стороны, другие компьютеры, которые будут пытаться подключиться к этому роутеру, подвергнутся вредоносным перенаправлениям, так как DNS-запись роутера по-прежнему модифицирована.

Вредоносный код Win32/Sality, который занимается модификацией DNS-сервиса роутера, состоит из двух исполняемых файлов: сканер адресов роутеров и DNS/HTTP-сервер.

Сканер адресов обнаруживается ESET как Win32/RBrute.A. В начале своей работы он создает мьютекс с именем «19867861872901047sdf», что позволяет ему отслеживать уже запущенный экземпляр вредоносной программы. Затем он каждую минуту проверяет жестко зашитый в коде IP-адрес для получения команды. Команда может быть двух типов: проверить диапазон IP-адресов или попытаться войти в учетную запись панели управления роутера для модификации DNS-сервиса. Инструкция проверки диапазона адресов приходит с IP-адресом начала диапазона и количеством адресов. Win32/RBrute.A будет отправлять HTTP GET-запрос на TCP-порт 80, надеясь получить ошибку 401 – Unauthorized. Модель роутера будет извлечена из атрибута realm HTTP-протокола (точнее, см. его схему аутентификации). Если роутер найден, вредоносная программа отправляет обратно на C&C его IP-адрес.


Рис. Блок-схема работы Win32/RBrute.A.

После того как IP-адрес отправлен на C&C, бот получает команду на вход в панель управления роутером. При этом используются логин и пароль, выданные C&C. В случае успешного входа, вредоносный код модифицирует адрес основного DNS-сервера, который теперь будет указывать на другой компьютер, зараженный другой модификацией RBrute – Win32/RBrute.B.

Ранее мы упоминали компонент вредоносной программы, который выполняет роль DNS/HTTP-сервера. Он обнаруживается как Win32/RBrute.B и выполнение его кода делится на три потока: управляющий поток, поток DNS-сервера и поток HTTP-сервера. Хотя этот вредоносный компонент может одновременно запустить и DNS- и HTTP-сервисы, на самом деле, он выбирает для запуска какой-то один из них с использованием случайно сгенерированной величины. Специальная константа в формуле используется для гарантии, что в 80% случаях бот будет работать как DNS-сервер, хотя в начальный период отслеживания операции с использованием этой вредоносной программы мы наблюдали константу, которая гарантировала 50% случаев работы в качестве DNS.


Рис. Код выбора DNS- или HTTP-сервера для старта.

RBrute.B имеет и другую ветвь кода, которая исполняется в том случае, когда вышеприведенный код отработал неверно.


Рис. Иной механизм запуска потоков HTTP/DNS-серверов в коде вредоносной программы.

Операторы RBrute могут вручную запустить вышеуказанные потоки через отправку специальным образом сформированного DNS- или HTTP-запроса. Как и RBrute.A, RBrute.B использует специальный мьютекс с именем «SKK29MXAD» для предотвращения запуска своей второй копии на зараженной системе.

Управляющий поток (control thread) используется для отправки данных, собранных вредоносной программы, обратно на C&C-сервер. Каждые две минуты RBrute.B отправляет пакет данных по жестко зашитому IP-адресу. Этот пакет содержит информацию о системе, в которой работает бот. Затем управляющий сервер предоставит боту IP-адрес, который будет использоваться для доставки поддельного установщика Google Chrome. Если бот работает в режиме DNS-сервера, то IP-адрес C&C-сервера будет совпадать с адресом, который нужно использовать в качестве сервера распространения поддельного установщика браузера. В противном случае, управляющий сервер отправит тот IP-адрес, который находится за пределами инфраструктуры Sality P2P и будет использоваться для распространения поддельных установщиков Chrome.

Ниже приводится информация о системе, которая отправляется управляющим потоком на удаленный сервер.

  • Имя системы – GetComputerName().
  • Зафиксированное время – GetLocalTime().
  • Страна – GetLocaleInfo().
  • Путь к директории Windows – GetWindowsDirectoryA().
  • Название продукта ОС – из системного реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Product Name.
  • Названия процессоров – из системного реестра HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\<CPU #>\ProcessorNameString.
  • Объем памяти GlobalMemoryStatus().
  • Присутствие отладчика – IsDebuggerPresent().
  • Количество памяти, используемое вредоносной программой GetProcessMemoryInfo().
  • Время работы вредоносной программы – в минутах.
  • Количество работающих потоков.

Пакет с информацией имеет следующий формат:

0x00 DWORD контрольная_сумма (CRC32)
0x04 WORD размер_полезной_нагрузки
0x06 BYTE не_используется
0x07 BYTE режим_работы (HTTP – 0x32 или DNS – 0x64)

Ниже показан скриншот с информацией пакета, отправленного на C&C.


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

Информация о системе может иметь вид (в пакете зашифрована с использованием RC4):

9BC13555|24.03.2014 21:56:27|United States|C:\WINDOWS|Microsoft Windows XP|proc#0 QEMU Virtual CPU version 1.0|1|358|511|1117|1246|0|2|0|0|

Управляющий сервер затем ответит пакетом, который содержит IP-адрес для использования. Пакет имеет вид.

0x00 DWORD контрольная_сумма (CRC32)
0x04 WORD размер_полезной_нагрузки
0x06 BYTE не_используется
0x07 BYTE команда (0x02 – запустить или 0x03 – остановить сервис)
0x08 DWORD IP_адрес_сервиса (Система с запущенным Win32/Rbrute.B или другой HTTP-сервер)

Поток компонента DNS-сервера ожидает запросы, которые содержат слова «google» или «facebook» в названии домена. Если он обнаруживает подобный запрос, то ничего не подозревающему клиенту высылается IP-адрес необходимого злоумышленникам HTTP-сервера, который они ранее уже отправили этому боту (Win32/Rbrute.B) через C&C. Если запрос не содержит этих двух слов, то он перенаправится к DNS-сервису Google («8.8.8.8» или «8.8.4.4»), а затем клиенту.

Отправка ботом запроса на сервер через протокол UDP на порт 53 пакета с константой «0xCAFEBABE» в поле полезной нагрузки приведет к установке флага «udme» в разделе системного реестра HKEY_CURRENT_USER\SOFTWARE\Fihd4. Этот флаг гарантирует, что поток DNS-сервера будет запущен после перезагрузки. Сервер должен ответить константой «0xDEADCODE» для подтверждения выполнения этого действия.

Мы упоминали отдельный поток HTTP-сервиса в Win32/RBrute.B. Рассмотрим его более подробно. Этот сервис обслуживает пользователей, которые были перенаправлены через вредоносный DNS роутера на скачивание поддельного дистрибутива браузера Google Chrome. При получении запроса через HTTP, поток сервиса сначала проанализирует параметр User-Agent в заголовке. Дальнейшее поведение сервиса зависит от того, что находится в этом параметре.

Если параметр User-Agent содержит строку «linux» или «playstation», сервис просто разорвет соединение. В случае, если User-Agent содержит информацию о том, что используется браузер на мобильном устройстве (встречаются «android», «tablet», «Windows CE», «blackberry» или «opera mini»), то сервис может ответить поддельным установщиком браузера. Также поддельный установщик Chrome будет доставлен, если User-Agent содержит «opera», «firefox», «chrome», «msie», либо что-то другое.



Как и в случае с DNS-сервисом, оператор может сам повлиять на поведение HTTP-сервиса путем отправки специальным образом сформированного HTTP-пакета. Он может это сделать отправив GET или POST запрос со специальным User-Agent «BlackBerry9000/5.0.0.93 Profile/MIDP-2.0 Configuration/CLDC-2.1 VendorID/831», что приведет к установке флага «htme» ботом в разделе реестра HKEY_CURRENT_USER\SOFTWARE\Fihd4. Это гарантирует запуск HTTP-сервера после перезагрузки. Сервер (бот с Win32/RBrute.B) должен ответить сообщением «kenji oke» для подтверждения исполнения команды.

Все компоненты Sality, которым необходимо получать соединения из сети, имеют в своем составе один и тот же код для добавления специального правила Windows Firewall, которое разрешит входящие соединения для процесса вредоносной программы. Такая операция выполняется за счет добавления параметра «имя_файла_вредоносной_программы:*:Enabled:ipsec» в раздел реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List. Ниже указан код функции add_to_firewall_exception Sality, который выполняет эту операцию.



В компоненте Win32/RBrute.B эта функция вызывается в начале исполнения вредоносной программы.


Рис. Отсюда производится вызов функции add_to_firewall_exception.

Аналогичный код находится в компоненте спам-бота, который принадлежит Sality.


Рис. Код спам-бота Sality, в котором вызывается add_to_firewall_exception.

Наши данные телеметрии показывают, что активность Win32/Sality в настоящее время снижается или, по крайней мере, остается на таком же уровне как в 2012 г. Мы полагаем, что сокращение числа обнаружений связано с низкой эффективностью текующих векторов заражения пользователей. Это могло бы объяснить тот факт, что злоумышленники ищут новые способы для распространения Win32/Sality.



Если мы посмотрим на статистику обнаружений Sality за последний год, то увидим небольшое увеличение количества обнаружений, примерно, в декабре 2013. Эта дата совпадает со временем первой активности компонента RBrute, который выполняет подмену DNS-сервиса роутера.



Мы не уверены в настоящей эффективности компонента RBrute для злоумышленников, поскольку подавляющее количество роутеров прослушивают только жестко фиксированное адресное пространство (т. е. 192.168.0.0/16), что делает панель управления недоступной из интернета. Кроме этого, компонент RBrute не выполняет сильный перебор паролей, а только пытается применить десять паролей из своего списка.

Заключение

Простые векторы заражения пользователей вредоносным кодом Win32/Sality не могут быть достаточно эффективными, чтобы поддерживать популяцию ботнета на соответствующем уровне. Злоумышленники нуждались в новом способе распространения вредоносной программы и таким способом стал DNS hijacking для роутера. В зависимости от того, подвержен ли выбранный роутер эксплуатации, его жертвами перенаправлений может стать множество подключенных к нему пользователей. Мы рекомендуем использовать безопасные пароли для аккаунтов панелей управления роутеров, а также проверять действительно ли необходимо разрешать доступ к ней из интернета.
Автор: @esetnod32
ESET NOD32
рейтинг 536,48

Комментарии (7)

  • +3
    Ниже приведен список паролей, которые передавались с C&C-сервера боту
    111111
    12345:
    .
    .
    .
    we0Qilhxtx4yLGZPhokY

    Внезапно. Интересно, как такой пароль сюда попасть мог.
    • 0
      Ну судя по всему, настолько часто используемый, что его-таки вбили константой :)
    • +5
      Возможно, некий тайный пароль от админки какого-нибудь производителя.
    • 0
      может разработчик вируса на своем домашнем рутере тестировал :)
  • –3
    Так вот почему у моего дедушки планшет на прошлой неделе не работал…
  • 0
    Я бы не стал недооценивать опасность данного компонента. Даже если вектор атаки извне не так эффективен, то изнутри может натворить много бед. Например, заразив домашний роутер (а как правило дефолтные пароли мало кто меняет), можно заразить все остальные компьютеры, подключенные к нему, в т.ч. и мобильные.
    В случае же если зараженный ноутбук будет путешествовать по бесплатным Wi-Fi точкам, которые, по моему наблюдению тоже часто не заморачиваются изменением дефолтного пароля, то количество заражений будет происходить в прогрессии. Кстати где-то на хабре про это как раз недавно писали.
  • 0
    Не знаю как был подобран пароль, возможно брутфорсом. Подобрать в локалке шестисимвольный буквенноцифровой вполне реально. Но он спалился, т.к. зачем-то поменял кроме DNS ещё и подсеть в IP-адресе роутера — в итоге половина девайсов отвалилась.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное