Honey Tokens (англ. — «медовые приметы/признаки/идентификаторы») одна из разновидностей идеи Honeypot, приманки для злоумышленников, позволяющей обнаружить факт взлома или опознать его источник. Когда атакующий уже проник в систему, он, скорее всего, выполнит действия, несвойственные обычному пользователю. Это можно использовать как способ обнаружения взлома. В статье мы рассмотрим, как легко сделать собственные триггеры для обнаружения взлома на раннем этапе. Такие ловушки полезно использовать системному администратору и даже обычному пользователю, переживающему о приватности своих данных.
![](https://habrastorage.org/r/w780q1/webt/xq/wk/ks/xqwkksjf6adatsv3lhu-am4ph6w.jpeg)
До изобретения газоанализаторов шахтеры брали c собой в шахту канарейку. Из-за маленького организма и быстрого обмена веществ, птицы намного раньше реагировали на опасные газы в воздухе и предупреждали шахтеров.
![](https://habrastorage.org/r/w1560/webt/ji/uf/cb/jiufcbwkepg-izswuadwxjkerxe.png)
Взломщик, попав в новую систему, начинает осматриваться вокруг, как вор, проникнув в квартиру, начинает открывать все ящики в поисках драгоценностей. Атакующий заранее не знает, какие именно данные представляют ценность, но с большой вероятностью он проверит все возможные варианты. Поэтому важно, чтобы ловушки выглядели как реальные данные и были максимально привлекательны для атакующего. Чем раньше владелец заметит срабатывание ловушки, тем быстрее поймет, что был взломан и сможет отреагировать.
canarytokens.org — это онлайн-сервис для удобного создания собственных маркеров (ханитокенов) для обнаружения взлома. Он поддерживает несколько вариантов триггеров и позволяет сгенерировать готовый триггер с привязанной почтой, куда придет уведомление, если триггер сработал.
![](https://habrastorage.org/r/w1560/webt/dt/as/lm/dtaslm6-vs_4c-cl6h5nqzlqh70.png)
Сервис полностью бесплатный, а сгенерировать триггер можно моментально без регистрации. Существует еще self hosted версия для тех кто предпочитает держать секреты на своей инфраструктуре. Далее, мы разберемся, как работает каждый из триггеров и в конце развернем собственный сервер canarytokens в Docker-контейнере.
![](https://habrastorage.org/r/w1560/webt/x9/mw/tn/x9mwtnlqxhixsnu5o6fod1tgwao.png)
Он сработает, если документ был открыт программой для просмотра. Я использую этот трюк очень часто. На каждом компьютере и флешке у меня лежат документы с привлекательными названиями вроде Пароли.pdf или Биткоины.doc. Обожаю наблюдать, как бухгалтеры с любопытством исследуют все файлы на переданной им флешке.
Считаю этот триггер наиболее действенным и полезным для всех категорий пользователей, от профессионалов информационной безопасности до новичков. Почти никто не знает, что PDF-просмотрщик может передавать владельцу документа факт открытия файла. На это попадаются все.
Существует несколько способов поймать факт открытия документа. Canarytokens использует зашитый в документ собственный URL для проверки отозванных SSL-сертификатов (Certificate Revocation List). В итоге программа идет по этому адресу и срабатывает триггер.
![](https://habrastorage.org/r/w1560/webt/am/i1/wh/ami1whax3utfizv4zfgxuerxc9g.png)
Это очень интересный триггер, польза от которого неочевидна сразу. Он сработает в случае, если кто-либо запросит IP-адрес сгенерированного поддомена, который генерируется специально таким, чтобы его нельзя было угадать случайно или сбрутить. Таким образом, исключаются случайные срабатывания. Этот триггер использует для многих методик, описанных дальше, в том числе для обнаружения факта открытия папки и как триггер в базе данных MS SQL. На деле вариантов использования этого триггера множество.
![](https://habrastorage.org/r/w1560/webt/60/mk/dn/60mkdnqqsqvla-5cc7-2nbkotrs.png)
В этом случае достаточно чтобы по ссылке был выполнен GET, POST или HEAD запрос. Это вызовет срабатывание триггера. Помимо обычного применения, можно использовать в скриптах и для проверки парсеров, которые переходят по ссылкам для отображения превью содержимого. Так делают, например, мессенджеры: достаточно написать ссылку в поле ввода, что по ней был выполнен переход с серверов мессенджера.
Классическая картинка размером 1x1 пиксель, известна всем, кто занимается отслеживанием интернет-рекламы. Триггер сработает, если был загружен файл с картинкой. Такой пиксель можно вставить на любую html-страницу или в письмо. Его удобно вызывать из JS-скриптов на странице, если сработало нужное условие. Стандартный пиксель можно также заменить на собственное изображение.
![](https://habrastorage.org/r/w1560/webt/mo/4e/sm/mo4esmyilw_y8lzwqhhw2-kaemq.png)
Если на сгенерированный почтовый ящик придет любое письмо, триггер сработает. Удобно использовать для мониторинга утечки баз данных email-адресов, контакт-листов и т. д.
Например, можно добавить этот адрес в список своих контактов и узнать, когда ваша записная книжка на телефоне будет слита каким-либо приложением, запрашивающим доступ к списку контактов. А также можно всем сотрудникам добавить в записные книжки на компьютере, телефоне, email-клиенте разные триггерные адреса и следить, откуда утекают контакты.
Адрес электронной почты специально генерируется не угадываемый, поэтому исключается вероятность подбора и случайного срабатывания триггера.
![](https://habrastorage.org/r/w1560/webt/fp/zd/hx/fpzdhxc0olbpomnpgglqlhrd9f4.png)
Наверняка многие видели скрытый файл desktop.ini, который есть в каждой папке Windows. Оказывается, он не так прост. В нем можно указать адрес иконки на удаленном сервере, использую UNC-пути (это те, что используются для сетевых дисков и начинаются с \\), при этом Windows выполнит DNS resolve домена указанного в ссылке на иконку и активирует триггер. Файл desktop.ini можно запаковать вместе с другими файлами в архив, и он сработает, если архив распакуют.
Простой скрипт для веб-страниц, срабатывающий если страница открыта не с вашего домена. Может быть полезно для детектирования фишинга.
![](https://habrastorage.org/r/w1560/webt/co/3f/q5/co3fq5b-ivp-imere3zbbdcmmfe.png)
Позволят склеить триггер с существующим исполняемым EXE-файлом или библиотекой. При этом не детектируется антивирусами. Следует иметь в виду, что такая склейка может сломать некоторые программы, поэтому лучше использовать что-то простое. По сути, это давно известный метод, используемый для распространения троянов и вирусов, только в нашем случае скрытый функционал совсем безобидный. Однако нужно учитывать, что исполняемый файл может вызвать бОльшую настороженность у атакующего, а также не запускаться на его операционной системе.
MS SQL позволяет добавить триггер на выполнение операций INSERT, SELECT, DELETE и т. д. Для срабатывания триггера используются тот же способ, что и для desktop.ini файла, а именно resolve DNS-имени через UNC-пути.
API-ключ от сервисов Amazon должен соблазнить атакующего проверить, что же там находится. Если этот API-ключ будет использован для входа, сработает триггер. При этом никаких данных там, разумеется, нет.
Сервис canarytokens.org поддерживает и другие триггеры, такие как хук для SVN, веб-редирект, чтение QR-кода, API-ключ Slack и другие. Все они используют похожий принцип, и при желании вы можете самостоятельно придумать собственный триггер, имея в арсенале DNS-имя, ссылку с картинкой, почтовый адрес и API-ключи от популярных сервисов. Кроме уведомления на почту, Canarytokens может дергать веб-хук в случае срабатывания триггера. Механизмы работы описаны в документации.
Опытный взломщик, увидев в исходниках адрес canarytokens.org сразу обо всем догадается. Поэтому для использования в компании лучше развернуть собственный инстанс canarytokens, чтобы все адреса триггеров вели на внутренние домены компании и были неотличимы от реальных внутренних сервисов.
Разработчики предоставляют готовый для образа Docker. Процесс установки довольно типичный для любого образа, поэтому мы не будем затрагивать эту тему. Остановимся только на неочевидных моментах. Перед установкой вам придется отредактировать файл frontend.env и switchboard.env.
Для отправки почты я рекомендую использовать сервис Mailgun, потому что Sendgrid работает нестабильно.
Такие ловушки действительно эффективны. В моем случае особенно помогают триггеры с файлами PDF-документов. Сервис будет полезен как обычным пользователям, так и опытным пентестерам. Даже искушенный атакующий, знающий про существование ханипотов и ханитокенов, не сможет устоять перед соблазном хотя бы отрезолвить найденный в документации поддомен. Если аккуратно и с умом использовать ловушки, можно обнаружить взломщика на раннем этапе.
Эти методики можно использовать на сервера, десктопных компьютерах, файловых хранилищах и даже на телефонах.
Если вы хотите развернуть в собственный инстанс canarytokens в Docker, на наших виртуальных машинах Docker устанавливается в один клик из маркетплейса. Дополнительно мы дарим скидку 15% на все серверы по промокоду DONTPANIC.
![](https://habrastorage.org/r/w780q1/webt/iq/fi/b4/iqfib45pgphfrxv--zfemt0qnmw.jpeg)
![](https://habrastorage.org/webt/xq/wk/ks/xqwkksjf6adatsv3lhu-am4ph6w.jpeg)
До изобретения газоанализаторов шахтеры брали c собой в шахту канарейку. Из-за маленького организма и быстрого обмена веществ, птицы намного раньше реагировали на опасные газы в воздухе и предупреждали шахтеров.
Зачем это нужно?
![](https://habrastorage.org/webt/ji/uf/cb/jiufcbwkepg-izswuadwxjkerxe.png)
Взломщик, попав в новую систему, начинает осматриваться вокруг, как вор, проникнув в квартиру, начинает открывать все ящики в поисках драгоценностей. Атакующий заранее не знает, какие именно данные представляют ценность, но с большой вероятностью он проверит все возможные варианты. Поэтому важно, чтобы ловушки выглядели как реальные данные и были максимально привлекательны для атакующего. Чем раньше владелец заметит срабатывание ловушки, тем быстрее поймет, что был взломан и сможет отреагировать.
Сервис Canarytokens
canarytokens.org — это онлайн-сервис для удобного создания собственных маркеров (ханитокенов) для обнаружения взлома. Он поддерживает несколько вариантов триггеров и позволяет сгенерировать готовый триггер с привязанной почтой, куда придет уведомление, если триггер сработал.
![](https://habrastorage.org/webt/dt/as/lm/dtaslm6-vs_4c-cl6h5nqzlqh70.png)
Сервис полностью бесплатный, а сгенерировать триггер можно моментально без регистрации. Существует еще self hosted версия для тех кто предпочитает держать секреты на своей инфраструктуре. Далее, мы разберемся, как работает каждый из триггеров и в конце развернем собственный сервер canarytokens в Docker-контейнере.
Триггер при открытии файла DOC и PDF
![](https://habrastorage.org/webt/x9/mw/tn/x9mwtnlqxhixsnu5o6fod1tgwao.png)
Он сработает, если документ был открыт программой для просмотра. Я использую этот трюк очень часто. На каждом компьютере и флешке у меня лежат документы с привлекательными названиями вроде Пароли.pdf или Биткоины.doc. Обожаю наблюдать, как бухгалтеры с любопытством исследуют все файлы на переданной им флешке.
Считаю этот триггер наиболее действенным и полезным для всех категорий пользователей, от профессионалов информационной безопасности до новичков. Почти никто не знает, что PDF-просмотрщик может передавать владельцу документа факт открытия файла. На это попадаются все.
Существует несколько способов поймать факт открытия документа. Canarytokens использует зашитый в документ собственный URL для проверки отозванных SSL-сертификатов (Certificate Revocation List). В итоге программа идет по этому адресу и срабатывает триггер.
Триггер через DNS resolve
![](https://habrastorage.org/webt/am/i1/wh/ami1whax3utfizv4zfgxuerxc9g.png)
Это очень интересный триггер, польза от которого неочевидна сразу. Он сработает в случае, если кто-либо запросит IP-адрес сгенерированного поддомена, который генерируется специально таким, чтобы его нельзя было угадать случайно или сбрутить. Таким образом, исключаются случайные срабатывания. Этот триггер использует для многих методик, описанных дальше, в том числе для обнаружения факта открытия папки и как триггер в базе данных MS SQL. На деле вариантов использования этого триггера множество.
URL триггер
![](https://habrastorage.org/webt/60/mk/dn/60mkdnqqsqvla-5cc7-2nbkotrs.png)
В этом случае достаточно чтобы по ссылке был выполнен GET, POST или HEAD запрос. Это вызовет срабатывание триггера. Помимо обычного применения, можно использовать в скриптах и для проверки парсеров, которые переходят по ссылкам для отображения превью содержимого. Так делают, например, мессенджеры: достаточно написать ссылку в поле ввода, что по ней был выполнен переход с серверов мессенджера.
Картинка
Классическая картинка размером 1x1 пиксель, известна всем, кто занимается отслеживанием интернет-рекламы. Триггер сработает, если был загружен файл с картинкой. Такой пиксель можно вставить на любую html-страницу или в письмо. Его удобно вызывать из JS-скриптов на странице, если сработало нужное условие. Стандартный пиксель можно также заменить на собственное изображение.
Триггер по email-адресу
![](https://habrastorage.org/webt/mo/4e/sm/mo4esmyilw_y8lzwqhhw2-kaemq.png)
Если на сгенерированный почтовый ящик придет любое письмо, триггер сработает. Удобно использовать для мониторинга утечки баз данных email-адресов, контакт-листов и т. д.
Например, можно добавить этот адрес в список своих контактов и узнать, когда ваша записная книжка на телефоне будет слита каким-либо приложением, запрашивающим доступ к списку контактов. А также можно всем сотрудникам добавить в записные книжки на компьютере, телефоне, email-клиенте разные триггерные адреса и следить, откуда утекают контакты.
Адрес электронной почты специально генерируется не угадываемый, поэтому исключается вероятность подбора и случайного срабатывания триггера.
Триггер на открытие папки в Windows
![](https://habrastorage.org/webt/fp/zd/hx/fpzdhxc0olbpomnpgglqlhrd9f4.png)
Наверняка многие видели скрытый файл desktop.ini, который есть в каждой папке Windows. Оказывается, он не так прост. В нем можно указать адрес иконки на удаленном сервере, использую UNC-пути (это те, что используются для сетевых дисков и начинаются с \\), при этом Windows выполнит DNS resolve домена указанного в ссылке на иконку и активирует триггер. Файл 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
![](https://habrastorage.org/webt/co/3f/q5/co3fq5b-ivp-imere3zbbdcmmfe.png)
Позволят склеить триггер с существующим исполняемым EXE-файлом или библиотекой. При этом не детектируется антивирусами. Следует иметь в виду, что такая склейка может сломать некоторые программы, поэтому лучше использовать что-то простое. По сути, это давно известный метод, используемый для распространения троянов и вирусов, только в нашем случае скрытый функционал совсем безобидный. Однако нужно учитывать, что исполняемый файл может вызвать бОльшую настороженность у атакующего, а также не запускаться на его операционной системе.
Триггер для MS SQL
MS SQL позволяет добавить триггер на выполнение операций INSERT, SELECT, DELETE и т. д. Для срабатывания триггера используются тот же способ, что и для desktop.ini файла, а именно resolve 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
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
API-ключ от сервисов Amazon должен соблазнить атакующего проверить, что же там находится. Если этот API-ключ будет использован для входа, сработает триггер. При этом никаких данных там, разумеется, нет.
Другие триггеры
Сервис 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% на все серверы по промокоду DONTPANIC.
![](https://habrastorage.org/webt/iq/fi/b4/iqfib45pgphfrxv--zfemt0qnmw.jpeg)