
Простой, надёжный и достаточно быстрый анализатор сетевых захватов.
Sharker — это мощный и расширяемый инструмент для извлечения ценных данных из PCAP-файлов или с живых интерфейсов. Он использует возможности tshark для эффективного разбора сетевых захватов и применяет гибкую систему фильтров, чтобы находить и извлекать полезную информацию.
.pcap, каталоги с захватами или даже живой сетевой трафик с интерфейса.apt-get install tshark, brew install wireshark).requirements.txt и могут быть установлены с помощью pip/pipx.Вы можете установить Sharker, используя pipx (рекомендуется) или стандартное окружение pip и venv.
pipx (рекомендуется)# Установка из этого репозитория
pipx install git+https://github.com/synacktiv/sharker.git
# Проверка установки
sharker -h
pip и venv# Клонирование репозитория
git clone https://github.com/synacktiv/sharker.git
cd sharker
# Создание и активация виртуального окружения
python3 -m venv venv
source venv/bin/activate
# Установка Sharker
pip install .
# Проверка установки
sharker -h
Базовый синтаксис Sharker:
sharker [OPTIONS] [PCAP_FILE(s)]
1. Анализ одного PCAP-файла и сохранение результатов:
sharker my_capture.pcap
Будут запущены все фильтры, кроме тех, что в категории heavy, и вывод сохранён в каталог sharker_out/. Фильтры из категории creds также будут выведены в stdout.
2. Применение всех фильтров и максимально быстрое выполнение:
sharker -A -F my_captures.pcap
Будут применены все фильтры, и всё будет выведено в файлы; результаты не будут печататься в консоли.
3. Анализ каталога PCAP-файлов с упором на учётные данные:
sharker -d /path/to/pcaps -c creds
Эта команда обрабатывает все PCAP-файлы в указанном каталоге, но запускает только фильтры из категории creds.
4. Захват живого трафика и вывод HTTP-информации в консоль:
sudo sharker -i eth0 -c http -m console
Будет захвачен трафик с интерфейса eth0, запущены только фильтры категории http, и все результаты будут выведены прямо в терминал.
5. Список всех доступных фильтров:
sharker -L
$ sharker -h
Usage: sharker [OPTIONS] [PCAP[ PCAP[ ...]]
Sharker: A reasonably fast network protocol analysis tool with extensible
filters.
Options:
Input Source:
-d, --pcap-dir DIR Path to a directory containing PCAP files to
parse.
-i, --interface IFACE Network interface to capture live data from
(e.g., eth0, wlan0).
Output Handling: By default, everything is written to file,
and only creds category is printed to
console. For very large PCAPs, advised to
disable console output or at least colors,
since it slows down the parsing.
-m, --output-mode [file|console|both|develop]
Which output mode to enable. [default:
both]
-u, --unique Output only unique results, will gradually
take more and more RAM.
-F, --fast Fastest configuration (do not affect filter
selection).
Output file mode:
-o, --output-dir DIR Output directory.
-op, --output-prefix NAME Prefix to use for the output files, defaults
to the PCAP/interface name.
Output console mode:
-P Send all filters to console (default in
console output mode).
-C Do not use colors in console output, will
speed up sharker when lot of stuff is
printed.
-pf FILT[,FILT[...]] Send specific filters output to console.
-xpf FILT[,FILT[...]] Do not send specific filters to console.
-pc CAT[,CAT[...]] Send specific filter categories to console.
-xpc CAT[,CAT[...]] Do not send specific categories to console.
-nwf FILT[,FILT[...]] Do not write filters output to file.
-nwc CAT[,CAT[...]] Do not write filter categories to file.
Filter Selection:
-A, --all Enable all filters, will be slower.
-f, --filters FILT[,FILT[...]]
Only run specified filters.
-nf, --not-filters FILT[,FILT[...]]
Exclude specified filters.
-c, --categories CAT[,CAT[...]]
Only run specified categories of filters.
-nc, --not-categories CAT[,CAT[...]]
Exclude specified categories of filters.
Filter Information:
-l, --list-filters List filters that would be active with
current filtering options.
-L, --list-all-filters List all available filters.
-Lc, --list-all-filter-categories
List all available filter categories.
Debugging:
-v, --verbose Verbose mode.
-h, --help Show this message and exit.
Мощь Sharker обеспечивается его фильтрами, расположенными в каталоге sharker/filters/. Каждый фильтр — это класс Python, который определяет:
name: Уникальное имя фильтра.description: Краткое описание того, что делает фильтр.pcap_filter: Отображающий фильтр tshark для выбора релевантных пакетов для этого фильтра.categories: Список категорий, к которым принадлежит фильтр (например, creds, dns, http). heavy можно использовать для фильтров, которые будут сопоставлять множество пакетов или выполнять медленные операции.mandatory_selectors и optional_selectors: Ключи, которые нужно искать в JSON-представлении пакета, чтобы идентифицировать интересующие данные. Sharker будет использовать эти атрибуты для вывода данных, если в фильтре не определена функция parser.По умолчанию Sharker запускает все фильтры, кроме тех, что в категории heavy. Вы можете настроить это поведение с помощью параметров -c, -nc, -f и -nf.
from .base import FilterConfigBase
class FilterConfig(FilterConfigBase):
name = 'ntlmssp'
description = 'Extract Net-NTLM hashes for cracking purposes'
categories = [
'creds',
'windows'
]
pcap_filter = 'gss-api || ntlmssp'
mandatory_selectors = [
'ntlmssp'
]
def __init__(self, *args, **kwargs):
self.challenges = {}
super().__init__(*args, **kwargs)
def parser(self, data):
tcp_conn = data['tcp.stream'][0]
msg_type = int(data['ntlmssp.messagetype'][0], 16) if 'ntlmssp.messagetype' in data else 0
if msg_type == 1:
# NTLM NEGOTIATE: nothing to do
pass
elif msg_type == 2:
# NTLM CHALLENGE
self.challenges[tcp_conn] = data['ntlmssp.ntlmserverchallenge'][0].replace(':', '')
elif msg_type == 3:
if tcp_conn not in self.challenges:
self.log.error('Found an NTLM message type 3 (AUTH), but no type 2 (CHALLENGE) was received beforehand -> check in pcap if the challenge was not sent in an unsupported by tshark manner from the server, like in a Proxy-Authenticate HTTP header.')
return 0
ntresp = data['ntlmssp.auth.ntresponse'][0].replace(':', '')
lmresp = data['ntlmssp.auth.lmresponse'][0].replace(':', '')
user = data['ntlmssp.auth.username'][0]
domain = data['ntlmssp.auth.domain'][0]
workstation = data['ntlmssp.auth.hostname'][0]
ntlm_hash = ''
if len(ntresp) == 24 * 2:
# NTLMv1 response
if domain != '':
ntlm_hash = f'{user}::{domain}:{lmresp}:{ntresp}:{self.challenges[tcp_conn]}'
else:
ntlm_hash = f'{user}::{workstation}:{lmresp}:{ntresp}:{self.challenges[tcp_conn]}'
else:
# NTLMv2 response
if domain != '':
ntlm_hash = f'{user}::{domain}:{self.challenges[tcp_conn]}:{ntresp[:32]}:{ntresp[32:]}'
else:
ntlm_hash = f'{user}::{workstation}:{self.challenges[tcp_conn]}:{ntresp[:32]}:{ntresp[32:]}'
del self.challenges[tcp_conn]
self.output(ntlm_hash)
return 1
return 0
Если вы хотите внести вклад в Sharker или разрабатывать собственные фильтры, вы можете настроить окружение для разработки.
# Клонирование репозитория
git clone https://github.com/synacktiv/sharker.git
cd sharker
# Создание и активация виртуального окружения
python3 -m venv venv
source venv/bin/activate
# Установка в режиме редактирования
pip install -e .
# Теперь вы можете запускать sharker, и ваши изменения будут сразу учитываться
sharker -h
sharker/filters/.FilterConfigBase (определён в sharker/filters/base.py).name, description, pcap_filter и т.д.).parser() для извлечения нужных данных.
self.output с данными для вывода.Этот проект был вдохновлён работой следующих замечательных проектов с открытым исходным кодом:
| Параметр | Описание |
|---|
-i, --interface <IFACE> | Захват живого трафика с сетевого интерфейса (например, eth0). |
-d, --pcap-dir <DIR> | Анализ всех PCAP-файлов в каталоге. |
-o, --output-dir <DIR> | Указание каталога для выходных файлов (по умолчанию: ./sharker_out). |
-m, --output-mode <MODE> | Установка режима вывода: file, console, both или develop (по умолчанию: both). |
-u, --unique | Вывод только уникальных результатов. |
-F, --fast | Максимально быстрая конфигурация (не влияет на выбор фильтров). |
-A, --all | Включить все фильтры, будет медленнее. |
| Параметр | Описание |
|---|
-c, --categories <CATS> | Список категорий фильтров через запятую для выполнения (например, creds,http). |
-nc, --not-categories <CATS> | Список категорий фильтров через запятую для исключения (например, heavy). По умолчанию исключается heavy. |
-f, --filters <FILTERS> | Список конкретных фильтров через запятую для выполнения. |
-nf, --not-filters <FILTERS> | Список конкретных фильтров через запятую для исключения. |
-L, --list-all-filters | Показать список всех доступных фильтров и их описания. |
-Lc, --list-all-filter-categories | Показать список всех доступных категорий фильтров. |
-l, --list-filters | Показать фильтры, которые будут активны с текущими параметрами командной строки. |
-v, --verbose | Включить подробное журналирование для отладки. |
parser(): Функция, которая обрабатывает данные пакета и возвращает извлечённую информацию.