На каком это языке?

На этом этапе вынужден отвлечься и уточнить одну вещь: основа моего образования это сетевая архитектура и безопасность. В меньшем обьеме прокачана системная безопасность и разработка. Совсем зачатки микроэлектроники. Это определенным образом формирует мой жаргон и мои примеры, не обессудьте. Господ жаждущих услышать про реверс-инженерию микроконтроллеров попрошу в другой зал.

Повтори пожалуйста.

Микроконтроллеры? Реверс-инженерия? Поехали.

Сетевая система обычно строится иерархически, с агрегацией потоков траффика в магистральных каналах и последующим его распределением по индивидуальным узлам назначения. Конечные узлы являются генераторами и поедателями траффика. Промежуточные узлы обслуживают систему сообщения.

Вы верно догадываетесь что имея контроль над промежуточным устройством (коммутатор, маршрутизатор, мультиплексор, разница между ними для ролевой игры несущественна) можно повлиять на работу всей сети. Самый простой пример — направить чужой поток данных через себя, для прослушки и манипуляции — man-in-the-middle, MITM, атака. С другой стороны, если устройство четко знает что оно промежуточное, к нему и подступиться то непросто, все потоки траффика проходят сквозь.

Существует понятие служебных, out-of-band, OOB сетей в которых наши промежуточные устройства являются конечными — в них можно залогинится(хакнуть!) и настраивать. Проблема в том что OOB сети обычно ходят по физически другим каналам, куда ни офисные узлы, ни сервера ну никак не попадут. Это в нашем замке потайные ходы.

Все узлы сети являются компьютерными системами и строятся, сюрприз-сюрприз, по весьма схожим принципам. С точки зрения электронщика, компьютер состоит из процессоров и памяти связанных шинами данных. Любопытно что нам позволено вкладывать системы поменьше в большие. Например, я надеюсь всем ивестный, жесткий диск это самодостаточная системка: с процессором, памятью, ну и подконтрольным им агрегатом по намагничиванию поверхности диска. Видеокарта, сетевой адаптер — все это системы процессоров, памяти и шин.

Чтобы различать процессоры узко-специализированные от универсальных, первые принято называть (микро)контроллерами. По аналогии с промежуточными устройствами сети, у каждой шины есть контроллер решающий кто, как и с кем будет сейчас общаться. Совсем праздник, даже OOB сеть, со всеми ее признаками, в микроэлектронике найдется — это шина прерываний центрального процессора.

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

Программист зрит еще глубже, в компоненты процесса, но туда мы уже не полезем. (Есть программисты в зале? Расскажите в комментах про PCB, стек инструкций и переполнение буфера, про user- и kernel-mode)

На любом уровне иерархии, в любого рода информационной системе, конечные узлы общаются. Языками общения служат мириады протоколов, для всевозможных задач и уровней. Когда разбойники в лесу договариваются что двойной крик сойки это приближающийся караван, они создают протокол. Наконец стек протоколов это совокупность всех протоколов задействованых в конкретной задаче. Открываете интернет страницу? Протокол устанавливает канал связи, протокол определяет формат адреса, протокол очерчивает правила сеанса связи, протокол обеспечивает гарантии доставки, протокол описывает искомую страницу. Все вместе — стек.

Черт подери, как в этом замешаны люди?

Людям нужны покорные исполнители, людям нужны услуги. Служба это о-очень расплывчатое понятие которое может означать а) предоставляемую услугу, на самом абстрактном уровне, б) узлы которые эту услугу предоставляют на сетевом и в) процессы которые на этих узлах заняты предоставлением данной услуги на системном.

Те из вас кто на виндоус, нажмите win+R, введите services.msc и ентер — вот какие службы есть в вашей компьютерной системе. Некоторые из них она может предоставлять всей сети.

Хакер боится, обманывает и борется со службами
  • фильтрации данных (МСЭ, SPF, firewall, aнтивирус, ALG)
  • мониторинга (Host и Network IDS, SIEM, SRM)
  • контроля за выполнением политик (SRM, DLP, пользовательские привилегии)

Хакер взламывает, использует и смеется над службами
  • общения (SMTP, WWW, IRC)
  • адресации и разделения потоков данных (DNS, IP, VLAN)
  • хранения и защиты данных (iSCSI, DRM, файловые политики, шифрование)

И фокус!

Перекресное умножение служб на элементы систем генерирует нескончаемый поток техножаргона!

Хакер взламывает сеть? Пускай не забывает что сперва ему разведать какой траффик шлюзовой фильтр пропускает (sniff атака), взломать какой то малозащищенный узел по разрешенным каналам(tunneling атака), а потом прятать всю свою активность от сенсоров (NIPS) пока он не обезвредит узел занимающийся анализом данных от сенсоров (SIEM). Как обезвредит? Ну например представится как офисный узел с правом доступа (spoof атака на IP), зайдя на SIEM узел повысит свой уровень привилегий (эскалация) и тонко что-то подправит внутри SIEM процесса(reverse engineering), чтобы тот перестал реагировать на хакерскую активность.

Нужно прослушать мобильник? Пускай хакер сделает электронную систему из микрофона, антенны, симки и микроконтроллера, которую можно впихнуть под аккумуляторную крышку и она станет вам звонить параллельным каналом на каждом разговоре жертвы. Или может проще получить привилегии админа в смартфоне и запустить собственный процесс, пишущий все с микрофона и заливающий на ваш дропбокс?

Ну ладно, а пароль к интернет-банкингу? Можно создать фальшивую страницу входа на сайт (WWW spoof) бесшовно пускающую в банк, но сохраняющую введенный пароль. Можно даже конкретной жертве представится настоящим именем сайта (DNS spoof).
Или, реальная история, заманить на самодельную ссылку, которая кроме открытия желанной порнушки еще и скрипт на стороне жертвы выполнит (XSS атака). А скрипт скачает плагин к вашему браузеру(очень творческий MITM) который будет при отрисовке сайта банкинга нажимать от вашего имени на «Перевести сумму» да еще и не отрисовывать потом лог перевода. Сколько раз откроете — столько раз и уедет энная сумма.


Заодно, теперь понятно почему эксперт только в одной области тут бессилен, правда?

Рекламная пауза

Отвлечемся на тангенциальную, но очень важну тему, криптографию. Очень много ляпов попадают именно на нее. Для начала, это тоже система. Криптографическая система состоит из кода/шифра и протокола (правильно, правил для участников общения!).

Атаки на протокол нам вполне доступны: украсть/подслушать ключ, side-channel атаки (очень любопытная штука, TEMPEST из этой категории), MITM (трехнедельной давности Китайская атака на github.com).

Атаки на шифр живут в мире докторов математическихнаук: дифференциальный и интегральный анализ, невозможный и невероятный дифференциальный анализы (я не шучу!), meet-in-the-middle, бумеранг. К сожалению, эти самые доктора математических наук шифры и разрабатывают, что практически гарантирует защиту от этих атак в современных шифрах. Тут руководствуйтесь уровнем реализма в игре, может у вас персонаж rain man и эти все алгоритмы ему как родной язык.

Возвращаясь к расшифровке, упаси вас господи соглашаться на «я подберу ключ к шифру» за один бросок. Любой современный шифр можно вскрыть только перебором вариантов. Любой перебор вариантов это tradeoff между процессорным ресурсом, памятью и временем. Все современные криптосистемы расчитаны на то что среднестатистическому датацентру подбирать шифр будет невыгодно долго (месяцы). Все чем может помочь (мирового уровня) математик — найти shortcuts, методы сократить обьем перебора.

Ладно, возможно у вас нет кластера ФБР и года времени, все еще остается память. Rainbow атака эксплуатирует терабайты дешевой памяти, и является самым популярным методом нападения на хэши (hash) — результаты необратимого, с потерями данных, алгоритма преобразования. Который тем не менее гарантирует уникальный вывод на каждый уникальный ввод, что делает его популярным методом хранить пароли не храня, собственно, пароли.

Игромеханика, заход второй

Итак, мы знаем теперь о разных элементах и их возможной роли в жизни систем. Понимаем что такое протокол и что шифры это no-no. Как это отобразить игромеханически?

Подойдем творчески (FATE):
Мы взламываем систему банкомат-банк, с сочными деталями. Начертим быстренько зоны: Процесс GUI, Ядро, Шифрованный канал. Между GUI и каналом граница в 6, между GUI и ядром 4, между ядром и каналом 2. Добавим ядру аспект «Root Guard», а каналу связи «Monitored day and night».
Что, хакнули? Мастер смеется и начинает рисовать Монитор, Узловой коммутатор, Серверная ферма. Прошли? Ферма разделяется на Банковский протокол от которого можно пройти к Базе Данных и Транзакционному серверу. Докиньте стант «При поднятии тревоги система пытается откатить изменения, сдвиньте игрока в предыдущую зону».


Ладно, ладно. Без деталей, мы просто желаем выпилить деньги. Наверняка между купюр заныканы маркеры (-1), кассеты из закаленной стали (-1), и для работы с ними нужно два ключа (-1). Бросай.

Рамки?

Увы, четких правил не будет. Пользуйтесь нарисованными, хотя бы в уме, системами и здравым смыслом (извините гуманитарии, никто не говорил что будет просто).

Например, магнитный замок ну наверняка имеет строго один и только один канал связи с центральной системой. Плюс при пропаже heartbeat сигнала из центра фиг он вам откроется.

Например, mobile carriers наверняка шифруют голосовые каналы. Подслушать? Только имея ключ к шифру. Ключ? Грубо говоря, в симке.

Например, пройти пять-десять узлов с самыми разными сложностями на пути чтобы добыть пароли? Потом еще и rainbow attack их? Проще покопатся в мусорниках, чесслово.

Набросайте еще диких идей в комментариях и я разберу их на компоненты.

Близко

На половине этой статьи я уже было собирался разделить ее на две части, но взамен, хотя темы довольно компактны и самодостаточны, решил оставить на потом фантастические фичи и технологии. Результатом я доволен, а вы?

Еще, я начинаю понемногу выдыхаться (а впереди выходные бета-теста Невервинтер онлайн). Ждите последнюю часть — с футуризмом, паранормальщиной, топологиями и атаками — через пару-тройку дней.

22 комментария

avatar
Очень круто! Единственное, что очень хотелось бы видеть типовые алгоритмы взлома типовых систем с игромеханикой… вот примерно как у тебя в примерах, но если не сложно в виде какого-то алгоритма или flowchart'а
avatar
Отлично! Топологии с векторами атак и будут визуальными примерами, это уже в планах.
avatar
Омномном! Очень вкусно и полезно!
По крайней мере, для меня — неспециалиста. Попробую на тебя Алиту, что ли, натравить! ^_^
avatar
Это самое важное, чтобы прожевывалось.
Не надо натравливать, лучше знакомить! :)
avatar
Хм-хм.

Пример:

У нас есть некая сеть/компьютер, который нам очень хочется хакнуть и он в принципе доступен через сеть, но вся информация зашифрована, та самая криптография, причём шифр меняется с некоей периодичностью. Причём эта самая периодичность смены намного меньше времени за которое реально вскрыть использующиеся шифры.

Собственно вопрос:

Реально ли (хотя бы в кинематографических условиях) написать вирус, распространить его по сети и использовать заражённые компьютеры для облачных вычислений, чтобы вскрыть шифр за гораздо меньшее, чем обычно, время?
avatar
Только в кинематографических. В реальности дешевле и надежнее завести свой кластер машин для вычислений.
avatar
vsh совершенно прав. С заданными условиями (время смены ключа намного меньше времени вскрытия) даже кластер, в реальной жизни, не поможет.

Один только вопрос, обьем хранимой информации то какой? Я правильно понял что она лежит мертвым грузом в каком то там хранилище? Регулярная смена ключа означает перешифровку. В таких случаях гораздо выгоднее атаковать протокол криптосистемы, а точнее, механизм перешифровки. Ведь в какой то промежуточный момент информация там будет в открытом виде.
В нашей терминологии, нужно будет перехватить информацию в оперативной памяти в момент ее передачи по программной шине между процессами двух криптохранилищ, старого и нового. Это может сделать электронщик при физическом доступе к памяти, или программист+системщик «влезшие» в программную шину.
avatar
С заданными условиями (время смены ключа намного меньше времени вскрытия) даже кластер, в реальной жизни, не поможет.
Я потому и спрашивал про облачные вычисления — получить несколько тысяч/десятков тысяч чужих компьютеров под перебор вариантов.

Один только вопрос, обьем хранимой информации то какой? Я правильно понял что она лежит мертвым грузом в каком то там хранилище?
Да чёрт знает какой объём, просто пример придумался.

Ну и вряд ли она лежит мёртвым грузом, иначе бы выхода в сеть не было или он был непостоянным. Скорее это будет какой-то сетевой узел или несколько точек по миру с которых работают члены организации Н.

В нашей терминологии, нужно будет перехватить информацию в оперативной памяти в момент ее передачи по программной шине между процессами двух криптохранилищ, старого и нового
Для этого насколько я понимаю нужно уже пролезть внутрь системы, чтобы получить доступ к оперативной памяти и всему остальному.
avatar
Другое дело, что я не очень понимаю, что даёт эта смена ключа, если информация там лежит мертвым грузом. Вот был у тебя доступ к хранилищу, ты оттуда слил зашифрованное, в хранилище сменился ключ — тебе какая разница? Сиди да ковыряй старую базу потихоньку.
avatar
Вот был у тебя доступ к хранилищу, ты оттуда слил зашифрованное, в хранилище сменился ключ — тебе какая разница? Сиди да ковыряй старую базу потихоньку.
Ну это да. Есть смысл ломать, только если украденные данные устаревают вместе с шифром.
avatar
Верно понимаешь.

Чем больше обьем наблюдаемых шифроданных, тем легче обратить шифр. Правда современные шифры и тут защищены. :X

Хорошо, если речь о шифровании сетевого трафика то в самом популярном для этого протоколе норма смены ключа — сутки. Причем сеансовый ключ меняется независимо от ключа данных. Для нас это сразу убивает все попытки брутфорса чем то слабее чем датацентр Microsoft.

Про распределенные вычисления, а особенно ботнеты: ботнеты малопригодны для вычислительных задач, т.к. зомби должны принимать и отсылать координационные сигналы и обрабатываемые чанки з довольно немалой частотой, не говоря уж о нагрузке на процессор/память. Это сводит на нет их скрытность.
Применение зомби в DDoS разнится тем что атака инициируется одной инструкцией ботам, и в ходе процесса никому ничего не шлет.
avatar
Про распределенные вычисления, а особенно ботнеты: ботнеты малопригодны для вычислительных задач, т.к. зомби должны принимать и отсылать координационные сигналы и обрабатываемые чанки з довольно немалой частотой, не говоря уж о нагрузке на процессор/память. Это сводит на нет их скрытность.
Ну, тут насколько я понимаю единственный смысл это делать — это если собственный достаточно мощный датацентр нельзя организовать по тем или иным причинам.

Так-то да, если есть тихое место, время и деньги, то проще собрать всё что только можно и оттуда всё и сделать.

Но для киберпанка, где за героями постоянно кто-то гоняется и у них постоянно нет денег я думаю пойдёт.
avatar
Для киберпанка многое пойдет ;)
В киберпанке, очень возможно, корпорации сами будут предоставлять услуги по вскрытию шифров. Возможно, всего лишь за процент с содержимого.
В киберпанке, очень возможно, вы найдете квантовый компьютер. Благодаря полиномиальным затратам на деление, квантовые компьютеры попросту ломают концепцию современных асимметричных шифров.
avatar
В целом верно, но приличный алгоритм смены ключа тоже будет защищен.
Ведь в какой то промежуточный момент информация там будет в открытом виде.
Ну это, прямо скажем, не факт. Например, можно просто шифровать сверху еще одним ключом.
avatar
Виноват, можно. Там многое можно наворотить. Пускай уже ГМ решает насколько ценна та информация.
avatar
Реально ли (хотя бы в кинематографических условиях) написать вирус, распространить его по сети и использовать заражённые компьютеры для облачных вычислений, чтобы вскрыть шифр за гораздо меньшее, чем обычно, время?
Зомби-компьютер и ботнет.
Для чего-то действительно сложного и серьёзного, как заметили ниже, они тебе мало помогут.
avatar
Надо просто подходить творчески к ботнетам.

Electirc Ship=450 тычяч юнитов- кто знает что они там на самом деле считают по мимо анимашек?
Folding Project- 426 тысяч
Mersenne Prime- 571 тысяча
Никто не может проверить что они там на самом деле считают.
Методы
1) Заражаем — головной блок, делаем бэкдор, и по необходимости 450 тыс юнитов брутфорсят нужный нам ключ а не белки складывают или там картинки рисуют
2) Говорим что ищем инопланетян и организовываем собственнный центр.

Конспирология
На самом деле свёртывание белков и электроовцы это для отвода глаз — а на самом деле они совсем другим заняты
avatar
годная конспирология, но на практике, если не ошибаюсь, они все с открытым кодом.
avatar
Если не ошибаюсь из за специфики облачных вычислений — пользователь получает настолько мелкий фрагмент задачи что может быть уверен только в том что его машина что то считает — а вот в том что именно она считает могут быть уверены лишь те у кого вся головоломка
avatar
Хорошие идеи, для кинематографичных уровней сойдет. На практике это малореально.
а) при дешифровке нет никакого метода проверить верная ли расшифровка кроме семантического. Т.е. расшифровывать надо постараться побольше, да еще и умный алгоритм проверки придумать. Атаки с известным плейнтекстом это не чистый пример.
б) Математические операции современных шифров очень легко узнаваемы. Из 400 тысяч учасников один да и проверит. Да поднимет на весь мир ор что в твоем коде цепочка Фейстела в работе, размер пакета ключей тут уже не поможет.
avatar
Отличная завязка для игры, но, как Иллотум уже сказал, на практике известные алгоритмы атак на шифры и хэши очень легко узнаваемы.
avatar
vsh совершенно прав. С заданными условиями (время смены ключа намного меньше времени вскрытия) даже кластер, в реальной жизни, не поможет.

Один только вопрос, обьем хранимой информации то какой? Я правильно понял что она лежит мертвым грузом в каком то там хранилище? Регулярная смена ключа означает перешифровку. В таких случаях гораздо выгоднее атаковать протокол криптосистемы, а точнее, механизм перешифровки. Ведь в какой то промежуточный момент информация там будет в открытом виде.
В нашей терминологии, нужно будет перехватить информацию в оперативной памяти в момент ее передачи по программной шине между процессами двух криптохранилищ, старого и нового. Это может сделать электронщик при физическом доступе к памяти, или программист+системщик «влезшие» в программную шину.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.