Проверка транспортных запросов. Будьте осторожны!
При реализации проектов для платформы SAP Netweaver AS(ABAP) практически всегда возникает необходимость в разработке кастомизированного функционала. Перемещение подобных разработок по ландшафту SAP-систем, как известно, реализовано через транспортную систему и перенос транспортных запросов (Transportablechangerequest).
Оглавление
Стандартный подход. Позитивный вариант
Стандартный подход. Негативный вариант
Система переноса данных из исторических Систем (LSMW)
Введение
При реализации проектов для платформы SAP Netweaver AS(ABAP) практически всегда возникает необходимость в разработке кастомизированного функционала. Перемещение подобных разработок по ландшафту SAP-систем, как известно, реализовано через транспортную систему и перенос транспортных запросов (Transportablechangerequest). Для предотвращения переноса из системы разработки в продуктивную систему потенциальных угроз в части безопасности и производительности, а также повышения последующего удобства сопровождения рекомендуется производить проверки объектов, содержащих код ABAP.
Настройка выполнения проверок
Компания SAP SE предоставляет инструменты для выполнения проверок объектов, содержащих ABAP, не только в момент разработки, но и непосредственно при деблокировании запросов. Если поиск и исправление ошибок при разработке целиком и полностью находится в компетенции разработчика, то в процессе деблокирования и переноса запросов участвует сотрудник, наделенный функциональной ролью «менеджера по изменениям», который и принимает решение о переносе функционала далее по ландшафту SAP-систем.
Настройка проверки объектов функционала производится через транзакцию SE03 («Инструменты организатора переносов») ► «Организатор переносов глобальной настройки» ► «Проверки объектов при деблокировании запроса» с установкой значения «Настраиваемо пользователем» или «Глобально включено» по методике, рассматриваемой в демонстрационном примере.
Демонстрационный пример
Список проверок задаётся через транзакцию SCI («Анализатор кодов») ► Вариант проверки.
После выполнения настройки при неудачной попытке деблокирования запроса будет отображаться следующее диалоговое окно с сообщением (рис.1):
Рис.1 Диалоговое окно при настройке "Глобально включено"
После входа в режим «Просмотр» получим окно со списком найденных ошибок (рис.2).
Рис.2 Результат проверки
Обнаруженный таким образом список уязвимостей, соответственно, возвращается разработчику для дальнейшего исправления, либо для получения обоснования использования данных опасных конструкций.
Недостаток инструментария
Казалось бы, всё предельно просто, разработчик написал программу, менеджер проверил, и после исправления ошибок мы получаем функционал в системах ландшафта, если бы не одно «но». Есть определенный набор объектов, содержащих ABAP-код, проверки которого, не выполняются при данном подходе. Сразу оговоримся, что таких моментов немало, но в рамках данной статьи представим лишь несколько.
Устранение недостатка сводится к выявлению объектов из обозначенного выше набора, организации их проверки и получения списка ошибок для устранения.
Стандартный подход. Позитивный вариант
Для демонстрации работоспособности стандартных инструментов, возьмем следующий транспортный запрос (рис.3):
Рис.3 Запрос с программами
Запрос включает две программы, имеющие критические операторы.
Программы выполняют несложный набор действий по предоставленным запустившему их пользователю полномочий профиля «SAP_ALL». Создание подобного ABAP-кода не требует каких-либо специфических знаний и доступно любому ABAP-разработчику.
Первая программа реализует функционал через конструкцию «INSERT REPORT», с последующим удалением созданного отчёта (рис.4).
Рис.4 Программа с INSERTREPORT
Вторая программа, используя «GENERATE SUBROUTINE POOL», позволяет добиться того же самого (рис.5).
Рис.5 Программа с GENERATE SUBROUTINE POOL
При попытке деблокирования получаем следующий список ошибок с подробным описанием (рис.6, 7):
Рис.6 Результат проверкизапроса с программами
Рис.7 Список ошибокзапроса с программами
Из приведенного примера видно, что проверки «Анализатора кодов» (CodeInspector) успешно отработали, и, получив данный список ошибок, можно передать его разработчикам для последующего исправления.
Стандартный подход. Негативный вариант
Теперь проанализируем два запроса. Один из них содержит SAP Query и формуляр PDF, другой проект LSMW (рис.8, 9).
Первый запрос:SAP Query
Рис.8 Запрос с SAPQueryи формуляром PDF
Другой проект: LSMW
Рис.9 Запрос с проектом LSMW
При попытке деблокирования обоих получаем следующий список ошибок (рис.10):
Рис.10 Результат проверки запросов
Из приведенного примера видно, что ошибки отсутствуют и данные запросы можно смело переносить далее, но мы не рекомендуем торопиться и провести дополнительный анализ объектов из запросов. Для этого подробнее разберем некоторые объекты.
SAP Query
Согласно публикации от 2001 года, SAP Query – это универсальное средство создания отчётов в различных формах, таких как базовые, статистические или ранжированные списки. Реализация осуществляется при помощи создания инфо-набора, являющегося инструментом для разработки запросов к базе данных и формированию отчетности.
Механизм работы предельно прост: используя стандартный конструктор (SQ02) созданный инфо-набор сопоставляется с SAP Query (SQ01) и на выходе генерируется отчёт.
В случаях, когда стандартных возможностей конструктора недостаточно, можно прибегнуть к написанию кода ABAP, что мы и сделали в инфо-наборе одного из представленных запросов (рис.11).
Рис.11 Просмотр инфо-набора
Из примера видно, что код аналогичен тому, что использовался в программах, а результаты проверок запросов отличаются. Объясняется это тем, что генерация отчёта происходит в каждой системе ландшафта и код данного отчёта между системами не переносится.
Для того чтобы проверить отчёт, сгенерированный в системе разработки, необходимо выполнить следующие действия:
Шаг 1. Определить название отчёта.
В транзакции SQ01 для проверяемого SAPQuery выбрать пункт меню Запрос ► Другие функции ► Просмотреть имя отчета (рис.12):
Рис.12 Получение имени отчёта
Шаг 2. Скопировать название отчёта (рис.13).
Рис. 13 Получение имени отчёта
Шаг 3. Скопировать данный отчёт, используя транзакцию SE38, в пользовательскую область имён (рис.14).
Рис. 14 Копирование сгенерированного отчёта
Шаг 4. Выполнить проверку полученного отчёта (рис.15).
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 11
Комментарий от
Олег Точенюк
| 14 марта 2017, 19:45
В общем мне это напоминает индусские статьи. Вроде как и по делу, а сядешь делать по ней, а там опачки, а важная деталька просто не описана, зато очень подробно описано, то что и так ясно, типа как создать в настройке новый завод + три экрана к этому шагу. Ну и соответственно вроде как и полезно, а использовать никак. Или это как у Шнура в песне про выборы, вся песня писалась ради последнего абзаца, посвященного SafeERPCodeSecurity? Если да, тогда написано хорошо.
Комментарий от
Дмитрий Островский
| 14 марта 2017, 22:41
Олег Точенюк 14 марта 2017, 19:45
Вообще-то все это настраивается в транзакции ATC. А то по описанному вами пути через SE03 как-то сильно ограниченная настройка, точнее там просто включается проверка, а вот настройки правил проверок там как раз нет.
В общем мне это напоминает индусские статьи. Вроде как и по делу, а сядешь делать по ней, а там опачки, а важная деталька просто не описана, зато очень подробно описано, то что и так ясно, типа как создать в настройке новый завод + три экрана к этому шагу. Ну и соответственно вроде как и полезно, а использовать никак. Или это как у Шнура в песне про выборы, вся песня писалась ради последнего абзаца, посвященного SafeERPCodeSecurity? Если да, тогда написано хорошо.
Комментарий от
Олег Точенюк
| 15 марта 2017, 11:39
Дмитрий Островский 14 марта 2017, 22:41
Олег, в ATC настраивается проверка pdf и lsmw? Где конкретно не подскажете?
Кстати, обойти вот эту вашу проверку, включения в программу, в явном виде текста для генерации программы, можно без особых проблем и дальше что? Ну т.е. если кто-то очень захочет что-то поломать, то поверь он это сделает, в остальных случаях типа по незнанию, так тупой UPDATE с ошибкой в ключах завалит систему гораздо быстрее, чем вот эти вот извращения с самогенерацией вредоносного кода, а это иногда даже тестирование не может выловить. Так что SafeERPCodeSecurity это баловство, но чем бы барин не занимался, лишь бы в работу не лез. По поводу же ATC так сказать не могу, так как данные проверку позволяют более, менее приводить код подрядчика к общему стандарту, так что тут пользы как по мне больше.
Комментарий от
Дмитрий Островский
| 15 марта 2017, 19:32
Олег Точенюк 15 марта 2017, 11:39
Ну вот видите вы уже про ATC вспомнили, уже хорошо. Что же касается про ваше конкретно, то если у вас такие большие проблемы с деструктивным поведением ваших разработчиков, то может проще с ними распрощаться? Я за все время лет уже 15 как или чуток больше, с таким поведением столкнулся один раз, пару месяцев назад, пацанчики решили нагадить у одного клиента, но это как-то тупо, там же, кто, когда, все же ходы записаны это раз, и два, данные действия попадают под статью уголовного кодекса вмешательство в работу программ и сетей и т.д., так что посадить или нет, это уже личное дело заказчика.
Кстати, обойти вот эту вашу проверку, включения в программу, в явном виде текста для генерации программы, можно без особых проблем и дальше что? Ну т.е. если кто-то очень захочет что-то поломать, то поверь он это сделает, в остальных случаях типа по незнанию, так тупой UPDATE с ошибкой в ключах завалит систему гораздо быстрее, чем вот эти вот извращения с самогенерацией вредоносного кода, а это иногда даже тестирование не может выловить. Так что SafeERPCodeSecurity это баловство, но чем бы барин не занимался, лишь бы в работу не лез. По поводу же ATC так сказать не могу, так как данные проверку позволяют более, менее приводить код подрядчика к общему стандарту, так что тут пользы как по мне больше.
В данной же статье на вполне понятной угрозе присвоения профиля SAP_ALL доносится информация о том, что код в данных объектах проверке стандартными средствами не подлежит.
Лично сталкивался с такими дописываниями SAP query, вследствие которых производительность отчета на выходе оставляет желает лучшего.
К сожалению механизм реализации "того же самого ATC" в части использования SLIN и SCI оставляет желать лучшего, не говоря уже о количестве и качестве проверок, которое даже в CVA весьма невелико по сравнению с конкурентами.
А приведение кода к общему стандарту можно было и до ATC в код инспекторе сделать, чем правда редко кто пользовался, к сожалению.
Комментарий от
Олег Точенюк
| 16 марта 2017, 18:53
Дмитрий Островский 15 марта 2017, 19:32
Олег, бесспорно если ставить цель порушить систему, то способов найти можно немало.
В данной же статье на вполне понятной угрозе присвоения профиля SAP_ALL доносится информация о том, что код в данных объектах проверке стандартными средствами не подлежит.
Лично сталкивался с такими дописываниями SAP query, вследствие которых производительность отчета на выходе оставляет желает лучшего.
К сожалению механизм реализации "того же самого ATC" в части использования SLIN и SCI оставляет желать лучшего, не говоря уже о количестве и качестве проверок, которое даже в CVA весьма невелико по сравнению с конкурентами.
А приведение кода к общему стандарту можно было и до ATC в код инспекторе сделать, чем правда редко кто пользовался, к сожалению.
2. Да согласен, что ATC это больше рекомендации, причем не всегда корректные.
3. Ну ATC тут просто не даст деблокировать запрос, который не прошел SCI. А причина запрета это может быть как вредоносный/не правильный код, так и требования приведения текста программы к единому виду. Хотя у меня сложилось впечатление, что SAP как обычно сделал и забил на тот же SCI. Ну что мешало добавить экзиты для включения в проверку пользовательских расширений. Работы на день, зато получаем универсальный инструмент, который можно расширить и настроить под себя. Но нет, зачем же об этом думать. МЫ лучше через лет пять сделаем какой нить экстендед SCI :-)
Комментарий от
Дмитрий Островский
| 16 марта 2017, 22:18
Олег Точенюк 16 марта 2017, 18:53
1. Угроза добавления SAP_ALL и дописывание кода в квери влияющие на производительность это несколько разные вещи. В первом случае это явно операция взлома системы, во втором это ошибки разработки на абап. Я просто это прочитал статью как как средства борьбы с несанкционированным доступом к системе, кстати реклама SafeERPCodeSecurity, меня как раз и утвердила в этом мнении, а не как оптимизация разработок.
2. Да согласен, что ATC это больше рекомендации, причем не всегда корректные.
3. Ну ATC тут просто не даст деблокировать запрос, который не прошел SCI. А причина запрета это может быть как вредоносный/не правильный код, так и требования приведения текста программы к единому виду. Хотя у меня сложилось впечатление, что SAP как обычно сделал и забил на тот же SCI. Ну что мешало добавить экзиты для включения в проверку пользовательских расширений. Работы на день, зато получаем универсальный инструмент, который можно расширить и настроить под себя. Но нет, зачем же об этом думать. МЫ лучше через лет пять сделаем какой нить экстендед SCI :-)
Рад, что смог объяснить, возможно, не совсем явный посыл о том, что стандартные инструменты проверки ABAP-кода к сожалению не проверяют весь ABAP-код:)
А у SAP теперь есть платный CVA, так что за деньги будет больше качественных(насколько это возможно) проверок
Комментарий от
Олег Точенюк
| 17 марта 2017, 19:13
Дмитрий Островский 16 марта 2017, 22:18
Олег, насколько мне известно некоторые компании как раз пишут собственные сценарии к SCI.
Рад, что смог объяснить, возможно, не совсем явный посыл о том, что стандартные инструменты проверки ABAP-кода к сожалению не проверяют весь ABAP-код:)
А у SAP теперь есть платный CVA, так что за деньги будет больше качественных(насколько это возможно) проверок
"SAP теперь есть платный CVA" - про это не слышал, почитаю, но если он платный значит на SCI точно забили :-) ну маркетинг их мать...
Комментарий от
Антон Сорокин
| 22 марта 2017, 13:20
Олег Точенюк 15 марта 2017, 11:39
Ну вот видите вы уже про ATC вспомнили, уже хорошо. Что же касается про ваше конкретно, то если у вас такие большие проблемы с деструктивным поведением ваших разработчиков, то может проще с ними распрощаться? Я за все время лет уже 15 как или чуток больше, с таким поведением столкнулся один раз, пару месяцев назад, пацанчики решили нагадить у одного клиента, но это как-то тупо, там же, кто, когда, все же ходы записаны это раз, и два, данные действия попадают под статью уголовного кодекса вмешательство в работу программ и сетей и т.д., так что посадить или нет, это уже личное дело заказчика.
Кстати, обойти вот эту вашу проверку, включения в программу, в явном виде текста для генерации программы, можно без особых проблем и дальше что? Ну т.е. если кто-то очень захочет что-то поломать, то поверь он это сделает, в остальных случаях типа по незнанию, так тупой UPDATE с ошибкой в ключах завалит систему гораздо быстрее, чем вот эти вот извращения с самогенерацией вредоносного кода, а это иногда даже тестирование не может выловить. Так что SafeERPCodeSecurity это баловство, но чем бы барин не занимался, лишь бы в работу не лез. По поводу же ATC так сказать не могу, так как данные проверку позволяют более, менее приводить код подрядчика к общему стандарту, так что тут пользы как по мне больше.
Охаяли чужую работу без аргументов.
Рассуждения о том, что, мол, такие атаки делать никто не будет - это несерьезно.
А низкопроизводительный z-код в sap query - это вообще через раз (от числа инфонаборов с z-кодом).
Комментарий от
Антон Сорокин
| 22 марта 2017, 13:21
Комментарий от
Олег Точенюк
| 01 апреля 2017, 13:57
Антон Сорокин 22 марта 2017, 13:20
Олег, а где же ответ по существу?
Охаяли чужую работу без аргументов.
Рассуждения о том, что, мол, такие атаки делать никто не будет - это несерьезно.
А низкопроизводительный z-код в sap query - это вообще через раз (от числа инфонаборов с z-кодом).
По поводу атак, вы встречали такой код? Я вот за почти 20 лет первый раз недавно встретил. Там четко видно кто, что, когда и как сделал, а это уже уголовный кодекс и соответствующая статья и поэтому человек, делающий такое, ну кроме как идиот, других описательных аргументов у меня нет.
По поводу производительности, ну знаете вот дядька Дональд Кнут считает что "Преждевременная оптимизация — корень всех зол" (Donald Knuth) и я с ним полностью согласен :-)
Надеюсь все по существу...
Комментарий от
Олег Точенюк
| 03 апреля 2017, 17:14
Антон Сорокин 22 марта 2017, 13:21
Интересная статья, спасибо.