Исследование 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 - Потребуется регистрация. прямые ссылки - AppScan 7.7.part1, AppScan 7.7.part2 и установим все обновления. После этого версия продукта будет иметь значение 7.7.738. На этом этапе может потребоваться лицензия. Пробную можно получить от самих разработчиков, причем бесплатно. Итак, считаем что лицензию, пусть и временную, мы получили. Заглянем в меню Help-License – видим, что лицензия Demo и имеются некоторые параметры, о значении которых мы смутно можем догадываться. Текстовый поиск по папке, куда все установлено, дает ответ - лицензия находится в папке License и имеет читабельный вид. Обращаем внимание на большое число, видимо это подпись файла. Теперь найдем ту библиотеку или приложение, что считывает данные этой лицензии. Для этого ищем текстовым поиском по всем файлам в папке куда все установлено, строку FIX_RECOMMENDATION_ALL. Находим такую в файле engine_control.dll. Грузим эту библиотеку в PEiD, сканируем плагином Kanal, последний выдает интересный результат – большие числа и не менее интересные функции в импорте. Экспорт и импорт Engine_control.dll Загрузим библиотеку в дизассемблер. Будем использовать для этой цели IDA. После нескольких минут работы автоанализа видим - исследуемая библиотека содержит большое количество говорящих «имен». В импорте мы видим DSA_verify, это дает нам право считать, что та самая подпись файла лицензии основывается на алгоритме DSA. Code: .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, а оттуда на Code: .text:67B88AE4 call DSA_verify и .text:67B88B9D call DSA_verify Причем оба вызова приходятся на одну функцию, которая возвращает результат Boolean. Для наглядности переименуем всю функцию в verify_sign Code: .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, сроки работы приложения и т.д.). Поэтому займемся сбором информации. Собираем свою лицензию Вспоминаем, что при установке есть возможность получить временную лицензию непосредственно от разработчиков. Получив один раз такую лицензию, рассмотрим её содержимое: Code: 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=302C021441DAC0A9EABA0036089DE9FCE163E029E1D67D3E02147BDD28C2907EAC4863311CBDA8843677C9B63260 Некоторые значения интуитивно понятны, например, организация или контактное имя, однако так сказать нельзя об остальных параметрах. Включаем отладчик встроенный в IDA или запускаем OllyDbg (кому что нравится), ждем срабатывания бряка LicenseEngine::isLicenseOk и начинаем запоминать, какие значения ожидает от нас программа для каждого параметра файла лицензии. Будем записывать сразу нужные нам параметры: Code: 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=302C021441DAC0A9EABA0036089DE9FCE163E029E1D67D3E02147BDD28C2907EAC4863311CBDA8843677C9B63260 В целом ничего сложного для восприятия, все вполне логично. Сигнатуру скопируем от предыдущей лицензии, пусть будет. Файл с лицензией сохраним в папку License. Он нам еще пригодится. Модификация engine_control.dll Теперь, когда лицензия готова, осталось внести изменения в библиотеку. Перейдем к адресу 67B88AF8 и заменим байт 17h на 00h. Code: .text:67B88AF7 jnz short loc_67B88B10 Таким образом при любом возвращаемом значении функции DSA_Verify, переход будет идти на ветку кода, сигнализирующего об успешной проверке подписи. Сохраним изменения и проверим свою работу. Оп, работает, в окне об используемой лицензии значится Enterprise – «все включено». Защита ПО, занимающего в дистрибутиве более 100 Мб, взломана заменой одного байта. Получилось вполне элегантно P.S. Если выглядит достойно, прошу перенести в статьи. Любая критика только приветствуется.
объем приличный, это действительно так. отчего не в статьях не знаю, может мало материала, а может еще не засылалось в соответствующий раздел
>> отчего не в статьях не знаю, может мало материала, а может еще не засылалось в соответствующий раздел В статьи беспонту перемещать... Лучше чтобы тематические статьи были в тематических разделах, так хоть посещающий контингент будет читать. так что все ок, хоть есть шанс получить нормальные комментарии, а не нечто вроде "афтар маладец", "ничего не понял, но плюсег" и тому подобное. да и в "Статьях" нет градации по тематике, что не есть хорошо.
AppScan 7.8 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,
тема не раскрыта - убрать листинги, картинки и т.д. от неё ничё не останется, смысл тогда? неподкованный человек ничего не черпнёт нового из неё, т.к. написано для среднего уровня. вообщем, совершенствуйся, ты можешь и лучше.