habrahabr

Как была взломана Gamma International

  • воскресенье, 24 августа 2014 г. в 03:11:06
http://habrahabr.ru/post/234331/

image

3 августа в сабреддите /r/Anarchism некто пользователь PhineasFisher создал тред, в котором сообщил о том, что ему удалось украсть 40 гигабайт различных данных компании Gamma International. Возможно, подобная история могла оказаться не столь громкой, если бы не бизнес, которым занимается эта европейская фирма — создание и продажа программных средств для взлома и скрытой слежки (а иными словами — самой настоящей малвари), заказчиками которых обычно выступали государственные структуры. Через несколько дней после первого сообщения взломщик выложил длинный рассказ о том, как ему удалось проникнуть на сервера Gamma International и что удалось там найти.



Подробнее о FinFisher


В начале небольшое лирическое отступление и рассказ о том, чем хакера заинтересовала Gamma International. Помимо всего прочего, эта компания занимается дистрибуцией комплекта ПО FinFisher, который описывается как "программное решение для вторжения и удаленного мониторинга, созданное для использования правительственными структурами". Несколько государств преимущественно Ближнего Востока были уличены в переговорах или использовании этой шпионской системы, но большой огласки и расследования эти факты не получили.

Сначала малварь попадала на компьютеры через дырку в iTunes (любая сторонняя программа могла воспользоваться автообновлением этого медиацентра со всеми доступными операциями и вытекающими последствиями), которую Apple не закрывала более трех лет.

В 2012 году многие оппозиционные активисты Бахрейна по электронной почте получили письма с вложениями — .rar-архивами с фотографиями или другими документами, под видом которых на их машины проникал многофункциональный троян. Примечательно, что названия файлов, например, exe.Image.jpg на первый взгляд казались «правильными», но в локализованных для арабских стран системах они, как положено, переворачивались справа налево и файл для системы оказывался не картинкой, а исполняемым файлом gpj.egamI.exe. Исследованием этой атаки занялись ребята из CitizenLab, и вот что им удалось выяснить.

image

Троян копировал в папку 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-сканировании.

Теперь надо определиться с каждым найденным сервисом:

  1. Выставляет ли он наружу что-то, чего выставлять не должен? Иногда компании выявляют сервисы, которые не требуют авторизации, и это считается безопасным, так как этот URL или IP используется только для внутренних нужд. Возможно у вас fierce найдет поддомен с git-ом, и пройдя в git.companyname.come/gitweb/ вы получите исходные коды сервиса как на ладони.
  2. Если ли ошибки конфигурации? Возможно, вам попадется FTP-сервер, который позволяет анонимный доступ для чтения или даже записи в важный каталог. Или сервер базы данных с пустым паролем администратора. Или встроенные устройства (VOIP-маршрутизаторы, IP-камеры, роутеры...) используют заводской аккаунт с паролем по умолчанию.
  3. Насколько стара версия и есть ли для нее публичные эксплойты?


Веб-сервера попадают в отдельную категорию. Для них, включая те, которые nmap нашел на нестандартных портах, я обычно делаю следующее:

  1. Хожу по веб-страницам. На найденных fierce поддоменах, которые явно не предназначаются для публичного взора, например test.company.com или dev.company.com можно найти много интересного, просто открыв их в браузере.
  2. Запускаю nikto. Он произведет поиск доступных каталогов webserver/.svn/, webserver/backup/, webserver/phpinfo.php и еще тысячи обычных ошибок в настройке.
  3. Определяю, какое ПО используется на вебсайте. В этом помогает WhatWeb.
  4. В зависимости от обнаруженного ПО можно использовать специализированные инструменты, вроде wpscan, CMS-Explorer и Joomscan. Сначала исследуйте те сервисы, для которых проще найти известную уязвимость или публичный эксплойт. Если таких не наблюдается, баг надо искать самому.
  5. Самописные веб-приложения — более благодатная почва для поиска багов, чем широко используемые проекты, поэтому начнем с них. В этом случае я использую комбинацию автоматических тестов ZAP и ручной поиск через его перехватывающий прокси.
  6. В случае использования сторонних систем достаньте их копию и изучите ее. Если это свободное ПО, вы сможете просто его найти и скачать. Если проект проприетарный, найдите пиратскую версию. Если вдобавок эта система еще и так надежно защищена, что никто не выложил ее пиратскую версию, вы можете либо купить себе лицензию (отстойный вариант), либо через 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, в которой находился их шпионский софт для мобильных.

Веселимся



Настоящее веселье начинается, когда ты попадаешь в их сеть. Используйте свое воображение. Не обязательно нужно ограничиваться сливом документов. Изначально я планировал:

  1. Взломать Gamma и получить копию серверной части FinSpy
  2. Найти в ней уязвимости
  3. Просканировать интернет в поисках установленных FinSpy C&C серверов
  4. Определить, кто их использует
  5. Использовать C&C-сервер для загрузки и запуска программы на всех объектах слежения, чтобы сообщить им, что за ними следят
  6. Также с помощью C&C-сервера удалить FinFisher с их устройств
  7. Объединить 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