Взлом роутеров CISCO при помощи SYNful Knock

SYNful Knock — скрытая модификация прошивки CISCO роутеров, которая может быть использована для поддержания «выносливости» в сети жертвы. Она настраиваемая и модульная, поэтому может быть обновлена после внедрения. Также присутствие бэкдора* будет тяжело детектиться, потому что используется нестандартные пакеты, как при псевдо-аутентификации.

* сначала немного путался с этим термином, точнее он казался для меня странным, так как бэкдор асоциировался со следами предшествующего взлома. Однако в терминалогии сетевых маршрутизаторов бэкдор — это неописанная в пользовательской документации и как правило вообще в паблике фича, которую организовывают себе разрабы прошивок роутеров или других устройств с целью облегчения дальнейшего удаленного доступа, настройки и корректировки своей работы.

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

Общее описание внедрения.
Способ инъекции заключается в модифицированном образе Cisco IOS, которая позволяет атакующему загружать различные функциональные модули из внешней сети (из интернета в большинстве случаев). Инъекция также предоставляет неограниченный доступ использования секретного пароля от бэкдора. Каждый из модулей подключен через HTTP (не HTTPS), используемый специально составленные пакеты TCP, отправляемые на интерфейс роутеров. Эти пакеты имеют нестандартную последовательность и соответствующие корректирующие числа. Модули могут определять себя, как независимо испольняющийся код или «крюки» (hooks) для ОС роутеров, которые предоставляют функционал аналогично паролям для бэкдоров. Ну а пароль для бэкдоров предоставляет доступ к роутеру через консоль и Telnet.

Известные на данный момент модели, подверженные уязвимости:

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

Насколько тяжело обнаружить.
Инъекция находится внудри модифицированного образа Cisco IOS, и когда она уже загружена (внедрена), то инъекция сохраняется в системе, даже после перезагрузки. Однако дальнейшие модули, загруженные атакующим будут доступны только на время текущего сеанса ОС и выгрузятся из памяти после ребута.

Детали или общее описание алгоритма атаки.
Изменения бинарного кода IOS могут быть разделены на следующие четыре функциии:

      [1] Модифицировать атрибуты чтения/записи трансляции ассоциативного буфера (translation lookaside buffer — TLB);
      [2] Модифицировать стандатртную функцию IOS для ее последующего вызова и инициализировать мальварь;
      [3] Перезаписать стандартный протокол обработки функций, содержащих вредоносный код;
    [4] Перезаписать строки, относящиеся к стандартным функциям, строками, используемыми мальварью;

Атрибуты чтения/записи TLB.
Вредонос принуждает все атрибуты TLB чтения или записи становиться атрибутами чтения-записи (RW). Это изменение нужно для обеспечения возможности «захватывания» (hooking) функций IOS загружаемыми модулями. Если же эти атрибуты не будут выставлены как RW, тогда изменения кэшируемых страниц могут не распространиться на оригинальные страницы в памяти.

Это достигается путем изменения двух одиночных байт функции IOS, призванной отвечать за конфигурацию TLB. Неизмененная функция устанавливает первые два бита регистра в единицу, и измененная функция устанавливает первые три бита в 1.

Модификация TLB атрибутов:

TLB атрибуты могут быть изучены (просмотрены) если включить режим «show platform». Вывод данных TLB неизмененного образа IOS показано ниже:

Если в роутер была осуществлена инъекция, то RW атрибуты должны отобаржаться так:

В зависимости от железа роутера, точные диопазоны адресов памяти обычно указывают на секции исполняемого кода, доступные только для чтения.
Самый простой способ определить, был ли изменен роутер — это использовать команду «show platform | include RO, Valid«. Образ IOS мог быть модифицирован для возможности изменения исполняемого кода, если результаты не отобаражются.

Описание вредоноса.
Для исполнения малвари, пока загружается образ IOS, предположительно изменяется функция, отвечающая за планирование процессов. 
Во избежание измененеие размеров образа, вредонос перезаписывает некоторые стандартные функции IOS своим исполняемым кодом. Атакующий проверяет, что перезапись этих фукнций не вызывет в системе сбоев при определенных (нужных ему) условиях.
Несмотря на том, что рзамер образа не изменяется, малварь все же перезаписывает некотоыре строки репорта своей конфигурацией. Это еще один признак для детекта того, что образ был модифицирован вредоносом. Ниже показаны стандартные строки, которые должны отображаться при нормальном образе:

Эти строки заменяются на следующие (или подобные следующим):

Пароль бэкдора.
Атакующий может использовать секретный пароль бэкдора в трех различных ситуациях. Инъекция сначала проверяет является ли введенные юзером данные паролем от бэкдора. Если нет, то внедряется код, который будет передавать параметры доступа при верефикации. Следующие три примера были проверены на возможность получения доступа, использую пароль бэкдора:

Исследование показало, что HTTPS и SSH не могут быть использованы для этих целей.

Command and Control (CnC).
CnC часть инъекции также модульная и позволяет подгружать дополнительный функционал в IOS. Фнукцоинальность CnC незаметная, так как запрашивает серии TCP пакетов, которые вредонос мониторит на наличие специальных значений в заголовке и контенте.
1. Для начала процесса, уникально составленный TCP SYN пакет отправляется на 80 порт зараженного роутера. Важно уточнить, что разница между числом в поле Sequence и acknowledgment должна быть установлена в значение 0xC123D. 

2. Как и обычно вредонос отвечает трехэтапными SYN-ACK сообщениями подтверждая первое SYN сообщение. Однако можно заметить следующие соблюдающиеся условия:

  • Разница между полями acknowledgment и sequence — 0xC123E;
  • Следующие жестко закодированные TCP опции устанавливаются: «02 04 05 b4 01 01 04 02 01 03 03 05»;
  • Необходимый указатель выставлен в значение 0x0001, но необходимый флаг не устанавливается;
  • Вредонос копирует acknowledgment number из SYN пакета для sequence number. Хотя обычно сервер генерирует рандомный sequence number, поэтому это не стандартный хендшейк TCP;


3. После конечного ACK’a для завершения трехэтапного хендшейка контроллер отправляет следующее TCP-сообщение:

  • PUSH и ACK флаги установлены;
  • От начала заголовка TCP, на смещении 0x62 вписывается строка «text»;
  • Команда, показанная ниже, устанавливается на смещении 0x67 относительно заголовка TCP: 

4. Ответ вреданоса инкапсулируется в следующем статическом HTTP/HTML ответе сервера:

Поддерживаемые команды.
Пять команд, показанных ниже, используются для загрузки дополнительных модулей и функционала на роутер жертвы. Всего 100 дополнительных модулей могут быть загружены, однако эти модули временные и не будут присутствовать после перезагрузки.
В сообщение команды устанавливаются первые 4 байта (big-endian) в ноль. Второе «слово» идентифицирует тип сообщения (от нуля до 4). Все сообщения разных типов начинаются со следующих 8 байтов:

00 00 00 00 00 00 00 [00 - 04] [Optional Arguments]

ID:0
Список подгружаемых модулей и их текущее состояние.
Ответ содержит 4 байта, соответствующие ID, который соответствует одному из следующих состояний:
00 — память выделена;
01 — модуль загружен в память;
02 — модуль активирован;
Например, если вредонос отвечает сообщением

00 00 00 03 00 00 02

То сообщение будет обозначать, что модуль 03 активирован (02).

ID:1
Выделяет место для дополнительного модуля перед загрузкой. Команда предоставляет размер модуля для двух запрошенных буферов. Вредонос освобождает память для двух буферов и возвращает адресы в ответе. Первый буфер — исполняемый код, а второй буфер — конфигурация и место хранения (предположительно). Синтаксис сообщения такой:

[WORD ID][WORD длина первого буфера][WORD длина второго буфера]

Пример команды, которая говорит вредоносу освободить 0x0C байтов для первого буфера и 0x90 байтов для модуля с ID 0x02:

00 00 00 02 00 00 00 0C 00 00 00 90

Пример ответа от сервера, показывающего, что первый буфер расположен в памяти по адресу 0x66012C4C и второй буфер по адресу 0x650DCD20:

66 01 2C 4C 65 0D CD 20

ID:2
Заполнить память, выделенную для модуля. Эта команда используется для заполнения исполняемым кодом и данными конфигурации.

[0x80 байты данных захвана (hook)][WORD длина первого буфера][WORD длина второго буфера]
[Первый буфер...][Второй буфер...]

ID:3

Активация загруженного модуля. Малварь парсит буфер данных захвата и создает нужные хуки (hooks) внутри ОС для исполнения модуля. Единственный аргумент — ID (длинной в слово).

ID:4
Удаление модуля. Память выделенная для модуля освобождается и его состояние устанавливается в ноль.

По материалам сайта DamageLab.org

Click to rate this post!
[Total: 5 Average: 3.6]

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

1 comments On Взлом роутеров CISCO при помощи SYNful Knock

Leave a reply:

Your email address will not be published.