• XSS.stack #1 – первый литературный журнал от юзеров форума

Maltego + sherlock

ShadowHawk

Еврейский осинтер
Premium
Регистрация
04.02.2024
Сообщения
317
Реакции
350

Sherlock and Maltego are Better Together


Создание собственного трансформера для MaltEgo​


Для работы мы используем инструмент Sherlock — еще один OSINT-фреймворк, который позволяет искать онлайн-аккаунты по имени пользователя в сотнях социальных сетей. Maltego предлагает отличное руководство по созданию пользовательских интеграций, а также официальную библиотеку Python, так что обязательно ознакомьтесь с ними. Чтобы начать, установим библиотеку maltego-trx и создадим новый проект под названием maltego_sherlock:
pip install maltego-trx
maltego-trx start maltego_sherlock

Созданный проект будет содержать несколько примеров трансформеров (Maltego использует термин "трансформер" для обозначения кода, который извлекает связанное с введенными данными), и мы добавим новый файл Sherlock.py в каталог transforms, который будет содержать логику для получения данных из Sherlock и передачи их в Maltego в требуемом формате. В корневой директории проекта также нужно клонировать инструмент Sherlock:

git clone https://github.com/sherlock-project/sherlock.git

В файле Sherlock.py начнем с импорта необходимых классов из maltego-trx и sherlock и создадим класс для нового трансформера:
Python:
from extensions import registry
from maltego_trx.maltego import MaltegoMsg, MaltegoTransform, UIM_TYPES
from maltego_trx.transform import DiscoverableTransform

import sys
from os import path
sys.path.append(path.join(path.dirname(path.dirname( path.abspath(__file__))), "sherlock", "sherlock"))
from sherlock import sherlock
from result import QueryStatus
from notify import QueryNotify
from sites import SitesInformation

Декоратор @registry.register_transform указывает, что наш входной элемент — это Alias (псевдоним) в Maltego, а выходной элемент (тип данных, который мы возвращаем в Maltego) — это Affiliation (принадлежность).


В теле метода create_entities мы сначала получаем имя пользователя, используя свойство request.Value. Затем создаем словарь сайтов для поиска, используя JSON-файл, который поставляется вместе с Sherlock:
Python:
@classmethod
def create_entities(cls, request: MaltegoMsg, response: MaltegoTransform):
    username = request.Value

    sites = SitesInformation(
        path.join(path.dirname(path.dirname(__file__)), 'sherlock', 'sherlock', 'resources', 'data.json')
    )
    site_data = {site.name: site.information for site in sites}

Для выполнения самого поиска мы вызываем функцию sherlock, передавая ей имя пользователя и словарь сайтов для поиска (а также пустой класс QueryNotify, о котором поговорим позже):
Python:
results = sherlock(
            username,
            site_data,
            QueryNotify()
        )


Наконец, мы преобразуем список результатов и, для каждого из них, если найден положительный результат, создаем сущности типа Affiliation, которые ожидает Maltego:
Python:
for website_name, result in results.items():
            if result.get("status").status == QueryStatus.CLAIMED:
                entity = response.addEntity('maltego.affiliation', website_name)
                entity.addProperty('affiliation.network', displayName='Network', value=website_name)
                entity.addProperty('affiliation.uid', displayName='UID', value=username)
                entity.addProperty('affiliation.profile-url', displayName='Profile URL', value=result['url_user'])

Это и есть основная логика трансформера. Мы могли бы импортировать этот трансформер в клиент Maltego и запустить его, но есть еще один момент, который сделает его более полезным, — логирование. Помните класс QueryNotify, который мы передавали в функцию sherlock? Это базовый класс для логирования, от которого мы можем унаследоваться, чтобы выводить логированные данные в нашем клиенте Maltego. Мы назовем наш производный класс QueryNotifyMaltego и будем использовать глобальную переменную для подсчета количества положительных результатов:
Python:
# Глобальная переменная для подсчета количества результатов
count = 0

class QueryNotifyMaltego(QueryNotify):
    def __init__(self, response, result=None, print_all=True):
        super().__init__(result)
        self.response = response
        self.print_all = print_all

    def start(self, message):
        self.response.addUIMessage(f'[*] Проверка имени пользователя {message} с помощью Sherlock')

    def update(self, result):
        self.result = result
        if result.status == QueryStatus.CLAIMED:
            self.countResults()
            self.response.addUIMessage(f'[+] {result.site_name}: {result.site_url_user}')
        elif result.status == QueryStatus.AVAILABLE:
            if self.print_all:
                self.response.addUIMessage(
                    f'[-] {result.site_name}: Не найдено!',
                    UIM_TYPES['debug']
                )
        elif result.status == QueryStatus.UNKNOWN:
            if self.print_all:
                self.response.addUIMessage(
                    f'[-] {result.site_name}: {result.context}',
                    UIM_TYPES['debug']
                )
        elif result.status == QueryStatus.ILLEGAL:
            if self.print_all:
                self.response.addUIMessage(
                    f'[-] {result.site_name}: Недопустимый формат имени пользователя для этого сайта!',
                    UIM_TYPES['partial']
                )
        else:
            self.response.addUIMessage(
                f'Неизвестный статус запроса {result.status} для сайта {result.site_name}',
                UIM_TYPES['partial']
            )

    def finish(self, message=None):
        self.response.addUIMessage(f'[*] Поиск завершен с {self.countResults() - 1} результатами')

    def countResults(self):
        global count
        count += 1
        return count


Чтобы использовать этот новый класс, мы обновляем вызов функции sherlock() в методе create_entities и передаем ей параметр response:
Python:
results = sherlock(
            username,
            site_data,
            QueryNotifyMaltego(response)
        )

Добавление трансформера в Maltego​


Maltego поддерживает два типа трансформеров: трансформеры TDS (работающие на сервере) и локальные трансформеры. Трансформеры TDS выполняются на сервере трансформеров, к которому подключается клиент Maltego для получения новых данных. Локальные трансформеры, с другой стороны, выполняются непосредственно на том же компьютере, где работает клиент Maltego. Хотя локальные трансформеры проще в настройке, они требуют указания пути к правильному интерпретатору Python, который должен иметь установленные все необходимые зависимости, а также рабочего каталога для проекта трансформера.


Чтобы упростить этот процесс, мы создадим Docker-образ, который будет содержать наш трансформер вместе с инструментом Sherlock и всеми его зависимостями.


Для этого создаем Dockerfile в корневой директории проекта с содержимым:
Код:
FROM python:3.10-slim

RUN apt-get update && apt-get install -y \
    curl \
    && apt-get upgrade -y \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app/sherlock/

ENV SHERLOCK_VERSION 55c680fde1d6eb94e55870e1be6243c88732cea8

RUN curl -sSL https://github.com/sherlock-project/sherlock/archive/$SHERLOCK_VERSION.tar.gz \
    | tar -v -C /app/sherlock/ -xz --strip-components=1
RUN pip install --no-cache-dir --upgrade -r requirements.txt

WORKDIR /app/

COPY . .
RUN pip install --no-cache-dir --upgrade -r requirements.txt

ENTRYPOINT ["python3", "project.py", "local", "sherlock"]
Этот Dockerfile скачивает Sherlock, устанавливает его зависимости, затем копирует наш трансформер и его зависимости и настраивает команду для запуска трансформера.


После этого строим Docker-образ:

Bash:
docker build -t maltego_sherlock .
Поскольку созданный нами Docker-образ содержит интерпретатор Python и весь необходимый код, нам не нужно беспокоиться о указании правильного пути к интерпретатору или рабочему каталогу при добавлении трансформации в наш клиент Maltego; вместо этого нам нужно просто указать ему запускать Docker-образ. В нашем клиенте Maltego мы нажимаем на вкладку «Трансформации» на ленте инструментов, а затем на кнопку «Новая локальная трансформация», чтобы открыть мастер создания локальной трансформации.

Maltego Local Transform Wizard



Maltego Local Transform Wizard Command

Тестирование​


Чтобы протестировать наш новый трансформер, создайте новый граф и добавьте сущность Alias с именем пользователя, который нужно найти. Затем щелкните правой кнопкой мыши на сущности Alias и выберите наш новый трансформер «To Social Media Accounts [Sherlock]».

Maltego Social Media Sherlock Run Transforms Dialog Box



Maltego Social Media Sherlock Graph View



Заключение​


Надеюсь, что эта статья помогла вам понять, как создать пользовательские интеграции для фреймворка MaltEgo для улучшения ваших расследований. Полный исходный код из этого поста доступен на нашем GitHub.

Источник: https://netragard.com/osint-framework-custom-maltego-transform/
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх