Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens

xqwkksjf6adatsv3lhu-am4ph6w.jpeg

До изобретения газоанализаторов шахтеры брали c собой в шахту канарейку. Из-за маленького организма и быстрого обмена веществ, птицы намного раньше реагировали на опасные газы в воздухе и предупреждали шахтеров. Отсюда появился термин Свидетельство канарейки


Что если вас уже давно взломали, а вы об этом не знаете?


Honey Tokens — (с англ. — «медовые приметы/признаки/идентификаторы») одна из разновидностей идеи Honey Pot, приманки для злоумышленников, позволяющей обнаружить факт взлома или опознать его источник. Когда атакующий уже проник в систему, он скорее всего выполнит действия не свойственные обычному пользователю: зайдет в папки, в которые никто не заходит, откроет файлы, которые никто не открывает, прочтет внутренне документы и попробует воспользоваться полученной информацией. Это можно использовать как способ обнаружения взлома.

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

Зачем это нужно?


jiufcbwkepg-izswuadwxjkerxe.png

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

Сервис Canarytokens


Canarytokens.org — это онлайн-сервис для удобного создания собственных маркеров (ханитокенов) для обнаружения взлома. Он поддерживает несколько вариантов триггеров и позволяет сгенерировать готовый триггер с привязанной почтой, куда придет уведомление если триггер сработал.

dtaslm6-vs_4c-cl6h5nqzlqh70.png

Сервис полностью бесплатный, а сгенерировать триггер можно моментально без регистрации. Так же существует self hosted версия для тех кто предпочитает держать секреты на своей инфраструктуре. Далее мы разберемся как работает каждый из триггеров и в конце развернем собственный сервер canarytokens в Docker-контейнере.

Триггер при открытии файла DOC и PDF


x9mwtnlqxhixsnu5o6fod1tgwao.png


Триггер сработает если документ был открыт программой для просмотра. Я использую этот трюк ОЧЕНЬ часто. На каждом компьютере и флешке у меня лежат документы с привлекательными названиями вроде Пароли.pdf или Биткионы.doc. Обожаю наблюдать как бухгалтера с любопытством исследуют все файлы на переданной им флешке.

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

Существует несколько способов поймать факт открытия документа. Canarytokens использует зашитый в документ собственный URL для проверки отозванных SSL-сертификатов (Certificate Revocation List). В итоге программа идет по этому адресу и срабатывает триггер.

Триггер через DNS-резолв


ami1whax3utfizv4zfgxuerxc9g.png


Это очень интересный триггер польза от которого не очевидна сразу. Он сработает в случае, если кто-либо запросит IP-адрес сгенерированного поддомена, который генерируется специально таким, чтобы его нельзя было угадать случайно или сбрутить. Таким образом исключаются случайные срабатывания. Этот триггер использует для многих методик, описанных дальше, в том числе для обнаружения факта открытия папки и как триггер в базе данных MS SQL. На деле вариантов использования этого триггера огромное множество.

URL триггер


60mkdnqqsqvla-5cc7-2nbkotrs.png


Тут все очень просто: достаточно чтобы по ссылке был выполнен GET, POST или HEAD запрос. Это вызовет срабатывание триггера. Помимо обычного применения, можно использовать в скриптах и для проверки парсеров, которые переходят по ссылкам для отображения превью содержимого. Так делают, например, мессенджеры: достаточно написать ссылку в поле ввода, что по ней был выполнен переход с серверов мессенджера.

Картинка

Классическая картинка размером 1×1 пиксель, известна всем, кто занимается отслеживанием интернет-рекламы. Триггер сработает если был загружен файл с картинкой. Такой пиксель можно вставить на любую html-страницу или в письмо. Его удобно вызывать из JS-скриптов на странице, если сработало нужное условие. Стандартный пиксель можно также заменить на свое собственное изображение.

Триггер по email-адресу


mo4esmyilw_y8lzwqhhw2-kaemq.png


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

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

Триггер на открытие папки в Windows


fpzdhxc0olbpomnpgglqlhrd9f4.png


Наверняка многие видели скрытый файл desktop.ini который есть в каждой папке Windows. Оказывается, он не так прост. В нем можно указать адрес иконки на удаленном сервере, использую UNC-пути (это те, что используются для сетевых дисков и начинаются с \\), при этом Windows выполнит DNS-резолв домена указанного в ссылке на иконку и активирует триггер. Файл desktop.ini можно запаковать вместе с другими файлами в архив, и он сработает, если архив распакуют.

Триггер на клонирование сайта


Простой скрипт для веб-страниц, срабатывающий если страница открыта не с вашего домена. Может быть полезно для детектирования фишинга.

if (document.domain != "mydomain.com") {
    var l = location.href;
    var r = document.referrer;
    var m = new Image();
    m.src = "http://canarytokens.com/"+
            "blablabla.jpg?l="+
            encodeURI(l) + "&r=" + encodeURI(r);
}


Триггер на запуск EXE файла или библиотеки DLL


co3fq5b-ivp-imere3zbbdcmmfe.png


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

Триггер для MS SQL


ub0rnfoz3sczs7-l3lcoshz-ms0.png


MS SQL позволяет добавить триггер на выполнение операций INSERT, SELECT, DELETE и т.д. Для срабатывания триггера используются тот же способ, что и для desktop.ini файла, а именно резолв DNS-имени через UNC-пути.

Пример триггера для MS SQL
--create a stored proc that’ll ping canarytokens
CREATE proc ping_canarytoken
AS
BEGIN
declare username varchar (max), base64 varchar (max), @tokendomain varchar (128), @unc varchar (128), size int, done int, random varchar (3);

--setup the variables
set @tokendomain = 'qo2dd6tftntl1pej9j68v31k6.canarytokens.com';
set size = 128;
set done = 0;
set random = cast (round (rand ()*100,0) as varchar (2));
set random = concat (random, '.');
set username = SUSER_SNAME ();

--loop runs until the UNC path is 128 chars or less
while done <= 0
begin
--convert username into base64
select base64 = (SELECT
CAST (N'' AS XML).value (
'xs: base64Binary (xs: hexBinary (sql: column («bin»)))'
, 'VARCHAR (MAX)'
) Base64Encoding
FROM (
SELECT CAST (username AS VARBINARY (MAX)) AS bin
) AS bin_sql_server_temp);

--replace base64 padding as dns will choke on =
select base64 = replace (base64,'=','-')

--construct the UNC path
select @unc = concat ('\\',@base64,'.',@random,@tokendomain,'\a')

— if too big, trim the username and try again
if len (@unc) <= size
set done = 1
else
--trim from the front, to keep the username and lose domain details
select username = substring (username, 2, len (username)-1)
end
exec master.dbo.xp_fileexist @unc;
END

--add a trigger if data is altered
CREATE TRIGGER TRIGGER1
ON TABLE1
AFTER INSERT
AS
BEGIN
exec ping_canarytoken
end


Тригер на вход в Amazon Web Services


xih-ht_ofipnouhrsoogqwrroem.png


API-ключ от сервисов Amazon должен соблазнить атакующего проверить что же там находится. Если этот API-ключ будет использован для входа, сработает триггер. При этом никаких данных там, разумеется, нет.

[default]
aws_access_key_id = AKIAXYZDQCEN7KRPDQRI
aws_secret_access_key = 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
output = json
region = us-east-2


Другие триггеры


Сервис Canarytokens.org поддерживает и другие триггеры, такие как хук для SVN, веб-редирект, чтение QR-кода, API-ключ Slack и другие. Все они использует похожий принцип и при желании вы можете самостоятельно придумать свой собственный триггер имея в арсенале DNS-имя, ссылку с картинкой, почтовый адрес и API-ключи от популярных сервисов. Кроме уведомления на почту, Canarytokens может дергать веб-хук в случае срабатывания триггера. Все механизмы работы описаны в документации.

Собственный сервер Canarytokens


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

Разработчики предоставляют готовый для образ Docker. Процесс установки достаточно типичный для любого образа, поэтому мы не будем затрагивать эту тему. Остановимся только на неочевидных моментах. Перед установкой вам придется отредактировать файл frontend.env и switchboard.env.

# Домен(ы) которые будут использовать для генерации адресов триггеров
# они должны указывать на IP-адрес сервера где запущен Docker. На эти же домены нужно будет выпускать SSL-сертификат.
CANARY_DOMAINS=example1.com,example2.com

# Этот домен нужен только если вы собираетесь использовать триггер в виде PDF-файла
# в этом случае NS-записи для этого домена должны указывать на домен в предыдущем пункте.
# Иначе говоря example3.com должен быть делегирован на example1.com и example2.com
CANARY_NXDOMAINS=example3.com


Для отправки почты я рекомендую использовать сервис Mailgun, потому что Sendgrid работает нестабильно.

Заключение


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

Эти методики можно можно использовать на сервера, десктопных компьютерах, файловых хранилищах и даже на телефонах.

Если вы хотите развернуть в собственный инстанс canarytokens в Docker, на наших виртуальных машинах Docker устанавливается в один клик из маркетплейса. Дополнительно мы дарим скидку 15% на все серверы:

iqfib45pgphfrxv--zfemt0qnmw.jpeg

© Habrahabr.ru