!/usr/bin/env bash
full_net_audit.sh
Автоматизированный сетевой аудит на Kali Linux:
– Nmap: discovery + полное сканирование
– Nmap NSE vuln + vulners (CVE)
– логическая карта сети (SERVER / WORKSTATION)
– TShark: захват и анализ трафика
– ssh-audit, Netcat
– текстовый и PDF-отчёт
set -euo pipefail
NETWORK=”${1:-}” # например, 192.168.1.0/24
IFACE=”${2:-eth0}” # сетевой интерфейс по умолчанию
TARGET_SSH_PORT=”22″ # порт SSH по умолчанию
timestamp=”$(date +”%Y-%m-%d_%H-%M-%S”)”
OUTDIR=”audit_${timestamp}”
mkdir -p “${OUTDIR}”
log() {
echo “[$(date +”%H:%M:%S”)] $*”
}
if [[ -z “${NETWORK}” ]]; then
echo “Использование: $0 <сеть/маска> [интерфейс]” >&2
echo “Пример: $0 192.168.1.0/24 eth0” >&2
exit 1
fi
log “Создан каталог отчёта: ${OUTDIR}”
#
Проверка наличия необходимых утилит
#
log “Проверка наличия необходимых утилит…”
MISSING=0
for bin in nmap tshark ssh-audit nc enscript ps2pdf; do
if ! command -v “$bin” >/dev/null 2>&1; then
echo “Требуется утилита: $bin (установите через apt/pip)” >&2
MISSING=1
fi
done
if [[ $MISSING -ne 0 ]]; then
echo “Установите отсутствующие утилиты и запустите скрипт снова.” >&2
exit 1
fi
VULNERS_PATH=”/usr/share/nmap/scripts/vulners.nse”
if [[ ! -f “${VULNERS_PATH}” ]]; then
log “ВНИМАНИЕ: vulners.nse не найден (${VULNERS_PATH}). Будет использован только –script vuln.”
fi
#
1. Сканирование сети Nmap
#
log “Сканирование сети Nmap (обнаружение хостов)…”
NMAP_HOST_DISC=”${OUTDIR}/nmap_host_discovery.nmap”
nmap -sn “${NETWORK}” -oN “${NMAP_HOST_DISC}” -oX “${OUTDIR}/nmap_host_discovery.xml”
Извлекаем список живых хостов
HOSTS_FILE=”${OUTDIR}/alive_hosts.txt”
grep “Nmap scan report for” “${NMAP_HOST_DISC}” | awk ‘{print $5}’ | sort -u > “${HOSTS_FILE}” || true
HOST_COUNT=”$(wc -l < “${HOSTS_FILE}” 2>/dev/null || echo 0)”
log “Найдено хостов: ${HOST_COUNT}”
#
2. Детальное сканирование портов и сервисов
#
log “Детальное сканирование портов и сервисов для живых хостов…”
NMAP_DETAILS=”${OUTDIR}/nmap_detailed.nmap”
if [[ -s “${HOSTS_FILE}” ]]; then
nmap -sV -sC -O -p- -iL “${HOSTS_FILE}” -oN “${NMAP_DETAILS}” -oX “${OUTDIR}/nmap_detailed.xml”
else
log “Файл с хостами пустой, пропускаю детальное сканирование.”
fi
#
2a. Проверка уязвимостей Nmap NSE
#
log “Проверка уязвимостей Nmap (скрипты категории vuln)…”
NMAP_VULN=”${OUTDIR}/nmap_vuln.nmap”
NMAP_VULN_XML=”${OUTDIR}/nmap_vuln.xml”
if [[ -s “${HOSTS_FILE}” ]]; then
# Все скрипты категории vuln [web:23][web:29]
nmap -sV –script vuln -iL “${HOSTS_FILE}” -oN “${NMAP_VULN}” -oX “${NMAP_VULN_XML}”
else
log “Нет живых хостов, vuln-скан пропущен.”
fi
Дополнительный скан с vulners.nse (CVE) [web:20][web:26][web:27]
NMAP_VULNERS=”${OUTDIR}/nmap_vulners.nmap”
if [[ -f “${VULNERS_PATH}” && -s “${HOSTS_FILE}” ]]; then
log “Дополнительный скан с vulners.nse (CVE‑matching)…”
head -n 10 “${HOSTS_FILE}” | while read -r vh; do
[[ -z “$vh” ]] && continue
log “vulners для ${vh}”
echo “===== ${vh} =====” >> “${NMAP_VULNERS}”
nmap -sV –script vulners “${vh}” >> “${NMAP_VULNERS}” 2>&1
echo >> “${NMAP_VULNERS}”
done
else
log “vulners.nse отсутствует или нет хостов — пропускаю дополнительный CVE‑скан.”
fi
#
2b. Построение карты сети (логическое)
#
log “Построение логической карты сети (сервера / АРМ)…”
TOPOLOGY_TXT=”${OUTDIR}/network_map.txt”
“${TOPOLOGY_TXT}”
if [[ -s “${NMAP_DETAILS}” ]]; then
current_host=””
current_os=””
current_ports=””
while IFS= read -r line; do
# Новый хост
if [[ “$line” =~ ^Nmap\ scan\ report\ for\ ]]; then
# Классифицируем предыдущий хост
if [[ -n “${current_host}” ]]; then
role=”WORKSTATION”
if echo “${current_ports}” | grep -Eq ‘(:80/|:443/|:25/|:110/|:143/|:445/|:1433/|:1521/|:3306/|:5432/)’ \
|| echo “${current_os}” | grep -Eiq ‘server|linux’; then
role=”SERVER”
fi
echo “${current_host} | ${role} | OS: ${current_os} | PORTS: ${current_ports}” >> “${TOPOLOGY_TXT}”
fi
current_host="$(echo "$line" | awk '{print $5}')"
current_os=""
current_ports=""
continue
fi
# Информация об ОС [web:35][web:38]
if [[ "$line" =~ ^OS\ details: ]]; then
current_os="${line#OS details: }"
continue
fi
if [[ "$line" =~ ^Aggressive\ OS\ guesses: ]]; then
current_os="${line#Aggressive OS guesses: }"
continue
fi
# Порты: "PORT STATE SERVICE VERSION"
if echo "$line" | grep -Eq '^[0-9]+/tcp'; then
port="$(echo "$line" | awk '{print $1}')"
svc="$(echo "$line" | awk '{print $3}')"
current_ports+="${port}(${svc}),"
continue
fi
done < “${NMAP_DETAILS}”
# Последний хост
if [[ -n “${current_host}” ]]; then
role=”WORKSTATION”
if echo “${current_ports}” | grep -Eq ‘(:80/|:443/|:25/|:110/|:143/|:445/|:1433/|:1521/|:3306/|:5432/)’ \
|| echo “${current_os}” | grep -Eiq ‘server|linux’; then
role=”SERVER”
fi
echo “${current_host} | ${role} | OS: ${current_os} | PORTS: ${current_ports}” >> “${TOPOLOGY_TXT}”
fi
log “Карта сети сохранена в ${TOPOLOGY_TXT}”
else
log “Нет детальных данных Nmap, карта сети не построена.”
fi
#
3. Захват трафика TShark
#
log “Захват трафика на интерфейсе ${IFACE} (20 секунд)…”
PCAP_FILE=”${OUTDIR}/capture.pcap”
(timeout 20 tshark -i “${IFACE}” -w “${PCAP_FILE}” >/dev/null 2>&1) || true
log “Анализ трафика: HTTP-запросы и возможные логины/пароли…”
TS_HTTP=”${OUTDIR}/tshark_http.txt”
TS_CRED=”${OUTDIR}/tshark_credentials.txt”
if [[ -f “${PCAP_FILE}” ]]; then
# HTTP‑запросы (display filter http.request) [web:19]
tshark -r “${PCAP_FILE}” -Y “http.request” \
-T fields -e ip.src -e ip.dst -e http.host -e http.request.uri \
> “${TS_HTTP}” 2>/dev/null || true
# Возможные логины/пароли: HTTP Basic и FTP USER/PASS [web:19]
tshark -r “${PCAP_FILE}” \
-Y ‘http.authbasic || ftp.request.command == “USER” || ftp.request.command == “PASS”‘ \
-T fields -e ip.src -e ip.dst -e ftp.request.command -e ftp.request.arg -e http.authorization \
> “${TS_CRED}” 2>/dev/null || true
else
log “Файл pcap не создан, анализ трафика пропущен.”
fi
#
4. Аудит SSH (ssh-audit)
#
log “Аудит SSH сервисов…”
SSH_AUDIT_REPORT=”${OUTDIR}/ssh_audit.txt”
“${SSH_AUDIT_REPORT}”
if [[ -s “${HOSTS_FILE}” ]]; then
while read -r host; do
[[ -z “$host” ]] && continue
log “SSH-audit для ${host}:${TARGET_SSH_PORT}”
{
echo “===== ${host}:${TARGET_SSH_PORT} =====”
ssh-audit “${host}:${TARGET_SSH_PORT}” || echo “SSH недоступен”
echo
} >> “${SSH_AUDIT_REPORT}” 2>&1
done < “${HOSTS_FILE}”
fi
#
5. Проверка портов Netcat (22/80/443)
#
log “Проверка ключевых портов Netcat (22,80,443)…”
NC_REPORT=”${OUTDIR}/netcat_ports.txt”
“${NC_REPORT}”
KEY_PORTS=(22 80 443)
if [[ -s “${HOSTS_FILE}” ]]; then
while read -r host; do
[[ -z “$host” ]] && continue
for port in “${KEY_PORTS[@]}”; do
echo “===== ${host}:${port} =====” >> “${NC_REPORT}”
nc -vz -w 3 “${host}” “${port}” >> “${NC_REPORT}” 2>&1 || echo “Порт недоступен” >> “${NC_REPORT}”
echo >> “${NC_REPORT}”
done
done < “${HOSTS_FILE}”
fi
#
6. Генерация текстового отчёта
#
REPORT_TXT=”${OUTDIR}/report.txt”
log “Формирование текстового отчёта…”
{
echo “ОТЧЁТ СЕТЕВОГО АУДИТА”
echo “Дата: $(date)”
echo “Сеть: ${NETWORK}”
echo “Интерфейс: ${IFACE}”
echo
echo “1. Результаты сканирования Nmap (обнаружение хостов)”
echo “———————————————“
cat “${NMAP_HOST_DISC}” 2>/dev/null || echo “Нет данных”
echo
echo “2. Детальное сканирование Nmap (порты и сервисы)”
echo “———————————————“
cat “${NMAP_DETAILS}” 2>/dev/null || echo “Нет данных”
echo
echo “2a. Проверка уязвимостей Nmap (NSE vuln/vulners)”
echo “———————————————“
echo “== Скрипты категории vuln (обобщённый vuln‑скан) ==”
cat “${NMAP_VULN}” 2>/dev/null || echo “Нет данных”
echo
echo “== Дополнительный скан с vulners.nse (CVE/высокий риск) ==”
cat “${NMAP_VULNERS}” 2>/dev/null || echo “Нет данных или скрипт vulners.nse недоступен”
echo
echo “2b. Логическая карта сети (сервера / АРМ)”
echo “———————————————“
cat “${TOPOLOGY_TXT}” 2>/dev/null || echo “Нет данных”
echo
echo “3. Анализ трафика (HTTP-запросы)”
echo “———————————————“
cat “${TS_HTTP}” 2>/dev/null || echo “Нет данных”
echo
echo “4. Возможные учетные данные / авторизация”
echo “———————————————“
cat “${TS_CRED}” 2>/dev/null || echo “Нет данных”
echo
echo “5. Аудит SSH (ssh-audit)”
echo “———————————————“
cat “${SSH_AUDIT_REPORT}” 2>/dev/null || echo “Нет данных”
echo
echo “6. Проверка портов (Netcat)”
echo “———————————————“
cat “${NC_REPORT}” 2>/dev/null || echo “Нет данных”
echo
echo “7. Общие рекомендации по устранению уязвимостей”
echo “———————————————“
echo “- Отключить устаревшие и слабые протоколы/шифры SSH (SSHv1, слабые ciphers, MAC).” # [web:5][web:14]
echo “- Ограничить доступ к административным сервисам по IP и использовать файрвол.”
echo “- Перенести чувствительные сервисы на шифрованные протоколы (HTTPS, SFTP).”
echo “- Закрыть незадействованные порты и сервисы, оставить минимально необходимый набор.”
echo “- Использовать сложные пароли/ключи, включить fail2ban или аналог для защиты от брутфорса.”
echo “- Для сервисов с обнаруженными CVE (по vuln/vulners) обновить ПО до актуальных версий или отключить сервис, если он не критичен.” # [web:20][web:21][web:27][web:71]
} > “${REPORT_TXT}”
#
7. Конвертация отчёта в PDF
#
REPORT_PS=”${OUTDIR}/report.ps”
REPORT_PDF=”${OUTDIR}/report.pdf”
log “Конвертация отчёта в PDF…”
if enscript -B -q -p “${REPORT_PS}” “${REPORT_TXT}” && ps2pdf “${REPORT_PS}” “${REPORT_PDF}”; then
log “PDF отчёт создан: ${REPORT_PDF}”
else
log “Не удалось сконвертировать в PDF. Проверьте наличие enscript и ps2pdf.”
fi
log “Аудит завершён. Каталог с результатами: ${OUTDIR}”
log “Основной текстовый отчёт: ${REPORT_TXT}”
log “PDF отчёт (если создан): ${REPORT_PDF}”