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

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Заголовок: Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens
<img src="https://habrastorage.org/webt/ir/uz/pg/iruzpgclkgyxou6fj2l_sx_bdzg.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-пути (это те что используются для сетевых дисков и начинаются с "\\"), при этом 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) + "&amp;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 должен соблазнить атакующего проверить что там доступно. Если он будет использован для входа, сработает триггер. При этом никаких ресурсов там, разумеется, нет.
<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-документов. Сервис будет полезен как обычным пользователям, так и опытным пентестерам. Даже искушенный атакующий, знающий про существование ханипотов и ханитокенов, не сможет устоять перед соблазном хотя бы отрезолвить найденный в документации поддомен. Если аккуратно и с умом использовать ханитокены, можно обнаружить взломщика на раннем этапе.
Теги: honeypot, honeytoken, canarytoken, canarytokens.org
Обложка для соц. сетей: https://habrastorage.org/webt/ir/uz/pg/iruzpgclkgyxou6fj2l_sx_bdzg.jpeg
Эти методики можно можно использовать на сервера, десктопных компьютерах, файловых хранилищах и даже на телефонах.