- PVSM.RU - https://www.pvsm.ru -

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

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

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


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

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

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

Сервис Canarytokens

canarytokens.org [1] — это онлайн-сервис для удобного создания собственных маркеров (ханитокенов) для обнаружения взлома. Он поддерживает несколько вариантов триггеров и позволяет сгенерировать готовый триггер с привязанной почтой, куда придет уведомление, если триггер сработал.
Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens - 3
Сервис полностью бесплатный, а сгенерировать триггер можно моментально без регистрации. Существует еще self hosted версия для тех кто предпочитает держать секреты на своей инфраструктуре. Далее, мы разберемся, как работает каждый из триггеров и в конце развернем собственный сервер canarytokens в Docker-контейнере.

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

Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens - 4
Он сработает, если документ был открыт программой для просмотра. Я использую этот трюк очень часто. На каждом компьютере и флешке у меня лежат документы с привлекательными названиями вроде Пароли.pdf или Биткоины.doc. Обожаю наблюдать, как бухгалтеры с любопытством исследуют все файлы на переданной им флешке.
 
Считаю этот триггер наиболее действенным и полезным для всех категорий пользователей, от профессионалов информационной безопасности до новичков. Почти никто не знает, что PDF-просмотрщик может передавать владельцу документа факт открытия файла. На это попадаются все.
 
Существует несколько способов поймать факт открытия документа. Canarytokens использует зашитый в документ собственный URL для проверки отозванных SSL-сертификатов (Certificate Revocation List). В итоге программа идет по этому адресу и срабатывает триггер.

Триггер через DNS resolve

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

URL триггер

Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens - 6
В этом случае достаточно чтобы по ссылке был выполнен GET, POST или HEAD запрос. Это вызовет срабатывание триггера. Помимо обычного применения, можно использовать в скриптах и для проверки парсеров, которые переходят по ссылкам для отображения превью содержимого. Так делают, например, мессенджеры: достаточно написать ссылку в поле ввода, что по ней был выполнен переход с серверов мессенджера.

Картинка

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

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

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

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

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

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

Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens - 8
Наверняка многие видели скрытый файл 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

Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens - 9
Позволят склеить триггер с существующим исполняемым 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 [2] varchar(max), base64 [3] varchar(max), @tokendomain varchar(128), @unc varchar(128), size [4] int, done [5] int, random [6] varchar(3);

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

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

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

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

— if too big, trim the username and try again
if len(@unc) <= size [4]
set done [5] = 1
else
--trim from the front, to keep the username and lose domain details
select username [2] = substring(username [2], 2, len(username [2])-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 [7]. Процесс установки довольно типичный для любого образа, поэтому мы не будем затрагивать эту тему. Остановимся только на неочевидных моментах. Перед установкой вам придется отредактировать файл 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 устанавливается в один клик из маркетплейса [8]. Дополнительно мы дарим скидку 15% на все серверы по промокоду DONTPANIC.

Автор: galimova_ruvds

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/bezopasnost/351665

Ссылки в тексте:

[1] canarytokens.org: https://canarytokens.org/generate

[2] username: https://habr.com/ru/users/username/

[3] base64: https://habr.com/ru/users/base64/

[4] size: https://habr.com/ru/users/size/

[5] done: https://habr.com/ru/users/done/

[6] random: https://habr.com/ru/users/random/

[7] готовый для образа Docker: http://github.com/thinkst/canarytokens-docker

[8] маркетплейса: https://ruvds.com/ru-rub/marketplace#order

[9] Источник: https://habr.com/ru/post/495466/?utm_source=habrahabr&utm_medium=rss&utm_campaign=495466