Как попасть на дачу президента в пять часов утра
Этот пост о том, как обычный взлом обернулся муками совести и душевными терзаниями. Исходников будет не много, больше фоток и анализа. Итак, некто Вася работает «плохим парнем». Степень падения Васи такова, что средства на жизнь ему приносит поиск и разбор информации, доступ к которой был скомпрометирован вследствие неграмотного обслуживания, безалаберности или экономии на обслуживающем персонале.
Так повелось с момента возникновения группы, где Вася проводит большую часть времени, его профилем является анализ добытых данных и составление некоторого отзыва, если того просит заинтересованное лицо.
Будень московский
Обычное московское утро, офис-подвал, кофе, Вася с друзьями обсуждает новый заказ от старого знакомого. Все стандартно, надо достать инфу, всю до чего можно дотянуться. Адреса, сайты, места жительства персонала, страницы в соцсетях и т.д. получены заранее, и чем больше соберет покупатель сведений заранее, тем быстрее и качественнее будет результат. Подопытная фирма оказалась из северной столицы, без сайта (таких еще полно в России-матушке) и занимается поставками некоторого (какого будет разобрано ниже) оборудования, контора вроде как развалилась, но еще агонизирует, и некто мистер Х хочет получить остатки разработок данных. В командировку уехал самый молодой, ибо квалификации, чтобы поснифать wifi-трафик на предмет паролей, явок, ссылок и другой инфы, много не нужно.
В результате этих исследований были добыты секретные слова к почте, далее из переписки выянилось, что для хранения арендован дедик, который стоял на территории подопытного. Сервер иногда удаленно админился извне, на нем крутится старая убунта 12.04 LTS версии (это к вопросу об экономии на оборудовании и персонале). Просканировали на наличие уязвимостей, доступ по ssh настроен только на конкретные ip (достаточно грамотно), открыты с десяток портов, в том числе 21(FTP), 39, 41 и 95, нашлось несколько дырок, сервер сдался на уязвимости CVE-2014-0196, через нее подняли рута с третьей попытки, два раза сервак падал, но никто даже не шевельнулся, чтобы узнать в чем дело. Искали все, что было похоже на исходники, документацию и т.д. Зашли, осмотрелись, собрали урожай, почистили, проверили, еще раз почистили, ушли.
Продолжаем копать
Просматривая слитые каталоги, были обнаружены папки
Ловля удалась — вот он «Язь» программерский: куча сорцов из приватного репозитория, добытые в «бессонные ночи». Вася шарится по папкам, попутно спрашивая у гугла некоторые названия, на большинство запросов последний отвечает
— moskva_postanovka: ну тут понятно, что-то ставили в столице;
— sochi_bruche_postanovka: гугл не знает, что такое sochi_bruche, зато ответит на вопрос «sochi b ruche». Можете глянуть;
— sosnbor_aes_postanovka: тут гугл с ходу выдал ответ по такой замене «сосн бор аэс постановка»;
— valdai_rosino_postanovka: опять попадание с первого раза — «валдай рощино постановка»;
— volgodonsk_aes_postanovka: ну тут и ежу понятно, что-то ставили на волгодонской атомной станции, Вася там служил в молодости и с местами знаком не понаслышке.
Видимо, серьезные ребята, самое время посмотреть, что за рыбка попалась в наши сети. И да, Васю, как старого сишника очень коробит русский транслит в исходниках (сарказм).
«moskva_postanovka_r»
Смотрим репу — матерь божья, кто же так пишет? Сорцы вперемешку с временными файлами и объектниками, видимо, разработчик находится (находился на момент 2008 года) на первых курсах института… стоп, студент-разработчик большой софтины? Вы серьезно?
Удалив временные файлы получим такую картину:
В папке Capture картиночка завалялась от 30 сентября 2008 года.
Похоже на снимок с гугл-карт. Отличительных чертами этого места является расположение возле воды, и необычность формы набережной. Дальнейший поиск по карте златоглавой привел к такому результату:
«Копаем дальше»
Также в репозитории обнаружился док, объясняющий для чего сделана программа и сорцы, собственно, какого продукта Вася получил.
«Пасхалки»
Разобравшись примерным назначением проги, Вася стал более внимательно изучать исходники в поисках чего-нить необычного. Все ведь знают, что разработчики, необремененные корпоративным этикетом, могут вставить что-нибудь эдакое для развлечения себя любимых. Какие критерии поиска задавались? Прежде всего искались комментарии типа: «WTF,TODO,f*ck и другие смешные слова». И попытки были вознаграждены на третий день дзен-созерцания: были найдены следующие куски кода:
1. Защита от начальства (файл UMainForm.cpp):
Если не найдена либа со специальным названием в папке Windows, то программа будет выдавать следующее предупреждение: «ОАО НПП „ХХХ“ не оплатило разработку это приложения! Приложение будет закрыто!»
Забавное предупреждение, рассчитанное видимо, на начальника-дурака.
2. Граница на замке (файл UBChannel.cpp).
Данный участок кода в период с 5.00 до 5.30 утра, видимо, засылает дальше в программу рандом вместо реальных данных, полученных от оборудования.
3. Черная дыра (файл UBsoDevice.cpp).
Третий подозрительный участок был выявлен здесь. Если сетевой адрес машины установлен в 192.168.88.88, то приходящая информация не отдается дальше (закладка/тестовая машина?).
Что стоит (предположительно)
Поиск в гугле выдает следующие результаты по запросам «ГУПО, Трал М, Галс, Нерпа М, НПП XXX».
Описанный в репозитории софт обслуживает вот это оборудование: раз, два, почитать можно еще тут.
Косвенно подтверждает правильность скомпрометированной информации следующая страница — три, в репозитории также находятся папки с названиями "
Где стоит (предположительно)
Немного покопавшись в репозиториях, удалось выяснить следующие места обитания этого шедевра программисткой мысли.
1. Валдай (предположительно дом отдыха в Рощино, рядом правительственный объект;
2. Калининская АЭС;
3. Ленинградская АЭС;
4. Сочи (предположително дом отдыха «Бочаров Ручей», рядом правительственный объект, предположительно правительственная дача);
5. Москва (предположительно Дом Правительства Московской области);
6. Волгондоская АЭС.
Предположительно общий список мест установки устройств:
Правда жизни
После озвучивания количества желаемых плюшек, заинтересованное лицо как-то пропало из поля видимости, оставив Васю в глубоких раздумьях о смысле бытия в современном мире и растущих без меры цен на оперативку. На общем совете было решено указать незадачливым админам на недостатки в безопасности, с указанием методов их возможного исправления. Также в адрес руководителя ОАО «НПП» ХХХ было направлено письмо с описанием найденных уязвимостей. Как обычно был дан двухнедельный интервал перед обнародованием написанной статьи, однако пришедший ответ Васю несколько обескуражил, приводится с некоторыми ремарками (аудитория все-таки культурная):
«Послушай м[аз]ило мне глубоко по[б]ую как ты получил или спи[н]дил эту информацию. Ты не представляешь в какое г[уа]но вляпался и если об этом узнает кто-нибудь еще то искать тебя будут всей страной а я лично тебя [покараю].» Пунктуация оставлена без изменений.
Эпилог
На общем совете было решено обнародовать часть информации в виде этой статьи, не сливая при этом сорцы в инет, хотя сторонники показать миру «это» почти победили.
Вася, конечно же, удалил сорцы, и забыл все, что увидел и откопал. За державу обидно только, если софт для армии и режимных объектов пишут [студенты] малопрофессиональные программисты, умудрившись при этом запихнуть пару-тройку закладок, а потом неадекватные и грубые люди, которые их наняли, продают «это» за немалые суммы государству. По информации с профильных форумов, стоимость подобного оборудования для армии и других ведомств составляет несколько миллионов деревянных. Надеюсь, что существующие уязвимости изготовитель устранил, но кто гарантирует что там нет других, не таких явных?
P.S.: На момент написания статьи сервак без проблем сканится со старыми дырками. RIP.
Исходники
UBChannel.cpp — pastebin.com/xnA9p80F
UKernel.cpp — pastebin.com/7AZpqkRX
UMainForm.cpp — pastebin.com/PJgdKGcY