company_banner

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

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


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

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



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

    Сервис Canarytokens


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

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

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



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

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



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

    URL триггер



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

    Картинка


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

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



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

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

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

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



    Наверняка многие видели скрытый файл 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



    Позволят склеить триггер с существующим исполняемым 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

    Триггер на вход в 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.

    RUVDS.com
    RUVDS – хостинг VDS/VPS серверов

    Комментарии 19

      0
      Пароли.pdf? Ну ок :)
        +6

        Встроенный маковский PDF-просмоторщик Preview.app открывает файл с закладкой без предупрежление и триггер срабатывает. А вот Adobe Acrobat уже блокирует запрос:



        Вообще это конечно дико, от обычного документа не ждешь такой подставы. Ладно еще файл Word с макросами.

          0
          Пожалуйста уточните версию OS X, где у вас сработало во встроенном Preview.
          Сижу на 10.13.6 и pdf не срабатывает. Адобом не пробовал.
            0

            Проверял на 10.14 (Mojave)

            0
            Вообще это конечно дико, от обычного документа не ждешь такой подставы.
            Насчёт «подставы от обычных документов», вспомнил про свой пост десятилетней давности: Насколько опасна DRM-защита, или Видео-вирус часть 2.
              0
              У вас прям письмо пришло, когда открывали через preview?
                0

                Да, только ip почему-то cloudflare


              0
              Не могу понять как работает триггер для DNS запроса. Ведь запрос идет на какой-нибудь сервер вроде гугл 8.8.8.8 или DNS провайдера.
                +2
                DNS сервера работают по иерархическому принципу. Владелец TLD (скажем, mysite.com) может указать для него любой nameserver, например, ns1.mydns.org. Таким образом, этот ns сервер зафиксирует факт запроса IP адреса у суб-домена kzm5igepvd.mysite.com.
                $ dig +short NS habr.com
                ns1.habradns.net.
                ns2.habradns.net.
                ns3.habradns.net.
                  0
                  Всё сводится к тому что домен знаете только вы и ваша жертва. Когда жертва сделает ресолв — вам на nameserver прилетит запрос.
                  Если жертва сама резолвит (точнее, не использует резолверы гугла и провайдера), вы узнаете ip жулика.
                  Если через гугл или провайдера, вы узнаете ip гугла или провайдера :)
                  +1
                  О, круто
                  Делал похожую систему на коленке с помощью обычного веб-сервера и парсинга логов по крону. Генерировал ссылку вида /special_word/blabla
                  Если в логе проскакивало вхождение special_word, мне отправлялось письмо со всей сторокой вклюая IP адрес открывшего.

                  Дальше создавалась временная страница на livejournal или скрытый аккаунт на lastfm (там можно было вставлять свою картинку в html) и жертве присылалась ссылка. Адрес известного сайта не вызывал подозрений и жертва легко переходила по ней.
                    +1
                    От этих ловушек легко защитится, просто открывая файлы в песочнице без доступа к интернету. И с распространением таких ловушек все больше хакеров станут так делать.
                      +3

                      Согласен, но признайтесь, мало кто ждет подвоха просто перемещаясь по папкам или обращаясь к домену.

                        0

                        DNS-запрос все равно может проскочить, мне кажется (если фаервол с белыми списками по софту, системный dns-клиент скорее всего будет в списке).

                          +1

                          Мне больше понравился ключ от aws. Тут уже офлайном не защититься. Либо проверять либо нет.

                          0

                          Внедрять триггеры в БД — очень опасно. Во-первых, на чтение данных триггеров не существует, а во-вторых, внедрение на модификацию, вызывающее по каждому чиху поход за файлом по UNC-пути, может драматически сказаться на производительности. И потом — изменение данных в БД — процесс постоянный, как отличить санкционированные изменения от несанкционированных?

                            0
                            Кто-то понял как сделать триггер на открытие фолдера кем-то?
                            Подскажите, как сделать так: хотел бы получать уведомления, елси кто-то удаленно в локальной сети открывает фолдер на моей машине? файл пдф?
                              +1

                              Очень хорошая вещь для обычного пользователя.
                              В зрелой кампании это будет лишь как ещё один уровень защиты, в дополнение к различным honeypot'ам и прочее. А для домашнего использования самое то!
                              Вот только у меня вопрос к сообществу: если я таким образом пометил свои доки, сам себе их в почту скинул и через некоторое время прилетело оповещение что кто-то скачал и открыл эти файлы, могу ли я на основе этого срабатывания написать заявление об утечке данных?
                              И примут ли соответствующие органы эти оповещения как доказательство слива?
                              Я же могу и в гос.органы сканы своих документов направить и оператору связи и потом посмотреть откуда слив идёт?
                              Или в банк направить скан… Уверен, что у них нет закрытой зоны без интернета, куда доки на флешке заносят)))

                                0
                                Смотря кому и на слив чего.
                                Думаю, полиция примет заявление и будет активно заниматься привлечением виновных (в первую очередь вас), только в случае если утекших данных у вас не должно быть по закону или вы должны были их хранить.
                                Если же утекла ваша коллекция закладок или репозитарий с пет-проектом, то вряд ли.

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое