Практикум

Привет, с вами опять научно популярная передача «В Мире Киберпреступников». Мы уже многое прошли и с многим ознакомились; завершить цикл статей я хочу конкретными примерами.

Лестницы к стене!

Взгляд с высотыПосмотрите, например, на упрощенную топологию сети с которой я последнее время работаю.
  • Во-первых, видно что неинтерестные нам регионы мы просто изобразили облачками.
  • Во-вторых заметна страсть инженеров к резервированию — если один фаерволл упадет, траффик начнет ходить через запасной.
  • Заметна модная нынче виртуализация. Входной шлюз разделен на четыре виртуальных устройства; при ошибке конфигурации или взлома одного из них, остальные не пострадают.
  • Не очевидно, но важно понять — конечные сети сообщаются между собой проходя через Internal Router, при этом им навязываются правила прохода, их мониторят на аномалии, фильтруют подозрительную активность. Или, если он так настроен, не сообщаются вовсе :)

Допустим мы желаем проникнуть в исследовательскую сеть, которая с Интернетом, ессно, напрямую не сообщается. В первую очередь злоумышленник ищет метод укоренится за забором (FATE, средний уровень реализма).

Сетевик и системщик
Сетевую атаку легче всего провести на сервера (Помним, промежуточные устройства доступны только из OOB сети). Завелся даже специальные термин, демилитаризованная зона, изза того что сервера должны быть публично доступны (Они предоставляют услуги, помним? Чаще всего эта услуга — веб-сайт.) Это была хорошая новость, плохая: инженеры тоже знают что это самый легкий путь атаки. DMZ тщательнее всего проверяется на дыры и между самой DMZ и остальной сетью тоже строят защиту — на всякий пожарный.
  1. Internet -> Servers. Фаерволл служит порогом(2) между зонами, аспект: «DMZ».
  2. Servers -> Research. При выходе из ДМЗ фаерволл служит порогом(4)

Второй вариант — гостевая сеть. Установить зловредную станцию в гостевой (предположительно вай-фай) сети это очень легкий маневр. Но к сожалению сама гостевая сеть очень жестко порезана в правах доступа.
  1. Guests -> Research. В этом направлении фаерволл будет порог(4), плюс стант: Раз в 10 минут сеть реинициализирует подключение, сбивая таким образом все незаконченные операции.

Программист и системщик
Червь (распространяющийся сам), вирус (заражающий пользовательские процессы), троян (прикидывающийся хорошим процессом) — любой метод взять под контроль узел рабочей сети. Мы предполагаем что из рабочей сети люди имеют легальный доступ в исследовательскую.
  1. Написать код. Пускай сложность 5 и много времени
  2. Заразить Users. Сложность 1-2, много времени
  3. Users -> Research

Грифтер и системщик
Сразу несколько вариантов получить доступ к пользовательскому узлу. Выманить, найти пароль в мусорнике, все что фантазия позволит. Потом опять же открыть удаленный доступ на рабочей станции и пользоватся.
  1. ...
  2. Users -> Research

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

Сервисы

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

Чужие письма мы можем прочитать если
  • взломаем конкретный сервер на котором письма лежат
  • взломаем протокол и заставим сервер отдать нам чужие письма
  • введем правильный пароль, таким образом прикинувшись легитимным клиентом, что опять же:
    • проникнув на сервер с паролями, стырив хэш и rainbow attack его
    • напоить жертву в баре и пошерстить по его лаптопу
    • проникнуть в его домашнюю(!) сеть, man-in-the-middle его сетевой траффик и попытаться вычленить пароль в потоке
    • или скучно и долго перебирая варианты

Поломать работу сервиса можно
  • перегрузив сервера потоком мусора, DDoS атака
  • найдя уязвимость (протокола) которая вешает сервера, DoS.
    Месяца два тому мелькала на CVE уязвимость коммутаторов серии Cisco Nexus. Одно из самых мощных сетевых устройств в мире уходило в перезагрузку увидев 1(один) хитро сформированный пакет в потоке. Это фак-ап из разряда «мы все умрем», не забывайте, обычно сетевые устройства для злоумышленников практически неуязвимы.
  • нарушив каналы связи между серверами или сервером и клиентом
  • внеся разрушительные изменения в код или настройки процесса на сервере

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

Сайт
Если же говорить про веб-сайты, то диалог с игроком еще важнее. Сайты чаще всего служат лицом какого-то сервиса и обычно персонажу нужен сам сервис, а не сайт. В остальном ход мыслей должен быть таким же:

Чтобы получить конфиденциальную информацию с Имажинарии
достаточно украсть хранилище данных — там и пароли, и статьи:
  • взломать сервер и скопировать БД
  • взломать протокол и прикинуться сервером-соседом с запросом провести резервное копирование
  • получить уровень доступа Коммуниздия и приказать сайту слить БД
  • заразить сервер (или лаптоп Коммуниздия) червем который сделает все за вас
  • … любой другой метод пришедший вам в голову
Главное только не забыть что мы арендуем сервис у большой и хорошо защищенной веб-фермы.

Нарушить работу сервиса, использовать для дальнейших атак — смотрите примеры с почтой.

О себе, любимом


Любой злоумышленник, не только хакер, десять раз взвесит все аргументы перед началом действий. Пойманный хакер для партии бесполезен, да. Это ведет нас к сопутствующим любому взлому задачам.

Разведка
Начинается с сетевого скана, чтобы определить адреса активных узлов. Если предполагается наличие сенсора, скан растягивается по времени раз в десять чтобы не поднять тревогу.

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

Резюмируя, хакеры нечасто обладают свободой «ломай что хочу», практически всегда наоборот, злоумышленник ищет замок под свой ключ. Например имеет конкретную «отмычку» на, допустим, почтовый сервер Exim версии 6 и ниже, которая даст ему доступ к серверу на котором этот софт стоит. Или просто, смотрит на перечень возможных векторов выше и не может решить какой метод окажется проще. Сетевые сканы, сканы портов — все для того чтобы найти хотя бы одну подходящую станцию, хотя бы одну дыру в обороне. Очень, очень важная фаза.

Скрытность
Хакер всегда держит в рукаве длиннющий список методов уклонения от обнаружения. Это, уже несколько раз упомянутое, замедление (timing attack). Это фрагментация и манипулирование транспортными протоколами. Это маскировка текста под UTF коды. Их слишком много чтобы среднестатистический игрок вычитывал и знал их напамять.

Поэтому я рекомендую испльзовать такую же систему скрытности что и для физических проникновений. Может у вас все компетентные энтузиасты и вы будете на словах обсуждать «кто в какой тени прячется», может вы просто решите сделать неубедительный успех в броске «успехом с тревогой». Важно только помнить что скрытность имеет смысл лишь если есть наблюдатель, что ведет нас к заключительному параграфу.

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

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

Если же да, важно, то мы отправляемся в новый квест. Конечно же, журналирование это тоже служба. Где то есть сервер журналирования накапливающий информацию, есть SIEM анализирующий потоки инфы на предмет потенциальных тревог, есть протоколы общения и базы данных. Работать с этим предстоит точно так же как и с любым другим сервисом:
  • поломать службу вовсе и пока инженеры заняты ее восстановлением совершить свое грязное дело
  • хакнуть протокол и сказать серверу жертве что новый адрес накопителя — ваш собственный. сообщения идут, все спокойно, только идут не туда.
  • проникнуть на сервер журналирования и… этот пример обсуждался в одной из предыдущих статей

Спасибо

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

Если вы дочитали до этого момента то можно меня поздравить. Или вас, с упорством, как взглянуть. Хочу верить что прочтение этих статей вас вдохновит на увлекательные игры (и не менее увлекательные отчеты по играм) и новые решения в игромеханиках.

Все неотвеченные вопросы (как, остались неотвеченные вопросы?!) вы можете задать в комментариях, а я на этом все же закончу.

12 комментариев

avatar
Спасибо!
В нескольких местах я увидел формулировку «взломать протокол». Такое чувство возникает, что это решение всех проблем в духе киберпанковского «Ледоруба».
Что это значит вообще «взломать протокол» и насколько это сложно?
avatar
Это скорее профдеформация и усталость от темы, из того же ряда что и попытки все что можно назвать атакой. Кстати, «атаковать протокол» звучит технически правильнее.
definition: Злоумышленник эксплуатирует известные (или найденные им неизвестные) уязвимости протокола себе на пользу.

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

Любимый мною на лекциях пример, протокол ARP. Особенности его механизма работы позволяют злоумышленнику представится любой станцией в сети. Та самая MITM проще всего на нем работает: сказать А что я Б, сказать Б что я А, пропускать все без задержек чтобы незаметили. И этот протокол задействован в 99% домашних и офисных сетей.

Другие примеры: почтовый протоколы SMTP все шлет в открытом виде и без сверки адреса отправителя (пиши что угодно), DNS не проверяет от кого узнал имя сайта (DNS poison атака), механизм slow start транспортного протокола TCP очень резко роняет скорость связи при малейших недоставках.

На все это уже есть костыли и скотчи, например целые отдельные фичи на свичах а-ля ARP Guard, поэтому отчасти ты прав, «взломать протокол» я использую для «найти новую уязвимость которая тебе как раз нужна». Но зачем нам еще играть хакеров? :)

UPD. Костыли тоже требуют определенной компетенции. Я гарантирую что в 70-80% домашних сетей ARP guard не настроен ;)
avatar
Ну да, «взломать протокол» невозможно, но можно найти уязвимость протокола или найти уязвимость реализации протокола.
avatar
Как я понял:
а) дырка либо есть, либо ее нет
б) хакер ее либо знает, либо не знает
в) дырка либо поможет во взломе, либо нафиг не нужна
Выглядит всё довольно бинарно. Достаточно ли высока вероятность и низка дисперсия этих событий, чтобы можно было позволить бросок «на атаку протокола», или каждую дырку в протоколах лучше заготавливать заранее? Или что-то между?
Что делать с игромеханиками, где игрок может задекларировать (а-ля ФЕЙТ) факт наличия дырки? На что ориентироваться при выборе сложности декларации, при каких условиях разумнее наложить мастерское вето на такую декларацию (АКА «этого не может быть, потому что не может быть никогда»)?
Ну и в целом, что можешь посоветовать по поводу того, как обращаться с такими заявками?
avatar
Все это зависит от жанра, естественно и от детальности хакинга в твоей игре. Если детальности и правдоподобности не надо, то без проблем, один бросок на атаку протокола.
Если нужна, то вот советы:
Найти в протоколе свежую дыру, связанную с его основным предназначением — задание экстра-высокой сложности, и маловероятное. Таких дыр мало и обычно они все уже известны.
Найти в протоколе дыру, дающую преимущество или возможность в другой области — задание высокой сложности. Часто побочные возможности протокола можно использовать для никак не связанных с основным применением протокола атак. Например, DNS Amplification DDoS: используется уязвимость протокола разрешения имен, которая заставляет DNS-сервера по всему интернету забивать мусором канал цели.
Если декларировать в игре новые дыры, то лучше такого рода, будет интереснее.

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

Если использование дыры протокола не несет угрозы непосредственно цели атаки, а является промежуточным звеном для атаки на третье лицо, понизь сложность на одну ступень.
avatar
Клево, спасибо!
avatar
А, да, если это свежайший протокол, который почти никто еще не использует, а у тебя есть спецификации и тестовая реализация, идентичная реализации цели и полностью под твоим контролем, понизь сложность обнаружения дыры на 1 ступень.
avatar
Ммм, а можно разрешить создавать уязвимость в протоколах с помощью троянов/вирусов? То есть протокол продолжает работать, но на заражённом компьютере он будет предоставлять новосозданные уязвимости всем желающим.

Насколько я понимаю главной проблемой становится обход файрвола, чтобы наш агент целым и работоспособным добрался до жертвы.
avatar
Создать уязвимость протокола можно только сидя в международной комиссии по созданию и утверждению уязвимостей протокола (тоже хорошая паранойя для игры).
То, что ты говоришь, называется бэкдор с маскировкой управляющих каналов под определенный протокол.
При этом маскировка каналов под честный траффик как раз и обходит фаерволл, а главной проблемой оказывается заразить компьютер — то есть доставить агента на компьютер техническим способом или методом социальной инженерии (фаерволл в обоих случаях редко мешает), и обмануть антивирус.
avatar
Мне остается только полагодарить vsh, отлично все обьяснил! Мне нравится наша команда, я сплю — ты отвечаешь ;)
avatar
Иллотум, расскажи про ханипоты, это в игре же очень круто может быть.
avatar
Если честно, то это из категории «проводите параллели с крепостью», в этом конкретном случае, с фальшивыми воротами.

Ханипот это узел системы намеренно сделанный уязвимым. Естественно при первичной разведке он сразу засветится вам как отличный кандидат для атаки. Чуть чаще чем всегда такие милые конструкты являются частью системы сенсоров и таких вот приманок, где сенсоры настроены исключительно аггресивно реагировать на любую активность в их сторону.

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

Ну и да, самый очевидный вариант — уязвимый сервер. Иногда можно наблюдать и более массивные инсталляции: honeynet и honeyfarm.

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

Ханипот программеров тоже маловероятен. Вирусы и черви недостаточно интеллектуальны, чтобы искушать их уязвимыми, скажем, зонами памяти. Зато у программистов/системщиков есть jail, родственная тема. Это механизм изоляции процесса(ов) который в данном узле будет наиболее выгодной жертвой. Таким образом на DNS сервере, если кто-то взломает сам процесс DNS, толку будет немного — выйти за рамки jail не получится. Технические детали оставлю википедии.

Наконец да, системщики бывает оставляют в системе неиспользуемый акк с легким паролем, но настроеной системой тревоги.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.