19 смертных грехов, угрожающих безопасности программ
Шрифт:
ildasm /adv /metadata /text myapp.exe | findstr ldstr
На рис. 12.2 непристойное проявление греха бросается в глаза!
Вторая строка очень напоминает случайный ключ, но это еще не все. В третьей строке мы видим строку соединения с SQL Server от имени пользователя sa, содержащую встроенный пароль. Но и этим дело не заканчивается. Последняя строка – это, скорее всего, часть 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.CAN–2004–0311
Программа Web/SNMP Management для управления устройством SmartSlot Card AP9606 AOS компании American Power Conversion версий 3.2.1 и 3.0.3 поставляется с зашитым паролем по умолчанию. Локальный или удаленный противник, имеющий возможность установить Telnet–соединение с устройством, может указать произвольное имя пользователя и пароль «TENmanUFactOryPOWER» и получить неавторизованный доступ к устройству.
CAN–2004–0391
Согласно бюллетеню безопасности Cisco на странице www.cisco.com/warp/ public/707cisco–sa–20040407–username.shtml:
Стандартная пара «имя/пароль» зашита во всех версиях программ Wireless LAN Solution Engine (WLSE) и Hosting Solution Engine (HSE). Пользователь, зашедший под этим именем, получает полный контроль над устройством. Это имя нельзя деактивировать. Способов обойти проблему не существует.
Искупление греха
Слабый контроль доступа – это, по большей части, проблема уровня проектирования. А лучшим способом решения проектных проблем является построение модели угроз. Тщательно рассмотрите все объекты, создаваемые вашим приложением на этапе инсталляции и во время работы. Один из лучших специалистов по анализу кода в Microsoft говорит, что большую часть ошибок он находит «с помощью notepad.exe и собственных мозгов». Поэтому работайте головой!
Следующий по сложности шаг к искуплению греха – изучить платформу, для которой вы пишете, и понять, как на ней работают подсистемы защиты. Вы должны (повторяем – должны!) разбираться в механизме управления доступом на целевой платформе.
Один из способов не попасть в беду заключается в том, чтобы провести различие между данными уровня системы и отдельного пользователя. Если вы это сделаете, то установить правильные ограничения доступа будет совсем несложно, обычно можно будет принять предлагаемые системой умолчания.
А теперь перейдем к самой важной теме – устранению «зашитых» секретов. Изжить этот грех не всегда бывает просто; если бы это было легко, то никто бы и не грешил! Существует два потенциальных лекарства:
□ использовать методы защиты данных, предоставляемые операционной системой;
□ переместить секретные данные туда, где они не принесут вреда.
Мы рассмотрим оба способа подробно, но прежде приведем одно очень важное изречение:
Программа не может защитить сама себя.
Злонамеренный пользователь с неограниченным доступом к компьютеру, обладающий достаточно обширными знаниями, может раскрыть любые секреты, особенно если он является администратором.
Поэтому вы обязательно должны решить, от кого защищаете систему, а затем оценить, достаточно ли прочна защита с учетом важности той информации, которую вы желаете сохранить в секрете. Защитить закрытый ключ, используемый для подписания документов, которые могут существовать 20 лет, сложнее и важнее, чем пароль, открывающий доступ к разделу «Для членов» на каком–нибудь сайте.