За несколько недель до форума Positive Hack Days прошел традиционный конкурс «Конкурентная разведка». В этом году мы опирались на проведенный аудит безопасности и киберугроз ICO, во время которого приходилось для уменьшения рисков анализировать всю внешнюю инфраструктуру, включая команду организаторов, разработчиков и консультантов. Мы создали наш конкурс по мотивам реальных проектов.
Все задания были сосредоточены вокруг вымышленной небольшой краудсейл-компании Notsopositive, представляющей собой типичный ICO с небольшим количеством сотрудников. Во время конкурса участники узнали много скрытой информации об основателях и сотрудниках компании, об их родственниках и друзьях. В первую очередь от участников требовалось иметь в арсенале большое количество онлайн-сервисов и социальных сетей, знать их специфику и уметь использовать. Кроме того, необходимо было оперировать имеющимися сведениями так, чтобы находить необходимые данные о людях и с их помощью добывать новые.
Задания были распределены таким образом, чтобы и ветеранам, и новичкам было нескучно и каждый ушел хотя бы с одним флагом. Многие задания образовывали своеобразную последовательность и складывались в целый сюжет. Были и такие задания, которые проходились нелинейно, поэтому участникам нужно было хранить информацию о каждом проделанном шаге.
Для решения первого вступительного задания, откуда начинались остальные, необходимо было воспользоваться Google:
Все задания строились вокруг восьми сотрудников проекта Notsopositive из исполнительной команды (Executive Team) и команды разработчиков (Development Team).
При внимательном изучении сайта участники то и дело натыкались на различные «точки входа», которые вели к решению. Подробнее остановимся на каждом задании.
Adam Wallace, CMO
Вопросы в ветке Adam Wallace:
- Adam Wallace username?
- What does Adam’s son have allergies to?
- What is Adam’s house number?
- Where does Adam’s son study?
- CMO’s favorite bar name?
Итак, наткнувшись на сайте на whitepaper, нужно было загрузить PDF на любой онлайн-сервис для чтения META-данных (например, PDFCandy) или открыть в Word, где можно было найти ник CMO, также известного как Adam Wallace, — sumcoinz.
Любители делать все руками могли открыть PDF в своем любимом HEX-редакторе и достать ник Адама самостоятельно.
Далее для продолжения цепочки необходимо было найти FTP-сервер c помощью Knock Subdomain Scanner, также для этой цели можно было использовать утилиты dnsmap, sublist3r, sublazerwlst.
Был и другой путь: узнать реальный IP-адрес сайта notsopositive.online, скрытый за CloudFlare, и просканировать всю подсеть в поисках 21-го порта. Подход к решению этого задания индивидуальный и зависит от опыта и навыков каждого участника.
Полученных IP-адреса FTP-сервера и логина было достаточно для атаки на перебор пароля. Для этого нужно было применить легендарную утилиту THC-Hydra. Звучит несложно, однако участникам необходимо было использовать весь словарь найденных никнеймов организаторов ICO. Кстати, в логах FTP мы также увидели попытки атаковать пользователей root, admin, administrator.
Узнав логин Адама (sumcoinz), нужно было перебирать пароль по самому известному среди CTF-щиков словарю.
Во время конкурса у некоторых участников возникали проблемы с подключением к FTP из-за ограничения количества клиентов, однако ошибка конфигурации была позже исправлена. Мы поменяли пароль FTP-сервера на более простой, чтобы упростить и ускорить участникам прохождение задания.
На атаку, как правило, уходит всего несколько секунд. Далее нужно было зайти на FTP любым удобным способом и найти типичную для личного сервера файловую помойку.
Помимо софта здесь были любопытные фотографии, которые содержали в себе сразу несколько флагов.
Корявым почерком Адама указаны имя его сына, место учебы, адрес школы и домашний адрес! Еще один флаг — аллерген сына Адама. На том же сервере можно было найти и интересный файл под названием screenshot.jpg:
На скриншоте из WhatsApp переписка, предположительно Адама и его друга. В сообщении друг Адама узнает о местонахождении бара, в котором, на момент их общения, Адам проводит время. Использовав любой сервис с картами города Spokane, участник мог «пройти» описанный маршрут и наткнуться на тот самый любимый бар CMO Notsopositive под названием «7th Rail».
На момент завершения конкурса всего 20 участников успешно выполнили все задания из сюжетной ветки Адама Уолласа и дошли до описанного этапа.
Ryan Evans, CTO
Вопросы к ветке Ryan Evans:
- Github username?
- Corporate email address?
- Ryan’s wife email address?
- Ryan’s wife username?
- Ryan’s wife resort?
- Ryan’s wife friend’s surname?
- Ryan’s wife place of work (company name)?
Райан Эванс — технический директор ICO-проекта. Используя утилиты для поиска директорий и файлов, например dirb или словарь fuzz.txt, в корне веб-сайта notsopositive.online можно было найти директорию .git, откуда можно получить все исходники из репозитория. Далее — необходимо было достать исходники с помощью такого способа, воспользоваться GitRipper, указав в качестве цели реальный IP-адрес сайта, и извлечь конфигурационные файлы системы контроля версий Git. Достать /.git/config можно было и с помощью обычного браузера.
В файле config находилась ссылка на аккаунт GitHub Райана (github.com/ryanevans0082), где можно было наткнуться на его Jabber-аккаунт:
Писать туда смысла не было, а вот поискать с помощью Google — неплохая идея. Первый флаг сдан, далее нужно было найти в выдаче Google аккаунт Speaker Deck и единственную загруженную презентацию Initial Coin Offering.
Участников, наплакавшихся кровавыми слезами от просмотра презентации, ждала награда — на последнем слайде был опубликован корпоративный e-mail Райана.
Перебирать пароль от email в данном случае было бесполезно, но восстановить его можно было по секретному вопросу:
Grandmother’s, да :) Вопрос не самый надежный. На реальных проектах мы частенько встречались с похожими. Ответ на эти вопросы, как правило, можно найти в социальных сетях — в Одноклассниках, ВКонтакте и Twitter. Следующий этап — поиск аккаунтов:
В Твиттере по запросу «Ryan Evans» показалась знакомая борода. Кстати, найти аккаунт можно было и с помощью «Яндекса».
В ленте Твиттера нашлось упоминание дня рождения бабушки — 20 апреля.
Точный возраст бабушки можно было вычислить по числу, написанном кремом на торте.
Немного арифметики и вот мы узнали точную дату рождения — 20 апреля 1946 года. Тут же возникает резонный вопрос — в каком формате Райан мог написать дату? Узнать это можно было, пролистав Твиттер: нашелся пост о машине, серой Kia Carens, купленной первого октября 2014 года. Дата указана в формате дд.мм.гггг. Возможно, Райан написал ответ на секретный вопрос в том же формате.
Не все любители OSINT оказались одновременно и автолюбителями, поэтому у некоторых участников возникали проблемы с определением марки и модели машины Адама. В тех случаях, когда не помогает поиск по картинкам в Google или водительский опыт, на помощь может прийти «Яндекс». Он точно определил марку и модель Kia Carens.
Флаг CTO’s Car model сдан. Далее нужно было подставить дату рождения бабушки в правильном формате (20.04.1946) в качестве ответа на секретный вопрос «Яндекс.Почты».
После можно было поставить любой новый пароль (следующий участник в любом случае его менял) и вот мы попали в почтовый ящик Райана. В отправленных сообщениях находилось письмо жене, в котором участник мог обнаружить ее email
evansmegan02282@yahoo.com
.Из адреса несложно было вычислить имя — Megan, а поиск по соцсетям выдал страницу ВКонтакте:
Найти Меган ВКонтакте можно было и через форму восстановления пароля. Для это нужно запросить восстановление пароля, указать email и фамилию Evans:
На странице огромное количество информации:
- родной город,
- университет,
- место работы (в подписках),
- место отдыха (GPS-теги в EXIF фотографий),
- несколько фотографий, позволяющих определить внешность,
- примерные интересы.
- Разом сданы сразу несколько флагов о Megan.
Держа в памяти все новое о Megan, участник, вероятно, подумал: «Почему в переписке по email Megan так и не ответила Райну на фотографию с котом?». Действительно, что-то тут нечисто.
Немногие догадались до способа продолжения решения, но кто догадался — вышел в топ-10 участников.
Итак, устанавливаем Tinder и эмулируем геолокацию с помощью приложений типа Fake GPS — либо ставим Tinder на Bluestacks, где подобная функция присутствует из коробки.
Место отдыха Megan (Miami, Florida) обнаруживалось исходя из геометок на ее фотографиях со страницы ВКонтакте. С помощью Fake GPS нужно было «долететь» в Майами, штат Флорида, выставить целевую аудиторию под параметры Megan (уже известны возраст и точное местоположение из профиля ВКонтакте) и свайпать девушек. Спустя 5–10 прекрасных дам обнаружилась «та самая, единственная» Меган Эванс. Только вот имя и фамилия у нее в Tinder оказались другие, а точно удостовериться, что это она, помогли фотографии из ВКонтакте.
Чтобы удостовериться, что это не ошибка, а нужная нам Megan, необходимо было сверить автоматически импортируемые из Facebook при подключении аккаунта место учебы и родной город. Флаг CTO’s wife place of work сдан.
Далее продолжался поиск уже по второй, «теневой» личности Megan. Особенность Tinder — место работы автоматически подставляется из профиля Facebook. Поэтому сразу можно было перейти на Facebook, чтобы найти страницу Scamsopositive.
Воспользовавшись методом разведки «ревнивая студентка», также известным как «пробив по лайкам», можно было найти страницу Joanne Brandt и сдать в качестве последнего флага фамилию единственного на этой странице друга — Rossi.
Остальные задания были более низкого уровня сложности и объединялись в небольшие квесты со сравнительно дешевыми флагами. Для решения могли потребоваться и особые знания о работе некоторых сервисов. Например, задание на определение модели мобильного телефона фронтенд-разработчика Алексея Наборщикова предполагало осведомленность участника о возможности указать модель любимого гаджета в профиле на форуме 4PDA.
Итак, для начала нужно было найти фронтендера Алексея в соцсетях.
Запрос в Facebook выдал сразу несколько, но айтишник из них только один. Тонкой связующей линией между описанием на сайте компании и аккаунтом Facebook являлась тематическая аватарка, выдавшая профессиональную ориентацию нашей жертвы.
Уникальный адрес страницы (m0arc0de) выдал нам часто используемый ник. Далее следовал поиск на 4PDA или xda-developers. По нику можно было найти того самого фронтенд-разработчика из Notsopositive. В поле «О себе» Алексей написал о себе всю нужную нам информацию, позволяющая однозначно определить, что это именно тот, кто нам нужен. Флаг с моделью телефона сдан.
В задании по поиску неизвестного хакера (Evil guy's username on Anonymous freelance service) предполагалось, что участнику будет известно о новом портале для анонимного размещения различных услуг и коммерческих предложений под названием Yukon. Немного полистав раздел «Работа», можно было найти любопытное объявление с прямым указанием на исследуемый сайт. В контактах для обратной связи был указан и почтовый адрес, в котором и находился ник «злого» парня.
Как же быть тем, кто не слышал про Yukon? Здесь приходят на помощь простейшие Google dorks, а ответ очень часто скрывается в самом вопросе.
Самый первый результат в выдаче — нужный нам сайт. Поиск по нику показал, что d34dl0ck — весьма распространенный ник, поэтому в выдаче очень много персон, связанных с этим ником. Выявить нужного нам d34dl0ck можно было методом исключения, проверив каждого.
Сузив круг поиска до адреса почты, получили однозначно подходящий результат.
В сообщении на форуме обнаружили, что у нашего заказчика теневых услуг есть навыки разработки вредоносного ПО.
Какую же малварь он написал? В архиве с обещанными исходными кодами оказался исполняемый файл. Целевой фреймворк .NET 3.5 указывает на наиболее вероятный язык разработки — C#. Поиск в сети по запросу “Hidden Tear” также указал на С#. Но что именно изменилось в коде? Тут поможет декомпилятор .NET Reflector. Соблюдая все правила предосторожности при работе с вредоносным кодом, нужно загрузить исполняемый файл в декомпилятор. NET Reflector прекрасно справляется с декомпиляцией приложения. В списке используемых на одной форме функций нашлась GenEthAddress, ее название наиболее соответствует вопросу в задании Evil guy’s wallet number.
Беглый взгляд на декомпилированный код позволил понять алгоритм «сборки» адреса кошелька из четырех строк. Строки равной длины конкатенируются в одну большую, затем она преобразуется в массив символов. Получившийся массив переворачивается. Функция GenEthAddress вызывается из функции messageCreator, в ней и создается окончательная версия номера кошелька. Перед началом массива подставляется ‘0x’.
Более простой метод решения с сопутствующими страданиями виртуальной машины — запустить исполняемый файл вируса. В сообщении о шифровке файлов отображается адрес ETH-кошелька.
Узнать скрытый за CloudFlare IP-адрес веб-сервера notsopositive.online также можно было несколькими способами. Каждое задание решалось по запланированному организаторами пути, однако участники нередко находили и альтернативные пути.
Сверху сайта ICO можно было найти ссылку на страницу подписки на новости компании, а один из способов узнать IP-адрес за CloudFlare — отправить письмо с сервера себе на почту и посмотреть заголовки. Однако есть и другие.
Переходим к форме, указываем в ней любое имя и свой адрес email.
В пришедшем письме нужно было открыть служебные заголовки и получить следующее:
и 178.170.172.110 сдать как флаг.
Участник с ником @AlexPavlov60 нашел альтернативный способ узнать скрытый IP-адрес с помощью Shodan. Если в ходе прохождения участнику уже был известен IP-адрес FTP-сервера, целесообразно было проверить всю подсеть на наличие других принадлежащих компании Notsopositive серверов.
По запросу: net:178.170.172.0/24 product:»Apache httpd» Shodan возвращает сразу несколько серверов, среди которых один со знакомым DNS.
Еще один теневой поисковик, который может нам помочь, Censys, предложил участник @rdafhaisufyhiwufiwhfiuhsaifhsaif.
По запросу: https://censys.io/ipv4?q=80.http.get.title%3ANotSoPositive он тоже возвращает нужный адрес.
Конечно, существуют и готовые решения для извлечения IP-адреса, скрытого за CloudFlare. Участник Blablablashenka применил утилиту Hatcloud, нашедшую соседний адрес из подсети. Оставалось только поискать там же веб-серверы.
Найти еще один домен, на который указывает этот IP-адрес, оказалось совсем легко: выяснилось, что PTR-запись показывают все сервисы, на которых можно получить информацию об IP, поэтому стоимость задания немного не соответствовала сложности. Ответ — scamsopositive.com.
James Taylor, CEO
Вопросы в этой ветке:
- CEO's car model
- 'Find the CEO's nickname (we know that his friend's name is James Cottone)
- Let's see how you can use Facebook: find the CEO's son
- Find out his e-wallet and with whom the son of the CEO is connected
На странице ICO было упоминание Telegram, однако ссылка никуда не вела. Это был небольшой хинт для поиска канала или чата NOTSOPOSITIVE:
Там и можно было найти аккаунт CEO, с аватаркой и его машиной.
Воспользовавшись поиском по картинкам в Google легко можно было найти машину Джеймса на фото — это Toyota Land Cruiser.
Далее необходимо было найти никнейм CEO, которого в Telegram не было. Однако было известно, что одного из его друзей зовут James Cottone. Один из вариантов решения, который мы закладывали, — воспользоваться сервисом восстановления пароля на Facebook, где указать имя друга для поиска аккаунта:
На деле очень многие сервисы позволяют таким образом выяснить — привязаны ли определенные email или номер телефона к сервису. После ввода имени и фамилии друга пришло оповещение, что код доступа будет отправлен на почту:
Нетрудно догадаться, что почта — taylor@notsopositive.online. Также, один из вариантов, предложенный участником, — использовать сервис anymailfinder.com, где сразу отобразятся электронные адреса некоторых из сотрудников:
Далее, зная почту, можно было еще раз пройти процесс восстановления и увидеть, как выглядит его аватар:
А затем найти его страницу и никнейм:
Для поиска сына необходимо было воспользоваться особенностью Facebook: у него есть возможность просматривать, каким публикациям ставил лайки пользователь. Все это можно увидеть на этом сервисе. По лайкам, которые ставил James, обнаружились профили его жены и сына.
На странице сына — его логин на Твиче (br4yl0r), однако это нам ничего не дало. В поисковиках тоже почти ничего нет. В таких случаях, если страницы профилей не проиндексировались, полезно использовать утилиты типа namechk.com, которые покажут занятость никнеймов и доменных имен на разных веб-сервисах. Таким образом, можно было найти профиль в Steam, а из него и в GitHub — STKLRZSQUAD. Здесь опять необходимо было знать специфику сервиса и посмотреть, что Бредли выкладывал на gist. Далее, найдя данный байткод:
0x606060405234801561001057600080fd5b5061013d806100206000396000f30060806040526004
3610610041576000357c010000000000000000000000000000000000000000000000000000000090046
3ffffffff16806338cc48311461009e575b737527f9ac752aaddbb54432d288f9a89191f7954f73fffff
fffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888
f1935050505015801561009b573d6000803e3d6000fd5b50005b3480156100aa57600080fd5b506100b36
100f5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673fffffffffffffffffffff
fffffffffffffffffff16815260200191505060405180910390f35b6000737527f9ac752aaddbb54432d28
8f9a89191f7954f9050905600a165627a7a72305820a369acc2650e24d84edd29c97cee2db1f5caada8315
81fa2482a002b87404aba0029
и поискав заголовки, поняли, что это байткод смарт-контракта:
Далее нам оставалось воспользоваться утилитой для преобразования его в opcode, например здесь. Внутри найти уже известный кошелек из другого задания:
Неужели сын CEO заказал атаку на ICO своего отца?
Rajesh Bishop, System Administrator
Вопросы в этой ветке:
- Find out the domain name of the system administrator\'s personal website
- Try to find sysadmin's personal email
- What is sysadmin's favorite beer brand?
- The name of the restaurant, where sysadmin drank beer recently
Как обычно, начать необходимо было с типичной разведки, чтобы обнаружить домен mail.notsopositive.online, где с помощью nmap найти самоподписанный сертификат, который действовал и для другого домена:
Затем, сделав запрос ANY на DNS bishopshomepage.win, можно было найти его электронный адрес:
Затем — ответить на вопрос про любимое пиво у Раджеша. Многие любители пива знакомы с такой социальной сетью, как Untappd (ее можно найти по запросу «beer social network»). Один из вариантов был, как всегда, использовать другие поисковые системы:
Дальше уже проще: найти профиль сисадмина, в нем единственное фото с хештегом.
Однако в этой соцсети нет хештегов, что должно было натолкнуть на мысль о том, что нужно поискать по другим: ВКонтакте, Facebook, Twitter и Instagram. В последней и можно было обнаружить фото с геометкой:
Штаб-квартира NOTSOPOSITIVE
Поиск штаб-квартиры опять требовал от участников конкурса приложить усилия и перекопать все социальные сети. Ответ находился на LinkedIn:
Mark Fox, CSO
Для понимания, откуда начинается конкурс с CSO, нужно было снова воспользоваться fuzz.txt и обнаружить в корневой веб-директории файл .DS_Store, который оставляет за собой macOS. Расшифровав его с помощью онлайн-утилиты https://labs.internetwache.org/ds_store/ или просмотрев бинарный файл, можно было найти такие строчки:
По адресу и правда лежало фото какого-то человека. Кроме того, одна из особенностей Faceboock: раньше, при сохранении файла, вторым числовым значением был ID фотографии. Так и можно было найти профиль:
В профиле и корпоративный адрес Марка:
mmmmmmmmfox@notsopositive.online
Итоги
В этом году участие приняли более 500 человек, а хотя бы с одним заданием справилось почти 300. Победителем снова стал Noyer_1k, старания которого вознаграждены смарт-часами Apple Watch, приглашениями на форум и сувенирами от организаторов. Второе место, Power Bank, инвайт на форум и сувениры заслужил Kaimi0. Третье место, книгу Open Source Intelligence Techniques: Resources for Searching and Analyzing Online Information, приглашение и сувениры забрал empty_jack. Финальная таблица результатов:
# | Никнейм | Баллы |
---|---|---|
1 | Noyer_1k | 816 |
2 | Kaimi0 | 816 |
3 | empty_jack | 816 |
4 | Antxak | 786 |
5 | V88005553535 | 661 |
6 | jerh17 | 611 |
7 | shsilvs | 556 |
8 | someotherusername | 526 |
9 | trace_rt | 491 |
10 | shadowknight | 481 |
Поздравляем победителей!