Jun 26, 2024
Выжимка: Linux для сетевых инженеров. Глава 3. Диагностика сети в Linux.
Связь между адресами IP и MAC с помощью ARP:
arp
работает с протоколом разрешения адреса (ARP, Address Resolution Protocol) и локальной таблицей ARP в памяти.
Это позволяет связать физический MAC адрес сетевой карты с её IP адресом.
Теоретически MAC адреса - это адреса, которые зашиты в каждый сетевой интерфейс.
Данные ARP кэшируются на каждом узле в кэше ARP или в таблице ARP, которую можно просмотреть с помощью команды arp:
arp -a
Срок действия записи можно просмотреть в файле:
cat /proc/sys/net/ipv4/neigh/ens33/gc_stale_tile # ens33 имя интерфейса
Для просмотра ошибок и параметров сетевого интерфейса откроем файл:
cat /proc/net/dev
Статистика по использованной памяти:
cat /proc/meminfo | grep Mem
Добавляем статическую запись ARP:
sudo arp -s 192.168.122.200 00:11:22:22:33:33
проверяем:
arp -a | grep 192.168.122.200
Удаляем статическую запись ARP:
sudo apr -i ens33 -d 192.168.122.200
А так же можно замаскироваться под IP адрес - например, чтобы отвечать на запросы ARP для чужого IP 10.0.0.1 :
sudo arp -i eth0 -Ds 10.0.0.1 eth1 pub
Как узнать свой MAC адрес:
ip link show ens33 | grep link
Устаревшая команда:
ifconfig ens33 | grep ether
Как изменить MAC адрес:
sudo ip link set dev ens33 down
sudo ip link set dev ens33 address 00:88:77:66:55:44
sudo ip link set dev ens33 up
Чтобы изменить MAC адрес на постоянной основе используем netplan:
редактируем файл /etc/netplan/01-network-manager-all.yaml
.
Добавляем инструкцию match с текущим MAC адресом, следующей строкой задаём новый:
network:
version: 2
ethernets:
ens33:
dhcp4: true
match:
macaddress: b6:22:eb:7b:92:44
macaddress: 11:22:33:44:55:66
Протестировать:
sudo netplan try
Применить:
sudo netplan apply
Какие службы прослушивают те или иные порты:
netstat -tulpn
Добавим информацию о процессе с помощью параметра p
:
sudo ss -tuap
- t - Порты TCP
- u - Порты UDP
- a - Все порты
Как вывести с форматированием:
sudo ss -tuap | tr -s ' ' | cut -d ' ' -f 1,2,5,6 --output-delimiter=$'\t'
tr -s ' '
- команда заменяет серии пробелов на один.
cut -d ' ' -f 1,2,5,6 --output-delimiter=$'\t'
- разделяет строки пробелом и выдаёт заданные номерами значения разделяя табуляцией.
Для того чтобы увидеть статистику по соединению TCP:
sudo ss -to # t - TCP, o - просмотр свойств соединения
Ещё один способ получить информацию о соединениях на компьютере:
lsof -i :443 # порт 443
lsof -i :22 # порт 22
Сканирование удалённых портов с помощью встроенных инструментов Linux:
telnet 192.168.122.241 80
С помощью Netcat сканируем первые 1024 порта:
nc -zv 192.168.122.241 1-1024
Netcat отправляет вывод в специальные файл STDERR (стандартный поток ошибок),
поэтому grep с Netcat работать не будет на прямую нужно перенаправить поток данных в STDOUT
Три стандартных потока ввода-вывода:
- STDIN - 0
- STDOUT - 1
- STDERR - 2
Для перенаправления потока данных из STDERR в STDOUT используем данную команду 2>&1
nc -zv 192.168.122.241 0-65535 2>&1 | grep -v refused
Для UDP:
nc -u -zv 192.168.122.1 53
Запуск сайта с помощью Netcat:
Создаём index.html со статическим содержимым и запускаем:
while true; do cat index.html | sudo nc -l -p 80 -1 1; done
sudo требуется для запуска на 80 порту
Сайт Hello world!:
while true; do echo -e "HTTP/1.1 200 OK\n\n Hello world!" | sudo nc -l -p 80 -q 1; done
Получение файла по сети с помощью Netcat:
nc -l -p 1234 >received.txt # полученные данные будут в файле received.txt
Для отправки:
nc -w 3 [IP адрес назначения] 1234 < send-file.txt
Сканирование удалённых портов и служб с помощью Nmap:
Пинг сканирование:
nmap -sn 192.168.122.0/24
Сканируем HTTPS, отображать только открытые порты:
nmap -p 443 --open 192.168.122.0/24
Сканируем UDP:
sudo nmap -sU -p 53 --open 192.168.122.0/24 # UDP порты сканируем только с sudo
Сканируем UDP с подробной информацией:
sudo nmap -sU -p 53 --open -sV --reason 192.168.122.0/24
Сценарии Nmap:
nmap -p139,445 --open --script=smb-protocols 192.168.122.0/24
Проверка версий поддерживаемых samba, вывод:
Nmap scan report for nas (192.168.122.3)
Host is up (0.00010s latency).
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Host script results:
| smb-protocols:
| dialects:
| 2.02
| 2.10
| 3.00
| 3.02
|_ 3.11
Некоторые из полезных скриптов:
Размер MTU (максимальной единицы передачи) в канале связи.
Другими словами, это максимальная полезная нагрузка, которую
можно инкапсулировать в кадр и передать по каналу. Это часто
важно при устранении неполадок в глобальных сетях (WAN),
а особенно в виртуальных частных сетях (VPN).
path-mtu
Неучтенные или вредоносные маршрутизаторы.
Вредоносный маршрутизатор может использоваться
в атаках посредника (MiTM, Machine in the Middle)
для перенаправления трафика, например, на поддельный
сайт банка, чтобы красть учетные данные пользователей.
broadcast-eigrp-discovery
broadcast-igmp-discovery
broadcast-ospf2-discover
broadcast-rip-discover
broadcast-ripng-discover
Нежелательные или вредоносные прокси-серверы.
Атака WPAD часто применяется для кражи учетных
данных: использовать для этого вредоносный прокси-
сервер даже легче, чем вредоносный маршрутизатор
broadcast-wpad-discover
Неправильно настроенные службы SNMP.
Подсказка: обратите особое внимание на строки
SNMPv2 public или private
snmp-info
DNS-серверы, о существовании которых вы не знали
broadcast-dns-service-discovery
dns-srv-enum
DNS-серверы с включенной рекурсией.
Рекурсия часто желательна для внутреннего DNS-
сервера, но обычно не годится для DNS-сервера с
выходом в интернет.
dns-recursion
«Подпольные» (rogue) DHCP-серверы.
Часто это бывают беспроводные маршрутизаторы или
коммутаторы, которые сотрудники принесли извне,
однако подпольный DHCP-сервер в сочетании
с вредоносным прокси-сервером в интернете вполне может
использоваться для кражи учетных данных.
dhcp-discover
broadcast-dhcp-discover
broadcast-dhcp6-discover
Нелицензированные или «теневые» серверы баз данных.
Часто бывает достаточно sV-сканирования прослушивающего
порта по умолчанию для целевой базы данных, но эти сценарии
дадут больше информации, если она нужна.
С помощью этих сценариев обычно ищут серверы баз данных,
которые считались выведенными из эксплуатации, или «пиратские»
экземпляры баз данных, которые разработчики развернули
для тестирования. Найти серверы MongoDB или CouchDB за пределами сферы
IT не так уж и сложно — их любят в отделах маркетинга. Риск
заключается в том, что они часто под завязку набиты конфиденциальной
информацией о клиентах и при этом плохо защищены
(не редкость даже найти их без пароля администратора).
broadcast-ms-sql-discover
broadcast-sybase-asa-discover
oracle-tns-version
broadcat-db2-discover
couchdb-databases
mongodb-info
Персональные серверы Jenkins (используются для управления ис-
ходным кодом и конвейерами DevOps).
Обнаружение несанкционированного сервера Jenkins, например,
на компьютере разработчика, может означать серьезные пробле-
мы в большой команде
broadcast-jenkins-discover
Узлы с активированной службой UPnP (Universal Plug and Play) broadcast-upnp-info
Узлы с активированной службой LLMNR (Link-Local Multicast
Name Resolution). Эта служба (включенная по умолчанию во
многих версиях Windows) является заменой DNS на уровне 2.
Поскольку ее также используют в атаках с целью кражи учетных
данных с участием клиентов Windows и SMB, вероятно, имеет
смысл отключать ее всюду, где встретите
llmnr-resolve
Нежелательные узлы VPN на границе вашей сети с остальным
интернетом или узлы VPN, поддерживающие IKEv1.
ike-version
http-cisco-anyconnect
Сертификаты, не инвентаризированные ранее или с истекающим
сроком действия. (Совет: не ограничивайте поиск лишь
портом tcp/443, потому что сертификаты используются не только
для веб-серверов HTTPS, но и для многих других служб.)
Эту проверку стоит запускать регулярно, потому что если
у критического сертификата неожиданно истечет срок действия, это
может сильно подпортить вам жизнь!
ssl-cert
ssl-date
Службы SSL или TLS устаревших или нежелательных версий.
От SSL и TLS версии 1 следует полностью отказаться
ssl-dh-params
ssl-enum-ciphers
Серверы RDP с низким уровнем шифрования
rdp-enum-encryption
Серверы SSH с низким уровнем шифрования.
В частности, SSH версии 1 легко подвергается атакам, поэтому
ее следует обновить, если встретите
ssh2-enum-algos
sshv1
Другие службы, обычно нежелательные в сети компании
bitcoin-info
Диагностика беспроводных сетей:
Kismet — один из старейших беспроводных инструментов, доступных для Linux.
Чтобы запустить Kismet, используйте такую команду:
sudo kismet -c <имя беспроводного интерфейса>
Eсли у вас есть полностью рабочая конфигурация и вам не нужно отображать
данные сервера Kismet в консоли, выполните следующее:
sudo kismet -c <имя беспроводного интерфейса> &
Теперь в другом окне (или в том же месте, если вы запускали Kismet в фоновом режиме) вызовите клиент Kismet:
kismet_client