Проводить исследования по безопасности SAP — одна из основных моих задач в Positive Technologies. Кроме того, мне нужно было придумать — с чем выступать перед слушателями на нашем форуме PHDays III. Так была найдена тема для исследований: как в SAP-системе можно скрыть наличие профиля SAP_ALL у пользователя (то есть, всех возможных авторизаций). Если злоумышленнику удалось проникнуть в систему, получить права на создание пользователей и присвоение им привилегий, то скорее всего следующим шагом для закрепления в системе будет создание для себя новой учетной записи, разумеется со всеми необходимыми правами. Но такой пользователь будет отображаться в результатах внутренних проверок, внешних аудитов, и трудно рассчитывать, что пользователь с правами SAP_ALL останется незамеченным.
Итак, приступим. Я наметил два вектора проведения работ:
- Запутать работу отчетов по анализу полномочий: посредством вложенности профилей, использования ссылочного пользователя, ролей, копий профиля и т. п.
- Если спросить у спецов по SAP: «Как получить список пользователей, обладающих определенными правами?» — они назовут транзакцию SUIM, отчет RSUSR002, что, по сути, одно и то же. Отсюда следующая идея: на основании анализа ABAP-кода отчета RSUSR002 придумать механизм для преодоления алгоритма работы отчета, тем самым скрыв пользователя.
По первому вектору заинтересовавшимся предлагаю посмотреть материалы моего выступления, о втором же речь пойдет ниже.
Обратимся к логике работы отчета. Логика простая: берется список всех пользователей системы, и каждый пользователь пошагово проверяется на наличие искомых полномочий. Если пользователь не соответствует условиям поиска — он удаляется из списка. Все вроде бы просто… Но при анализе внимание привлекает следующая строка:
Из списка вывода удаляется пользователь с загадочным именем ‘…………’ (12 точек). Проверим наше предположение на практике: создадим пользователя с именем из 12 точек, назначим ему различные роли и профили — и посмотрим на результаты анализа отчета. Как и ожидалось, в результатах отчета пользователь с таким именем отсутствует!
Не правда ли, интересно: зачем такое могло понадобиться производителю SAP? На этот вопрос я, конечно, не могу дать ответа. Может, этот пользователь создавался при генерации отчетов EARLYWATCH и что-то «делал» в системе?..
Для уязвимости определили следующий CVSS-вектор:
CVSS Base Score: 4.6
CVSS Base Vector: AV:N/AC:H/AU:S/C:P/I:P/A:P
Рейтинг, вроде бы, невысокий, но согласитесь: неприятно осознавать тот факт, что производитель системы, в которой у нас хранится и обрабатывается вся критическая бизнес-информация, оставил подобные лазейки для сокрытия каких-то специально заведенных пользователей. Собственно, для чего это могло быть нужно?
Однако, не так уж все и плохо. В июне 2013 года обновление, закрывающее эту уязвимость, уже вышло: SAP Note 1844202. Скачав выпущенное обновление, вы избавитесь от подобной проблемы на своих системах.
Как видно из таблицы ниже, исправление было выпущено для всех существующих версий SAP_BASIS, начиная с версии 4.6B. Иначе говоря, если вы еще не успели обновиться, то данная закладка со стопроцентной вероятностью будет и у вас.
Вот и все, собственно, что я хотел рассказать. Рекомендую применить «ноту», инициатором которой является ваш покорный слуга :)
SAP Security note 1844202: https://service.sap.com/sap/support/notes/1844202
Автор: Дмитрий Гуцко, ведущий эксперт Positive Technologies.
P. S. Видео (зал «Валдай» с 16:00) и слайды презентации на PHDays.
Автор: ptsecurity