В этом году мы (ЦАРКА Казахстан) в первый раз участвовали в битве Атакующих и Защитников (The Standoff) на PHDays в качестве злобных хакеров. В посте постараемся описать, как проходило мероприятие, за счет чего нам удалось выиграть и что в итоге лежало в том металлическом чемоданчике.
Вводная
Мы уже несколько лет посещаем PHDays нашей командой и в основном побеждали в мелких конкурсах. Поэтому в этом году нас интересовала только победа в основном конкурсе =)
Состав
В этом году мы отправились на конференцию командой из 13 человек: пентестеры, реверсеры, хардварщики, сисадмин, к.ф.-м.н., студент, школьник и фитнес тренер. Но непосредственно в противостоянии участвовали семь человек.
Несколько ссылок для начала:
1) Сами правила The Standoff
2) На Хабре уже есть несколько постов по “Противостоянию” от Защитников и SOC: раз и два.
Подготовка
Из оборудования мы взяли:
MikroTik RB951Ui-2HnD — 1шт.
Zyxel Keenetic — 1 шт. (утерян)
Tplink 8port hub — 1шт
Alfa Usb Wifi Adapter — 5шт
SDR, Proxmark c LF и HF антеннами, BladeRF, HackRF, оборудование для GSM и т. д. Как вы можете догадаться, в аэропорту нас досматривали очень тщательно. А у нас руки так и чесались поднять собственную базовую станцию во время полета, чтобы пообщаться.
Также в офисе в Астане была подготовлена брут-машина (мы ее называем Brute Alice) c Radeon R9 290X на борту и доступом через VPN. Эта малышка сыграла одну из ключевых ролей в нашей победе.
Первый день
Прибыли мы на место уже в 8-9 утра. Мы были одними из первых и успели занять стол в самом дальнем углу. Доступа к локальной сети соревнования еще не было, и мы занялись организацией рабочего пространства: купили местных симок для интернета, настроили роутер, правила фаервола, создали wifi точку доступа KNFC (Kairat Nurtas Fan Club, клуб фанатов местной суперзвезды Кайрата Нуртаса), которую под конец соревнования другие команды нещадно атаковали, и стали ожидать начала соревнования. К 12 часам появился доступ к внутренней сети и нам дали логин и пароль к порталу с заданиями. Противостояние началось.
Система с тасками.
После просмотра списка тасков (а их было порядка 50) часть команды начала сканировать подсети, другая часть — искать уязвимости на веб ресурсах, а хардварщики сразу переключились на таски с GSM. Двое ребят сделали себе бейджики СМИ и начали ходить по командам атакующих и защитников, брать интервью (причем весьма успешно!) и фотографировать рабочие столы участников. Фоток им удалось сделать очень много.
Из добычи:
Пароль от teamviewer одного из организаторов соревнования. Давал доступ к экрану с управлением светофорами в городе. И мы не упустили возможность этим воспользоваться: нам удалось остановить движение в городе, но за “подглядывание” нам ничего не засчитали =) Хотя в правилах участия на социальную инженерию запретов не было.
До вечера в основном мы проводили разведку, пытались эксплуатировать сервисы. Вникали в суть инфраструктуры, разбирались с тасками, закидывали в местный портал bugbounty мелкие уязвимости и держались даже не в топ 5. Под вечер хардварщикам получилось выполнить таск с перехватом компромата на мэра города, что сразу обеспечило нам первое место до утра. За данный таск давали 150 000 публей (игровая валюта города).
После того, как наши хардварщики из прессы переоделись обратно в участников противостояния, они начали молиться богам GSM-сетей.
И получив их поддержку, они ринулись на GSM сети.
Первичный скан на BladeRF с использованием GnuRadio блоков для расшифровки GSM трафика показал, что сеть полностью работает на 2G и к ней подключены несколько устройств с особыми номерами (предположительно боты в самой базовой станции), а также несколько устройств с номерами, которые формируются из IMSI самой симки. Последнее мы определили, подключившись к сети с помощью обычных телефонов (в Казахстане принято их называть “ЖайФоны”). На базовой станции отсутствовала идентификация по IMSI, что облегчило нам задачу подключения к сети с помощью жайфонов. Но мы были готовы и к другому исходу: мы бы просто создали виртуальные симки на базе osmocombb программ и телефона motorola c118, которые имели бы IMSI с идентификацией MNC и MMC как у базовой станции.
Но тут-то мы и застряли: нам не удавалось получить больше данных от BladeRF и GnuRadio, но было отчетливо видно, что пакеты еще присутствуют. Тогда мы решили подключить к сканированию 2G сети то, что было создано чтобы работать в 2G и чувствует в нем себя как рыба — motorola c118 телефон с Calypso GSM модемом внутри и osmocombb программами на бэкенде. Так как задача состояла в сканировании сети, мы использовали ветку программ от osmocombb под названием sylvain. В первые же минуты сканирования сети мы осознали, что в ней не осуществляется шифрование, точнее шифрование реализовано на уровне А5/0.
Мы прослушивали сеть с помощью реализации стека программ:
1) На самой мотороле была запущена прошивка osmocombb/master для compal e88 первого слоя layer1.highram.bin. Это layer1 модели OSI, который реализует всю физическую часть модема.
2) На хосте был запущен приемник osmocombb/sylvian в папке misc — ccch_scan. Этот инструмент позволяет принимать данные с layer1 и управляет им для поиска данных с определенного ARFCN, то есть базовой станции по каналу CCCH. Далее он позволяет отправить их по нужному адресу, в нашем случае loopback.
3) Loopback у нас прослушивался всеми любимым wireshark, который и показывал результаты сканирования.
Скрин, на котором видно, что именно мы запускали для этой задачи:
В какой-то момент мы заметили высокую активность двух клиентов сети: они активно обменивались сообщениями. Как только в их переписке речь зашла о деньгах (благо, наши хардварщики в совершенстве знают английский), мы записали весь разговор. Оказалось, что разговор был между мэром города и кем-то еще про аффилированные структуры и коррупцию, “отлично! — подумали мы, — мы засекли тебя, плохой-плохой мэр!”.
Скрин, на котором видна переписка в wireshark:
И конечно, сама переписка:
to:901708
from: 901706
sms: Dear Tomas, I would like to talk about our deal, related to the sales network of vegetables and fruits. Can I call you now?
to: 901706
from: 901708
sms: Hello. I thought we already discised this topic yesterday. I have no time to talk with you…
to: 901706
from: 901708
sms: How much?
to:901708
from: 901706
sms: 10000 EUR.
from: 901708
to: 901706
sms: Well, ok. I'll wait for your payment. Hereby you can open five sale points downtown.
from: 901708
to: 901706
sms: And, BTW: nobody should know about this conversation. This is in both our interest.
Ночь
После того, как мы поднялись на первую строчку, возникло острое желание продержаться там до конца. Наша команда приняла решение остаться на ночь и продолжить ночные баталии. Часть ребят переключилась на SCADA-системы, другие пробовали ломать сам банк, в котором находились деньги участников и жителей города, хардварщики продолжали взламывать GSM (но к середине ночи все-таки ушли спать — так как какой-то гений выключил GSM сеть, которую уважаемым организаторам пришлось заново поднимать с утра). Был найден git-репозиторий с исходниками банка и API, через который можно было вытаскивать логины и md5-хеши пользователей банка. И тут началась самая жара. Команда RDot минут за 5-10 до нас нашла ту же самую уязвимость и уже начала выводить деньги пользователей на свои счета. Мы в несколько рук также оперативно начали менять пароли и выводить деньги на себя. В процессе перевода денег мы заметили, что кто-то пытается увести у нас сессию через XSS-снифер, благо, у них это не получилось т.к. XSS не отработала, но мы решили наказать нерадивого атакующего и начали генерировать фейковые cookie, похожие на оригинальные, и слать все это на удаленный атакующий сервер, чтобы засыпать их ложными данными. Также была обнаружена уязвимость Server-side Template Injection, но раскрутить мы ее не успели. В основном у большинства пользователей были четырех-пятизначные пароли, но у некоторых самых “жирных” аккаунтов были 12 значные пассы, которые сбрутились только к утру. Под утро нами и командой RDot были выведены практически все деньги со счетов с легкими паролями. В этот момент мы обратили внимание на то, что пароль от банковского аккаунта, выданного нам организаторами, состоял лишь из 12-ти hex символов в нижнем регистре. Мы предположили, что пароли к банковским аккаунтам других участников сгенерированы аналогичным образом, и, настроив “правильно” маску, мы начали брутить хэши команд соперников, одновременно поменяв свой собственный пароль на более сложный. Через пару часов малышка Alice выдала нам пароль от банковского аккаунта одной из команд атакующих! 5 минут и нам удалось перевести все их деньги на свой счет.
К сожалению, организаторы нам не засчитали перевод денег со счета другой команды и вернули им баланс.
Под утро Защитники проснулись, поняли, что не уследили за банком, и временно закрыли его.
Второй день
Пентестеры продолжили находить мелкие уязвимости и закидывать их в bugbounty. Проснулись хардварщики и начали выполнять следующий таск по GSM. К обеду им удалось выполнить таск с перехватом машины. Вот, что пишет сам участник команды:
“Расскажу про задание с поиском и перехватом угнанной машины. Задание само по себе было сложным, но какой-то хакер сделал его ещё и весёлым. Мы уже смогли склонировать телефон вора, и оставалась последняя задача — написать на номер трекера внутри угнанной машины и перехватить контроль, но кто-то склонировал трекер. И когда я начал отправлять команды на трекер, этот кто-то начал отвечать за него. В какой-то момент он отправляет мне сообщение “u win!”, и я бегу к организатором — смотрите! А они с удивленным лицом: мы не программировали робота на такие ответы. Тогда мы и узнали, что какой-то хакер нас троллит. Он поднял настроение всей команде, организаторам и просто участникам.”
Но стоит осветить и технические подробности перехвата трекера автомобиля.
В первую очередь мы обнаружили команды, отправляемые на трекер, и пытались отправить те же команды, но это не дало результата — значит, трекер проверяет номер отправляющего. Это не остановило наших хардварщиков, ведь поддержка богов GSM уже получена, а им нужно больше хака. Ребята получили в пакетах данных TMSI вора и подделали такой же, что должно было дать нашей виртуальной симке такой же номер, что и у вора, — но и это не помогло.
Было принято решение полностью скопировать мобильник вора — мы начали охоту за его IMSI. Каждый мобильник время от времени меняет свой TMSI, и в этот момент в открытой форме можно словить его IMSI, если искать пакеты локализации, точнее ее обновления. Найдя такой пакет, мы получили данные для клонирования телефона вора. Клонировали мы его с помощью программного обеспечения от osmocombb и виртуальной симки в motorola c118. Получив контроль, мы определили местоположение автомобиля и перевели управление им на один из наших жайфонов, чтобы никто не смог повторить наш успех, ведь мы перестали слать команды и эфир стал тихим после охоты.
Скрин перехвата контроля:
И, конечно, запомнилась локация самого автомобиля — как ни странно, он был в силиконовой долине:
Банк практически целый день не работал. К обеду у нас уже сбрутились пароли от “жирных” аккаунтов и мы сидели в ожидании того, что организаторы его откроют хотя бы временно, и это случилось! Мы попали в 5-минутное окно, когда им пришлось запустить банк, чтобы сменить пароли командам (после нашего взлома счетов команд), и в этот момент мы успели перекинуть еще 3 млн публей на свой счет. Этот момент был запечатлен на видео, когда на сцену вышли Бизоны и мы в режиме реального времени вернули лидерство обратно.
Так и получилось продержаться до конца мероприятия. До последнего момента сомневались, удастся ли удержать первое место. Но удача и Боги GSM были на нашей стороне.
В целом организация была на высоком уровне, организаторы были очень дружелюбны и помогали с техническими проблемами. Тасков было много, но так получилось, что часть команды сконцентрировалось на банке и краже денег со счетов, хотя по словам организаторов в сервисе банка не должно было быть уязвимостей.
PS: а чемодан содержал денежный приз на самом деле был пуст =) Деньги были в отдельном конверте.
Автор: NFM