5. Описание пути транспортного запроса
1. Создание изменений в системе (ABAP код)
2. Деблокирование запроса (генерация файла запроса)
3. Процедура утверждения переноса запроса
4. Перенос запроса в тестовую систему
5. Процедура утверждения переноса запроса
6. Перенос запроса в продуктивную систему
6. Особенности транспортной системы с
точки зрения ИБ
― Все транспортные запросы находятся в общих папках
― Доступ к общим папкам, как правило, открыт для всех с
правом на изменение
― Контроль за исходным кодом запроса при переносе из
QUA в продуктив в большинстве случаев не
осуществляется
― Количество запросов ОЧЕНЬ большое, затруднён ручной
контроль
7. Недостатки транспортной системы
― Возможность подмены исходного кода в транспортном
запросе при передаче через общие папки (изменение
файла запроса)
― Алгоритм шифрования файлов запросов недостаточно
стойкий
• ключи статические
• алгоритм шифрования собственный
• защита алгоритма шифрования обеспечивается только
через обфускацию
― Механизм контроля целостности/подписи файлов
запросов отсутствует
8. 1. Ищем транспортные директории (общие папки с
запросами )
2. Выбираем файл запроса
3. Изменяем содержимое файла
4. Ожидаем переноса запроса в продуктив
5. Профит !!!
Сценарий атаки
9. 1. Поиск директории sapmnt.
Допустим транспортная система расположена на системе
разработки
Ищем общие папки с названием sapmnt
10. 2. Нас интересует содержимое папки, расположенной по
пути SAPDEVsapmnttransdata
11. Если файлы в этой директории доступны на запись, находим
файл запроса с актуальной датой. Предполагаем, что запрос
ещё не переносился.
12. 3. Изменение файла запроса
― формируем ABAP код на другой системе
― учитываем исполнение кода на целевой системе (когда и
где он сработает )
― в ABAP коде сформирована программа позволяющая
создать пользователя с профилем SAP_ALL
― Скрываем код/программу в запросе
• Через механизм include
• Через обфускацию собственного кода
• Разделяем свой код на несколько запросов (для наиболее
терпеливых)
14. ― Добавляем в файл запроса свой код
― Запаковываем файл обратно
― Переписываем файл обратно в транспортную директорию,
по возможности сохранив время и даты создания файла
16. Описание пути изменённого файла
запроса
1. Процедура утверждения переноса запроса
2. Перенос запроса в тестовую систему
3. Процедура утверждения переноса запроса
4. Перенос запроса в продуктивную систему
19. ― Срабатывает автоматически (JOB, системная программа) и
присылает уведомление об успешном запуске
― Срабатывает при запуске транзакции или отчёта любым
пользователем системы
― Выгружает и отправляет данные в другую систему или
файловую папку
― Можете заходить в систему с полномочиями SAP_ALL
Варианты использования измененного
кода
20. Варианты модификации кода
― Бэкдор от имени скрытого пользователя
― Обычный пользователь с правами SAP_ALL
― Временное отключение проверок авторизации
― Создание/разблокирование/смена пароля пользователям
в центральной системе управления пользователями (CUA)
― Программа или транзакция для чтения произвольных
таблиц
― RFC программа , выполняющая любую транзакцию без
проверки авторизации
21. Import request via the CLI (Command
Line Interface)
It is possible to add transport requests to the buffer, and even
import them via the CLI (Command Line Interface). Keep in
mind, whenever working on an instance at the OS level, you
should be logged in as [sid]adm.
To add transports to the buffer:
tp addtobuffer [transport number] [SID] Client=[client number]
pf=/usr/sap/trans/bin/TP_DOMAIN_[DOMAIN_SID].PFL
tp addtobuffer DEVK900072QAS Client=800
pf=/usr/sap/trans/bin/TP_DOMAIN_DEV.PFL
22. To import transports via CLI:
tp pf=/usr/sap/trans/bin/TP_DOMAIN_[DOMAIN_SID].PFL
import [transport number] [SID] U128 client=400
Since I’ve added DEVK900072 to the buffer, I can now import it
with this string:
tp pf=/usr/sap/trans/bin/TP_DOMAIN_DEV.PFL import
DEVK900072 QAS U128 client=800
23. Конец рассказа
Спасибо за внимание
Ключников Олег
oklyuchnikov@ptsecurity.ru
ведущий эксперт отдела безопасности баз данных и бизнес
приложений
Positive Technologies