
Инструмент идентификации сетевых служб Microsoft
Версия: 1.0
Автор: Laurent Gaffie
Компания: Secorizon
MSFinger — это высокопроизводительный инструмент для снятия отпечатков сети, предназначенный для внутренней разведки сети. Он быстро идентифицирует службы Microsoft, обнаруживает конфигурации безопасности и выделяет потенциальные уязвимости в протоколах SMB, LDAP и LDAPS.
Ключевые особенности:
MSFinger написан на чистом Python. Дополнительные зависимости не требуются, кроме Python 3.6+.
cd /path/to/MSFinger
chmod +x MSFinger.py
python3 MSFinger.py -i <target> [options]
* Должен быть указан либо -i, либо -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
Пример 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
Результаты отображаются в реальном времени с цветовыми индикаторами безопасности:
[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)
Информация SMB:
SMB: X.X.X — версия диалекта SMB (2.0.2, 2.1, 3.0, 3.0.2, 3.1.1)Signing: <status> — обязательно/включено/отключеноOS: <version> — версия Windows с номером сборкиDomain: <name> — имя домена/рабочей группы NetBIOSBoot: <time> — время загрузки системы (или Disabled/Unknown)Статус SMB1:
SMB1: disabled — SMB1 не поддерживается (безопасно)SMB1: supported, Signing: <status> — SMB1 включён (потенциальный риск)Службы:
RDP — Протокол удалённого рабочего стола (порт 3389) открытMSSQL — Microsoft SQL Server (порт 1433) открытLDAP (signing: <status>) — LDAP на порту 389LDAPS (signing: <status>, channel binding: <status>) — LDAPS на порту 636LDAPS (port open, <error>) — Порт LDAPS отвечает, но SSL-рукопожатие не удалосьMSFinger сохраняет все результаты сканирования в базе данных SQLite для постоянного хранения и анализа.
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"
Проверяемые протоколы:
Собираемая информация:
required — сервер требует подписывания сообщений (безопасно)enabled — сервер поддерживает, но не требует подписыванияdisabled — поддержка подписывания отсутствует (уязвимо)Сопоставление версий ОС:
Проверяет анонимное подключение для определения требований к подписыванию:
Проверяет SSL/TLS-соединение с привязкой LDAP:
Возможные результаты:
signing: required, channel binding: required — максимальная безопасность (безопасно)signing: not_required, channel binding: not_required — защита отсутствует (уязвимо)port open, SSL handshake failed — порт отвечает, но SSL-согласование не удалосьport open, Connection error: 104 — соединение сброшено партнёромПодписывание SMB отключено:
Подписывание LDAP не требуется:
LdapEnforceChannelBinding=2 и LDAPServerIntegrity=2 в реестреLDAPS без привязки канала:
Подписывание SMB включено (не обязательно):
SMB1 поддерживается:
Подписывание SMB требуется:
Подписывание LDAP/LDAPS требуется:
Привязка канала принудительно:
Каждый рабочий поток потребляет минимум памяти (~1-2 МБ). Настройте количество потоков в зависимости от ресурсов системы:
# 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
Проверьте сетевое подключение:
ping <target_ip>
telnet <target_ip> 445
Увеличьте тайм-аут:
python3 MSFinger.py -i <target> -t 3.0
Проверьте правила брандмауэра:
"SSL handshake failed" или "Connection error: 104":
openssl s_client -connect <ip>:636 для диагностикиЕсли сканирование выполняется из нескольких процессов:
# 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 &
Убедитесь, что скрипт является исполняемым:
chmod +x MSFinger.py
Сначала определите живые SMB-хосты, затем снимите отпечатки:
nmap -p445 --open -oG - 192.168.1.0/24 | awk '/445\/open/{print $2}' > smb_hosts.txt
python3 MSFinger.py -f smb_hosts.txt
Мониторинг изменений в сети с помощью 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
Запрос и исправление из 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
}
Автор: Laurent Gaffie ([email protected])
Лицензия: GNU General Public License v3.0
Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. Подробнее см. в Стандартной общественной лицензии GNU.
| Опция | Описание | По умолчанию |
|---|
-i, --ip | Целевой IP-адрес, диапазон CIDR или диапазон IP | Обязательно* |
-f, --file | Файл, содержащий цели (по одной на строку) | Обязательно* |
-t, --timeout | Тайм-аут подключения в секундах | 1.0 |
-w, --workers | Количество параллельных рабочих потоков | 100 |
-d, --database | Файл базы данных SQLite для результатов | MSFinger.db |
--no-color | Отключить цветной вывод | Отключено |
| Столбец | Тип | Описание |
|---|
id | INTEGER | Первичный ключ (автоинкремент) |
ip | TEXT | IP-адрес (уникальный) |
hostname | TEXT | Имя хоста (зарезервировано для будущего использования) |
os_version | TEXT | Версия операционной системы |
os_build | INTEGER | Номер сборки ОС |
domain | TEXT | Имя домена/рабочей группы |
boot_time | TEXT | Временная метка загрузки системы |
smb_dialect | TEXT | Версия протокола SMB |
smb_signing | TEXT | Статус подписывания SMB |
smb1_supported | INTEGER | SMB1 включён (0=нет, 1=да) |
smb1_signing | TEXT | Статус подписывания SMB1 |
rdp_open | INTEGER | Порт RDP открыт (0=нет, 1=да) |
mssql_open | INTEGER | Порт MSSQL открыт (0=нет, 1=да) |
ldap_signing | TEXT | Статус подписывания LDAP |
ldaps_signing | TEXT | Статус подписывания LDAPS |
ldaps_channel_binding | TEXT | Статус привязки каналов LDAPS |
ldaps_error | TEXT | Ошибка подключения LDAPS (если есть) |
scan_time | TIMESTAMP | Временная метка первого сканирования |
last_seen | TIMESTAMP | Временная метка последнего сканирования |
| Диапазон сборок | Операционная система |
|---|
| 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 |
| Тип сети | Рекомендуемый тайм-аут | Рабочие потоки |
|---|
| Быстрая внутренняя LAN (1 Гбит/с+) | 0.5s | 200-300 |
| Обычная внутренняя сеть | 1.0s (по умолчанию) | 100-150 |
| Медленная/беспроводная сеть | 2.0-3.0s | 50-100 |
| VPN-соединение | 3.0-5.0s | 30-50 |