[Из песочницы] Исповедь человека в чёрной шляпе
Disclaimer: Весь нижеприведённый текст был получён путём прямого считывания данных из /dev/random в текстовый файл. Любые совпадения с реальными или придуманными личностями, ситуациями, явлениями и предметами являются совпадениями.
Сегодня бывает модно говорить о криптолокерах, о bug-bounty программах, об открытых конференциях для всех и о том, что очередной школьник купил самый дешёвый 0day и поставил себе в школе все пятёрки. Однако, это — не модная статья. Она не о том, что «самый ненадёжный фактор системы — это xyz». И не о том, что круто использовать сейчас, а что — будет круто использовать завтра. Это не список стандартных правил iptables на непроникновение в среде уверенных пользователей ПК.
Это моя история, и я, генератор случайных чисел, хочу Вам её рассказать.
Повествование изобилует терминами, некие из коих могут быть незнакомы Вам, так что там, где это уместно, я поместил всплывающие подсказки.
Часть 1. Мыш
«Добро пожаловать» — это, в основном, именно то, что видели всякие юные дарования от цифрового мира, когда пытались подобрать пароль брутфорсом 22 порта на моём сервере. Как минимум несколько часов в неделю каждый из группы серверов, арендованных мною по всему миру, работал почти без сетевой защиты. Я написал задание в cron — случайное количество часов в неделю держать открытыми популярные порты, добавлять на эти часы левые учётные записи в систему и давать им определённые полномочия. Восемь машин попеременно открывали двери в себя для всех желающих. Это была моя удочка на начинающих хакеров — я собирал информацию об их сетях и оборудовании, обо времени их доступности и сна, об их предпочтениях в софте. Каждую ночь я читал и фильтровал логи — отсеивал ботов, всякие Shodan-подобные сервисы и откровенно сильных ребят, которые могли представлять угрозу. Так, к концу недели у меня стабильно образовывался список из двух-пяти начинающих взломщиков, которых я ломал сам, забирая по возможности всё, что находил — от номеров кредиток и биткоин-кошельков до кукисов на малоизвестных почтовых серверах. Я не считаю, что был несправедлив, подстраивая подобные ловушки — ведь процесс всегда инициировали именно жертвы. Тем более, взломанный хакер очень вряд ли обратится за помощью в правоохранительные органы, так что я не боялся расправы и мог себе позволить спокойно работать. Бывали, конечно, и неудачи, но в основном денег, заработанных таким путём хватало на жизнеобеспечение уровня чуть ниже среднего класса.
Однажды на выходных, в очередной раз вычисляя, кого из повадившихся на моё добро взломать будет легче и безопасней, на одном из своих серверов я увидел свежий файл в /etc/ssl, именованный приватным RSA-ключом. Меня смутил размер файла — ровно 20 байт, что никак не может быть рабочим RSA-ключом (разве что 128-битный с 0×00 по бокам). Редактор показал мне, что, скорей всего, это — какой-то хеш. Хеширующих функций, дающих такие маленькие объёмы на выходе, немного, так что я загуглил для уверенности и точно понял, что предо мною — SHA1-хеш. Без новомодных перца и сдвигов, только какой-то приболевший: в файле отсутствовал ведущий 0×00, с коего обычно начинаются валидные SHA1-хеши. Получалась какая-то нелепица — один из моих виртуальных гостей сознательно взял хеш с каких-то данных и оставил его на моём сервере, назвав файл, как приватный RSA-ключ. Пару дней я не мог додуматься, зачем кому-то нужно было делать нечто в таком роде. Спустя примерно неделю я вовсе выбросил сию мысль из головы, ибо разумных ответов на вопрос так и не нашлось. Я решил, что это просто были чьи-то эксперименты с терминалом во время посещения сервера.
Однако, зайдя ещё через несколько дней в Джаббер, я вдруг прям застыл на компьютерном стуле. Перед глазами прокрутились воспоминания о том сранном файле — ведь алгоритм OTR, который во все времена оставался самым надёжным и безопасным решением для опасных переписок, берёт SHA1-хеш с никнейма пользователя и предоставляет его как часть отпечатка личности при обмене ключами. Оставалось лишь проверить догадку, так что я взглянул на отпечаток своего ника — сей тоже не начинался с 0×00, как положено порядочным SHA1-хешам, а значит я всё это время имел дело с оставленным мне в таком странном виде контактом Джаббера! Недолго думая, я добавил его в список доверенных контактов, чтобы можно было шифровать весь поток данных между нами.
Ночью того дня я увидел в сети некий новый контакт. Получив его отпечаток и сравнив с тем, что был найден на сервере, я понял, что, видимо, не сошёл с ума и это действительно настоящий OTR-fingerprint живого человека. Мы обменялись публичными ключами. Так начался мой исход.
Часть 2. Капитализм
Не стоит думать, будто я нуждался в помощи, либо жаждал проникнуться сутью родства душ, например. Отнюдь, я — законченный параноик и в реальной жизни все, кто знают меня, уверены, что запуск косынки — единственная доступная мне компьютерная магия. Однако, какой бы абстрактно толстой ни была моя шапочка из фольги, та доля интереса, которую породил сей человек, неописуема никакими красками. Сумбурная смесь из любопытства и страха, удивления и радости, с толикой гордости за профессию. Естественно, я сразу написал ему. Некто по ту сторону монитора предложил поверх OTR набрасывать ещё и PGP-слой, на всякий случай. Я знал, что в моей (и, предположительно, его тоже) области труда паранойя — скорей профдеформация, чем заболевание, так что против не был. В ту ночь я узнал, что моего виртуального гостя зовут Мыш, он обижается на мягкий знак в конце сего слова и намерен предложить мне работу. Ник его Джаббера в виде фингерпринта у меня на сервере, как оказалось, был частью собеседования. Я осторожно поинтересовался, почему я вообще должен захотеть соглашаться с ним сотрудничать, и получил ответ, коий менее всего ожидал. Оказалось, что всё это время за файлом хеша на сервере постоянно наблюдал демон на обычном sh-скрипте из трёх строк с засыпаниями на случайное количество секунд и маскировкой под rsync worker’а. Его единственная задача заключалась в отслеживании SSH-ключа любого, кто попытается прочесть или модифицировать хеш. Мыш знал, что я не стану использовать пароль для аутентификации на своих серверах, но отдельный файл-ключ — стану. Он знал, что проверяет сей ключ локальный демон, синхронизируя данные о доступе помеж всеми моими машинами. Таким образом, все восемь моих серверов оказались разом скомпрометированы не искусственно, как были постоянно ранее, а вполне себе натурально. Более сильный хакер поймал меня на удочку, точно как я ловил на удочки более слабых. Я ждал, что он станет шантажировать меня сливами информации или шифрованием данных. Но он не стал.
Вместо шантажа и краж, он предложил мне нечто совершенно иное. Мыш сообщил, что где-то в Китае есть некая безымянная фирма, активно занимающаяся какими-то мутными и непонятными разработками. На вопрос, что имеется в виду под «мутными» и «непонятными», он скинул мне данные о нескольких маленьких VPN-сетях сей фирмы, объединённых в одну побольше, из которой в конечном итоге две машины смотрели в интернет. Я не удивился — это вообще адекватная практика для коммерческих организаций — не пускать смертных в сеть, если стоит вопрос вероятных денежных потерь. Но странно, по словам Мыша, было вовсе не это. У нас на руках была примерная топология сети, данные о моделях роутеров и сетевых карт, данные на персонал фирмы и на, собственно закупки фирмы. Обычный дамп информации о мелкой конторе, коий в те годы стоил дешевле старой Волги. Однако, была некая деталь в сем дампе на редкость, как бы, невпопад. А именно, фирма закупила несколько сотен (!) видеокамер наружного наблюдения не самого плохого качества, официально занимая при этом площадь примерно пятиподъездной хрущёвки + двор. Я сразу решил, что имел место быть обычный распил денег — в Китае такие же люди с такими же последствиями, но прикупленные к камерам пятнадцать высококачественных DVR, которые занимали свои места в общей топологии сети и прекрасно общались с теми двумя машинами, что смотрели в интернет — сильный аргумент. Пятнадцать таких устройств стоят примерно как все те триста камер — подумал тогда я и понял, что нет никакого смысла эксплуатировать пятнадцать устройств видеозахвата без, собственно, видеозахвата. В общем, Мыш заинтриговал меня, ибо я не представляю себе нужд, на коие могли бы пойти триста видеокамер внешнего наблюдения в относительно небольшом здании, документально занимавшемся производством и продажей велотренажёров и прочей домашней спорттехники. Тогда я спросил, причём, в общем-то, здесь я и почему именно я.
Знаете, чаще всего, если ты взломщик, то у тебя, на самом деле, очень скучная работа. Каждый новый сервер ты обследуешь по давно изученным тропинкам на популярные уязвимости. Общаешься под разными личинами с персоналом фирмы-жертвы или лично с жертвой, если это один человек. Иногда можно шесть месяцев вести беседу с женщиной на сайте знакомств, созидая фундамент для блицкрига — залития PDF с эксплойтом или картинки-лоадера на машину, о которой ты к тому моменту уже всё знаешь, но вдруг передумать из-за мучений совести. Иногда приходится устраивать целые спектакли, прикидываясь фантомами, чтобы выманить из дома параноика с набитым биткоином кошельком — один фантом приглашает на свидание, а другой (всё ещё Вы) — упрашивает остаться в онлайне, «чтобы я увидела, как ты вернулся — так пройдёт моя депрессия из-за бывшего бла бла бла». Но чаще всего это линейный анализ доступных данных и использование досупных инструментов. Взлом хакеров вместо обычных людей несколько разнообразил сей процесс, но уже нет какой-то «той самой искры», которая горела где-то внутри от одного лишь man nmap. Мыш предложил атаковать их сеть параллельно из Китая и из-за границы. Он приобрёл неплохой ботнет из китайских машин и решил, помимо этого, нанять несколько местных нищих, чтобы те на время атаки массово всячески отвлекали персонал прогулками где не надо, ссорами, криками и пьянством. Меня насторожил подобный чрезмерный энтузиазм и я заподозрил, что Мыш чего-то не договорил мне о сей фирме. Но моё дело правое — мы договорились о ставке в 10 биткоинов, если я вовремя поймаю момент включения сети после DDoS’a ботнетом и успею в неё проникнуть до активации маршрутизации. Другими словами, я должен был сделать запрос аутентификации от имени компьютера одного из их сотрудников после того мгновения, в которое ethernet подаст сигнал в первый роутер на своём пути, но до того момента, как его ПО поймёт, кого и куда можно пускать, а кого и куда — нет.
Часть 3. Шахматы
Я уже как-то делал нечто подобное, однако со своим собственным сервером и только в целях обучиться новой атаке на будущее. Похоже, такое будущее настало. У нас в запасе было неограниченное количество времени, ибо ботнет Мыш выкупил до полного обнаружения (ботнеты, в основном, продают не по временным интервалам, а до обнаружения определённого количества его участников — так, например, Вы можете купить ботнет «до 15%» и смело жертвовать 15% его машин для своих целей без дополнительных оплат). Мы плотно занялись совместным написанием софта для проведения атаки. Я запросил оплату труда за кодинг, ибо задача, мягко говоря, не из самых лёгких и так удостоверился в платежеспособности своео партнёра — он сразу заплатил, без клянча и скидок, так что я спокойно запасся зарядами Гугла и принялся за работу. После обоюдного обсуждения мы с ним пришли к выводу, что необходимо до DDoS’a каким-то образом внедрить что-то совершенно непалевное, но при этом имеющее доступ и ко внутренней сети, и к интернету. Ведь из одного интернета атаковать две машины до включения маршрутизации невозможно в принципе — они же попросту не увидят даже свои DNS, не говоря уже о далёких хостах каких-то там нас, например. Анализируя топологию и схему сети, я заметил, что в здании скорее всего есть компьютер, который управляет большею частью DVR-регистраторов —, а это значит, что, скорее всего, там вообще может оказаться какая-то OpenBSD (всегда мечтал взломать OpenBSD на китайском языке). Так что я решил атаковать остальные регистраторы (коих в разных частях здания было четыре из пятнадцати).
План заключался в том, чтобы вывести из строя целевой из четырёх (он просто ближе иных к окну должен был находиться) с помощью нанятого нищего, затем залить на компьютер сотрудника, отвечающего за регистраторы, подмену в hosts сайта их фирмы-производителя и, voi la, спокойно позволить ему скачать какой-то «анализатор неисправностей» и установить его на целевое устройство. Оставалось решить одну проблему — китайский язык. Мыш настаивал на найме переводчицы, мне же было глубоко побоку, как он потратит свои деньги, так что я не умничал. Мы нашли на просторах интернета милую девушку, которая произносила странные звуки достаточно бойко для того, чтобы убедить нас в своей профпригодности. Получив от меня разметку на русском, поинтересовалась, мол, это мы разрабатываем регистраторы? Я отмазался, сообщив, что являюсь лишь посредником между посредниками. Каково же было моё удивление, когда она написала через несколько часов прямую ссылку на оригинальный сайт фирмы-производителя регистраторов и натурально спросила: «Какую часть меняем? Диалект сохранить? Подлизываться ли в тексте?». Тогда мне показалось, что мне знакома её речь и стиль письма, но я, увы, не смог вспомнить, откуда. Домашний ПК работника фирмы-жертвы был уже под нашим контролем и кроме языкового баръера ничто не мешало нам его администрировать. Благо, системые файлы Windows называются вседа одинаково, так что подмена была выполнена успешно. На всякий случай я ещё оставил несколько задач в планировщике, которые бы в случае чего слали мыло от самого себя (но с подменой видимого адреса) этому работнику якобы от начальства с просьбой поспешить с DVR-регистратором.
План сработал отлично. Мыш заплатил $100 какому-то относительно местному бомжу за то, что оный подключил двадцатиметровый кабель розетки к продуктовому киоску, а затем рано утром, в момент пересменки охраны фирмы, подошёл вплотную к стене, за которой, по нашим расчётам, должен был находится регистратор, с микроволновой печью без крышки, поставил её на землю, несколько наклонив вверх, включил на полную мощность и преспокойно ушёл.
В этот же вечер ничего не подозревающий сотрудник фирмы скачал наш драйвер с подменённого сайта. Мы не стали сроить велосипеды, а просто скачали оригинальный драйвер, дизассемблировали его и дописали прямое открытие сокета для всех желающих в виде части оригинального драйвера. Я не шибко мастер в языках ассемблеров, но этот был уж какой-то совсем порезанный. Благо, там уже были участки кода со схожей функциональностью, так что хоть не пришлось наугад ждать всех возможных прерываний и сигналить во все возможные порты. Выждав пару дней, Мыш принял решение начинать DDoS, так что я подготовился к атаке. Но вот к тому, что я увидел после неё, я не готовился никогда. Ботнет начал атаковать досаточно синхронно, прошло 13 минут с момента первого пакета до момента 100% вовлечённости. Сервера фирмы отлично фильтровали трафик, много упало ещё на уровне чего-то типа роутера провайдера, судя по логам трассировки. В какой-то момент один роутер ненадолго ушёл в очистку кеша и сессий, в сей момент регистратор открыл свои прелести нашему взору и мы вошли в сеть. Перво-наперво я начал активный ARP-спуф всей сети вокруг — во время DDoS извне подобную атаку часто можно принять за сбой работы одной из сетевых карт. Нормальным решением в такой ситуаци будет реавторизация участников сбоившей сети на роутерах, чего я и добивался, чтобы регистратор прикинулся компьютером одного из работников, чьи данные для входа у нас были. Мыш занялся маскировкой соединения, заставив регистратор до сброса сессий прикинуться роутером с -P FORWARD ACCEPT. И вот, момент истины — роутер, который обслуживает, в том числе, и регистратор, сбрасывает кеш и сессии и я успеваю влететь в новую сессию вместо одного из компьютеров. Полный доступ к внутренней сети.
Часть 4. Vendetta
Знаете, наверное, нельзя сказать, что ты входишь в помещение и чувствуешь его запах, если ты здесь лишь в роли духа ssh. Но ежели путь твой возлёг через DVR-регистратор, то, так уж вышло, разделишь ты путь свой с видеопотоками. Меня всё ещё мучал основной неразгаданный вопрос этой фирмы: зачем кому-то понадобилось оформлять тремя сотнями видеокамер наружного наблюдения и пятнадцатью видеорегистраторами дом размером с полторы захудалых школы. Недолгие манипуляции с vlc и я уже стримил их видеопотоки с одного регистратора на свой VDS, с которого проводил атаку. Ещё немного манипуляций и я разделил доступ к потокам между фирмой, собой и Мышем, который начал качать старые архивы и запустил пару скриптов для проверки жёстких на наличие биткоин-кошельков. Я не видел видео (не конвертировать же в ASCII, SSH всё таки), но сам стрим я настроил так, чтобы никто не смог понять, кто и где я, даже прямиком трассируя весь его путь. Маленькое правило в dbus и один большой видеофайл перекинется мне по связке (VDS > Tor > VDS > Tor > я), как только китайцы обрежут интернет, заметив утечку данных. В общем-то, они не заставили себя ждать, я успел выдавить по 4 минуты с каждого регистратора фирмы, со всех камер, и 6 с того, через который проводил атаку. Первое, что меня удивило — это тот факт, что все триста камер, о которых было заявлено в данных о закупках, имели место где-то быть, ибо их стримы были на месте. Второе меня уже не удивило, а скорей дало ответы на вопросы: я же видел, какие именно архивы качает Мыш. Он явно был сосредоточен на определённом участке времени. Он прекратил отвечать в Джаббере. Вышел из Джаббера и завершил SSH-сессию на VDS. Правда по, внезапно, таймауту ключа. Дело в том, что я настроил SSH таким образом, что каждые N секунд сервер опрашивает тебя по поводу ключа и соли. Соль с каждым правильным ответом даётся на следующий раз новая. Так что таймаут ключа мог значить лишь одно: Мыш удалил к чёрту файл с ключём или убил демона SSH. Я ждал и ждал его в сети. Мне было плевать на биткоины, я всеръёз забеспокоился о том, что его могли найти копы, или, что хуже, местные китайцы. Паранойя имеет свойство расти экспоненциально в подобных ситуациях.
Я всегда снимал новую квартиру для сложных атак. Эта атака не была исключением. Великолепно покрашенная в тёмных тонах дверь аккуратно отворилась. Из подъезда сразу потянуло прохладой. Моё сердце как будто коллапсировало в волну и обратно. В помещение расслаблено прошла… девушка-переводчица, которая сделала нам дефейс. Кажется, я был готов что есть сил рвануть прямо на неё — расстояние было таково, что она бы не успела увернуться или защититься, однако вслед за ней появился некий взъерошенный сребровласый индивид и неспеша, молча показал мне пистолет в правой руке. Невероятно худой и очень уставший индивид в сильно потрепанном чёрном костюме ласково приобнял девушку-переводчицу, не спуская с меня курок, поцеловал её в затылок, после чего сказал мне: «Видеофайл называется 'Мыш', архив четырёхлетней давности, на твоём VDS в папке, куда тот скачал архивы. Включай и смотри». Я осторожно повернулся снова к монитору, открыл терминал и увидел свежий новый файл EXEC_ME в домашней директории. Я не знал, что там за видео о моём коллеге. Я не знал, что это за парень за моей спиной с пистолетом в руке. Я не знал, как вообще меня нашли. Я не знал, как кто либо кроме тебя может писать в папку с правами ты: ты, особенно если ты — это root. Но кое-что я всё таки знал. Я жив и не повязан.
И тогда я запустил EXEC_ME.
$ sh --noprofile ./EXEC_ME
LANG=ru_RU.utf8 && echo "
дама раб на китай. муж коп и они вместе
фирма это частная тюрьма
мой отец в ней сейчас
я хотел доступ к камерам
чтоб показать всему миру
но я удалил оба наши ссшключа к вдс
чтоб ты не сел за моего отца
биток скинул прости что втянул
clear
Я успел дочитать до части об удалении SSH-ключей, когда мужчина сзади начал бить руками по столу и монитору, неистова крича. Он схватил меня за шиворот и всё твердел: «Ты найдёшь мне его!», «Обязательно найдёшь!». Он тряс меня и, вроде, бил. Всё брюзжал слюною и серебристой шевелюрой, пока я плавно отходил ко сну — целый, невредимый и абсолютно законопослушный гражданин Марса, генератор случайных чисел.