http://habrahabr.ru/post/234331/
3 августа в сабреддите
/r/Anarchism некто пользователь
PhineasFisher создал
тред, в котором сообщил о том, что ему удалось украсть 40 гигабайт различных данных компании
Gamma International. Возможно, подобная история могла оказаться не столь громкой, если бы не бизнес, которым занимается эта европейская фирма — создание и продажа программных средств для взлома и скрытой слежки (а иными словами — самой настоящей малвари), заказчиками которых обычно выступали государственные структуры. Через несколько дней после первого сообщения взломщик выложил
длинный рассказ о том, как ему удалось проникнуть на сервера
Gamma International и что удалось там найти.
Подробнее о FinFisher
В начале небольшое лирическое отступление и рассказ о том, чем хакера заинтересовала
Gamma International. Помимо всего прочего, эта компания занимается дистрибуцией комплекта ПО
FinFisher, который описывается как "
программное решение для вторжения и удаленного мониторинга, созданное для использования правительственными структурами". Несколько государств преимущественно Ближнего Востока были уличены в переговорах или использовании этой шпионской системы, но большой огласки и расследования эти факты не получили.
Сначала малварь попадала на компьютеры через дырку в iTunes (любая сторонняя программа могла воспользоваться автообновлением этого медиацентра со всеми доступными операциями и вытекающими последствиями), которую Apple не закрывала более трех лет.
В 2012 году многие оппозиционные активисты Бахрейна по электронной почте получили письма с вложениями — .rar-архивами с фотографиями или другими документами, под видом которых на их машины проникал многофункциональный троян. Примечательно, что названия файлов, например,
exe.Image.jpg
на первый взгляд казались «правильными», но в локализованных для арабских стран системах они, как положено, переворачивались справа налево и файл для системы оказывался не картинкой, а исполняемым файлом
gpj.egamI.exe
. Исследованием этой атаки занялись ребята из
CitizenLab, и вот что им
удалось выяснить.
Троян копировал в папку
C:\Documents and Settings\<User>\Local Settings\Temp\
два файла — драйвер и скрипт для самоудаления. Для работы троян использовал технику
Dynamic forking (Process hollowing), то есть образ его исполняемого файла в памяти размещался в адресном пространстве другого, уже существующего процесса. То есть зловредный код исполняется во вполне безобидном контейнере и при этом успешно скрывается от проактивной защиты (кстати сказать, пользуясь рядом других антиотладочных техник). Далее троян прописывает себя в автозагрузку через MBR и начинает собирать данные. Для этого он создает скрытый каталог с рандомным именем типа
C:\Windows\Installer\{49FD463C-18F1-63C4-8F12-49F518F127}
, куда сохраняет скриншоты, данные кейлоггинга, пароли (извлекаемые из браузеров и чат-клиентов), записи звонков по Skype и многое другое. Раз в десять минут троян пересылает собранные данные на сервер по заданному IP (в анализируемом случае это был 77.69.140.194) через порты 22, 53, 80, 443, 4111 (в основном — через два последних).
Результаты анализа действий малвари таковы:
- Сокрытие от 40 самых популярных антивирусных систем
- Скрытая связь с контролирующим сервером
- Полный мониторинг Skype (звонки, чаты, переданные файлы, видео, список контактов)
- Сохранение сообщений основных средств общения (email, чаты, VoIP)
- Онлайн трансляция при наличии веб-камеры и микрофона
- Слежение за своим геоположением
- Исследование локальных файлов
- Кейлоггинг
- Открытие удаленного доступа к системе
- Сложные фильтры для сбора необходимой информации
- Поддежка самых распространенных ОС (Windows, Mac OSX и Linux)
Со времени этого исследования прошло более двух лет, и создатели
FinFisher явно не сидели на месте. Учитывая даже громкие публичные утечки, у них было достаточно времени и ресурсов, чтобы дотачивать и расширять функцинальность своих шпионских систем.
Но теперь давайте перейдем собственно ко взлому. Хакер расписал этот процесс очень подробно, хотя для опытных пен-тестеров в нем нет никаких ноу-хау. Но для новичков в теме компьютерной безопасности эта инструкция может дать много пищи для размышления.
Рассказ для удобства будет вестись от первого лица.Собственная безопасность прежде всего
Разумеется, все описанные действия — уголовно-наказуемое преступление, поэтому стоит предпринять основные способы обеспечения анонимности:
Для начала создаем скрытый зашифрованный том с помощью утилиты
Truecrypt 7.1a. Далее устанавливаем на него
Whonix. Это дистрибутив на основе Debian, все сетевые соединения в котором осуществляются только через анонимную сеть Tor. Вполне достаточно и того, что Whonix будет гонять весь наш трафик через Tor, но все-таки лучше, если мы не станем использовать свое домашнее интернет-соединение. В поиске доступных беспроводных подключений вам помогут инструменты aircrack-ng и reaver, а также самодельная антенна cantenna.
Следуйте здравому смыслу и не проявляйте подозрительную активность вне Whonix, а под ним — наоборот, не занимайтесь своими повседневными сетевыми делами, а также никогда не рассказывайте в хакерской тусовке о своих занятиях в обычной жизни, а друзьям — о своих грандиозных взломах. Если вы придерживаетесь этих правил — можете не переживать за свою анонимность.
Примечание: вообще, я не советую заниматься взломом исключительно через Tor. Он полезен для многого, включая браузинг веб-страниц, но когда дело доходит до пен-теста и использования инструментов вроде nmap, sqlmap и nikto, которые генерируют тысячи обращений к внешним узлам, через Tor будут работать медленно. Их лучше запускать со взломанных серверов или купленных за биткойны VPS. В этом случае через Tor вы будете лишь управлять этими средствами, которые, в свою очередь, будут работать через быстрое соединение.
Поиск цели
Для этого я обычно использую
fierce, а также данные прямых и инверсных whois-запросов по IP-адресам и доменным именам.
Для примера возьмем частную военную компанию Blackwater. Что мы знаем изначально — доменное имя их сайта (academi.com). Найдем все поддомены:
fierce.pl -dns academi.com
67.238.84.228 email.academi.com
67.238.84.242 extranet.academi.com
67.238.84.240 mail.academi.com
67.238.84.230 secure.academi.com
67.238.84.227 vault.academi.com
54.243.51.249 www.academi.com
Теперь сделаем whois-запрос по
www.academi.com
и по выданному диапазону адресов узнаем, что сайт хостится на Amazon Web Service.
NetRange: 67.238.84.224 - 67.238.84.255
CIDR: 67.238.84.224/27
CustName: Blackwater USA
Address: 850 Puddin Ridge Rd
whois-запрос на
academi.com
также сообщил, что сайт зарегистрирован по этому же адресу (
850 Puddin Ridge Rd), поэтому эту строчку можно использовать для инверсных whois-запросов. Вообще, такие сервисы с актуальными данными берут деньги за услуги, поэтому можно исхитриться и использовать Google:
"850 Puddin Ridge Rd" inurl:ip-address-lookup
"850 Puddin Ridge Rd" inurl:domaintools
Мы получили диапазоны IP-адресов, для которых
fierce.pl
подскажет нам доменные имена, а
fierce.pl -dns
— поддомены и их IP-адреса. Итерации можно выполнять до тех пор, пока вы не найдете все, что вас интересует.
Можно поискать организацию в Google и найти другие относящиеся к ней вебсайты. Например, для
academi.com
можно найти портал вакансий, онлайн-магазин и раздел для сотрудников:
54.236.143.203 careers.academi.com
67.132.195.12 academiproshop.com
67.238.84.236 te.academi.com
67.238.84.238 property.academi.com
67.238.84.241 teams.academi.com
После очередных whois-запросов и дальнейших поисков выясняется, что
academiproshop.com
не относится к объекту исследования, так что мы вычеркиваем его из списка.
В случае
FinFisher к уязвимому ресурсу
finsupport.finfisher.com
меня привел простой whois-запрос по
finfisher.com
, который сообщил наименование зарегистрировавшей его организации "
FinFisher GmbH". Поиск
"FinFisher GmbH" inurl:domaintools
выдал
gamma-international.de
, который редиректил на
finsupport.finfisher.com
.
Я думаю, вы поняли принцип поиска цели. Вообще, это одна из важнейших частей атаки, поскольку чем больше площадь, которую вы смогли обнаружить, тем проще найти в ней подходящую дырку.
Сканирование и взлом
Просканируем nmap-ом все найденные IP-диапазоны и обнаружим запущенные на узлах сервисы. Кроме стандартного сканирования не станет забывать и о SNMP-сканировании.
Теперь надо определиться с каждым найденным сервисом:
- Выставляет ли он наружу что-то, чего выставлять не должен? Иногда компании выявляют сервисы, которые не требуют авторизации, и это считается безопасным, так как этот URL или IP используется только для внутренних нужд. Возможно у вас
fierce
найдет поддомен с git-ом, и пройдя в git.companyname.come/gitweb/
вы получите исходные коды сервиса как на ладони.
- Если ли ошибки конфигурации? Возможно, вам попадется FTP-сервер, который позволяет анонимный доступ для чтения или даже записи в важный каталог. Или сервер базы данных с пустым паролем администратора. Или встроенные устройства (VOIP-маршрутизаторы, IP-камеры, роутеры...) используют заводской аккаунт с паролем по умолчанию.
- Насколько стара версия и есть ли для нее публичные эксплойты?
Веб-сервера попадают в отдельную категорию. Для них, включая те, которые nmap нашел на нестандартных портах, я обычно делаю следующее:
- Хожу по веб-страницам. На найденных
fierce
поддоменах, которые явно не предназначаются для публичного взора, например test.company.com
или dev.company.com
можно найти много интересного, просто открыв их в браузере.
- Запускаю nikto. Он произведет поиск доступных каталогов
webserver/.svn/
, webserver/backup/
, webserver/phpinfo.php
и еще тысячи обычных ошибок в настройке.
- Определяю, какое ПО используется на вебсайте. В этом помогает WhatWeb.
- В зависимости от обнаруженного ПО можно использовать специализированные инструменты, вроде wpscan, CMS-Explorer и Joomscan. Сначала исследуйте те сервисы, для которых проще найти известную уязвимость или публичный эксплойт. Если таких не наблюдается, баг надо искать самому.
- Самописные веб-приложения — более благодатная почва для поиска багов, чем широко используемые проекты, поэтому начнем с них. В этом случае я использую комбинацию автоматических тестов ZAP и ручной поиск через его перехватывающий прокси.
- В случае использования сторонних систем достаньте их копию и изучите ее. Если это свободное ПО, вы сможете просто его найти и скачать. Если проект проприетарный, найдите пиратскую версию. Если вдобавок эта система еще и так надежно защищена, что никто не выложил ее пиратскую версию, вы можете либо купить себе лицензию (отстойный вариант), либо через Google найти другие использующие ее сайты, в которые будет проще проникнуть и достать ее копию.
Для
finsupport.finfisher.com
процесс выглядел так:
- В фоне запустил
nikto
.
- Зашел на сайт. Увидел форму логина. Быстро проверил на наличие SQL-инъекции.
- Запустил WhatWeb с целью определить используемое ПО.
- WhatWeb ничего не нашел, поэтому следующий вопрос, с которым следовало разобраться, — это сайт, написанный в Gamma или есть другие вебсайты, которые используеют аналогичное ПО?
- Я открыл исходный код страницы, чтобы найти URL, по которому выполнить поиск (
index.php
, как вы понимаете, не настолько уникален). Я выбрал Scripts/scripts.js.php
и обратился к Google: allinurl:"Scripts/scripts.js.php"
- Выяснил, что существует множество сайтов, которые используют аналогичную систему, написанную в небольшой веб-конторе. Кажется, что все они с самописными движками, но на самом деле у них общий код. Я хакнул пару таких сайтов и скачал себе исходные тексты их движка.
На этом этапе я представляю себе огромные статьи, в которых журналисты пишут что-то воде: "
В результате сложной, многоходовой атаки хакеры сначала взломали веб-контору и получили конфиденциальную информацию, которая помогла им атаковать Gamma Group..."
Но на самом деле, когда вы овладеете этой техникой, все делается довольно просто, почти на автопилоте. Заняло всего пару минут:
- Нашел другие сайты через Google:
allinurl:"Scripts/scripts.js.php"
- Выяснил, что все они имеют SQL-инъекцию в первом параметре, который я проверил.
- Понял, что веб-сервер использует Apache ModSecurity, поэтому я запустил sqlmap с аргументом
--tamper='tamper/modsecurityversioned.py'
- Получил логин и пароль администратора, зашел в админку, залил PHP-шелл (проверка на допустимые расширения загружаемых файлов делалать на клиентской стороне JavaScript-ом) и скачал исходный код веб-сайта.
Просмотрев исходный код, подумал, что этому движку можно было дать название
Чертовски Уязвимый.
Теперь ко
второму найденному сайту. В нем то же самое: инъекция, LFI, загружаемый файл проверяется на клиенте JavaScript-ом, а если вы не залогинены — страница админки отправляет вас обратно на страницу логина с заголовком Location, но вы можете отфильтровать этот заголовок через свою перехватывающую прокси и войти в админку без данных аккаунта.
Вернемся к сайту
finsupport. Админка по адресу
/BackOffice/
возвращает
403 Forbidden, возникают сложности с чтением локальных файлов и я решаю воспользоваться SQL-инъекцией (хорошо иметь несколько вариантов действий). Другие сайты на этом движке имели уязвимый сценарий
print.php
, и пара быстрых запросов к
https://finsupport.finfisher.com/GGI/Home/print.php?id=1 and 1=1
https://finsupport.finfisher.com/GGI/Home/print.php?id=1 and 2=1
обрадовала меня тем, что
print.php
присутствует и здесь, и так же уязвим. И полученные данные администратора подошли и к базе данных! В случае MySQL это означает возможность читать и создавать файлы. Оказалось, что на сайте были включены
magicquotes
, поэтому я не смог писать в файлы через MySQL-команду
INTO OUTFILE
. Здесь я воспользовался небольшим скриптом, который через
sqlmap --file-read
читает исходный код PHP-скрипта по заданному URL и совершает обычный запрос к веб-странице, чтобы получить HTML-код, потом ищет другие подключенные к скрипту файлы или PHP-страницы по ссылкам в HTML-коде, чтобы рекурсивно скачать весь движок.
Изучив исходные тексты, я понял, что клиенты могут прикреплять файлы к тикетам, и при этом расширения файлов никак не проверяются. Из базы данных я выбрал логин и пароль одного из пользователей, создал тикет с прикрепленным шеллом и попал внутрь.
Повышение прав (которое не состоялось)
___________
< got r00t? >
-----------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
^^^^^^^^^^^^^^^^
Получение прав root на 50% Linux-серверов в дикой природе осуществляется с помощью двух простых скриптов:
Linux_Exploit_Suggester и
unix-privesc-check.
Сервер
finsupport
работал на последней версии Debian, под которую нет эксплойтов для получения прав суперпользователя, но
unix-privesc-check
сообщил:
WARNING: /etc/cron.hourly/mgmtlicensestatus is run by cron as root. The user
www-data can write to /etc/cron.hourly/mgmtlicensestatus
WARNING: /etc/cron.hourly/webalizer is run by cron as root. The user www-data
can write to /etc/cron.hourly/webalizer
В /etc/cron.hourly/webalizer я добавил следующие строки:
chown root:root /path/to/my_setuid_shell
chmod 04755 /path/to/my_setuid_shell
Подождал час, и… ничего. Оказалось, что процесс
cron
на самом деле не выполняет запланированные задания. Если посмотреть в каталог
webalizer
, то видно, что статистика не обновляется уже месяц. Очевидно, после обновления заданного часового пояса
cron
либо не запускал задания вообще, либо запускал их в неправильное время, поэтому нам следует поменять часовой пояс и перезапустить
cron
.
ls -l /etc/localtime
сообщил, что часовой пояс менялся 6-го июня, в это же время
webalizer
перестал обновлять статистику, так что, вероятно, это и есть корень проблемы. Но в любом случае, все, чем занимается этот сервер, — это хостинг сайта, и я уже имею доступ ко всему, что меня интересует. Root-доступ не добавил бы ничего нового, поэтому я начал исследовать другие узлы сети.
Изучение сети
Следующим шагом было осмотреть локальную сеть, к которой подключена взломанная машинка. Этот во многом аналогичен описанному в главе
Сканирование и взлом, за исключением того, что перед файрволлом можно обнаружить еще больше интересных сервисов. Здесь нам снова пригодится статически слинкованный
nmap
со всеми имеющимися скриптами. Очень полезными оказываются различные nse-скрипты с именами
nfs-*
и особенно
smb-*
. Единственной интересной находкой в локальной сети
finsupport-а был еще один веб-сервер, раздававший папку
qateam
, в которой находился их шпионский софт для мобильных.
Веселимся
Настоящее веселье начинается, когда ты попадаешь в их сеть. Используйте свое воображение. Не обязательно нужно ограничиваться сливом документов. Изначально я планировал:
- Взломать Gamma и получить копию серверной части FinSpy
- Найти в ней уязвимости
- Просканировать интернет в поисках установленных FinSpy C&C серверов
- Определить, кто их использует
- Использовать C&C-сервер для загрузки и запуска программы на всех объектах слежения, чтобы сообщить им, что за ними следят
- Также с помощью C&C-сервера удалить FinFisher с их устройств
- Объединить C&C-сервера в ботнет и DDoS-ить Gamma Group.
Но полностью взломать
Gamma у меня так и не получилось, я добыл лишь несколько интересных документов, но никакой копии серверной части
FinSpy, на которую я так рассчитывал, найти не удалось, поэтому пришлось перейти к менее веселому плану Б, который заключался в публикации их документов и высмеивании этого в Twitter-е.
Примечание: на самом деле слито много зашифрованных файлов, так что направляйте свои GPU на файл
FinSpy-PC+Mobile-2012-07-12-Final.zip (magnet-ссылка, 38,7 Гб) и расшифруйте его, чтобы я смог перейти ко второму пункту!
Другие методы
Еще один метод взлома, который я бы выделил наряду со сканированием и применением эксплойтов, больше подходит тем, кто имеет опыт программирования. Здесь нет четкой инструкции, но все способы хороши.
1) Эксплойты в веб-браузере,
Java,
Flash или
Microsoft Office совместно с отправлением сотрудникам компании email-рассылки, в которой нужно убедить их кликнуть на ссылку или открыть прикрепленный файл. Либо взломать сайт, на который часто посещают эти самые сотрудники и добавить в него браузерный/
Java/
Flash эксплойт.
Таким методом обычно пользуются команды хакеров, работающие на правительство, но вам не обязательно быть правительством, тратящим миллионы на поиск 0day-уязвимостей или подписку на
FinSploit или
VUPEN, чтобы это провернуть. За пару тысяч долларов можно купить качественный набор эксплойтов от русских хак-групп, либо арендовать его за еще меньшую сумму. Существует еще
Metasploit-browser autopwn-сценарий, но, скорее всего, вы добьетесь большего успеха безо всяких эксплойтов, но с фейковым
Flash-обновлением.
2) Воспользуйтесь тем, что в 95% случаев люди вежливы, доверительны и готовы помочь. Индустрия компьютерной безопасности даже изобрела для этого термин: «Социальная инженерия». Можно попробовать покопать в этом направлении, если вы не сильно разбираетесь в технических вопросах, и этого может быть вполне достаточно, чтобы стать успешным хакером.
Послесловие
Целиком все добытые материалы занимают около 40 Гб и сидируются активистами и просто небезразличными людьми. Многие файлы зашифрованы, и хотя некоторых владельцев PGP-ключей удалось вычислить, ничего особо секретного раскрыть не удалось. Довольно быстро часть украденного кода используемых эксплойтов была залита на GitHub, где находится и сейчас:
https://github.com/FinFisher.
Другие обсуждения:
Полезные ссылки
Книги:
- The Web Application Hacker's Handbook
- Hacking: The Art of Exploitation
- The Database Hacker's Handbook
- The Art of Software Security Assessment
- A Bug Hunter's Diary
- Underground: Tales of Hacking, Madness, and Obsession on the Electronic Frontier
- TCP/IP Illustrated