Эмуляция открытых портов - это когда открыт определенный порт и к нему можно подключиться, но в то же время он не является настоящей службой и не несет в себе основного функционала, а только эмулирует службу схожим или аналогичным приветствием при подключении.
Эмуляцию портов используют зачастую крупные компании с целью защиты сетевой инфраструктуры от поиска служб и уязвимостей в них. Проще говоря вводят сканер портов в заблуждение и зачастую зависание при попытке сканирования.
В данном руководстве мы установим службу PortSpoof и настроим эмуляцию для всех портов, кроме тех, которые на самом деле задействованы службами (22, 80, 443).
Когда открыты всего 3 порта, а остальные закрыты - то сканирование портов в полном диапазоне составляет считанные секунды и любой желающий может узнать какие службы доступны просканировав порты, используя IP адрес сервера.
В случае, когда мы будем эмулировать состояние всех портов - т.е. сделаем их открытыми во всем диапазоне с 1 по 65535, на сканирование уйдет примерно 65535 секунд, что равно ~ 18 часам и полученная информация не будет представлять ценности, что существенно усложнит поиск уязвимостей.
1. Установка PortSpoof
apt install git cmake build-essential autoconf automake libtool nano
git clone https://github.com/drk1wi/portspoof.git
cd portspoof
chmod +x configure
./configure --sysconfdir=/etc/
make -j$(nproc)
make install
1.1 Создадим лог файл
mkdir -p /var/log/portspoof
touch /var/log/portspoof/alerts.log
chmod 644 /var/log/portspoof/alerts.log
1.2 Создадим файл службы
nano /etc/systemd/system/portspoof.service
следующего содержания:
[Unit]
Description=Portspoof Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/portspoof \
-c /etc/portspoof.conf \
-p 4444 \
-s /etc/portspoof_signatures \
-d \
-l /var/log/portspoof/alerts.log
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
1.3 Проверка пути до файла portspoof
which portspoof
Убедитесь, что он соответствует в файле службы.
1.4 Запуск службы
systemctl daemon-reexec
systemctl daemon-reload
systemctl enable portspoof
systemctl start portspoof
Для проверки состояния:
systemctl status portspoof
1.5 Проверка работы
telnet <IP-адрес> 4444
Trying 89.xx.187.xx...
Connected to 89.xx.187.xx.
Escape character is '^]'.
Означает, что подключение успешно. И теперь необходимо настроить фаервол для переадресации остальных портов.
2. Установка iptables с автозагрузкой правил
apt install iptables iptables-persistent
Нажмите Да в интерактивном окне для v4 и v6
2.1 Установка правил
Мы сделали несколько правил диапазоном, чтобы исключить наши службы (22, 80, 443). Просто сделайте по аналогии для своих.
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 1:21 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 23:79 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 81:442 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 444:65535 -j REDIRECT --to-ports 4444
Добавим разрешение для наших служб:
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Сохраним правила, чтобы они применились после перезагрузке сервера
netfilter-persistent save
или
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
Готово, теперь вы можете попробовать подключится к любому порту из диапазона и посмотреть его вывод. Мы воспользовались бесплатной утилитой сканер портов под Windows - Advanced Port Scanner.
Как мы видим порты отвечают приветствием исходя из 2 файлов настроек.
- portspoof.conf - в нем перечислены некоторые порты и ответы к ним. Туда можно добавить по аналогии порт и ответ, для пустого ответа номер порта и "". portspoof_signatures - файл сигнатур в котором содержится информация по всем портам, что не перечислены в файле конфигурации.
Ответы (баннеры) берутся из этих двух файлов настроек.
После редактирования файлов необходимо просто перезапустить службу:
systemctl restart portspoof
Как мы видим каждый порт имеет свой ответ. Если сканирование вовремя не остановить - то программа просто зависает из-за большого количества.
Ответы по определенным портам могут исказить представление об операционной системе, когда сканирующий может подумать , что это не сервер, а роутер или вовсе принтер.
3. В дополнение
Чтобы отключить приветствия портов, необходимо убрать файл сигнатур, заменить пустым. Для этого выполните команды:
mv /etc/portspoof_signatures /etc/portspoof_signatures_orig
touch /etc/portspoof_signatures
добавим новую строку перед EOF, иначе служба не запустится:
printf "\n" > /etc/portspoof_signatures
Перезапустим службу:
systemctl restart portspoof
Теперь при подключении к портам, что не указаны явно в настройках файла portspoof.conf будут содержать пустой ответ. Чтобы так было со всеми просто закомментируйте строки в файле portspoof.conf по ним и перезапустите службу.
Пустой ответ для большого количества портов более верное решение, так как нет полного понимания какая служба ответила.
В то время как если Ваша цель подмена устройства то ответы портов важны, но тогда не имеет смысл делать это для всех - это слишком очевидно.
После успешного подключения соединение разрывается. Если Вам нужно сканировать большой диапазон портов лучше использовать утилиту nmap.
4. Сканирование портов через nmap
apt install nmap
4.1 Обычное сканирование
nmap -p 1-65535 <IP-адрес>
4.2 Ускоренное сканирование
nmap -p 1-65535 -T4 <IP-адрес>
4.3 С выводом информации по службам
nmap -p 1-65535 -sV <IP-адрес>
4.4 С сохранением результатов в файл
nmap -p 1-65535 -oN result.txt <IP-адрес>