
Un analizzatore di catture di rete semplice, affidabile e ragionevolmente veloce.
Sharker è uno strumento potente ed estensibile per estrarre dati di valore da file PCAP o da interfacce di rete live. Sfrutta la potenza di tshark per analizzare efficacemente le catture di rete e applica un sistema di filtri flessibile per individuare ed estrarre informazioni interessanti.
.pcap, directory di catture o persino traffico di rete live da un'interfaccia.apt-get install tshark, brew install wireshark).requirements.txt e possono essere installate con pip/pipx.Puoi installare Sharker usando pipx (consigliato) oppure un ambiente pip e venv standard.
pipx (Consigliato)# Installa da questo repository
pipx install git+https://github.com/synacktiv/sharker.git
# Verifica l'installazione
sharker -h
pip e venv# Clona il repository
git clone https://github.com/synacktiv/sharker.git
cd sharker
# Crea e attiva un ambiente virtuale
python3 -m venv venv
source venv/bin/activate
# Installa Sharker
pip install .
# Verifica l'installazione
sharker -h
La sintassi di base per Sharker è:
sharker [OPTIONS] [PCAP_FILE(s)]
1. Analizza un singolo PCAP e salva i risultati:
sharker my_capture.pcap
Questo eseguirà tutti i filtri tranne quelli nella categoria heavy e salverà l'output nella directory sharker_out/. I filtri nella categoria creds verranno anche stampati su stdout.
2. Applica tutti i filtri e prova ad andare il più veloce possibile:
sharker -A -F my_captures.pcap
Questo applicherà tutti i filtri e scriverà tutto su file, nessun risultato verrà stampato sulla console.
3. Analizza una directory di PCAP, concentrandoti sulle credenziali:
sharker -d /path/to/pcaps -c creds
Questo comando elabora tutti i file PCAP nella directory specificata, ma esegue solo i filtri nella categoria creds.
4. Cattura traffico live e stampa le informazioni relative a HTTP sulla console:
sudo sharker -i eth0 -c http -m console
Questo catturerà il traffico dall'interfaccia eth0, eseguirà solo i filtri della categoria http e stamperà tutti i risultati direttamente sul terminale.
5. Elenca tutti i filtri disponibili:
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.
La potenza di Sharker deriva dai suoi filtri, situati nella directory sharker/filters/. Ogni filtro è una classe Python che definisce:
name: Un nome univoco per il filtro.description: Una breve spiegazione di ciò che fa il filtro.pcap_filter: Un filtro di visualizzazione tshark per selezionare i pacchetti rilevanti per questo filtro.categories: Un elenco di categorie a cui appartiene il filtro (ad es., creds, dns, http). heavy può essere usata per filtri che corrisponderanno a molti pacchetti o eseguiranno operazioni lente.mandatory_selectors e optional_selectors: Chiavi da cercare nella rappresentazione JSON del pacchetto per identificare i dati di interesse. Sharker userà questi attributi per emettere dati se nessuna funzione parser è definita nel filtro.Per impostazione predefinita, Sharker esegue tutti i filtri tranne quelli nella categoria heavy. Puoi personalizzare questo comportamento con le opzioni -c, -nc, -f e -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
Se vuoi contribuire a Sharker o sviluppare i tuoi filtri, puoi configurare un ambiente di sviluppo.
# Clona il repository
git clone https://github.com/synacktiv/sharker.git
cd sharker
# Crea e attiva un ambiente virtuale
python3 -m venv venv
source venv/bin/activate
# Installa in modalità modificabile
pip install -e .
# Ora puoi eseguire sharker e le tue modifiche saranno applicate immediatamente
sharker -h
sharker/filters/.FilterConfigBase (definita in sharker/filters/base.py).name, description, pcap_filter, ecc.).parser() per estrarre i dati di cui hai bisogno.
self.output con i dati da emettere.Questo progetto è stato ispirato dal lavoro dei seguenti progetti open-source davvero interessanti:
| Opzione | Descrizione |
|---|
-i, --interface <IFACE> | Cattura traffico live da un'interfaccia di rete (ad es., eth0). |
-d, --pcap-dir <DIR> | Analizza tutti i file PCAP in una directory. |
-o, --output-dir <DIR> | Specifica la directory per i file di output (predefinita: ./sharker_out). |
-m, --output-mode <MODE> | Imposta la modalità di output: file, console, both o develop (predefinita: both). |
-u, --unique | Emetti solo risultati univoci. |
-F, --fast | Configurazione più veloce (non influisce sulla selezione dei filtri). |
-A, --all | Abilita tutti i filtri, sarà più lento. |
| Opzione | Descrizione |
|---|
-c, --categories <CATS> | Un elenco separato da virgole di categorie di filtri da eseguire (ad es., creds,http). |
-nc, --not-categories <CATS> | Un elenco separato da virgole di categorie di filtri da escludere (ad es., heavy). Per impostazione predefinita, heavy è esclusa. |
-f, --filters <FILTERS> | Un elenco separato da virgole di filtri specifici da eseguire. |
-nf, --not-filters <FILTERS> | Un elenco separato da virgole di filtri specifici da escludere. |
-L, --list-all-filters | Mostra un elenco di tutti i filtri disponibili e le loro descrizioni. |
-Lc, --list-all-filter-categories | Mostra un elenco di tutte le categorie di filtri disponibili. |
-l, --list-filters | Mostra i filtri che saranno attivi con le opzioni da riga di comando correnti. |
-v, --verbose | Abilita il logging dettagliato per il debug. |
parser(): Una funzione che elabora i dati del pacchetto e restituisce le informazioni estratte.