Конкурентная разведка на PHDays: шпионим через Интернет вещей

    image

    Онлайновый конкурс по конкурентной разведке проводится на конференции Positive Hack Days уже шестой год подряд — и наглядно показывает, как легко в современном мире получить различную ценную информацию о людях и компаниях. При этом обычно даже не нужно ничего взламывать: все секреты разбросаны в общедоступных сетях. В этом обзоре мы расскажем, какие были задания на «Конкурентной разведке» 2017 года, как их нужно было решать, и кто победил в конкурсе.

    В этом году участникам необходимо было найти всевозможную информацию о сотрудниках компании GreatIOT. К обычному поиску и анализу информации в Интернете добавились задания с различными IoT-устройствами. По легенде, с компанией случилось что-то странное, и в один момент все, включая разработчиков, техподдержку и даже CEO — пропали. Задача участников конкурса — найти данные, необходимые для расследования этой интриги.

    1. Find information about the missing designer


    1.1. Nobody at the company of greatiot.phdays.com could even say what his first and last name is. Maybe you can find it?


    Переходим на главную страницу сайта, изучаем исходный код:

    image

    Пробуем перейти по ссылке на картинку logo-vender.png.

    image

    Сохраняем, открываем любым текстовым редактором, видим XMP-теги от приложений Adobe:

    image

    Отлично! Похоже на логин доменной учетной записи, где фамилия — Ступинин. Теперь у нас есть три варианта, как получить полный e-mail: догадаться сразу, что доменная учетная запись будет выглядеть как домен, сбрутить поддомен mail.greatiot.phdays.com, который перенаправляет на вход в почту, или посмотреть, какие адреса привязаны к аккаунтам в соцсетях.Twitter в очень удобном формате предоставляет эти данные — количество звездочек действительно равняется количеству букв (в отличие от Instagram):

    image
    image

    Понимаем, что полный адрес электронной почты: astupinin@greatiot.phdays.com. Делаем восстановление пароля по разным сервисам и находим профиль нашего Алекса:

    image

    Ответ: Alex Stupinin
    Правильных решений: 11

    1.2. Most excellent. We have logs from his fitness tracker and we need to know where he’s spent his evenings after work. (Name in uppercase)


    Найдя профиль дизайнера в Facebook, можно было обнаружить записи чекинов в Foursquare (SwarmApp), показывающие, где он живет и где работает:

    image

    Если покопаться в истории, то мы также находим ссылку на файл fitbit_log_07_05.cvs

    image

    Сопоставив место работы и дом, посмотрев по карте, мы можем сделать вывод, что это две точки, между которыми больше всего шагов. Также в некоторые дни шагов до дома было сделано больше, чем обычно. После работы он ходит ~700—800 шагов и остается в этом месте некоторое время. Открыв Foursquare, можно было найти несколько пабов в районе 500 метров от его работы. Вариантов немного, и довольно быстро находится бар «Прага».

    Ответ: PRAHA
    Правильных решений: 9

    2. Lead IoT developer


    2.1. We have only a photo of his wife from his desktop background: yadi.sk/i/wIMhX59h3J5ufA. Find the IP address of the developer's personal server.


    На входе имеем фотографию и дату, когда она, предположительно, сделана (photo_2017-04-25_15-46-33.jpg). По фото понимаем местоположение: Центральный парк культуры и отдыха имени Горького. Для поиска можно вручную пролистать фотографии в ВК и в Instagram за 25 апреля, а можно воспользоваться сервисом snradar.azurewebsites.net:

    image

    Находим!

    image

    По имени и фамилии находим упоминание аккаунта в Instagram elena91u:

    image

    В самом профиле находим эту фотографию и изучаем лайки, где находим аккаунт softcodermax, найдя который находим профиль на Pastebin:

    image

    Ответ: 188.166.76.66
    Правильных решений: 18

    2.2 Apparently the developers used team chat but often head to discuss things via VoIP. Get the address of the VoIP gateway.


    На веб-сервере из предыдущего задания можно найти sitemap.xml, содержащий в том числе ссылку на скрипт "/logs.php":

    image

    Открыв скрипт logs.php в браузере, получаем сообщение «logdate is missing. last log date 20170428», пробуем указать параметр в виде 188.166.76.66/logs.php?logdate=20170428 и получаем доступ к access-логам сервера. Проанализировав логи за возможный диапазон дат, находим следующую запись со ссылкой на чат-группу Skype из заголовка Referer:

    64.19.23.198 - - [26/Apr/2017:08:26:09 +0000] "GET / HTTP/1.1" 200 2613 "https://join.skype.com/aMxdupsIlSgI" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" 

    Подключившись к открытой группе Skype, видим в переписке разработчиков упоминание адреса VoIP-шлюза.

    Ответ: voip-gw-home-198.phdays.com
    Правильных решений: 3

    2.3 Not bad. Maybe you can also find out the last person he called?


    После неудачной авторизации на странице voip-gw-home-198.phdays.com видим следующий HTML-код, содержащий имя вендора DblTek:

    image

    Просканировав порты, можно также обнаружить на порте Telnet некий сервис, запрашивающий авторизацию:

    image

    После сопоставления этой информации и поиска в интернете находим описание закладки в данном продукте и эксплойт для генерации предсказуемых кодов входа: https://github.com/JacobMisirian/DblTekGoIPPwn.

    Воспользовавшись генератором кодов challenge-response для входа, получаем шелл в системе и находим контакт пользователя в sqlite-базе в домашней папке пользователя voip:

    image

    Ответ: +79262128506
    Правильных решений: 3

    3. GreatIOT evangelist and hipster


    3.1. All we could find is his email address: digitalmane@yandex.com. But information about his router is stored somewhere… Uncover its URL! (Format: hostname.com/page/)


    Раз аккаунт на Яндексе, попробуем восстановить пароль, где видим секретный вопрос “Favorite artist”. Вариантов поиска любимого исполнителя не так много, это либо ВК, либо SoundCloud или Last.fm. Хорошо, что Google успел все проиндексировать:

    image

    Восстанавливаем аккаунт по секретному слову GHOSTEMANE, попадаем в аккаунт. Открываем весь список приложений Яндекса, выбираем те, которые в себе могут хранить URL. Диск, Почта, возможно синхронизация с Браузером, а также Вебмастер, Директ или Метрика. На последнем сервисе в статистике находим проиндексированную страницу old1337.

    Ответ: greatiot.phdays.com/old1337/
    Правильных решений: 66*

    * В самом начале конкурса кто-то привязал к почте телефон и восстановление по секретному слову перестало работать, поэтому пришлось указать полный ответ.

    3.2. Find the IP address of the router, will you?


    Попадая в директорию old1337, получаем такое содержимое:

    image

    Поискав в Google все файлы, что есть, понимаем, что большинство из них стандартные для разных приложений (HEX, netcat), кроме how_to_connect.rar. У архивов RAR есть одна особенность — возможность заархивировать альтернативный NTFS-поток, часто для файлов OOXML добавляется стандартный Zone.Identifier:$DATA, который указывает на то, откуда файл попал на машину пользователя, мы же добавили Text.Information:$DATA, который содержал информацию об IP-адресе роутера:

    image

    Ответ: 178.62.218.236
    Правильных решений: 4

    3.3. Interesting… He doesn’t look much like a hipster, especially with a name like that. Find out his first and last name.


    Перед нами роутер со стандартными логином и паролем и два интересных раздела: Configuration и Status & Logs:

    image

    Где можно восстановить конфигурацию из XML. Ну и первое, что приходит в этом случае на ум: уязвимость XML External Entity. Но какой файл нужно прочитать? Полистав Status & Logs находим:

    image

    Так как через XXE прямого вывода на страницу нет, нужно воспользоваться техникой Out-of-Band описанной здесь. Файлы типа /etc/passwd читаются, однако .pcap — бинарный и для этого нужно воспользоваться оберткой php://filter, например взяв ее отсюда: www.idontplaydarts.com/2011/02/using-php-filter-for-local-file-inclusion

    Готовый эксплойт:

    image

    Раскодировав Base64 получаем небольшой дамп, из которого получаем запрос на доменную авторизацию:

    image

    image

    Теперь, учитывая формат доменных учетных записей ИФамилия, узнаем фамилию: Panteleev. Остается найти имя. Стоит сказать, что учитывая подсказку про «странное имя для хипстера», некоторые начинали перебирать, и несколько человек даже смогли верно угадать. Но решение, которое мы закладывали, опять работало через соцсети:

    image

    В ВК для восстановления нужно знать еще и фамилию, в отличие от Facebook, но для этого у нас все есть.

    Ответ: Isaac Panteleev
    Правильных решений: 2

    4. The Secretary is hiding something…


    4.1. We could find only part of a phone number, but her e-mail is brintet@protonmail.com. Have any ideas on how to find the full version? +7985134****


    Стоит предупредить, что в самом начале мы не учли некоторые моменты и выложили старую версию задания, поэтому после обновили, добавив почту. А с подсказкой решалось все еще проще: большинство популярных площадок принимает к оплате PayPal, поэтому идем туда и восстанавливаем аккаунт по почте:

    image

    Ответ: +79851348961
    Правильных решений: 19

    4.2. Surely it won’t be hard for you to find out her first and last name?


    Когда имеется полный номер телефона, идей о том, где можно получить полную информацию, довольно много, однако сюда добавляются еще и мессенджеры: WhatsApp, Viber, Telegram, где мы и находим аккаунт:

    image

    Ответ: Maria Brintet
    Правильных решений: 14

    5. Missing Man #1


    5.1. He has a secret related to this wallet LMksJQ3GrHXDSMjwEvPAEJsaXS7agq6DaQ. Find out where he transferred all this money to.


    По имени можно определить, что кошелек относится к Litecoin. Воспользуемся одним из сервисов, позволяющих проанализировать блоки Litecoin, и проследим перемещение средств до конечного кошелька:

    image

    Ответ: LM33p4m3ZDk5rs1BjkWUvEw3UWWiaH2u2L
    Правильных решений: 23

    5.2. Find out where he is.


    По номеру кошелька, найденному в предыдущем задании, в Google находим счет на оплату, содержащий реквизиты сторон:

    image

    После отправки письма на почту jp.karter7@gmail.com получим следующий автоответ:

    image

    Ответ: Severalls
    Правильных решений: 12

    6. Why so many tears?


    6.1. All we could find is the developer's account and a CloudPets recording: yadi.sk/d/qTNjZYj63J5vHB. Overhear his secret.


    Была предоставлена ссылка в котором находился архив с именем cloudpets.7z, что намекает на историю с игрушками CloudPets, которые записывали и выкладывали в облако AWS аудиосообщения, которые в дальнейшем были слиты хакерами (https://www.troyhunt.com/data-from-connected-cloudpets-teddy-bears-leaked-and-ransomed-exposing-kids-voice-messages/).

    image

    Открыв архив, обнаруживаем запись длительностью 2:44, слушать всю запись довольно проблематично, поэтому открываем трек в аудиоредакторе (например, в Sonic Visualiser), в котором нам потребуется функция спектрального анализ, где заметнее колебания частот. Немного пролистав несколько выделяющихся моментов, находим разговор по телефону, в котором мужской голос говорит пароль.

    Ответ: GHgq217$#178@k12/
    Правильных решений: 5

    7. Pythons crawling everywhere


    7.1. Get the developer's Twitter login. There's a web service here: devsecure-srv139.phdays.com


    Открыв devsecure-srv139.phdays.com, видим страницу авторизации с упоминанием альтернативной возможности входа по клиентскому сертификату. Ответ сервера также имеет заголовки, указывающие на использование CloudFlare:

    CF-RAY:3519eafdb3a94e84-DME
    Server:cloudflare-nginx

    Просмотрим кэш страницы в Google по IP-адресу:

    image

    Обнаружим фрагменты памяти сервера, содержащие сертификаты и ключ CA (по всей видимости, мы столкнулись с Cloudbleed):

    image

    Извлечем сертификаты CA (ca.key, ca.crt) и сгенерируем клиентский сертификат:

    openssl genrsa -out client.key 1024
    openssl req -new -key client.key -out client.csr
    openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 3137 -out client.crt
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

    Импортируем сертификат в браузер, теперь мы можем авторизоваться по сертификату и получить доступ к репозиториям разработчика. Конфигурационный файл Twitter-бота в репозитории содержит нужный нам логин:

    image

    Ответ: MontyPythonist
    Правильных решений: 6

    8.System administrator


    8.1. We found the token d91496dfcaad93f974a715fb58abeeb0 and VDS 188.226.148.233. Try to find the sysadmin's github account.


    Используя утилиту для перебора путей, находим ссылку на API — http://188.226.148.233/api/tasks, которая требует токен. Указав токен в GET-параметре, видим список задач в JSON, содержащий в том числе упоминание GitHub-аккаунта anneximous:

    image

    Ответ: anneximous
    Правильных решений: 12

    8.2. Looks like a home router… See if you dig up something interesting.


    Введя в Google «anneximous» находим единственный репозиторий:

    image

    В описании находим IP-адрес и три файла, из которых нам интересны camera_contol.html и left.js.

    image

    Просканировав порты на IP-адресе 188.166.30.118, на порте 8080 обнаружим страницу доступа к IP-камере, пароль и логин можно найти в файле camera_control.html, однако при попытке залогинится будем всегда получать ошибку:

    image

    image

    Тогда приступим к изучению файла left.js. Первая функция сразу бросается в глаза:

      function Call(xml) {
            if (gVar.httpver == "https") {
                setCookie("snapcmd", gVar.httpver + "://" + gVar.ip + ":" + mult_https_port[IFs] + "/cgi-bin/CGIProxy.fcgi?" + (urlEncode("usr=" + gVar.user + "&pwd=" + gVar.passwd + "&cmd=snapPicture")));
            }

    Из нее получаем первый запрос на захват изображения с камеры:

    http://188.166.30.118:8080/cgi-bin/CGIProxy.fcgi?usr%3Dphdaysiot%26pwd%3Dphdaysiot7%26cmd%3DsnapPicture

    Однако камера повернута не в ту сторону, и наша задача — найти команды на управление. Хорошо, что есть документация:

    image

    В документации находим запросы на поворот камеры по горизонтали и вертикали и команду на остановку движения:

    image

    188.166.30.118:8080/cgi-bin/CGIProxy.fcgi?usr%3Dphdaysiot%26pwd%3Dphdaysiot7%26cmd%3DptzMoveLeft и другие: ptzMoveDown, ptzMoveUp, ptzMoveRight и функцию остановки движения: ptzStopRun. Остается вслепую повернуть камеру в нужную сторону и получить флаг:

    image

    Ответ: AnneximousBADIOT
    Правильных решений: 7

    Результаты


    66 участников конкурса сделали хотя бы одно задание. Все три дня в лидерах был noyer (Сипан Варданян) — единственный, кто смог решить все задания. На втором месте AVictor (Виктор Алюшин), на одно очко обогнавший mkhazov (Максима Хазова).

    1 noyer 16
    2 AVictor 13
    3 mkhazov 12
    4 crackitdown 10
    5 topol 9
    6 Ursus 9
    7 x010 8
    8 buzz 8
    9 ThreatIntel 8
    10 mattgrow 5
    • +16
    • 11,8k
    • 4
    Positive Technologies 278,87
    Компания
    Поделиться публикацией

    Вакансии компании Positive Technologies

    Комментарии 4
    • +2
      ничоси. аж челюсть отвисла
      • 0
        Да уж… чем больше интернета вещей… тем больше можно встрять…
        • 0
          Классный детектив, но во многих случаях в реальности пользователь вряд ли оставит такие дыры, так что опасения по поводу лёгкости хака iot имхо преувеличены:

          > 1.1. Nobody at the company of greatiot.phdays.com could even say what his first and last name is. Maybe you can find it?

          Здесь всё норм, правдоподобно, думаю мало кто параноит настолько, что вычищает метаданные из картинок

          > 1.2. Most excellent. We have logs from his fitness tracker and we need to know where he’s spent his evenings after work. (Name in uppercase)

          No comments… Условный противник сам всё всему миру рассказал в foursquare, а также слил логи с геоданными. Задача не на взлом, а на примитивный дата майнинг.

          > 2.1. We have only a photo of his wife from his desktop background: yadi.sk/i/wIMhX59h3J5ufA. Find the IP address of the developer's personal server.

          Использование вебсервиса для сужения поиска по геоданным в фото — прикольно (хотя скорее всего vk api такие штуки тоже позволяет делать), а дальше ВНЕЗАПНО — IP и пароль в публичном файле на pastebin…

          > 2.2 Apparently the developers used team chat but often head to discuss things via VoIP. Get the address of the VoIP gateway.

          До использования logdate в POST иначе как телепатией имхо не додуматься o_O
          В любом случае, в жизни именно такая халява с запросом логов через POST вряд ли встретится.
          Ну и открытая группа в скайпе — ССЗБ.

          > 2.3 Not bad. Maybe you can also find out the last person he called?

          Вот здесь клёвый хак, хотя описание взлома — из разряда «как нарисовать сову».

          > 3.1. All we could find is his email address: digitalmane@yandex.com. But information about his router is stored somewhere… Uncover its URL! (Format: hostname.com/page/)

          «Любимый исполнитель» вместо 2-факторной авторизации + профиль на ластфм = автоpwn электронной почты, дальше можно делать уже всё что угодно.

          > 3.2. Find the IP address of the router, will you?

          Классный приём с NTFS метаданными, респект.

          > 3.3. Interesting… He doesn’t look much like a hipster, especially with a name like that. Find out
          his first and last name.

          «Перед нами роутер со стандартными логином и паролем» (с внешним IP) — удобно, но бывает только в сказках. =) Дальше опять идёт как нарисовать сову;

          > 4.1. We could find only part of a phone number, but her e-mail is brintet@protonmail.com. Have any ideas on how to find the full version? +7985134****

          Без телепатии (с paypal) имхо нерешаемо…

          > 4.2. Surely it won’t be hard for you to find out her first and last name?

          Шокирующие новости: использовать мессенджер, где логином является телефон == сообщить всему миру привязку имя-телефон. Всё ожидаемо.

          > 5.1. He has a secret related to this wallet LMksJQ3GrHXDSMjwEvPAEJsaXS7agq6DaQ. Find out where he transferred all this money to.

          Тупо изучить кошелёк, взлома как такового не производится.

          > 5.2. Find out where he is.

          «По номеру кошелька, найденному в предыдущем задании, в Google находим счет на оплату» — шли-шли по сказочному миру и нашли счёт в публичном доступе…

          > 6.1. All we could find is the developer's account and a CloudPets recording: yadi.sk/d/qTNjZYj63J5vHB. Overhear his secret.

          Интересно, но это всё равно дата майнинг, а не взлом.

          > 7.1. Get the developer's Twitter login. There's a web service here: devsecure-srv139.phdays.com

          Клёво, нетривиально.

          > 8.1. We found the token d91496dfcaad93f974a715fb58abeeb0 and VDS 188.226.148.233. Try to find the sysadmin's github account.

          Клёво, не знал что можно перебором искать валидные урлы.

          > 8.2. Looks like a home router… See if you dig up something interesting.

          Что такое «something interesting»? Задача нечёткая. Про камеру интересно, сам недавно выкапывал из веб-админки китайской камеры прямую ссылку на rtsp.
          • 0
            В задании 2.1 можно было использовать поиск копий изображений ВКонтакте. Для этого нужно было загрузить эту фотографию к себе в профиль, зайти в Новости -> Фотографии -> Поиск по фотографиям и вставить там copy:photo********_********* (вместо звездочек идентификатор загруженной фотографии). Единственным результатом выдавало фотографию с нужного профиля ВК.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое