
Ferramenta de Identificação de Serviços de Rede da Microsoft
Versão: 1.0
Autor: Laurent Gaffie
Empresa: Secorizon
MSFinger é uma ferramenta de identificação de rede de alto desempenho projetada para reconhecimento interno de rede. Ela identifica rapidamente serviços da Microsoft, detecta configurações de segurança e destaca potenciais vulnerabilidades nos protocolos SMB, LDAP e LDAPS.
Principais Características:
MSFinger é escrito em Python puro. Nenhuma dependência adicional é necessária além do Python 3.6+.
cd /path/to/MSFinger
chmod +x MSFinger.py
python3 MSFinger.py -i <target> [options]
* Deve ser especificado -i ou -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
Exemplo 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
Os resultados são exibidos em tempo real com indicadores de segurança codificados por cores:
[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)
Informações SMB:
SMB: X.X.X - Versão do dialeto SMB (2.0.2, 2.1, 3.0, 3.0.2, 3.1.1)Signing: <status> - exigido/ativado/desabilitadoOS: <version> - Versão do Windows com número de compilaçãoDomain: <name> - Nome do domínio/grupo de trabalho NetBIOSBoot: <time> - Horário de inicialização do sistema (ou Desabilitado/Desconhecido)Status SMB1:
SMB1: disabled - SMB1 não suportado (seguro)SMB1: supported, Signing: <status> - SMB1 ativado (risco potencial)Serviços:
RDP - Protocolo de Área de Trabalho Remota (porta 3389) abertaMSSQL - Microsoft SQL Server (porta 1433) abertaLDAP (signing: <status>) - LDAP na porta 389LDAPS (signing: <status>, channel binding: <status>) - LDAPS na porta 636LDAPS (port open, <error>) - Porta LDAPS respondendo mas handshake SSL falhouMSFinger armazena todos os resultados de varredura em um banco de dados SQLite para armazenamento e análise persistentes.
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"
Protocolos Testados:
Informações Coletadas:
required - O servidor exige assinatura de mensagens (seguro)enabled - O servidor suporta mas não exige assinaturadisabled - Sem suporte a assinatura (vulnerável)Mapeamento de Versão do SO:
Testa vinculação anônima para determinar os requisitos de assinatura:
Testa conexão SSL/TLS com vinculação LDAP:
Resultados Possíveis:
signing: required, channel binding: required - Segurança máxima (seguro)signing: not_required, channel binding: not_required - Sem proteções (vulnerável)port open, SSL handshake failed - Porta respondendo mas negociação SSL falhouport open, Connection error: 104 - Conexão redefinida pelo peerAssinatura SMB Desabilitada:
Assinatura LDAP Não Exigida:
LdapEnforceChannelBinding=2 e LDAPServerIntegrity=2 no registroLDAPS Sem Vinculação de Canal:
Assinatura SMB Ativada (não exigida):
SMB1 Suportado:
Assinatura SMB Exigida:
Assinatura LDAP/LDAPS Exigida:
Vinculação de Canal Aplicada:
Cada worker consome memória mínima (~1-2MB). Ajuste os workers com base nos recursos do 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
Verifique a conectividade de rede:
ping <target_ip>
telnet <target_ip> 445
Aumente o timeout:
python3 MSFinger.py -i <target> -t 3.0
Verifique as regras de firewall:
"SSL handshake failed" ou "Connection error: 104":
openssl s_client -connect <ip>:636 para diagnosticarSe estiver varrendo a partir de múltiplos processos:
# 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 &
Garanta que o script seja executável:
chmod +x MSFinger.py
Identifique primeiro hosts SMB ativos, depois faça a identificação:
nmap -p445 --open -oG - 192.168.1.0/24 | awk '/445\/open/{print $2}' > smb_hosts.txt
python3 MSFinger.py -f smb_hosts.txt
Monitore mudanças na rede com 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
Consulte e corrija a partir do 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
}
Autor: Laurent Gaffie ([email protected])
Licença: GNU General Public License v3.0
Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da GNU General Public License conforme publicada pela Free Software Foundation, seja a versão 3 da Licença, ou (a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO PARTICULAR. Veja a GNU General Public License para mais detalhes.
| Opção | Descrição | Padrão |
|---|
-i, --ip | IP alvo, intervalo CIDR ou intervalo de IP | Obrigatório* |
-f, --file | Arquivo contendo alvos (um por linha) | Obrigatório* |
-t, --timeout | Timeout de conexão em segundos | 1.0 |
-w, --workers | Número de workers concorrentes | 100 |
-d, --database | Arquivo de banco de dados SQLite para resultados | MSFinger.db |
--no-color | Desabilitar saída colorida | Desabilitado |
| Coluna | Tipo | Descrição |
|---|
id | INTEGER | Chave primária (auto-incremento) |
ip | TEXT | Endereço IP (único) |
hostname | TEXT | Nome do host (reservado para uso futuro) |
os_version | TEXT | Versão do sistema operacional |
os_build | INTEGER | Número de compilação do SO |
domain | TEXT | Nome do domínio/grupo de trabalho |
boot_time | TEXT | Carimbo de data/hora de inicialização do sistema |
smb_dialect | TEXT | Versão do protocolo SMB |
smb_signing | TEXT | Status de assinatura SMB |
smb1_supported | INTEGER | SMB1 ativado (0=não, 1=sim) |
smb1_signing | TEXT | Status de assinatura SMB1 |
rdp_open | INTEGER | Porta RDP aberta (0=não, 1=sim) |
mssql_open | INTEGER | Porta MSSQL aberta (0=não, 1=sim) |
ldap_signing | TEXT | Status de assinatura LDAP |
ldaps_signing | TEXT | Status de assinatura LDAPS |
ldaps_channel_binding | TEXT | Status de vinculação de canal LDAPS |
ldaps_error | TEXT | Erro de conexão LDAPS (se houver) |
scan_time | TIMESTAMP | Carimbo de data/hora da primeira varredura |
last_seen | TIMESTAMP | Carimbo de data/hora da varredura mais recente |
| Faixa de Compilação | Sistema Operacional |
|---|
| 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 de Rede | Timeout Recomendado | Workers |
|---|
| Rede LAN interna rápida (1Gbps+) | 0,5s | 200-300 |
| Rede interna normal | 1,0s (padrão) | 100-150 |
| Rede lenta/sem fio | 2,0-3,0s | 50-100 |
| Conexão VPN | 3,0-5,0s | 30-50 |