243 lines
9.8 KiB
Go
243 lines
9.8 KiB
Go
package infosecmodules
|
||
|
||
import (
|
||
"rubric/utils"
|
||
)
|
||
|
||
var NetsecModule = Module{
|
||
Key: "netsec",
|
||
Aliases: []string{"ns", "network", "сетьбез"},
|
||
Title: "Сетевая безопасность",
|
||
Description: "Сканирование, анализ трафика, IDS/IPS, VPN, сегментация сети",
|
||
Run: showNetsec,
|
||
}
|
||
|
||
func showNetsec() {
|
||
utils.Header("InfoSec — Сетевая безопасность")
|
||
|
||
utils.Section("Сетевая разведка и сканирование")
|
||
utils.Code(`# nmap — сетевой сканер:
|
||
nmap 192.168.1.1 # базовое сканирование
|
||
nmap 192.168.1.0/24 # сканировать подсеть
|
||
nmap -sV 192.168.1.1 # определить версии сервисов
|
||
nmap -sV -sC 192.168.1.1 # + скрипты по умолчанию
|
||
nmap -p 22,80,443 192.168.1.1 # конкретные порты
|
||
nmap -p 1-1000 192.168.1.1 # диапазон портов
|
||
nmap -p- 192.168.1.1 # все 65535 портов
|
||
nmap -A 192.168.1.1 # OS, версии, скрипты, traceroute
|
||
nmap -O 192.168.1.1 # определить ОС
|
||
nmap -sn 192.168.1.0/24 # только ping sweep (без портов)
|
||
nmap -sS 192.168.1.1 # SYN scan (stealth, нужен root)
|
||
nmap -sU -p 53,161 192.168.1.1 # UDP сканирование
|
||
nmap -Pn 192.168.1.1 # не пинговать перед сканом
|
||
nmap --script vuln 192.168.1.1 # проверка уязвимостей
|
||
nmap -oA results 192.168.1.1 # сохранить в 3 форматах
|
||
|
||
# masscan — очень быстрое сканирование:
|
||
masscan -p80,443 192.168.0.0/16 --rate=10000
|
||
|
||
# rustscan — быстрый сканер на Rust:
|
||
rustscan -a 192.168.1.1 -- -sV -sC`)
|
||
|
||
utils.Section("Анализ трафика")
|
||
utils.Code(`# tcpdump — захват пакетов в CLI:
|
||
tcpdump -i eth0 # всё с интерфейса
|
||
tcpdump -i eth0 port 80 # только HTTP
|
||
tcpdump -i eth0 host 192.168.1.10 # к/от хоста
|
||
tcpdump -i eth0 'tcp and port 443' # HTTPS
|
||
tcpdump -i eth0 -w capture.pcap # сохранить в файл
|
||
tcpdump -r capture.pcap # читать файл
|
||
tcpdump -i eth0 -n -A port 80 # без разрешения имён, ASCII
|
||
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' # SYN пакеты
|
||
|
||
# Фильтры BPF (Berkeley Packet Filter):
|
||
host 10.0.0.1 # хост
|
||
net 192.168.1.0/24 # подсеть
|
||
port 22 # порт
|
||
tcp / udp / icmp # протокол
|
||
src host 10.0.0.1 # только источник
|
||
dst port 80 # только назначение
|
||
not port 22 # исключить SSH`)
|
||
|
||
utils.Println(utils.ColorBold + "Wireshark — GUI анализ:" + utils.ColorReset)
|
||
utils.Code(`# Фильтры дисплея Wireshark:
|
||
ip.addr == 192.168.1.1 # IP
|
||
tcp.port == 80 # порт
|
||
http # только HTTP
|
||
http.request.method == "POST" # POST запросы
|
||
tls.handshake # TLS handshake
|
||
!(arp or dns) # исключить ARP и DNS
|
||
tcp.flags.syn == 1 # SYN пакеты
|
||
frame contains "password" # строка в пакете
|
||
tcp.analysis.retransmission # ретрансмиссии
|
||
|
||
# Tshark — CLI версия Wireshark:
|
||
tshark -i eth0 -f "port 80" -w output.pcap
|
||
tshark -r capture.pcap -T fields -e ip.src -e http.host`)
|
||
|
||
utils.Section("IDS/IPS — системы обнаружения вторжений")
|
||
utils.Code(`IDS (Intrusion Detection System) — обнаруживает, уведомляет
|
||
IPS (Intrusion Prevention System) — обнаруживает И блокирует
|
||
|
||
Типы:
|
||
NIDS — сетевой (анализирует трафик)
|
||
HIDS — хостовый (файлы, логи, процессы)
|
||
Signature-based — сравнение с известными паттернами
|
||
Anomaly-based — отклонение от нормы (ML)
|
||
|
||
Snort — популярный NIDS/IPS:
|
||
snort -i eth0 -c /etc/snort/snort.conf
|
||
snort -r capture.pcap -c /etc/snort/snort.conf
|
||
|
||
# Правило Snort:
|
||
alert tcp any any -> $HOME_NET 22 (
|
||
msg:"Brute force SSH";
|
||
flow:to_server;
|
||
threshold:type both, track by_src, count 5, seconds 60;
|
||
sid:1000001; rev:1;
|
||
)
|
||
|
||
Suricata — современная замена Snort:
|
||
Многопоточный, поддерживает Lua-скрипты, YAML-конфиг
|
||
|
||
OSSEC / Wazuh — HIDS:
|
||
Анализ логов, мониторинг файловой системы (FIM),
|
||
мониторинг реестра Windows, активный ответ`)
|
||
|
||
utils.Section("Брандмауэры и сегментация")
|
||
utils.Code(`Типы файрволов:
|
||
Packet Filter — фильтрация по IP/порту/протоколу (L3-L4)
|
||
Stateful — отслеживает состояние соединений
|
||
Application (L7) — анализирует контент приложений
|
||
WAF — Web Application Firewall (HTTP/HTTPS)
|
||
NGFW — Next-Gen FW (IPS + AppID + SSL inspection)
|
||
|
||
Сегментация сети:
|
||
DMZ — демилитаризованная зона (веб-серверы, доступные снаружи)
|
||
Разделение на VLAN по функции: серверная, управление, пользователи
|
||
Micro-segmentation — в облаке и K8s (Network Policy)
|
||
|
||
# iptables (Linux):
|
||
# Разрешить входящий SSH:
|
||
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
|
||
|
||
# Разрешить установленные соединения:
|
||
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||
|
||
# Заблокировать всё остальное входящее:
|
||
iptables -P INPUT DROP
|
||
iptables -P FORWARD DROP
|
||
iptables -P OUTPUT ACCEPT
|
||
|
||
# Сохранить правила:
|
||
iptables-save > /etc/iptables/rules.v4
|
||
|
||
# nftables (современная замена iptables):
|
||
nft add table ip filter
|
||
nft add chain ip filter input { type filter hook input priority 0 \; policy drop \; }
|
||
nft add rule ip filter input tcp dport 22 accept
|
||
nft add rule ip filter input ct state established,related accept
|
||
|
||
# Kubernetes Network Policy:
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: NetworkPolicy
|
||
metadata:
|
||
name: deny-all
|
||
spec:
|
||
podSelector: {}
|
||
policyTypes: [Ingress, Egress]
|
||
---
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: NetworkPolicy
|
||
metadata:
|
||
name: allow-api
|
||
spec:
|
||
podSelector:
|
||
matchLabels:
|
||
app: api
|
||
ingress:
|
||
- from:
|
||
- podSelector:
|
||
matchLabels:
|
||
app: frontend
|
||
ports:
|
||
- port: 8000`)
|
||
|
||
utils.Section("VPN — виртуальные частные сети")
|
||
utils.Code(`Типы VPN:
|
||
Remote Access VPN — подключение удалённых пользователей
|
||
Site-to-Site VPN — соединение офисов
|
||
Split Tunneling — часть трафика через VPN, остальное напрямую
|
||
|
||
Протоколы:
|
||
WireGuard — современный, быстрый, простой (рекомендуется)
|
||
OpenVPN — популярный, гибкий, на TLS
|
||
IPsec — стандарт, сложная настройка
|
||
L2TP/IPsec — устаревает
|
||
PPTP — СЛОМАН, не использовать
|
||
|
||
# WireGuard — быстрая настройка:
|
||
# Установка:
|
||
apt install wireguard
|
||
|
||
# Генерация ключей:
|
||
wg genkey | tee privatekey | wg pubkey > publickey
|
||
|
||
# /etc/wireguard/wg0.conf (сервер):
|
||
[Interface]
|
||
PrivateKey = <server_private_key>
|
||
Address = 10.0.0.1/24
|
||
ListenPort = 51820
|
||
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
||
|
||
[Peer]
|
||
PublicKey = <client_public_key>
|
||
AllowedIPs = 10.0.0.2/32
|
||
|
||
# /etc/wireguard/wg0.conf (клиент):
|
||
[Interface]
|
||
PrivateKey = <client_private_key>
|
||
Address = 10.0.0.2/24
|
||
DNS = 1.1.1.1
|
||
|
||
[Peer]
|
||
PublicKey = <server_public_key>
|
||
Endpoint = server_ip:51820
|
||
AllowedIPs = 0.0.0.0/0 # весь трафик через VPN
|
||
PersistentKeepalive = 25
|
||
|
||
# Запуск:
|
||
wg-quick up wg0
|
||
systemctl enable wg-quick@wg0`)
|
||
|
||
utils.Section("Сетевые атаки и защита")
|
||
utils.Code(`ARP Spoofing / MITM:
|
||
Атака: отправка ложных ARP-ответов → перехват трафика
|
||
Защита: Dynamic ARP Inspection (DAI) на коммутаторе
|
||
|
||
DNS Spoofing / Cache Poisoning:
|
||
Атака: подмена DNS-ответов
|
||
Защита: DNSSEC, DNS over HTTPS (DoH), DNS over TLS (DoT)
|
||
|
||
DDoS — Distributed Denial of Service:
|
||
Volumetric — переполнение канала (UDP flood, DNS amplification)
|
||
Protocol — исчерпание ресурсов (SYN flood, Ping of Death)
|
||
Application — L7 атаки (HTTP flood, Slowloris)
|
||
Защита: CDN (Cloudflare), rate limiting, scrubbing centers
|
||
|
||
SYN Flood:
|
||
Атака: отправка SYN без ACK → очередь half-open соединений
|
||
Защита: SYN cookies (sysctl net.ipv4.tcp_syncookies=1)
|
||
|
||
Man-in-the-Middle (MITM):
|
||
Перехват и изменение трафика
|
||
Защита: TLS с пиннингом сертификата, HSTS, HPKP
|
||
|
||
Защита от сканирования:
|
||
fail2ban — блокировка после N неудачных попыток
|
||
Port knocking — последовательность "стуков" для открытия порта
|
||
Honeypots — приманки для обнаружения злоумышленников`)
|
||
|
||
utils.Footer()
|
||
}
|