<img src="https://habrastorage.org/webt/xq/wk/ks/xqwkksjf6adatsv3lhu-am4ph6w.jpeg" />
<blockquote>До изобретения газоанализаторов шахтеры брали c собой в шахту канарейку. Из-за маленького организма и быстрого обмена веществ, птицы намного раньше реагировали на опасные газы в воздухе и предупреждали шахтеров. Отсюда появился термин <a href="https://ru.wikipedia.org/wiki/Свидетельство_канарейки">Свидетельство канарейки</a> </blockquote>
<h4><font color="#3AC1EF">Что если вас уже давно взломали, а вы об этом не знаете?</font></h4>
Honey Tokens — (с англ. — «медовые приметы/признаки/идентификаторы») одна из разновидностей идеи Honey Pot, приманки для злоумышленников, позволяющей обнаружить факт взлома или опознать его источник. Когда атакующий уже проник в систему, он скорее всего выполнит действия не свойственные обычному пользователю: зайдет в папки, в которые никто не заходит, откроет файлы, которые никто не открывает, прочтет внутренне документы и попробует воспользоваться полученной информацией. Это можно использовать как способ обнаружения взлома.
В статье мы рассмотрим, как легко сделать собственные триггеры для обнаружения взлома на раннем этапе. Такие ловушки полезно использовать системному администратору и даже обычному пользователю переживающему о приватности своих данных.
<cut />
<h2><font color="#3AC1EF">Зачем это нужно?</font></h2>
<img src="https://habrastorage.org/webt/ji/uf/cb/jiufcbwkepg-izswuadwxjkerxe.png" />
Взломщик, попав в новую систему начинает осматриваться вокруг, как вор проникнув в квартиру, начинает открывать все ящики в поисках драгоценностей. Атакующий заранее не знает, какие именно данные представляют ценность, но с большой вероятностью он проверит все возможные варианты. Поэтому важно, чтобы ловушки выглядели точно так же, как реальные данные и были максимально привлекательны для атакующего. Чем раньше владелец заметит срабатывание ловушки, тем быстрее поймет, что был взломан и сможет отреагировать.
<h2><font color="#3AC1EF">Сервис Canarytokens</font></h2>
<a href="https://canarytokens.org/generate">Canarytokens.org</a> — это онлайн-сервис для удобного создания собственных маркеров (ханитокенов) для обнаружения взлома. Он поддерживает несколько вариантов триггеров и позволяет сгенерировать готовый триггер с привязанной почтой, куда придет уведомление если триггер сработал.
<img src="https://habrastorage.org/webt/dt/as/lm/dtaslm6-vs_4c-cl6h5nqzlqh70.png" />
Сервис полностью бесплатный а сгенерировать триггер можно моментально без регистрации. Так же существует self hosted версия для тех кто предпочитает держать секреты на своей инфраструктуре. Далее мы разберемся как работает каждый из триггеров и в конце развернем собственный сервер canarytokens в Docker-контейнере.
<h2><font color="#3AC1EF">Триггер при открытии файла DOC и PDF</font></h2>
<img width="300" src="https://habrastorage.org/webt/x9/mw/tn/x9mwtnlqxhixsnu5o6fod1tgwao.png" />
Триггер сработает если документ был открыт программой для просмотра. Я использую этот трюк ОЧЕНЬ часто. На каждом компьютере и флешке у меня лежат документы с привлекательными названиями вроде <code>Пароли.pdf</code> или <code>Биткионы.doc</code>. Обожаю наблюдать как бухгалтера с любопытством исследуют все файлы на переданной им флешке.
Считаю этот триггер наиболее действенным и полезным для всех категорий пользователей, от профессионалов информационной безопасности до новичков. Почти никто не знает, что PDF-просмоторщик может передавать владельцу документа факт открытия файла. На это попадаются все.
Существует несколько способов поймать факт открытия документа. Canarytokens использует зашитый в документ собственный URL для проверки отозванных SSL-сертификатов (Certificate Revocation List). В итоге программа идет по этому адресу и срабатывает триггер.
<h2><font color="#3AC1EF">Триггер через DNS-резолв</font></h2>
<img width="500" src="https://habrastorage.org/webt/am/i1/wh/ami1whax3utfizv4zfgxuerxc9g.png" />
Это очень интересный триггер польза от которого не очевидна сразу. Он сработает в случае, если кто-либо запросит IP-адрес сгенерированного поддомена, который генерируется специально таким, чтобы его нельзя было угадать случайно или сбрутить. Таким образом исключаются случайные срабатывания. Этот триггер использует для многих методик, описанных дальше, в том числе для обнаружения факта открытия папки и как триггер в базе данных MS SQL. На деле вариантов использования этого триггера огромное множество.
<h2><font color="#3AC1EF">URL триггер</font></h2>
<img width="500" src="https://habrastorage.org/webt/60/mk/dn/60mkdnqqsqvla-5cc7-2nbkotrs.png" />
Тут все очень просто: достаточно чтобы по ссылке был выполнен GET, POST или HEAD запрос. Это вызовет срабатывание триггера. Помимо обычного применения, можно использовать в скриптах и для проверки парсеров, которые переходят по ссылкам для отображения превью содержимого. Так делают, например, мессенджеры: достаточно написать ссылку в поле ввода, что по ней был выполнен переход с серверов мессенджера.
<b>Картинка</b>
Классическая картинка размером 1x1 пиксель, известна всем, кто занимается отслеживанием интернет-рекламы. Триггер сработает если был загружен файл с картинкой. Такой пиксель можно вставить на любую html-страницу или в письмо. Его удобно вызывать из JS-скриптов на странице, если сработало нужное условие. Стандартный пиксель можно также заменить на свое собственное изображение.
<h2><font color="#3AC1EF">Триггер по email-адресу</font></h2>
<img width="300" src="https://habrastorage.org/webt/mo/4e/sm/mo4esmyilw_y8lzwqhhw2-kaemq.png" />
Если на сгенерированный почтовый ящик придет любое письмо, триггер сработает. Удобно использовать для мониторинга утечки баз данных имейл-адресов, контакт-листов и т.д.
Например, можно добавить этот адрес в список своих контактов и узнать, когда ваша записная книжка на телефоне будет слита каким-либо приложением, запрашивающим доступ к списку контактов. Также можно всем сотрудникам добавить в записные книжки на компьютере, телефоне, имейл-клиенте разные триггерные адреса и следить откуда утекают контакты.
Адрес электронной почты специально генерируется такой, который точно никак нельзя угадать, поэтому исключает вероятность подбора и случайного срабатывания триггера.
<h2><font color="#3AC1EF">Триггер на открытие папки в Windows</font></h2>
<img width="100" src="https://habrastorage.org/webt/fp/zd/hx/fpzdhxc0olbpomnpgglqlhrd9f4.png" />
Наверняка многие видели скрытый файл desktop.ini который есть в каждой папке Windows. Оказывается, он не так прост. В нем можно указать адрес иконки на удаленном сервере, использую UNC-пути (это те, что используются для сетевых дисков и начинаются с <b>\\</b>), при этом Windows выполнит DNS-резолв домена указанного в ссылке на иконку и активирует триггер. Файл desktop.ini можно запаковать вместе с другими файлами в архив, и он сработает, если архив распакуют.
<h2><font color="#3AC1EF">Триггер на клонирование сайта</font></h2>
Простой скрипт для веб-страниц, срабатывающий если страница открыта не с вашего домена. Может быть полезно для детектирования фишинга.
<source lang="javascript">
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);
}</source>
<h2><font color="#3AC1EF">Триггер на запуск EXE файла или библиотеки DLL</font></h2>
<img width="300" src="https://habrastorage.org/webt/co/3f/q5/co3fq5b-ivp-imere3zbbdcmmfe.png" />
Позволят склеить триггер с существующим исполняемым EXE-файлом или библиотекой. При этом не детектируется антивирусами. Следует иметь в виду, что такая склейка может сломать некоторые программы, так что лучше использовать что-то простое. По сути, это давно известный метод используемый для распространения троянов и вирусов, только в нашем случае скрытый функционал совсем безобидный. Однако нужно учитывать, что исполняемый файл может вызвать бОльшую настороженность у атакующего, а так же не запускаться на его операционной системе.
<h2><font color="#3AC1EF">Триггер для MS SQL</font></h2>
<img width="150" src="https://habrastorage.org/webt/ub/0r/nf/ub0rnfoz3sczs7-l3lcoshz-ms0.png" />
MS SQL позволяет добавить триггер на выполнение операций INSERT, SELECT, DELETE и т.д. Для срабатывания триггера используются тот же способ, что и для desktop.ini файла, а именно резолв DNS-имени через UNC-пути.
<spoiler title="Пример триггера для 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
</spoiler>
<h2><font color="#3AC1EF">Тригер на вход в Amazon Web Services</font></h2>
<img width="200" src="https://habrastorage.org/webt/xi/h-/ht/xih-ht_ofipnouhrsoogqwrroem.png" />
API-ключ от сервисов Amazon должен соблазнить атакующего проверить что же там находится. Если этот API-ключ будет использован для входа, сработает триггер. При этом никаких данных там, разумеется, нет.
<source>
[default]
aws_access_key_id = AKIAXYZDQCEN7KRPDQRI
aws_secret_access_key = 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
output = json
region = us-east-2
</source>
<h2><font color="#3AC1EF">Другие триггеры</font></h2>
Сервис <a href="https://canarytokens.org/">Canarytokens.org</a> поддерживает и другие триггеры, такие как хук для SVN, веб-редирект, чтение QR-кода, API-ключ Slack и другие. Все они использует похожий принцип и при желании вы можете самостоятельно придумать свой собственный триггер имея в арсенале DNS-имя, ссылку с картинкой, почтовый адрес и API-ключи от популярных сервисов. Кроме уведомления на почту, Canarytokens может дергать веб-хук в случае срабатывания триггера. Все механизмы работы описаны <a href="https://docs.canarytokens.org/guide/">в документации </a>.
<h2><font color="#3AC1EF">Собственный сервер Canarytokens</font></h2>
Опытный взломщик, увидев в исходниках адрес <code>canarytokens.org</code> сразу обо всем догадается. Поэтому для использования в компании лучше развернуть собственный инстанс canarytokens, чтобы все адреса триггеров вели на внутренние домены компании и были неотличимы от реальных внутренних сервисов.
Разработчики предоставляют готовый для образ Docker https://github.com/thinkst/canarytokens-docker
Процесс установки достаточно типичный для любого образа, поэтому мы не будем затрагивать эту тему. Остановимся только на неочевидных моментах. Перед установкой вам придется отредактировать файл <b>frontend.env</b> и <b>switchboard.env</b>.
<source lang="bash">
# Домен(ы) которые будут использовать для генерации адресов триггеров
# они должны указывать на IP-адрес сервера где запущен Docker. На эти же домены нужно будет выпускать SSL-сертификат.
CANARY_DOMAINS=example1.com,example2.com
# Этот домен нужен только если вы собираетесь использовать триггер в виде PDF-файла
# в этом случае NS-записи для этого домена должны указывать на домен в предыдущем пункте.
# Иначе говоря example3.com должен быть делегирован на example1.com и example2.com
CANARY_NXDOMAINS=example3.com
</source>
Для отправки почты я рекомендую использовать сервис Mailgun, потому что Sendgrid работает нестабильно.
<h2><font color="#3AC1EF">Заключение</font></h2>
Такие ловушки действительно эффективны. В моем случае особенно помогают триггеры с файлами PDF-документов. Сервис будет полезен как обычным пользователям, так и опытным пентестерам. Даже искушенный атакующий, знающий про существование ханипотов и ханитокенов, не сможет устоять перед соблазном хотя бы отрезолвить найденный в документации поддомен. Если аккуратно и с умом использовать ловушки, можно обнаружить взломщика на раннем этапе.
Эти методики можно можно использовать на сервера, десктопных компьютерах, файловых хранилищах и даже на телефонах.