PDA

Просмотр полной версии : Исследование IBM Rational AppScan


neprovad
05.01.2009, 17:52
Исследование IBM Rational AppScan 7.7

О программе
Продукт IBM Rational AppScan - это модуль для автоматического тестирования безопасности Web-приложений, который непрерывно в автоматическом режиме просматривает Web-приложения, проверяет их на наличие проблем с безопасностью и формирует пригодные для практического использования отчеты с рекомендациями по устранению проблем, чтобы упростить процесс внесения исправлений.
IBM Rational AppScan Standard Edition предоставляет следующие возможности:
* Поддержка базового уровня защищенности: включая защиту от угроз, определенных в классификации угроз WASC, например SQL-injection, XSS и переполнение буфера.
* Широкий охват приложений: включает сканирование интегрированных Web-служб, а также выполнение и синтаксический анализ JavaScript (в том числе Ajax).
Функции настройки и расширения: инфраструктура AppScan eXtension Framework позволяет сообществу пользователей совместно использовать и разрабатывать подключаемые модули с открытым исходным кодом.
* Расширенные рекомендации по внесению исправлений: отображается исчерпывающий список задач, которые необходимо решить для устранения проблем, выявленных при сканировании.
Автоматизированные функции для контроля вторжений: инструменты тестирования с расширенными функциями и инфраструктура Pyscan дополняют ручное тестирование, обеспечивая более высокий уровень эффективности и производительности.
* Отчетность о соответствии нормативным требованиям: поставляемые в комплекте 40 отчетов о соответствии, в том числе стандарт безопасности данных PCI, ISO 17799 и ISO 27001, а также Basel II.
Такая вот информация, от себя добавлю что это еще один сканер web-уязвимостей, требующий регистрации. Ну и конечно же программа работает с ограничениями и для всеобъемлющего сканирования нам потребуется полная лицензия. Приступим..

Подготовительный этап
Скачаем программу Страница скачивания IBM AppScan 7.7 (https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?pkgid=&S_PKG=CR6P6EN&S_SRCID=RATLe-APPSCANSE-EVAL&source=RATLe-APPSCANSE-EVAL&S_TACT=105AGX23&S_CMP=rnav) - Потребуется регистрация.
прямые ссылки - AppScan 7.7.part1 (http://rapidshare.com/files/180018928/AppScan_7.7_SP2.part1.rar), AppScan 7.7.part2 (http://rapidshare.com/files/180020047/AppScan_7.7_SP2.part2.rar) и установим все обновления. После этого версия продукта будет иметь значение 7.7.738. На этом этапе может потребоваться лицензия. Пробную можно получить от самих разработчиков, причем бесплатно.
Итак, считаем что лицензию, пусть и временную, мы получили.
Заглянем в меню Help-License – видим, что лицензия Demo и имеются некоторые параметры, о значении которых мы смутно можем догадываться. Текстовый поиск по папке, куда все установлено, дает ответ - лицензия находится в папке License и имеет читабельный вид. Обращаем внимание на большое число, видимо это подпись файла. Теперь найдем ту библиотеку или приложение, что считывает данные этой лицензии. Для этого ищем текстовым поиском по всем файлам в папке куда все установлено, строку FIX_RECOMMENDATION_ALL. Находим такую в файле engine_control.dll. Грузим эту библиотеку в PEiD, сканируем плагином Kanal, последний выдает интересный результат – большие числа и не менее интересные функции в импорте.
http://s41.radikal.ru/i094/0901/e4/896f0293040f.png

Экспорт и импорт Engine_control.dll
Загрузим библиотеку в дизассемблер. Будем использовать для этой цели IDA. После нескольких минут работы автоанализа видим - исследуемая библиотека содержит большое количество говорящих «имен». В импорте мы видим DSA_verify, это дает нам право считать, что та самая подпись файла лицензии основывается на алгоритме DSA.

.idata:67BF65CC ; Imports from LIBEAY32.dll
.idata:67BF65CC extrn __imp_DES_set_key_checked:dword
.idata:67BF65D0 extrn __imp_DES_ecb3_encrypt:dword
.idata:67BF65D4 extrn __imp_DSA_free:dword ;
.idata:67BF65D8 extrn __imp_DSA_verify:dword ;
.idata:67BF65DC extrn __imp_BN_hex2bn:dword ;
.idata:67BF65E0 extrn __imp_DSA_new:dword ;
.idata:67BF65E4 extrn __imp_RAND_seed:dword ;
.idata:67BF65E8 extrn __imp_SHA1:dword ;
Разберемся, куда ведет проверка и как она реализована. К адресу 67BF65D8 ведет только одна ссылка с 67BA4272, а оттуда на
.text:67B88AE4 call DSA_verify
и
.text:67B88B9D call DSA_verify
Причем оба вызова приходятся на одну функцию, которая возвращает результат Boolean. Для наглядности переименуем всю функцию в verify_sign
.text:67B892C8 call verify_sign
.text:67B892CD test al, al
.text:67B892CF jnz loc_67B893E6

Можно предположить что это и есть место для патча. Запомним его.
Затем обратим внимание на экспорт, названия говорят сами за себя, например bool __thiscall LicenseEngine::isLicenseOk(enum LicenseVerifier). Поставим тут бряк [адрес 67B19280] (далее станет ясно что это «верхний» уровень обертки вокруг verify_sign).
Но остается нерешенным вопрос – что должно быть в файле лицензии? Если обойти проверку подписи, то мы её просто проигнорируем, но содержимое нам не проигнорировать, так как оно активно используется для определения лимитов в работе (такие параметры как IP, сроки работы приложения и т.д.). Поэтому займемся сбором информации.

Собираем свою лицензию
Вспоминаем, что при установке есть возможность получить временную лицензию непосредственно от разработчиков. Получив один раз такую лицензию, рассмотрим её содержимое:

ProductName=AppScan
Version=7.0
Type=full
Features=FIX_RECOMMENDATION_ALL
StartDate=02/05/2007
EndDate=02/12/2010
SerialNumber=0
Organization=Demo
ContactName=Demo
MacAddresses=any
DiskIds=any
HostId=any
AllowUpgrade=yes
SubProduct=auditor
Class=end-user
Restrictions=<host=any> <ip=10.10.10.11>
Signature=302C021441DAC0A9EABA0036089DE9FCE163E029 E1D67D3E02147BDD28C2907EAC4863311CBDA8843677C9B632 60

Некоторые значения интуитивно понятны, например, организация или контактное имя, однако так сказать нельзя об остальных параметрах. Включаем отладчик встроенный в IDA или запускаем OllyDbg (кому что нравится), ждем срабатывания бряка LicenseEngine::isLicenseOk и начинаем запоминать, какие значения ожидает от нас программа для каждого параметра файла лицензии. Будем записывать сразу нужные нам параметры:

ProductName=AppScan
Version=5.0
Type=full
Features=all
StartDate=01-05-2009
EndDate=12-31-2099
SerialNumber=0
Organization=forum.antichat.ru
ContactName=neprovad
MacAddresses=any
DiskIds=any
HostId=any
AllowUpgrade=yes
SubProduct=auditor
Class=enterprise
Restrictions=<host=any> <ip=any> <domain=any> <mask=any>
Signature=302C021441DAC0A9EABA0036089DE9FCE163E029 E1D67D3E02147BDD28C2907EAC4863311CBDA8843677C9B632 60

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

Модификация engine_control.dll
Теперь, когда лицензия готова, осталось внести изменения в библиотеку. Перейдем к адресу 67B88AF8 и заменим байт 17h на 00h.
.text:67B88AF7 jnz short loc_67B88B10
Таким образом при любом возвращаемом значении функции DSA_Verify, переход будет идти на ветку кода, сигнализирующего об успешной проверке подписи. Сохраним изменения и проверим свою работу. Оп, работает, в окне об используемой лицензии значится Enterprise – «все включено». Защита ПО, занимающего в дистрибутиве более 100 Мб, взломана заменой одного байта. Получилось вполне элегантно :)

P.S.
Если выглядит достойно, прошу перенести в статьи. Любая критика только приветствуется.

zeppe1in
08.01.2009, 15:51
молодец.)

PaLb14
11.01.2009, 16:19
Интересно, надо попробывать, тока прога прилично весит(
Почему в статьи не ушло?!

neprovad
12.01.2009, 10:51
Интересно, надо попробывать, тока прога прилично весит(
Почему в статьи не ушло?!
объем приличный, это действительно так.
отчего не в статьях не знаю, может мало материала, а может еще не засылалось в соответствующий раздел

0x0c0de
20.01.2009, 16:36
>> отчего не в статьях не знаю, может мало материала, а может еще не засылалось в соответствующий раздел

В статьи беспонту перемещать... Лучше чтобы тематические статьи были в тематических разделах, так хоть посещающий контингент будет читать. так что все ок, хоть есть шанс получить нормальные комментарии, а не нечто вроде "афтар маладец", "ничего не понял, но плюсег" и тому подобное. да и в "Статьях" нет градации по тематике, что не есть хорошо.

Gryphusa
21.01.2009, 21:45
Hello Neprovad,

I've seen that in the new version 7.8 of this product steps to follow to get a valid license is not possible, IBM has included a new system and I can not figure out how to unlock,

Thanks,

PaLb14
22.01.2009, 00:09
В статьи беспонту перемещать... Лучше чтобы тематические статьи были в тематических разделах, так хоть посещающий контингент будет читать. так что все ок, хоть есть шанс получить нормальные комментарии, а не нечто вроде "афтар маладец", "ничего не понял, но плюсег" и тому подобное. да и в "Статьях" нет градации по тематике, что не есть хорошо.

А может, закрепить тему статьи, как в SEO ?

Hellsp@wn
22.01.2009, 01:01
тема не раскрыта - убрать листинги, картинки и т.д. от неё ничё не останется, смысл тогда? неподкованный человек ничего не черпнёт нового из неё, т.к. написано для среднего уровня. вообщем, совершенствуйся, ты можешь и лучше.

neprovad
22.01.2009, 18:07
вообщем, совершенствуйся, ты можешь и лучше.
буду стараться, спасибо за отзыв