
Strumento di fingerprinting dei servizi di rete Microsoft
Versione: 1.0
Autore: Laurent Gaffie
Azienda: Secorizon
MSFinger è uno strumento di fingerprinting di rete ad alte prestazioni progettato per la ricognizione di reti interne. Identifica rapidamente i servizi Microsoft, rileva le configurazioni di sicurezza ed evidenzia le potenziali vulnerabilità nei protocolli SMB, LDAP e LDAPS.
Caratteristiche principali:
MSFinger è scritto in puro Python. Non sono richieste dipendenze aggiuntive oltre a Python 3.6+.
cd /path/to/MSFinger
chmod +x MSFinger.py
python3 MSFinger.py -i <target> [options]
* È necessario specificare -i oppure -f
python3 MSFinger.py -i 192.168.1.10
python3 MSFinger.py -i 192.168.1.0/24
python3 MSFinger.py -i 192.168.1.1-50
python3 MSFinger.py -f targets.txt
Esempio di targets.txt:
192.168.1.0/24
10.0.0.1-100
172.16.5.50
# Comments are supported
192.168.2.0/25
# Faster scan with shorter timeout and more workers
python3 MSFinger.py -i 10.0.0.0/16 -t 0.3 -w 200
# More reliable scan with longer timeout
python3 MSFinger.py -i 192.168.1.0/24 -t 1.0 -w 50
python3 MSFinger.py -i 192.168.1.0/24 -d pentest_2026.db
python3 MSFinger.py -i 192.168.1.0/24 --no-color > scan_results.txt
I risultati vengono visualizzati in tempo reale con indicatori di sicurezza codificati a colori:
[192.168.1.10] SMB: 3.1.1, Signing: required, OS: Windows Server 2022 21H2, Domain: CORP.LOCAL, Boot: 2026-01-01 10:30:15 | SMB1: disabled | Services: RDP, LDAP (signing: required), LDAPS (signing: required, channel binding: required)
Informazioni SMB:
SMB: X.X.X - Versione del dialetto SMB (2.0.2, 2.1, 3.0, 3.0.2, 3.1.1)Signing: <status> - required (obbligatoria)/enabled (abilitata)/disabled (disabilitata)OS: <version> - Versione di Windows con numero di buildDomain: <name> - Nome del dominio/gruppo di lavoro NetBIOSBoot: <time> - Ora di avvio del sistema (oppure Disabled/Unknown - disabilitata/sconosciuta)Stato SMB1:
SMB1: disabled - SMB1 non supportato (sicuro)SMB1: supported, Signing: <status> - SMB1 abilitato (rischio potenziale)Servizi:
RDP - Protocollo Remote Desktop (porta 3389) apertaMSSQL - Microsoft SQL Server (porta 1433) apertaLDAP (signing: <status>) - LDAP sulla porta 389LDAPS (signing: <status>, channel binding: <status>) - LDAPS sulla porta 636LDAPS (port open, <error>) - Porta LDAPS che risponde ma handshake SSL fallitoMSFinger memorizza tutti i risultati delle scansioni in un database SQLite per l'archiviazione e l'analisi persistenti.
hosts# View all vulnerable hosts (no SMB signing)
sqlite3 MSFinger.db "SELECT ip, os_version, smb_signing FROM hosts WHERE smb_signing != 'required'"
# Find hosts with LDAP signing disabled
sqlite3 MSFinger.db "SELECT ip, domain, ldap_signing FROM hosts WHERE ldap_signing = 'not_required'"
# List all Windows Server 2022 hosts
sqlite3 MSFinger.db "SELECT ip, os_version, domain FROM hosts WHERE os_version LIKE '%Server 2022%'"
# Export to CSV
sqlite3 -header -csv MSFinger.db "SELECT * FROM hosts" > results.csv
# Count hosts by OS
sqlite3 MSFinger.db "SELECT os_version, COUNT(*) FROM hosts GROUP BY os_version"
Protocolli testati:
Informazioni raccolte:
required - Il server richiede la firma dei messaggi (sicuro)enabled - Il server supporta ma non richiede la firmadisabled - Nessun supporto alla firma (vulnerabile)Mappatura delle versioni del sistema operativo:
Verifica il bind anonimo per determinare i requisiti di firma:
Verifica la connessione SSL/TLS con bind LDAP:
Risultati possibili:
signing: required, channel binding: required - Massima sicurezza (sicuro)signing: not_required, channel binding: not_required - Nessuna protezione (vulnerabile)port open, SSL handshake failed - La porta risponde ma la negoziazione SSL è fallitaport open, Connection error: 104 - Connessione reimpostata dal peerFirma SMB disabilitata:
Firma LDAP non richiesta:
LdapEnforceChannelBinding=2 e LDAPServerIntegrity=2 nel registro di sistemaLDAPS senza channel binding:
Firma SMB abilitata (non richiesta):
SMB1 supportato:
Firma SMB obbligatoria:
Firma LDAP/LDAPS obbligatoria:
Channel binding imposto:
Ogni worker consuma una quantità minima di memoria (~1-2MB). Regola i worker in base alle risorse di sistema:
# High-performance scan (requires good CPU/RAM)
python3 MSFinger.py -i 10.0.0.0/8 -t 0.5 -w 500
# Conservative scan (low resource usage)
python3 MSFinger.py -i 192.168.0.0/16 -t 2.0 -w 50
Verificare la connettività di rete:
ping <target_ip>
telnet <target_ip> 445
Aumentare il timeout:
python3 MSFinger.py -i <target> -t 3.0
Verificare le regole del firewall:
"SSL handshake failed" o "Connection error: 104":
openssl s_client -connect <ip>:636 per la diagnosiSe si esegue la scansione da più processi:
# Use different database files
python3 MSFinger.py -i 192.168.1.0/24 -d scan1.db &
python3 MSFinger.py -i 192.168.2.0/24 -d scan2.db &
Assicurarsi che lo script sia eseguibile:
chmod +x MSFinger.py
Identificare prima gli host SMB attivi, poi eseguire il fingerprinting:
nmap -p445 --open -oG - 192.168.1.0/24 | awk '/445\/open/{print $2}' > smb_hosts.txt
python3 MSFinger.py -f smb_hosts.txt
Monitorare le modifiche della rete con cron:
# Add to crontab (every day at 2 AM)
0 2 * * * /usr/bin/python3 /path/to/MSFinger.py -i 192.168.1.0/24 -d /var/scans/daily_scan.db
Interrogare e correggere da PowerShell:
# Install SQLite PowerShell module
Install-Module -Name SimplySql
# Query vulnerable hosts
Open-SQLiteConnection -DataSource "MSFinger.db"
$vulnerable = Invoke-SqlQuery -Query "SELECT ip FROM hosts WHERE smb_signing != 'required'"
Close-SqlConnection
# Remediate
foreach ($host in $vulnerable) {
Set-SmbServerConfiguration -ComputerName $host.ip -RequireSecuritySignature $true -Force
}
Autore: Laurent Gaffie ([email protected])
Licenza: GNU General Public License v3.0
Questo programma è software libero: puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation, sia la versione 3 della licenza, sia (a tua scelta) qualsiasi versione successiva.
Questo programma è distribuito nella speranza che possa essere utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la GNU General Public License per maggiori dettagli.
| Opzione | Descrizione | Predefinito |
|---|
-i, --ip | IP di destinazione, range CIDR o intervallo di IP | Obbligatorio* |
-f, --file | File contenente i target (uno per riga) | Obbligatorio* |
-t, --timeout | Timeout di connessione in secondi | 1.0 |
-w, --workers | Numero di worker concorrenti | 100 |
-d, --database | File di database SQLite per i risultati | MSFinger.db |
--no-color | Disabilita l'output colorato | Disabilitato |
| Colonna | Tipo | Descrizione |
|---|
id | INTEGER | Chiave primaria (auto-incremento) |
ip | TEXT | Indirizzo IP (univoco) |
hostname | TEXT | Hostname (riservato per uso futuro) |
os_version | TEXT | Versione del sistema operativo |
os_build | INTEGER | Numero di build del sistema operativo |
domain | TEXT | Nome del dominio/gruppo di lavoro |
boot_time | TEXT | Timestamp di avvio del sistema |
smb_dialect | TEXT | Versione del protocollo SMB |
smb_signing | TEXT | Stato della firma SMB |
smb1_supported | INTEGER | SMB1 abilitato (0=no, 1=sì) |
smb1_signing | TEXT | Stato della firma SMB1 |
rdp_open | INTEGER | Porta RDP aperta (0=no, 1=sì) |
mssql_open | INTEGER | Porta MSSQL aperta (0=no, 1=sì) |
ldap_signing | TEXT | Stato della firma LDAP |
ldaps_signing | TEXT | Stato della firma LDAPS |
ldaps_channel_binding | TEXT | Stato del channel binding LDAPS |
ldaps_error | TEXT | Errore di connessione LDAPS (se presente) |
scan_time | TIMESTAMP | Timestamp della prima scansione |
last_seen | TIMESTAMP | Timestamp della scansione più recente |
| Intervallo di build | Sistema operativo |
|---|
| 10240 | Windows 10 1507 |
| 14393 | Windows 10 1607 / Server 2016 |
| 17763 | Windows 10 1809 / Server 2019 |
| 19041-19045 | Windows 10 20H2 - 22H2 |
| 20348 | Windows Server 2022 21H2 |
| 22000+ | Windows 11 |
| 25398 | Windows Server 2025 |
| Tipo di rete | Timeout consigliato | Worker |
|---|
| LAN interna veloce (1Gbps+) | 0.5s | 200-300 |
| Rete interna normale | 1.0s (predefinito) | 100-150 |
| Rete lenta/wireless | 2.0-3.0s | 50-100 |
| Connessione VPN | 3.0-5.0s | 30-50 |