Злоумышленники, для заражения компьютеров пользователей, очень часто применяют методы, направленные на обман пользователей, набирающих в строке браузера адрес интересующего их сайта. Например, typosquatting (он же URL hijacking), то есть использование ошибок пользователей, которые могут ошибиться в написании домена на клавиатуре. Например, если в написании домена cisco.ru ошибиться и вместо первой буквы «c» набрать стоящую на клавиатуре рядом букву «v», то мы попадем не на сайт Cisco, а на домен, который в данный момент находится в продаже.
image

А если, например, ввести вместо «sberbank.ru» домен «sbrrbank.ru» (спутав стоящие рядом «e» и «r»), то мы попадем на вот такой ресурс.



Наконец, незнание русского языка и использование «Сбирбанка» вместо «Сбербанка» приводит нас на онлайн-казино:

image

Все это достаточно безобидные, но все-таки неприятные случаи, которые могут закончиться не более чем недовольством пользователя или ударом по репутации организации, чей бренд используется для обогащения других, менее известных компаний (например, за счет показа рекламы). Но что делать, если злоумышленник использует ошибки пользователей для явного нанесения им вреда путем заражения их компьютеров вредоносным кодом, размещенным на сайте со схожим названием? Например, известен пример длительного существования сайта goggle.com, распространяющего вредоносный код и фальшивый антивирус SpySheriff, или домена yuube.com, переправляющего пользователей на вредоносный сайт. Помимо ошибок самих пользователей при наборе с клавиатуре, злоумышленники могут рассчитывать и на невнимательность пользователей, которые сходу не увидят разницу между vkontakte.ru и vkolakte.ru (реальный пример) в почтовых рассылках или ссылках на различных Интернет-ресурсах. Но как с ними бороться?

Борьба с такими доменами с одной стороны проста. Достаточно всего лишь отслеживать через регистраторов доменов или сервис whois появление новых доменов в сети Интернет. Но в этом и сложность — число таких новых доменов может быть огромным и появляться они могут ежедневно (на самом деле ежеминутно). В ручном режиме отслеживать такие изменения достаточно сложно. Например, вот как выглядит обычный поиск доменов, содержащих ссылку на популярную и пока еще не запрещенную в России соцсеть Facebook:

image

Таких доменов несколько сотен. А посмотрите, например, на домены, которые используют «microsoft» в своем названии. Их не только много, но и создаются они постоянно (скриншот сделан как раз 10 марта).

image

При этом стоит обратить внимание, что поиск усложняется тем фактором, что злоумышленники могут создавать домены, использующие различные сочетания символов, которые обычно не используются компаниями, чьи домены выбраны в качестве жертвы. Например, букву «o» злоумышленники могут заменить на цифру «0», букву «A» на цифру «4», заглавную «i» на строчную «L», «s» на «5», «z», «es» или «2» и т.д. Для того же Facebook это выглядит следующим образом:

image

Наконец, злоумышленник может использовать повторение символов. Тот же «facebook» можно заменить на «faceboook» и это может остаться незамеченным:

image

Если отвлечься от буржуинских примеров и посмотреть на Рунет, то взяв в качестве примера самый популярный в России банк, мы получим следующую картину:

image

Большое количество доменов (местами явно вызывающих вопросы) использует в качестве своей основы слово «sberbank». Что интересно, множественные исследования показывают, что пользователи почему-то склонны доверять таким доменам, считая, что домен, в котором упоминается имя компании (или популярного продукта/услуги), принадлежит именно этой компании, а не кому-то еще. И поэтому вероятность перехода по таким ссылкам гораздо выше, чем по ссылкам, не использующим названия компаний-жертв.

Понятно, что Сбербанк — не единственная компания, которая страдает от описанных атак. Например, в Рунете можно встретить домены, связанные с компанией Cisco:

image

или с сайтом Президента Российской Федерации:

image

При этом я осознанно в данной статье выбирал явно вредоносные домены, которые обнаруживаются с помощью сервиса Cisco OpenDNS Investigate, предназначенного как раз для проведения расследований таких атак. Пропуская через себя 80 миллиардов DNS-запросов ежедневно, сервисы Cisco OpenDNS (Investigate для расследования и Umbrella — для блокирования) анализируют огромное количество доменов и их активности, классифицируя и помещая в наши базы, к которым затем можно обращаться с помощью различных инструментов. Например, приведенные выше скриншоты сделаны с помощью Cisco OpenDNS Investigate, в интерфейсе которого через обычный браузер можно проводить расследования по интересующему домену (а также IP-адресу, автономной системе или e-mail владельца домена).

Для автоматизации же данной задачи и возможности проверки интересующих доменов на лету (например, через межсетевые экраны, системы контроля доступа в Интернет, SIEMы, SOCи и т.п.) можно использовать разработанный нам Investigate API. Например, нижеприведенный код позволяет найти искомую строку в доменах, созданных за последние сутки:

inv = investigate.Investigate('12345678-1234-1234-1234-1234567890ab')
inv.search('searchregex', start=datetime.timedelta(days=1), limit=100, include_category=False)

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

self.word = word

        self.a=['a','4']
        self.b=['b','8','6']
        self.c=['c','k']
        self.d=['d','0']
        self.e=['e','3']
        self.f=['f']
        self.g=['g','6','9']
        self.h=['h']
        self.i=['i','!','1','|','l']
        self.j=['j']
        self.k=['k','x']
        self.l=['l','1','7']
        self.m=['m','nn']
        self.n=['n']
        self.o=['o','0']
        self.p=['p','9','q']
        self.q=['q','9']
        self.r=['r']
        self.s=['s','5','z','es','2']
        self.t=['t','7','1']
        self.u=['u','m']
        self.v=['v']
        self.w=['w','vv']
        self.x=['x','ex']
        self.y=['y','j']
        self.z=['z','2']
        self.zero=['0','o']
        self.one=['1','l']
        self.two=['two','2','z']
        self.three=['e','3','three']
        self.four=['4','four','for','fore','a']
        self.five=['5','five','s']
        self.six=['6','six','g']
        self.seven=['7','seven','t','l']
        self.eight=['8','eight','b']
        self.nine=['9','nine','g']
        
        self.alphabet={ 'a':self.a, 'b':self.b, 'c':self.c, 
                'd':self.d, 'e':self.e, 'f':self.f, 'g':self.g, 
                'h':self.h, 'i':self.i, 'j':self.j, 'k':self.k, 
                'l':self.l, 'm':self.m, 'n':self.n, 'o':self.o, 
                'p':self.p, 'q':self.q, 'r':self.r, 's':self.s, 
                't':self.t, 'u':self.u, 'v':self.v, 'w':self.w, 
                'x':self.x, 'y':self.y, 'z':self.z, '0':self.zero,
                '1':self.one,'2':self.two,'3':self.three,'4':self.four,
                '5':self.five,'6':self.six,'7':self.seven,'8':self.eight,
                '9':self.nine }

    def get_permutations(self, letter):
        try:
            permutations = self.alphabet[letter]
        except KeyError:
            permutations = letter
        regex = '['
        for p in permutations[:-1]:
            regex += '{0}|'.format(p)
        regex += '{0}]'.format(permutations[-1])

        return regex

Дальше нам остается только на регулярной основе (например, раз в сутки) мониторить Интернет в поисках новых появившихся доменов, использующих интересные нам имена брендов (компаний, продуктов, услуг и т.д.). Мы автоматизировали данную задачу в виде скрипта barnd_watch на Python, который может быть найден на GitHub. Работать с ним легко — достаточно просто указать интересующую нас поискую строку:

image

Если же мы хотим исключить какие-то домены из поиска (если предполагается, что их будет много в поисковой выдаче), то для этого достаточно дать на вход скрипта заранее подготовленный файл с доменами-исключениями:

image

Вот таким вот нехитрым образом Cisco OpenDNS помогает автоматизировать процесс поиска сайтов-клонов и иных доменов, используемых злоумышленниками для атак на компании и их пользователей. Преимущество сервисов Cisco OpenDNS Investigate или Cisco OpenDNS Umbrella в том, что они не только автоматизируют поиск, но и, используя алгоритмы классификации, позволяет сразу сделать вывод о вредоносности того или иного домена. Вот как, например, это выглядит для домена, который использует бренд Газпромбанка:

image

Дальше уже можно проводить соответствующие расследования с помощью того же сервиса Cisco OpenDNS Investigate, который подскажет нам кто и когда создал данный домен, где он размещен, какие еще домены размещены на том же IP-адресе или в автономной системе, а также иную сопутствующую информацию (распространяемый вредоносный код, другие домены, принадлежающие этому владельцу и т.д.). Но об этих возможностях Cisco OpenDNS Investigate в другой раз.

В заключение хотел бы отметить, что такого рода атаки, используются не только для направления пользователей на подставные сайты. Создавая фальшивые домены, похожие на сайт компании-жертвы, можно рассылать от их имени фишинговые письма, увеличивающие вероятность заражения пользователя. Мы даже специальный видео-ролик сделали (на самом деле несколько), который демонстрирует атаку, базирующуюся именно на данном методе атак, против которого и работают решения Cisco OpenDNS.


ЗЫ. Посмотреть и «пощупать» данное решение можно будет на Cisco Connect, которая пройдет в Москве 4-5 апреля, где у нас запланирована насыщенная программа по кибербезопасности.
Поделиться с друзьями
-->

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


  1. imbasoft
    27.03.2017 10:28

    Фишинговые домены построенные на базе typosquatting это атака на клиентов. Причем у них вообще может не быть каких-либо инструментов защиты, единственной действенной защитой в данном случае будет только их оперативное разделегирование фишинговых доменов. Просить клиентов использовать Cisco OpenDNS в качестве DNS серверов кажеться мало перспективным. Поправите пожалуйста если я ошибаюсь.

    Функционал упомянутый в статье есть также в Bot-Treck intellegence от Group-IB, но там возможности больше, они также ищут фишинг по использованию фирменных логотипов и др.

    Расскажите пожалуйста в чем преимущества описанного выше решения от Cisco от аналогичных решений ваших конкурентов и кого вы рассматриваете в качестве основных конкурентов.


    1. alukatsky
      27.03.2017 14:48

      В заметке описывается не совсем средство блокирования, а средство расследования (не Umbrella, а Investigate). Для того, чтобы разделегировать домен, его надо найти. Искать и позволяет OpenDNS Investigate. А вот блокировать доступ к ним можно с помощью Umbrella или иного средства (МСЭ, маршрутизатор, средство контроля доступа и т.п.).


  1. dmitry_ch
    27.03.2017 13:25

    Оригинально: OpenDNS — публичный сервис, который многие («некоторые», на самом деле — сервера Гугла 8.8.8.8/8.8.4.4 все же в разы попопулярнее будут) используют вместо ДНС-серверов своего провайдера. Таким образом, через OpenDNS проходят запросы на многие сайты, и в этой базе сделанных запросов OpenDNS дает покопаться, но (следите за руками!) уже не бесплатно (как к нему самому попали эти запросы) а — за деньги!

    Самое интересное, что даже из самого факта наличия в кеше того или иного запроса можно сделать некоторый вывод, и расценить это как утечку данных. Правда, как долго база собирается — вопрос, может, там все варианты поддоменов копятся по 5 лет? Пропарсили логи запросов (их же вроде OpenDNS не собирает, или я что-то путаю?)

    Но это все мелочи на фоне того, что иные админы не от большого ума, а от лени, делают в ДНС записи вида *.mydomain.com IN A 1.2.3.4 (адрес, конечно, их сервера), что дает возможность получить ответы за запросы не только про mydomain.com, www.mydomain.com, mail.mydomain.com и какой-нибудь cdn.mydomain.com, но и про (без шутки) cisco.mydomain.com, facebook.mydomain.com и прочее — «звездочка» для того и указана, чтобы ни один запрос без ответа не остался.

    Чем такая звездочка шикарна для OpenDNS (точнее, для продаванов от Циски) — тем, что такого рода запросы, отправленные через NS-сервера OpenDNS, лягут в ее кеш, а потом позволят построить статистику, что, мол, слово cisco фигурирует в миллиарде фишинговых записей, так что, уважаемые клиенты, без нашего мегасервиса вам никуда.

    С другой стороны, идиоты-клиенты всегда будут. Если кто-то вместо https://online.sberbank.ru (у которого даже нет ответа на 80 порту — вместо редиректа на 443 и HSTS-заголовков — что спорно, но выглядит последовательной позицией) умник впечатает https://0nl1ne.sbetbsmj.ru (специально пишу соседние с нужными буквы и цифры сходного написания), а там его встретит фишинг, то это уже юзер, а не банк, имеет ярковыраженные признаки «небезопасности» для себя.

    Вот я все жду, как еще простой публичный DNS попробуют продать. Какую еще «корпоративную фичу» в него впилят, чтобы хоть какой-то выхлоп (хотя бы копеечный, по цискиным-то масштабам) с него иметь?


    1. alukatsky
      27.03.2017 14:55
      +1

      Мне кажется вы ошибаетесь. OpenDNS — это название для множества сервисов. Среди них есть и бесплатный защищенный DNS-сервер, который по своему функционалу напоминает аналогичный сервис от Гугла или Яндекса. Есть корпоративный OpenDNS Umbrella, который добавляет к функции защиты еще и функцию анализа и репортинга и настроек под корпоративную политику. Например, можно привязать доступ к AD и показывать все попытки доступа и DNS-запросов уже в привязке к учетным записям AD. В статье же рассматривается сервис OpenDNS Investigate, который предназначен для аналитиков ИБ. Его преимущество в собранной базе данных на протяжении многих лет, к которой и можно обращаться для анализа интересующих доменов. Второе преимущество — использование огромного банка данных DNS-запросов для прогнозирования будущих атак. В таком объеме такой сервис не предлагает никто.

      Поэтому, если нужна защита (без настроек) — бесплатный OpenDNS Home. Если нужна защита с тюнингом и репортингом — Umbrella или Secure Internet Gateway. Если нужна аналитика и помощь в проведении расследований — Investigate. Заметка именно про последний сервис.


      1. dmitry_ch
        27.03.2017 16:51

        Т.е. вы признаете, что Investigate содержит данные не по последним дням, а по многим годам? И это не отключить (т.е. не выбрать, поискать ли "в годовом архиве" или в "недавнем")?


        И в этой базе, вот скажите честно, запросы на wildcard записи отфильтрованы?


        Потому что во всех остальных случаях это бессмысленный сервис.


        Вот запросы в ДНС с привязкой к записям в AD — это технически круто, хотя и (логически) бредово. Я так понимаю, поскольку DNS-запросы не подписываются, сбор этой информации привязан к понимаю, кто и с какого порта коммутатора послал запрос в ДНС, а потом определения, кто авторизовался с этого порта (то же для wifi и для vpn, конечно)?


        Поиграться — да. Чтобы это было нужно реально… Ну, да, забавно увидеть, что AD-аккаунт ivanov@company.com спросил у ДНС AAAA-запись для домена www.playboy.com (а тот ему, конечно, ничего не сказал, т.к. по конторской политике отфильтровал все, что заботливые аналитики Циски пометили как домены с нерабочими данными — правда, Хабр куда при этом вписали, в рабочие или в нерабочие?), но что это, по сути, дает?


        Ничего, даже такое кто-то да покупает, но, по мне, так это напоминает продажу воздуха.


        1. alukatsky
          27.03.2017 19:18

          Я признаю, что база OpenDNS содержит ретроспективные данные за годы. Но использовать для анализа вы можете за любой интервал времени. В заметке показан пример, когда вы анализируете данные за последние сутки. Так что в этом плане варианты гибкие.

          Привязка к AD полезна при расследовании инцидентов, когда надо понять, что за пользователь скрывается за адресом 192.168.1.1 или каким-то публичным. Вместо траты времени на связку IP<->AD мы ее получаем автоматически, скоращая время на расследование.

          Насчет поиграться тоже не совсем верно. С помощью Investigate я могу понять не только какой пользователь к какому домену пошел, но и пошел ли он к C&C-домену/узлу или он полез к фишинговому сайту и т.д. Для мобильных пользователей, не имеющих защиты на устройстве, очень полезный функционал, который блокирует 93% вредоносов, а именно столько их использует DNS для подгрузки обновлений, утечки данных или получения команд от С&C-серверов. Для корпоративных сетей этот функционал дополняет стандартные функции МСЭ, которые обычно не фильтруют нормально DNS.

          Также Investigate дает аналитику возможность предсказывать некоторые атаки. Например, я зафиксировал фишинг с домена fggjhstasjdh.kdjgsjdg.ua. Я анализирую его и понимаю, что он сидит, например, на AS 12345, за которой закреплено еще с пару сотен DGA-доменов, которые пока не использовались ни в одной атаке и просто ждут своего часа. Но я уже заранее знаю, что эти домены вредоносные и просто включаю их в свои черные списки для систем блокирования или пишу регистратору по поводу разделегирования их.

          OpenDNS — это не средство фильтрации URL, хотя такой функционал там появился путем интеграции Umbrella и Cloud Web Security (получился Secure Internet Gateway). В статье же рассматривается другой сервис — Investigate.


  1. Tote_Hoffnung
    27.03.2017 14:55
    +1

    Например, если в написании домена cisco.ru ошибиться и вместо первой буквы «c» набрать стоящую на клавиатуре рядом букву «v»

    Может, всё-таки, букву «x»?)


    1. alukatsky
      27.03.2017 14:56
      +2

      Да, верно. Ошибся. Спасибо.


  1. xiWera
    28.03.2017 05:14
    +1

    Начинается все со слова «автоматизация» заканчивается все тонной ручной работы и рекламой.


    1. movis08
      28.03.2017 14:05

      Нууу не такой уж и тонной. Да и много монотонных действий автоматизировано)


    1. alukatsky
      28.03.2017 14:06

      Автоматизация не означает отсутствие ручной работы :-)


  1. pae174
    29.03.2017 10:51

    Можно не ждать пока собственный DNS сервер поймает чужие запросы а просто распарсить архивы сканеров scans.io и commoncrawl.org — из них получается суммарно порядка 500 миллионов доменных имен.


    1. alukatsky
      29.03.2017 10:52

      У нас ежедневно 80 миллиардов DNS-запросов парсится и в базу помещается еще 18 миллиардов URL. Масштаб имеет значение


      1. pae174
        29.03.2017 20:30

        Фишка не в масштабе а в том, что сканеры находят ссылки на фишинговые домены и сами фишинговые домены независимо от того, заходит ли юзер на эти домены фактически или нет. То есть у вышеупомянутых сканеров есть шансы найти подозрительные домены до того, как на DNS придет первый запрос по ним. Сканеры могут дополнять логи от DNS.


        1. alukatsky
          29.03.2017 21:46

          Если мы в день пропускаем через себя 80 миллиардов DNS-запросов, а в год несколько триллионов, то какова вероятность, что мы пропустим какой-либо домен, который хотя бы раз да участвовал во вредоносной активности? Тот же сканер как достучится до фишингового домена? Тоже через DNS, наверное :-)


  1. kreon
    29.03.2017 14:31

    Так где взять API Key?


    1. alukatsky
      29.03.2017 14:45

      Это платный сервис :-)


      1. kreon
        29.03.2017 14:46

        Обычно к платному сервису есть тестовый период. Или в данном случае его не предусмотрено?


        1. alukatsky
          29.03.2017 14:53

          А это есть, конечно. Надо обратиться к своему account manager, отвечающему за вас, или к партнеру, через которого вы берете Cisco