Автоматизация поиска клонов сайтов и сайтов-однодневок

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