Команда безопасности 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.