Существует очень известная и популярная программа для удаленного сканирования хостов - Nmap. Лично у меня она стоит и на рабочем ноутбуке и на некоторых серверах. Используется как для разовых проверок открытых портов какого-то сервера, так и для регулярных автоматических проверок.
Я даже статью как-то написал на тему регулярных проверок своей же инфраструктуры с помощью nmap. Рекомендую ознакомиться. Бывает, что поднимается временно какой-то сервис для теста в отдельной виртуальной машине. Для простоты к нему просто пробрасывается определенный порт. После теста виртуальная машина удаляется, а проброс порта остается.
Через некоторое время на этот же ip адрес может приехать что-то другое. Например, у меня приехал новый сервер и на этот ip был посажен idrac. Каково же было мое удивление, когда я, сканируя внешний ip, увидел доступ к консоли управления сервером. Сначала перепугался, думал кто-то что-то сломал. Полез разбираться, оказалось, что старый проброс 443 порта остался на этом внешнем ip.
Можете настроить что-то простое и банальное, типа подобной проверки и засунуть её в крон:
nmap -T4 87.250.250.242 | mail -s "Nmap Scan 87.250.250.242" serveradmin@gmail.com
Раз в неделю будете получать отчёты на почту по проверке своих IP. И более детальную и подробную проверку сделать. Например, так:
nmap -T0 -A -v 87.250.250.242 | mail -s "Nmap Scan 87.250.250.242" serveradmin@gmail.com
Полный список параметров можно посмотреть в документации - https://nmap.org/man/ru/man-briefoptions.html
Добавлю для информации еще несколько ходовых примеров, чтобы за ними в документацию не лазить.
Сканирование подсети или отдельных адресов:
nmap 192.168.1.0/24 или nmap 192.168.1.*
nmap 192.168.1.1,2,3
Быстрый скан сети пингом. Позволяет сразу увидеть, какие хосты в сети запущены и отвечают на пинг.
nmap -sP 192.168.1.0/24
Скан хоста, не отвечающего на пинг. Актуально, если открытые порты есть, но хост не отвечает на icmp запросы.
nmap -Pn 192.168.1.1
Быстрое сканирование. Если не добавить ключи, увеличивающие скорость, дефолтный скан будет длиться очень долго.
nmap -F 192.168.1.1
nmap -T4 192.168.1.1
Подробный скан всех портов хоста. Небольшой скрипт nmap.sh, который по очереди подробно сканирует все открытые порты. Процесс может длиться долго.
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Использовать
./nmap.sh 192.168.1.1
Как обычно, не забываем забрать в закладки.
#terminal #утилита #nmap
Я даже статью как-то написал на тему регулярных проверок своей же инфраструктуры с помощью nmap. Рекомендую ознакомиться. Бывает, что поднимается временно какой-то сервис для теста в отдельной виртуальной машине. Для простоты к нему просто пробрасывается определенный порт. После теста виртуальная машина удаляется, а проброс порта остается.
Через некоторое время на этот же ip адрес может приехать что-то другое. Например, у меня приехал новый сервер и на этот ip был посажен idrac. Каково же было мое удивление, когда я, сканируя внешний ip, увидел доступ к консоли управления сервером. Сначала перепугался, думал кто-то что-то сломал. Полез разбираться, оказалось, что старый проброс 443 порта остался на этом внешнем ip.
Можете настроить что-то простое и банальное, типа подобной проверки и засунуть её в крон:
nmap -T4 87.250.250.242 | mail -s "Nmap Scan 87.250.250.242" serveradmin@gmail.com
Раз в неделю будете получать отчёты на почту по проверке своих IP. И более детальную и подробную проверку сделать. Например, так:
nmap -T0 -A -v 87.250.250.242 | mail -s "Nmap Scan 87.250.250.242" serveradmin@gmail.com
Полный список параметров можно посмотреть в документации - https://nmap.org/man/ru/man-briefoptions.html
Добавлю для информации еще несколько ходовых примеров, чтобы за ними в документацию не лазить.
Сканирование подсети или отдельных адресов:
nmap 192.168.1.0/24 или nmap 192.168.1.*
nmap 192.168.1.1,2,3
Быстрый скан сети пингом. Позволяет сразу увидеть, какие хосты в сети запущены и отвечают на пинг.
nmap -sP 192.168.1.0/24
Скан хоста, не отвечающего на пинг. Актуально, если открытые порты есть, но хост не отвечает на icmp запросы.
nmap -Pn 192.168.1.1
Быстрое сканирование. Если не добавить ключи, увеличивающие скорость, дефолтный скан будет длиться очень долго.
nmap -F 192.168.1.1
nmap -T4 192.168.1.1
Подробный скан всех портов хоста. Небольшой скрипт nmap.sh, который по очереди подробно сканирует все открытые порты. Процесс может длиться долго.
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Использовать
./nmap.sh 192.168.1.1
Как обычно, не забываем забрать в закладки.
#terminal #утилита #nmap
Server Admin
Проверка открытых портов с помощью Nmap | serveradmin.ru
Небольшой практический совет. Время от времени рекомендую сканировать свои внешние ip адреса какими-нибудь сканерами портов, например, nmap. Можно это делать на регулярной основе с помощью...
Существует известный сервис для поиска уязвимостей vulners.com. Он платный и относительно дорогой, но при этом есть как бесплатные закрытые сервисы, так и open source продукты, которые вы можете использовать у себя. Покажу несколько примеров бесплатного использования.
1️⃣ Допустим, вы хотите выполнить разовый аудит системы, чтобы быстро понять, какие есть уязвимости в установленных пакетах. Для этого идёте на страницу https://vulners.com/scanner/audit, выбираете слева в меню Manual Audit. Указываете свою версию системы и получаете команду для выгрузки информации о пакетах. Для Debian она будет такая:
Копируете консольный вывод и вставляете в форму на сайте. Получаете результат и удивляетесь, как на свежеобновлённой системе может быть столько уязвимостей. Но если посмотреть внимательно, то почти все они некритические и обновлений для них нет и не будет, либо планируются только в будущем релизе.
Я удивился 10-ти бальной уязвимости по CVSS у tar от 2005 года (CVE-2005-2541). Суть её в том, что tar не информирует пользователя о том, что при извлечении файла у него могут стоять такие setuid и setgid, что сделает возможным запуск файлов с правами суперпользователя, если извлечение было выполнено из под него. На что в security-tracker дебиана разработчики дистрибутива ответили, что это его штатная возможность, в конце концов он же архиватор и поступает так, как ему указывают, ведь надо явно указать ключ
2️⃣ Есть вариант проверять систему на уязвимости автоматически с помощью Agent Scanner. Для этого надо зарегистрироваться в системе и получить API для агента. Бесплатный тарифный план позволяет использовать до 10-ти агентов. Не знаю, насколько сейчас это актуально в рамках всевозможных санкций и блокировок. Я бы ставить не стал.
3️⃣ У vulners.com есть open source скрипт для nmap, который автоматически показывает уязвимости у обнаруженных служб. Вот это реально полезная штука, которая бесплатна, и её удобно использовать. Делается это так. Ставим nmap и клонируем себе репозиторий:
В директорию
Можно сканировать хосты с использованием базы данных vulners:
Результат работы на картинке снизу.
4️⃣ У этого сервиса есть интеграция с Zabbix. Описание и все скрипты есть в отдельном репозитории. Эта штука когда-то работала. Я её пробовал. Некоторый лимит запросов есть через бесплатную учётку. Но работает всё так себе. Поддержки почти нет, с новыми версиями Zabbix сервера, где поменялся API, уже не работает. Когда обновят и будут ли - неизвестно. Так что не тратьте своё время, если вдруг надумаете посмотреть. Идея в целом неплохая, но поддерживать всё это хлопотно в том виде, как оно сделано.
#security #nmap
1️⃣ Допустим, вы хотите выполнить разовый аудит системы, чтобы быстро понять, какие есть уязвимости в установленных пакетах. Для этого идёте на страницу https://vulners.com/scanner/audit, выбираете слева в меню Manual Audit. Указываете свою версию системы и получаете команду для выгрузки информации о пакетах. Для Debian она будет такая:
# dpkg-query -W -f='${Status} ${Package} ${Version} ${Architecture}\n'|awk '($1 == "install") && ($2 == "ok") {print $4" "$5" "$6}'
Копируете консольный вывод и вставляете в форму на сайте. Получаете результат и удивляетесь, как на свежеобновлённой системе может быть столько уязвимостей. Но если посмотреть внимательно, то почти все они некритические и обновлений для них нет и не будет, либо планируются только в будущем релизе.
Я удивился 10-ти бальной уязвимости по CVSS у tar от 2005 года (CVE-2005-2541). Суть её в том, что tar не информирует пользователя о том, что при извлечении файла у него могут стоять такие setuid и setgid, что сделает возможным запуск файлов с правами суперпользователя, если извлечение было выполнено из под него. На что в security-tracker дебиана разработчики дистрибутива ответили, что это его штатная возможность, в конце концов он же архиватор и поступает так, как ему указывают, ведь надо явно указать ключ
-p
.2️⃣ Есть вариант проверять систему на уязвимости автоматически с помощью Agent Scanner. Для этого надо зарегистрироваться в системе и получить API для агента. Бесплатный тарифный план позволяет использовать до 10-ти агентов. Не знаю, насколько сейчас это актуально в рамках всевозможных санкций и блокировок. Я бы ставить не стал.
3️⃣ У vulners.com есть open source скрипт для nmap, который автоматически показывает уязвимости у обнаруженных служб. Вот это реально полезная штука, которая бесплатна, и её удобно использовать. Делается это так. Ставим nmap и клонируем себе репозиторий:
# apt install nmap
# git clone https://github.com/vulnersCom/nmap-vulners
В директорию
~/.nmap/scripts
(если нет, создайте) скопируйте файл из репозитория vulners.nse
. Теперь обновите базу данных:# nmap --script-updatedb
Можно сканировать хосты с использованием базы данных vulners:
# nmap -sV --script vulners 192.168.13.15/32
Результат работы на картинке снизу.
4️⃣ У этого сервиса есть интеграция с Zabbix. Описание и все скрипты есть в отдельном репозитории. Эта штука когда-то работала. Я её пробовал. Некоторый лимит запросов есть через бесплатную учётку. Но работает всё так себе. Поддержки почти нет, с новыми версиями Zabbix сервера, где поменялся API, уже не работает. Когда обновят и будут ли - неизвестно. Так что не тратьте своё время, если вдруг надумаете посмотреть. Идея в целом неплохая, но поддерживать всё это хлопотно в том виде, как оно сделано.
#security #nmap
Вчера рассказал про сервис vulnersCom и кратко упомянул про его интеграцию с nmap. Сегодня хочу немного расширить эту тему. У компании cloudflare в их github репозитории есть небольшой продукт на основе nmap и скрипта vulners.nse - Flan. Он ничего особенного не делает, кроме небольшой автоматизации по передачи списка ip адресов для сканирования. Плюс, поддерживает разные форматы вывода результатов: html, json, xml, markdown. Также он умеет складывать результаты тестов в GCS Bucket или AWS S3 Bucket.
Описание Flan есть в блоге cloudflare. Проект старый и особо не развивается, но там и развивать нечего. Та функциональность, что в него заложена, нормально работает и не требует обновления. Покажу сразу на примере, как он работает и что делает.
Клонируем к себе репозиторий:
Для того, чтобы понять, что тут будет происходить, достаточно посмотреть файлы Dockerfile и Makefile. Первый содержит простую инструкцию по сборке своего контейнера с nmap и скриптом nmap-vulners на борту. Дополнительно он копирует в контейнер python скрипты для поддержи различных форматов вывода.
Так что запуск сканирования выглядит следующим образом. Готовим список IP адресов в файле
Чтобы всё получилось, Docker и make у вас должны стоять в системе. Если нет, то поставьте:
Когда соберётся образ, можно запускать сканирование:
Результат будет выведен в консоль. Чтобы вывести его в html файл для удобного просмотра, запускаем так:
Результат будет в директории shared/reports. Можно запустить веб сервер, чтобы быстро посмотреть html файлы:
Смотрим результат сканирования в удобочитаемом виде с активными ссылками на все CVE. Очень удобно. Можно этот процесс автоматизировать, поднять постоянный веб сервер и хранить результаты некоторое время.
Если не уважаете Docker, можете запускать без него. В Dockerfile всё показано, что надо сделать, для локального запуска. Надо поставить несколько пакетов, python модулей, забрать скрипты pthon и запускать run.sh.
Отдельно в репозитории рассказано, как всё это сканирование запускать в Kubernetes для проверки контейнеров.
#security #nmap
Описание Flan есть в блоге cloudflare. Проект старый и особо не развивается, но там и развивать нечего. Та функциональность, что в него заложена, нормально работает и не требует обновления. Покажу сразу на примере, как он работает и что делает.
Клонируем к себе репозиторий:
# git clone https://github.com/cloudflare/flan
Для того, чтобы понять, что тут будет происходить, достаточно посмотреть файлы Dockerfile и Makefile. Первый содержит простую инструкцию по сборке своего контейнера с nmap и скриптом nmap-vulners на борту. Дополнительно он копирует в контейнер python скрипты для поддержи различных форматов вывода.
Так что запуск сканирования выглядит следующим образом. Готовим список IP адресов в файле
shared/ips.txt
. Одиночные IP адреса нужно указывать без маски /32. Потом собираем контейнер. Все команды уже прописаны в Makefile, поэтому запускаем через него:# make build
Чтобы всё получилось, Docker и make у вас должны стоять в системе. Если нет, то поставьте:
# curl -o - https://get.docker.com | bash -
# apt install make
Когда соберётся образ, можно запускать сканирование:
# make start
Результат будет выведен в консоль. Чтобы вывести его в html файл для удобного просмотра, запускаем так:
# make html
Результат будет в директории shared/reports. Можно запустить веб сервер, чтобы быстро посмотреть html файлы:
# cd ~/flan/shared/reports
# python3 -m http.server 80
Смотрим результат сканирования в удобочитаемом виде с активными ссылками на все CVE. Очень удобно. Можно этот процесс автоматизировать, поднять постоянный веб сервер и хранить результаты некоторое время.
Если не уважаете Docker, можете запускать без него. В Dockerfile всё показано, что надо сделать, для локального запуска. Надо поставить несколько пакетов, python модулей, забрать скрипты pthon и запускать run.sh.
Отдельно в репозитории рассказано, как всё это сканирование запускать в Kubernetes для проверки контейнеров.
#security #nmap
Несмотря на то, что существует много инструментов для сканирования узлов в сети, лично я всегда использую Nmap. И при этом никогда не помню точно, какие ключи применить для скана (как и в tcpdump). Использую либо свои заметки, либо Zenmap GUI, который установлен на винде.
Я когда-то давно уже показывал небольшую подборку как раз из своих заметок. Решил обновить и актуализировать. В интернете есть популярный материал по этой теме:
⇨ Nmap Cheat Sheet 2024: All the Commands & Flags
Он как раз недавно обновился. Там наглядно и аккуратно структурированы команды для Nmap. Он у меня давно в закладках, иногда пользуюсь. Для удобства, решил его в сокращённой форме подготовить здесь, плюс добавить свои примеры и комментарии.
✅ Простое и быстрое сканирование только открытых портов до 1024 без подробностей:
✅ Полное сканирование всех открытых портов:
Ключ
✅ Скан хоста, не отвечающего на пинг. Без этого ключа не отвечающий на пинг хост игнорируется в сканировании, как находящийся вне сети.
✅ Основные техники сканирования:
Обычно полное сканирование TCP и UDP портов запускают так (будет очень долго длиться):
✅ Обнаружение хостов в сети, без скана портов. Поиск с помощью пинга. Постоянно использую, когда надо получить список живых хостов в сети:
Если используете сложные списки хостов, или просто хотите быстро получить текстовый список какого-то набора IP адресов, то можно воспользоваться nmap:
Выведет список всех IP адресов в текстовом виде.
✅ Поиск хостов ARP запросами в локальной сети:
В локальной сети поиск хостов ARP запросами проходит в разы быстрее обычных. Подробно об этом и других техниках поиска хостов рассказано на сайте nmap. ❗️Данный метод используется принудительно в локальных сетях, даже если указать другой.
✅ Определение сервисов и их версий на открытых портах. Быстрая проверка с наглядным выводом всей информации, где 1 порт - одна строка. Удобно для визуального восприятия глазами:
Комбинированный ключ, который вызывает проверки ОС, версий сервисов, сканирование скриптами и использование traceroute. Более подробная и долгая проверка по сравнению с той, что выше. Вывод не очень нагляден для беглого просмотра:
Команда выше универсальная и подойдёт для комплексного анализа хоста по портам до 1024. Это позволяет ей отрабатывать относительно быстро. Если запускать её по всем портам, то будет долго выполняться. Но можно сделать небольшой трюк, который я применяю на практике. Сначала ищем открытые порты, а потом на них выполняем полную проверку с ключом
Использовать:
✅ Различные скорости и интенсивности проверок:
-T0 - paranoid (паранойдный)
-T1 - sneaky (хитрый)
-T2 - polite (вежливый)
-T3 - normal (обычный)
-T4 - aggressive (агрессивный)
-T5 - insane (безумный)
Описание этих шаблонов сканирования есть в документации. По умолчанию используется
По факту получилось, что из статьи ничего и не взял. Все примеры свои привёл, а подробности смотрел в man и на сайте nmap.
⇨ Полная шпаргалка по nmap в формате PDF.
#nmap
Я когда-то давно уже показывал небольшую подборку как раз из своих заметок. Решил обновить и актуализировать. В интернете есть популярный материал по этой теме:
⇨ Nmap Cheat Sheet 2024: All the Commands & Flags
Он как раз недавно обновился. Там наглядно и аккуратно структурированы команды для Nmap. Он у меня давно в закладках, иногда пользуюсь. Для удобства, решил его в сокращённой форме подготовить здесь, плюс добавить свои примеры и комментарии.
✅ Простое и быстрое сканирование только открытых портов до 1024 без подробностей:
nmap 192.168.1.1
nmap 192.168.1.1 192.168.2.1
nmap 192.168.1.1-254
nmap 192.168.1.0/24
✅ Полное сканирование всех открытых портов:
nmap 192.168.1.1 -p-
Ключ
-p
позволяет задавать диапазон портов в различных форматах. Например -p 21
или -p 21-100
, -p http,https
В примере выше сканируются абсолютно все порты. Проверка получается значительно дольше предыдущего примера без указания полного диапазона.✅ Скан хоста, не отвечающего на пинг. Без этого ключа не отвечающий на пинг хост игнорируется в сканировании, как находящийся вне сети.
nmap 192.168.1.1 -Pn
✅ Основные техники сканирования:
nmap 192.168.1.1 -sS
- TCP SYN, значение по умолчаниюnmap 192.168.1.1 -sT
- TCP connectnmap 192.168.1.1 -sU
- UDP сканированиеОбычно полное сканирование TCP и UDP портов запускают так (будет очень долго длиться):
nmap 192.168.1.1 -sS -sU -p-
✅ Обнаружение хостов в сети, без скана портов. Поиск с помощью пинга. Постоянно использую, когда надо получить список живых хостов в сети:
nmap 192.168.1.1/24 -sn
Если используете сложные списки хостов, или просто хотите быстро получить текстовый список какого-то набора IP адресов, то можно воспользоваться nmap:
nmap 192.168.1.1-15 -sL
Выведет список всех IP адресов в текстовом виде.
✅ Поиск хостов ARP запросами в локальной сети:
nmap 192.168.1.1/24 -PR
В локальной сети поиск хостов ARP запросами проходит в разы быстрее обычных. Подробно об этом и других техниках поиска хостов рассказано на сайте nmap. ❗️Данный метод используется принудительно в локальных сетях, даже если указать другой.
✅ Определение сервисов и их версий на открытых портах. Быстрая проверка с наглядным выводом всей информации, где 1 порт - одна строка. Удобно для визуального восприятия глазами:
nmap 192.168.1.1 -sV
Комбинированный ключ, который вызывает проверки ОС, версий сервисов, сканирование скриптами и использование traceroute. Более подробная и долгая проверка по сравнению с той, что выше. Вывод не очень нагляден для беглого просмотра:
nmap 192.168.13.1 -A
Команда выше универсальная и подойдёт для комплексного анализа хоста по портам до 1024. Это позволяет ей отрабатывать относительно быстро. Если запускать её по всем портам, то будет долго выполняться. Но можно сделать небольшой трюк, который я применяю на практике. Сначала ищем открытые порты, а потом на них выполняем полную проверку с ключом
-A
. Это значительно быстрее полной проверки по всем портам.#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Использовать:
./nmap.sh 192.168.1.1
✅ Различные скорости и интенсивности проверок:
-T0 - paranoid (паранойдный)
-T1 - sneaky (хитрый)
-T2 - polite (вежливый)
-T3 - normal (обычный)
-T4 - aggressive (агрессивный)
-T5 - insane (безумный)
Описание этих шаблонов сканирования есть в документации. По умолчанию используется
-T3
, в локалке иногда повышают до -T4
. Чем ниже режим, тем меньше потоков, меньше пакетов, ниже скорость сканирования, но и заметность меньше. По факту получилось, что из статьи ничего и не взял. Все примеры свои привёл, а подробности смотрел в man и на сайте nmap.
⇨ Полная шпаргалка по nmap в формате PDF.
#nmap