Шрифт:
Тестирование
Инсталлируйте приложение и проверьте, какие элементы управления доступом заданы для созданных объектов. А еще лучше подключиться к функциям, которые создают объекты, и запротоколировать задаваемые права (если приложение предоставляет такую возможность). Тем самым вы сможете увидеть несохраняемые объекты, например временные файлы, события и участки разделяемой памяти.
Что касается «зашитых» секретов, то проще всего проанализировать двоичный файл с помощью, например, такого инструмента, как strings (www.sysinternals.com/ ntw2k/source/misc.shtml#strings). Эта программа выводит все текстовые строки, встречающиеся в приложении, и смотрит, нет ли среди них чего–то похожего на пароль или набор случайных символов (быть может, это ключ?).
На рис. 12.1 приведен результат работы для небольшого двоичного файла. Взгляните на строку под Welcome to the Foo application. Похоже на неудачную попытку скрыть пароль или ключ!
Рис. 12.1 . «Сокрытие» пароля в приложении, написанном на языке С или С++
Для приложений, написанных на .NET–совместимом языке, например VB.NET, ]# или С#, можете воспользоваться программой ildasm.exe, поставляемой в составе .NET Framework SDK. Она позволяет выполнить тщательный анализ кода. Если вызвать ее, как показано ниже, то она выведет все строки. Посмотрите, нет ли среди встроенных паролей.
ildasm /adv /metadata /text myapp.exe | findstr ldstr
На рис. 12.2 непристойное проявление греха бросается в глаза!
Вторая строка очень напоминает случайный ключ, но это еще не все. В третьей строке мы видим строку соединения с SQL Server от имени пользователя sa, содержащую встроенный пароль. Но и этим дело не заканчивается. Последняя строка – это, скорее всего, часть SQL–запроса, который во время исполнения будет с чем–то конкатенирован. Возможно, вы нашли приложение, в которое не только «зашита» секретная информация, но еще и подверженное греху 4 – внедрению SQL–команд.
Рис. 12.2. Отыскание «зашитых» секретов в .NET–приложениях
Еще один инструмент, полезный для анализа .NET–приложений, – это программа Reflector Лутца Редера (Lutz Roeder), которую можно загрузить со страницы www.aisto.com/roeder/dotnet.
Наконец, для Java можно воспользоваться дизассемблером dis (www.es. princeton.edu/~benjasik/dis). На рис. 12.3 показан пример его работы для Linux.
Как и в примере .NET–приложения, мы видим некоторые интересные данные. Константа в строке #15 – это, очевидно, строка соединения с базой данных, а в строках 17 и 19 мы, по–видимому, имеем имя и пароль пользователя.
Рис. 12.3. Отыскание «зашитых» секретов в программах на языке Java
Наконец, в строке 21 находится SQL–запрос, который будет конкатенирован с какой–то строкой во время выполнения. Похоже, что эксплойт для этой программы будет иметь катастрофические последствия. Взгляните на SQL–запрос, он же извлекает информацию о кредитных карточках! Еще один популярный дизассемблер для Java называется Jad, для него существует графический интерфейс под названием FrontEndPlus.
Примеры из реальной жизни
Следующие примеры взяты из базы данных CVE .
CVE–2000–0100
Цитата из бюллетеня CVE: «Программа SMS Remote Control устанавливается с небезопасными правами, позволяющими локальному пользователю расширить свои привилегии путем модификации или замены исполняемого файла».
Исполняемая программа, которую запускает сервис Short Message Service (SMS) Remote Control, помещается в каталог, право на запись в который есть у любого локального пользователя. Если дистанционное управление разрешено, то любой пользователь может запустить произвольную программу от имени учетной записи LocalSystem. (См. www.microsoft.com/technet/security/Bulletin/MSOO–012.mspx.)
CAN–2002–1590
Цитата из бюллетеня CVE: «Система управления предприятием из Web (Web Based Enterprise Management – WBEM) для Solaris 8 с обновлением 1/01 или более поздним инсталлирует пакеты SUNWwbdoc, SUNWwbcou, SUNWwbdev и SUNWmgapp с правом записи для группы и мира. Это позволяет локальному пользователю вызвать отказ от обслуживания или расширить свои привилегии».
Более подробную информацию об этой проблеме можно найти на страницеили по адресу www.securityfocus.com/bid/6061/.
CVE–1999–0886
Цитата из бюллетеня CVE: «Дескриптор защиты для RASMAN позволяет пользователю указать на другое место с помощью Windows NT Service Control Manager ».
Дополнительную информацию об этой проблеме можно найти на странице www.microsoft.com/technet/security/Bulletin/MS99–041.mspx. ACL сервиса RAS Manager предназначался для того, чтобы любой пользователь мог запустить и остановить сервис, но заодно он позволяет изменить конфигурацию, в том числе и путь к исполняемому файлу, который работает от имени учетной записи LocalSystem.