Многие слышали о страшных хакерах и возможно даже были жертвами их атак. Но мало кто знает каким образом их вычисляют. Для того чтобы поймать хакеров существует целая технология под названием Deception. Как правило она включает в себя много методов. Сегодня мы рассмотрим как поймать хакера с помощью ловушек и других методов.
Слово deception переводится с английского как обман. Это название очень точно отражает суть решения — ведь чтобы поймать атакующего, ловушки должны быть неотличимы от настоящих сервисов.
Сегодня эта технология представлена в основном зарубежными — американскими и израильскими — вендорами. Среди них самые известные — TrapX, Illusive Networks, Fidelis, Cymmetria MazeRunner, Canary. С российскими производителями пока не очень. У нас есть Honeypot Manager «Кода безопасности», выпущенный в 2009 году, — уже не просто ханипот, но еще и не полноценный Deception. Есть пара свежих полноценных решений — Bastion Security Platform, которую делаем мы с моими коллегами в «Бастионе», и Xello. Также можно найти несколько опенсорсных программ.
Собственно, с позиции разработчика я и планирую рассказать о том, что такое Deception и чем он интересен. Но сначала поговорим о предтече этой технологии — ханипотах.
Как поймать хакера — ловушки на базе honeypot.
Honeypot («горшочек с медом») можно считать первой инкарнацией технологии Deception, а появились они еще в конце восьмидесятых — начале девяностых годов. Ханипот — это сетевой объект, единственная цель которого — привлекать злоумышленника и быть атакованным.
Ханипот не несет иной ценности в сети, в которой установлен; с ним не ведется никаких легитимных сетевых взаимодействий. Когда ханипот атакуют, он фиксирует это и сохраняет все действия атакующего. В дальнейшем эти данные помогают анализировать путь злоумышленника.
Побочная цель ханипота — задержать продвижение атакующего по сети, заставив его потратить время на изучение ложного ресурса.
Ханипот может быть полноценной операционной системой, которая эмулирует рабочее место сотрудника или сервер, либо отдельным сервисом.
Однако сам по себе ханипот имеет ряд недостатков:
- нужно отдельно настраивать каждый ложный сервер;
- ханипоты не взаимодействуют между собой и с элементами настоящей инфраструктуры. Они не оставляют следов, хакеру их трудно обнаружить;
- ханипоты, как правило, не объединены в централизованную систему.
На смену этой технологии постепенно пришла другая, более продвинутая и умная, — Deception.
Суть технологии обмана
Deception относится к решениям класса Intrusion Detection System (IDS) — системам обнаружения вторжений. Основная цель такой системы — выявлять попытки нежелательного доступа к сети. Иными словами, Deception помогает обнаруживать сетевые атаки.
В чем отличие Deception от ханипотов? Ханипот — это отдельный сетевой ресурс, который ни с кем не взаимодействует, а только ждет атакующего, чтобы записать его действия. Deception же — это централизованная система управления ложными сетевыми объектами, которые принято называть ловушками (decoys). Каждая ловушка представляет собой, по сути, отдельный ханипот, однако все они связаны с центральным сервером.
Такие решения обычно имеют удобный интерфейс для управления ловушками. Оператор может создавать ловушки с желаемым набором эмулируемых сетевых сервисов, в выбранной подсети, с нужным способом получения IP-адреса и так далее.
Ловушки и эмулируемые на них сервисы поддерживают постоянное соединение с сервером. Так же как и ханипоты, ловушки в Deception не предусматривают легитимного сетевого взаимодействия (за исключением взаимодействия с другими компонентами Deception).
Ловушка будет сообщать на сервер о любой попытке взаимодействия с ней: это служит индикатором атаки. При этом оператор может моментально получить уведомление о произошедшем событии. В нем будут указаны детали произошедшего: адрес и порт источника и цели, протокол взаимодействия, время срабатывания и так далее.
Дополнительные модули в составе Deception также могут предоставлять возможность ручного или автоматизированного реагирования на инциденты.
В понятие Deception могут входить и другие вещи. Некоторые компоненты помогают упростить настройки и автоматизацию развертывания, другие делают ловушки больше похожими на настоящие сетевые сервисы, еще одни — привлекают внимание хакеров к ложным целям.
Некоторые компоненты могут решать смежные задачи — например, реагировать на инциденты, собирать индикаторы компрометации с рабочих станций и искать на них уязвимое ПО.
Агенты
Агент — это программа, которая устанавливается на реальные рабочие станции пользователей или серверы. Она умеет общаться с сервером Deception, исполнять его команды или передавать в центр управления полезные данные.
Среди решений класса Deception есть как продукты, в состав которых входит агент, так и те, которые обходятся без него.
В задачи агента может входить:
- сбор данных о состоянии рабочих станций;
- распространение приманок;
- эмуляция активности в сети;
- реагирование на инциденты (ручное или автоматизированное);
- сбор данных для форензики;
- что-то еще — в меру потребностей клиентов и фантазии разработчика.
Деятельность агента есть смысл сделать скрытой от человека, который работает за компьютером. Зачем? Во-первых, пользователь может намеренно или случайно удалить агент или его составляющие.
Во-вторых, наличие неизвестного (или известного до определенной степени — если пользователь об этом предупрежден) ПО на рабочей станции может вызвать ощущение дискомфорта.
В-третьих, все, что видит пользователь, увидит и атакующий, получивший доступ к этому компьютеру. А ведь мы не хотим раскрыть свои карты перед атакующим, правда?
Поэтому агентские решения в составе Deception следует делать таким образом, чтобы пользователь не видел ни агента, ни следов его жизнедеятельности (или хотя бы стараться свести это к минимуму).
Поэтому агенты обычно работают в привилегированном режиме, в виде драйвера для Windows либо модуля ядра в случае с Linux. Это позволяет, например, перехватывать системные вызовы для обеспечения скрытности, а также не дает пользователю удалять агент или мешать ему работать.
Приемы мимикрии
Задачи Deception как технологии — убедить атакующего в том, что все ловушки и взаимодействия между ними реальны, ценны и используются, а также сделать ложные цели привлекательными для атаки. В современных системах есть ряд компонентов, которые отвечают за эти цели.
Как поймать хакера с помощью приманки.
Чтобы атакующий с большей вероятностью наткнулся на ловушку, можно его к этому подтолкнуть. Как? Для этого в Deception используются приманки, или «хлебные крошки».
Приманка — это объект, который размещается на реальной рабочей станции, скрытно или не очень. Приманка выглядит как что-то обычное и привлекательное для атакующего («случайно» забытый файл с паролем, сохраненная сессия, закладка в браузере, запись в реестре, примонтированная шара и подобное). Приманка содержит ссылку и данные для доступа на ложный сетевой ресурс.
Злоумышленник, обнаружив такую ссылку и авторизационные данные, конечно же, захочет проверить, что это за сервис. Он заходит на ловушку, и тут срабатывает сигнализация об инциденте.
Виды и способы размещения приманки зависят от типа ловушки, на которую приманка ведет.
Приманки могут распространяться несколькими способами. Если в составе Deception присутствуют агенты, задача разбрасывания приманок возлагается на них. В этом случае процесс можно легко автоматизировать: сервер управления посылает команду на агент, и тот выполняет необходимые действия для установки приманки.
Если агентов нет, Deception-решение может предлагать готовые скрипты, которые необходимо будет выполнить на рабочих станциях вручную. Этот подход обладает очевидными недостатками: например, при перенастройке ловушек нет возможности автоматически обновить приманки на рабочих станциях, тогда как агенты позволяют это сделать.
Следует, насколько это возможно, ограничить взаимодействие настоящих пользователей ПК с приманками. Однако слишком сильно скрывать ложные цели тоже нельзя. Если злоумышленник не сможет их найти, для чего они вообще нужны?
И конечно, приманки должны быть правдоподобными. Если мы поставим приманку в виде SSH на компьютер бухгалтера, это может вызвать подозрения атакующего.
Зачастую приманка содержит авторизационные данные для доступа к ловушке — логин и пароль или ключ. Но как правильно их составить, чтобы они выглядели правдоподобно? Тут и появляется мысль вести внутри Deception базу фейковых пользователей.
Ложные пользователи
Итак, мы хотим подставлять в приманке данные для авторизации, максимально похожие на настоящие. При этом в каждой организации данные пользователей выглядят по-разному. У всех разные форматы логина (например, часто встречаются логины вида «первая буква имени — точка — фамилия» латиницей). У всех разные парольные политики. Для некоторых приманок могут понадобиться почтовый адрес, адрес домена, что-то еще. Как быть?
Задачу можно решить, ведя базу ложных пользователей сети. Есть разные подходы к ведению такой базы.
Например, Deception можно интегрировать с системой анализа трафика. Это дает возможность распознавать в сетевом трафике наличие данных для авторизации, находить в них общие черты и генерировать пользователей, похожих на настоящих, по выявленным правилам.
Если такой интеграции нет, хорошим решением выглядит генерация пользователей по заданным вручную правилам. Среди таких правил может быть выбор определенного словаря имен, задание шаблона для логина, задание правил генерации пароля (наличие спецсимволов, минимальная длина, генерация запоминающихся паролей, выбор паролей из словаря и так далее), задание адреса домена, почтового сервера.
Такой подход может пригодиться, если компания с помощью Deception защищает филиалы, расположенные в разных странах. Тогда, скажем, для российского филиала у ложных пользователей могут быть имена из русского словаря, а для китайского — из китайского.
Когда сформирована база ложных пользователей, Deception может использовать ее при создании приманок. Для большей реалистичности можно делать связку между агентом и ложным пользователем так, чтобы все приманки, размещенные на этом агенте, были от имени одного человека.
Эмуляция сетевого взаимодействия
Если традиционные ханипоты существуют сами по себе, ни с чем не взаимодействуют и не оставляют следов в сети, то технология Deception направлена в том числе на то, чтобы подтолкнуть злоумышленника к взаимодействию с ловушкой.
Для этого атакующему надо подсказать, где искать ловушку, и заставить его подумать, что это реальный сервис. Представь, что ты нашел в сети некий сервис, и результат пассивного сниффинга показывает, что с ним никто и никогда не взаимодействует. Подозрительно? Да!
Поэтому одна из фишек Deception — это возможность активно эмулировать сетевое взаимодействие. Взаимодействовать могут любые точки в рамках системы: ловушки с ловушками, агенты с ловушками. Реализация зависит от конкретного решения и может включать как взаимодействие простыми пакетами TCP/UDP, так и передачу данных по какому-то высокоуровневому протоколу.
Конкретика будет зависеть от типа ловушки. К примеру, можно научить агента с некой периодичностью ходить в ловушку, которая эмулирует SSH, проходить на ней авторизацию и даже выполнять какие-нибудь команды.
Важная деталь: выше я говорил, что ловушка оповещает о любых попытках подключиться к ней и передает уведомление об этом на сервер. И о подключениях в рамках эмуляции тоже! В сервер Deception должен быть встроен механизм, который сумеет отличить настоящие события безопасности.
Эмуляция, кстати, в какой-то мере пересекается с идеей приманок. Есть сетевые протоколы, которые подразумевают передачу авторизационных данных в открытом виде (например, FTP). Эмуляция подключения по FTP будет работать так же, как и приманка: мы скармливаем атакующему, который прослушивает трафик, логин и пароль для доступа к ловушке.
Использовать эту функциональность следует с осторожностью. Хакер может заподозрить что-то неладное, анализируя трафик: например, что все запросы одинаковые, происходят слишком часто, имеют нетипичную длину или другие параметры. При разработке и при настройке систем Deception требуется учитывать эти нюансы: вводить рандомизацию или другие способы маскировки.
Дополнительные компоненты
Как я уже говорил, в Deception могут быть включены самые разные элементы. Я подробно остановлюсь на двух наиболее актуальных — автоматическом развертывании и сборе данных с рабочих станций.
Автоматическое развертывание
Одна из потенциальных проблем Deception — это трудоемкость первичной настройки. Без автоматического деплоя при установке Deception в сеть пришлось бы вручную определять список ловушек и эмулируемых сервисов, правильно их настраивать и для каждой ловушки создавать и размещать приманки. Огромная работа!
При этом нельзя взять и сделать типовое решение, чтобы ставить его каждому клиенту. В каждой организации свой набор сетевых ресурсов, которые имеет смысл размещать в виде ловушек. Если сеть компании небольшая, то справится один специалист, но что, если Deception ставит себе большая компания? У нее может быть множество подсетей, которые нуждаются в установке ловушек. В каждой подсети может быть свой набор типичных ресурсов. Так что мысль автоматизировать развертывание напрашивается сама собой.
Реализаций можно придумать несколько. К примеру, если Deception интегрирован с системой анализа трафика (как в примере с ложными пользователями), система сможет получать данные о том, по каким протоколам идет взаимодействие в каждой отдельной подсети. На основе этой информации Deception может автоматически устанавливать нужные виды ловушек в нужном количестве и даже сама обновлять ложный слой сети при добавлении новых реальных ресурсов.
Если же такой интеграции нет, проблему можно решить иначе. Сервер Deception выполняет активное сканирование сети, получая данные об открытых портах на реальных машинах, или пассивное прослушивание трафика там, где это возможно. Собранную информацию Deception будет использовать для автоматической установки ловушек.
Третий способ еще проще, но не избавляет полностью от необходимости ручной работы. Можно предоставить оператору не ручное создание и настройку отдельных ловушек, а способ выбора предпочтительного списка сетевых сервисов и предполагаемого количества ловушек. Тогда установка и настройка будет выполнена автоматически по шаблону.
Сбор данных с рабочих станций
Deception может быть не только средством обнаружения атак. Наличие агентов позволяет системе брать на себя и другие задачи. Одна из них — сбор агентом данных об установленном на компьютерах ПО, включая версию и дату установки. Результаты можно сравнивать с базами CVE и вовремя предупреждать о том, что в используемой версии программы есть серьезная уязвимость.
С другой стороны, агент может собирать данные для форензики (расследования инцидентов). Когда ловушка обнаруживает атаку, источник которой — рабочая станция с агентом, Deception может сопоставить данные от ловушки (время, порт источника соединения) с информацией, которой обладает агент. Таким образом можно получить полезные сведения об атаке: какой процесс ее запустил, как он проник на компьютер и так далее.
Также агент может собирать разные индикаторы компрометации на рабочей станции сотрудника. Это позволило бы получать уведомления даже до того, как атакующий перейдет к активным действиям в сети.
Заключение
Deception сравнительно новая технология, и решения этого класса появились на рынке не так давно, однако она постепенно завоевывает популярность. Deception не заменяет стандартные общепринятые системы информационной безопасности, но дополняет системы защиты, позволяя обнаружить атаки, обошедшие все прочие средства.
Однако это очень гибкая система, и благодаря интеграции с другими средствами ИБ она обеспечивает широкие возможности обнаружения атак. В Deception можно встроить разные механизмы инвентаризации сетевых активов, реагирование на инциденты и прочее. Эффективность этой системы зависит от того, как ее разработать и настроить. Если все сделать правильно, злоумышленник не догадается, что перед ним ненастоящая цель. А даже если сможет — для него будет уже поздно.
Deception простит какие-то ошибки в настройке: даже при наличии косвенных признаков, по которым атакующий сможет отличить ловушку, система остается достаточно эффективной. Но забывать о правильной настройке не стоит!
Если ты сомневаешься, нужна ли твоей компании такая технология, можешь установить пробную версию любого из решений (в том числе наше!). Если же ты выступаешь на стороне пентестеров и редтимеров, то надеюсь, ты оценил наши усилия в усложнении твоей жизни!