Найти и заблокировать: поиск фишера при помощи Maltego

от автора

Команда безопасности REG.RU в работе часто сталкивается с мошенниками, любителями спама, фишинговыми доменами, взломом аккаунтов, попытками угона доменов и т. д. На примере поиска создателя фишинговых сайтов я расскажу, как мы вычисляем подобных нарушителей с помощью Maltego. 

Заранее отмечу, что:

  • определить факт мошенничества и вынести наказание могут только правоохранительные органы. Но мы проводим и собственные расследования на основе тех данных, что у нас есть, чтобы самостоятельно принять законные меры при очевидном правонарушении;

  • статья не рекламная, все примеры, кейсы, имена (как собственные, так и доменные) вымышлены, любые совпадения случайны.

Немного о Maltego

Maltego – это программа для сбора информации из разных источников и последующего её представления в удобном виде. Активно используется в расследованиях и разведке на основе открытых и закрытых источников.

Информация в программе визуализируется в виде графа:

Граф состоит из объектов (Entities) и связей между ними (Links). В качестве объекта может выступать любая единица информации: доменное имя, IP-адрес, организация, данные клиента (ФИО и номер телефона) и др.

Добавлять объекты и связи можно вручную или автоматически при помощи трансформаций (Transforms) ― скриптов, которые находят данные о существующих объектах в разных источниках и добавляют эти данные на граф уже в виде новых объектов. Есть набор готовых трансформаций под разные задачи. Например, если нужна информация об IP-адресе, то при помощи встроенных трансформаций можно узнать данные из Whois, местоположение, репутацию адреса (Fraud-check) и проверить по нодам Tor’a.

Расширить набор трансформаций можно в Transforms Hub ― встроенном маркетплейсе.

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

Для работы с данными из внутренних источников можно создать свои трансформации.

Maltego распространяется в двух вариантах ― бесплатном и платном. Бесплатные версии ― CaseFile и Community Edition. Коммерческий вариант называется Maltego One и имеет три тарифа: Pro, Enterprise и Enterprise On-premise. Актуальные издания и их фичи доступны на официальном сайте

Кейс с фишинговыми сайтами

А теперь рассмотрим вымышленное, но вполне типичное расследование. 

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

Что у нас есть: для регистрации нового аккаунта на REG.RU нужно указать электронную почту и телефонный номер. А чтобы зарегистрировать домен, ещё и ФИО с паспортными данными (зависит от доменной зоны). В логах можно найти IP-адреса, cookie, User-Agent и другие параметры системы злоумышленника. Из всех этих данных можно составить цифровой отпечаток предполагаемого нарушителя. Чем больше входных данных, тем больше шанс найти взаимосвязи. 

Обрабатывать и сопоставлять большие объемы данных из разных источников вручную ― трудозатратно и скучно. Поэтому я буду использовать Maltego. С его помощью, написав свои скрипты, можно читать логи и базы данных, а затем вывести результат в виде графа с объектами и связями между ними. 

Для начала надо создать новый граф и разместить на нем домен MOB-VTB24.RU. На панели инструментов (Entity Palette) есть объекты разных типов, которые можно переместить в рабочую область. Перетащу объект «Domain» из панели на граф и укажу нужное доменное имя.

Еще объекты можно добавлять из буфера обмена с автоматическим распознаванием типа. Если распознается неправильно, можно поправить вручную из меню «Change Type».

Добавление новых типов объектов

Теперь можно получить информацию о владельце домена, указанную при регистрации:

  • ФИО,

  • номер,

  • email,

  • логин аккаунта, в котором находится домен.

Нужно создать новый тип объекта ― «User», и написать трансформации для поиска домена по нашей базе (в статье все запросы в базу упрощены).

Во вкладке «Entities» создаю объект «User» и задаю для него основное свойство ― «user_id».

Объект создан. Пора написать трансформацию, которая выведет данные домена и аккаунта на граф в виде объектов и связей.

Создание трансформаций

Для написания трансформаций я использовал библиотеку maltego_trx для Python 3.6 и выше. Команда для ее установки:

pip install maltego-trx

Команда для создания нового проекта:

maltego-trx start new_project

Файлы трансформаций будут храниться в new_project/transforms/.

Теперь создам новый класс и унаследую его от «DiscoverableTransform». Переопределяю метод «create_entities», внутри которого будет вся логика поиска данных и добавления объектов на граф. За размещение объектов на графе отвечает метод «response.addEntity».

from maltego_trx.transform import DiscoverableTransform import MySQLdb  # Наследуем наш класс от DiscoverableTransform class SearchDomain(DiscoverableTransform):     """    Выполняет поиск домена.    """        # Переопределяем метод create_entities    @classmethod    def create_entities(cls, request, response):        # Получаем входящее значение        email = request.Value                # Инициализируем подключение к базе        db = MySQLdb.connect(host='database.host',                            port='3306',                            user='user',                            passwd='password',                            db='db',                            charset="utf8")        cursor = db.cursor(MySQLdb.cursors.DictCursor)                # Выполняем поиск по таблице domains        cursor.execute("""select user_id, name, phone, email                            from domain                            where domain = %s            """, [domain])                   rows = cursor.fetchall()               # В зависимости от поля добавляем на граф        # объекты соответствующих типов        for row in rows:            response.addEntity('yourorganization.User', row['user_id'])            response.addEntity('maltego.Person', row['name'])            response.addEntity('maltego.PhoneNumber', row['phone'])            response.addEntity('maltego.EmailAddress', row['email'])

При добавлении объекта нужно использовать тот «Unique Type Name», который указывался при создании объекта «User». В моем случае это «yourorganization.User». Классы же для встроенных объектов можно импортировать из библиотеки.

from maltego_trx.entities import Person ... response.addEntity(Person, row['name'])

Если объектов много, можно сделать маппинг полей и объектов.

field_map = {    'user_id': 'yourorganization.User',    'name': 'maltego.Person',    'phone': 'maltego.PhoneNumber',    'email': 'maltego.EmailAddress' } for row in rows:    for field in row:        if field_map.get(field):            response.addEntity(field_map[field], row[field])

Добавление трансформаций

Готовую трансформацию надо добавить в Maltego. Для этого во вкладке «Transforms» выбираю «New Local Transform» и заполняю поля. В поле «Input Entity Type» выбираю тип объекта, с которым работает трансформация:

Указываю путь к интерпретатору Python3:

Где:

  • project.py ― основной скрипт;

  • local ― говорит о том, что трансформация работает локально;

  • searchdomain ― имя трансформации, соответствующее названию класса.

Чтобы проверить, правильно ли создан класс, можно вывести список всех трансформаций проекта при помощи команды python3 project.py list.

Запуск трансформаций

Теперь можно запустить трансформацию:

В результате работы на графе появились объекты:

Логи работы трансформации пишутся в Output. Туда же можно вывести отладочную информацию для поиска ошибок в работе скрипта. Для этого в настройках трансформации нужно активировать «Show debug info».

Через интерфейс или код можно помечать объекты на графе и добавлять к ним комментарии:

from maltego_trx.maltego import BOOKMARK_CLRS ...            ...            me = response.addEntity(                'yourorganization.User', user_id                )            me.setBookmark(BOOKMARK_CLRS["red"]) #добавить заметку             me.setNote("Регистрирует фишинговые домены") #добавить флажок

Тем временем уже удалось найти подозреваемого. На графе есть его ФИО, почта и телефон. По этим данным можно сделать обратный поиск. 

Обратный поиск

Для обратного поиска нужны новые трансформации. Добавляю их по аналогии с «SearchDomain» и запускаю поиск. Результат ― новые домены и аккаунт. 

Найденные доменные имена выглядят подозрительно, так как связаны с банками и сервисами BlaBlaCar и Drom.

После повторного поиска только по номеру получаю еще 88 доменов:

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

При повторных поисках с использованием новых объектов получилась вот такая сеть:

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

Осталось убрать из графа ненужные объекты и выгрузить финальный список доменов и аккаунтов. По нему уже можно работать над блокировкой аккаунтов и доменов.

Так выглядит один из возможных вариантов работы с Maltego при расследованиях и анализе большого объема информации. В дальнейшем можно добавить больше источников и улучшить скрипты, чтобы уберечь потенциальных жертв от мошенничества. 

Заключение

Maltego упрощает расследования за счет автоматизации поиска и понятной визуализации данных. Инструмент подходит как для внутренних расследований, так и для поиска информации в открытых источниках (OSINT ― Open source intelligence). Очевидно, что в статье я охватил далеко не все его возможности: тут есть удобные функции для анализа информации на графе, есть возможности экспорта данных, а поиск можно прокачать, объединив скрипты в «машины». Дайте знать, если интересно узнать о чем-то подробнее.  

А еще рекомендую цикл статей про Maltego от @Wolchara000.

Статьи цикла


ссылка на оригинал статьи https://habr.com/ru/articles/685656/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *