чем опасно открывать порты
Не открывайте порты в мир — вас поломают (риски)
Снова и снова, после проведения аудита, на мои рекомендации спрятать порты за white-list’ом встречаюсь со стеной непонимания. Даже очень крутые админы/DevOps’ы спрашивают: «Зачем. «
Предлагаю рассмотреть риски в порядке убывания вероятности наступления и ущерба.
Ошибка конфигурации
Наиболее типичная и опасная ситуация. Как это бывает. Разработчику надо быстро проверить гипотезу, он поднимает временный сервер с mysql/redis/mongodb/elastic. Пароль, конечно, сложный, он везде его использует. Открывает сервис в мир — ему удобно со своего ПК гуём коннектиться без этих ваших VPN. А синтаксис iptables вспоминать лень, все равно сервер временный. Еще пару дней разработки — получилось отлично, можно показывать заказчику. Заказчику нравится, переделывать некогда, запускаем в ПРОД!
Пример намеренно утрированный с целью пройтись по всем граблям:
А в /etc/rsyslog.d/10-iptables.conf
:msg,contains,»[FW — » /var/log/iptables.log
& stop
DDoS по IP
Если злоумышленник знает ваш IP, он может на несколько часов или суток заддосить ваш сервер. Далеко не у всех лоукост-хостингов есть защита от DDoS и ваш сервер просто отключат от сети. Если вы спрятали сервер за CDN, не забудьте сменить IP, иначе хакер его нагуглит и будет DDoS’ить ваш сервер в обход CDN (очень популярная ошибка).
Уязвимости сервисов
Во всем популярном ПО рано или поздно находят ошибки, даже в самых оттестированных и самых критичных. В среде ИБэшников, есть такая полу-шутка — безопасность инфраструктуры можно смело оценивать по времени последнего обновления. Если ваша инфраструктура богата торчащими в мир портами, а вы ее не обновляли год, то любой безопасник вам не глядя скажет, что вы дырявы, и скорее всего, уже взломаны.
Так же стоит упомянуть, что все известные уязвимости, когда-то были неизвестными. Вот представьте хакера, который нашел такую уязвимость, и просканировал весь интернет за 7 минут на ее наличие… Вот и новая вирусная эпидемия ) Надо обновляться, но это может навредить проду, скажете вы. И будете правы, если пакеты ставятся не из официальных репозиториев ОС. Из опыта, обновления из официального репозитория крайне редко ломают прод.
Брутфорс
Как описал выше, есть база с полу миллиардом паролей, которые удобно набирать с клавиатуры. Другими словами, если вы не сгенерировали пароль, а набрали на клавиатуре рядом расположенные символы, будьте уверены* — вас сбрутят.
Уязвимости стека ядра.
Бывает**** и такое, что даже не важно какой именно сервис открывает порт, когда уязвим сам сетевой стек ядра. То есть абсолютно любой tcp/udp-сокет на системе двухлетней давности подвержен уязвимости приводящий к DDoS.
Усиление DDoS-атак
Напрямую ущерба не принесет, но может забить ваш канал, поднять нагрузку на систему, ваш IP попадет в какой-нибудь black-list*****, а вам прилетит абуза от хостера.
Неужели вам нужны все эти риски? Добавьте ваш домашний и рабочий IP в white-list. Даже если он динамический — залогиньтесь через админку хостера, через веб-консоль, и просто добавьте еще один.
Я 15 лет занимаюсь построением и защитой IT-инфраструктуры. Выработал правило, которое всем настоятельно рекомендую — ни один порт не должен торчать в мир без white-list’a.
Например, наиболее защищенный web-сервер*** — это тот, у которого открыты 80 и 443 только для CDN/WAF. А сервисные порты (ssh, netdata, bacula, phpmyadmin) должны быть как минимум за white-list’ом, а еще лучше за VPN. Иначе вы рискуете быть скомпрометированным.
У меня все. Держите свои порты закрытыми!
Опасно ли держать открытым RDP в Интернете?
Нередко я читал мнение, что держать RDP (Remote Desktop Protocol) порт открытым в Интернет — это весьма небезопасно, и делать так не надо. А надо доступ к RDP давать или через VPN, или только с определённых «белых» IP адресов.
Я администрирую несколько Windows Server для небольших фирм, в которых мне поставили задачу обеспечить удалённый доступ к Windows Server для бухгалтеров. Такой вот современный тренд — работа из дома. Достаточно быстро я понял, что мучить бухгалтеров VPN — неблагодарное занятие, а собрать все IP для белого списка не получится, потому что IP адреса у народа — динамические.
Поэтому я пошёл самым простым путём — пробросил RDP порт наружу. Теперь для доступа бухгалтерам нужно запустить RDP и ввести имя хоста (включая порт), имя пользователя и пароль.
В этой статье я поделюсь опытом (положительным и не очень) и рекомендациями.
Риски
Чем вы рискуете открывая порт RDP?
2) Потеря данных
Например в результате работы вируса-шифровальщика.
Или целенаправленного действия злоумышленника.
3) Потеря рабочей станции
Работникам нужно работать, а система — скомпроментирована, нужно переустанавливать / восстанавливать / конфигурировать.
4) Компроментация локальной сети
Если злоумышленник получил доступ к Windows-компьютеру, то уже с этого компьютера он сможет иметь доступ к системам, которые недоступны извне, из Интернета. Например к файл-шарам, к сетевым принтерам и т.д.
и этот шифровальщик сначала зашифровал большинство файлов на диске C:, а затем начал шифровать файлы на NAS по сети. Так как NAS была Synology, с настроенными snapshots, то NAS я восстановил за 5 минут, а Windows Server переустанавливал с нуля.
Наблюдения и Рекомендации
Я мониторю Windows Servers с помощью Winlogbeat, которые шлют логи в ElasticSearch. В Kibana есть несколько визуализаций, а я ещё настроил себе кастомную дэшборд.
Сам мониторинг не защищает, но помогает определиться с необходимыми мерами.
Вот некоторые наблюдения:
a) RDP будут брут-форсить.
На одном из серверов я RDP повесил не на стандартный порт 3389, на 443 — ну типа замаскируюсь под HTTPS. Порт сменить со стандартного, наверное стоит, но толку от этого немного. Вот статистика с этого сервера:
Видно, что за неделю было почти 400 000 неудачных попыток зайти по RDP.
Видно, что попытки зайти были с 55 001 IP адресов (некоторые IP адреса уже были заблокированы мной).
Тут прямо напрашивается вывод о том, что нужно ставить fail2ban, но
Есть пара заброшенных проектов на Гитхабе, которые вроде бы это делают, но я даже не пробовал их ставить:
https://github.com/glasnt/wail2ban
https://github.com/EvanAnderson/ts_block
Ещё есть платные утилиты, но я их не рассматривал.
Если вы знаете открытую утилиту для этой цели — поделитесь в комментариях.
Update: В комментариях подсказали, что порт 443 — неудачный выбор, а лучше выбирать высокие порты (32000+), потому что 443 сканируется чаще, и распознать RDP на этом порту — не проблема.
Update: В комментариях подсказали, что такая утилита есть:
https://github.com/digitalruby/ipban
После запуска IPBan, количество неуспешных логинов радикально упало:
2020-02-11 00:01:18.2517|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 31.131.251.228,, RDP, 1
2020-02-11 00:01:18.2686|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 31.131.251.228, Administrator, RDP, 2
2020-02-11 00:02:49.7098|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 95.213.143.147,, RDP, 3
2020-02-11 00:02:49.7098|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 95.213.143.147, Administrator, RDP, 4
2020-02-11 00:04:20.9878|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 95.213.184.20,, RDP, 5
2020-02-11 00:04:20.9878|WARN|DigitalRuby.IPBanCore.Logger|Banning ip address: 95.213.184.20, user name:, config black listed: False, count: 5, extra info:
2020-02-11 00:04:20.9878|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 95.213.184.20, Administrator, RDP, 5
2020-02-11 00:04:21.0040|WARN|DigitalRuby.IPBanCore.Logger|IP 95.213.184.20, Administrator, RDP ban pending.
2020-02-11 00:04:21.1237|WARN|DigitalRuby.IPBanCore.Logger|Updating firewall with 1 entries…
2020-02-11 00:05:36.6525|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 31.131.251.24,, RDP, 3
2020-02-11 00:05:36.6566|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 31.131.251.24, Administrator, RDP, 4
2020-02-11 00:07:22.4729|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 82.202.249.225, Administrator, RDP, 3
2020-02-11 00:07:22.4894|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 82.202.249.225,, RDP, 4
2020-02-11 00:08:53.1731|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 45.141.86.141,, RDP, 3
2020-02-11 00:08:53.1731|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 45.141.86.141, Administrator, RDP, 4
2020-02-11 00:09:23.4981|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 68.129.202.154,, RDP, 1
2020-02-11 00:09:23.5022|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 68.129.202.154, ADMINISTRATOR, RDP, 2
2020-02-11 00:10:39.0282|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 95.213.143.147,, RDP, 5
2020-02-11 00:10:39.0336|WARN|DigitalRuby.IPBanCore.Logger|Banning ip address: 95.213.143.147, user name:, config black listed: False, count: 5, extra info:
2020-02-11 00:10:39.0336|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 95.213.143.147, Administrator, RDP, 5
2020-02-11 00:10:39.0336|WARN|DigitalRuby.IPBanCore.Logger|IP 95.213.143.147, Administrator, RDP ban pending.
2020-02-11 00:10:39.1155|WARN|DigitalRuby.IPBanCore.Logger|Updating firewall with 1 entries…
2020-02-11 00:12:09.6470|WARN|DigitalRuby.IPBanCore.Logger|Login failure: 82.202.249.225,, RDP, 5
2020-02-11 00:12:09.6470|WARN|DigitalRuby.IPBanCore.Logger|Banning ip address: 82.202.249.225, user name:, config black listed: False, count: 5, extra info:
b) Есть определённые username, которые злоумышленники предпочитают
Видно, что перебор идёт по словарю с разными именами.
Но вот что я заметил: значительное количество попыток — это использование имени сервера, как логина. Рекомендация: не используйте одинаковое имя для компьютера и для пользователя. Причём, иногда похоже имя сервера пытаются как-то распарсить: например для системы с именем DESKTOP-DFTHD7C больше всего попыток зайти с именем DFTHD7C:
Соответственно, если у вас будет компьютер DESKTOP-MARIA, то вероятно будут идти попытки заходить под пользователем MARIA.
Ещё, что я заметил из логов: на большинстве систем, большинство попыток зайти — это с именем «administrator». И это неспроста, потому что во многих версиях Windows, это пользователь существует.
https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/local-accounts#administrator-account
Administrator account
The default local Administrator account is a user account for the system administrator. Every computer has an Administrator account (SID S-1-5-domain-500, display name Administrator). The Administrator account is the first account that is created during the Windows installation.
The Administrator account has full control of the files, directories, services, and other resources on the local computer. The Administrator account can create other local users, assign user rights, and assign permissions. The Administrator account can take control of local resources at any time simply by changing the user rights and permissions.
The default Administrator account cannot be deleted or locked out, but it can be renamed or disabled.
Это упрощает задачу для злоумышленников: вместо подбора имени и пароля нужно только подобрать пароль.
Кстати та система, которая у меня словила шифровальщика имела пользователя Administrator и пароль Murmansk#9. Я до сих не уверен, как взломали ту систему, потому что мониторить я начал как раз после того случая, но думаю, что перебор — вероятен.
Так если пользователя Administrator нельзя удалить, то что же делать? Его можно переименовать!
Рекомендации из этого пункта:
Вот таким образом, я наблюдаю, как несколько Windows Server под моим контролем брут-форсятся уже где-то пару лет, и безуспешно.
Откуда я знаю, что безуспешно?
Потому что на скриншотах выше видно, что есть логи успешных заходов по RDP, в которых есть информация:
И я регулярно туда посматриваю — аномалий не обнаружено.
Кстати, если с какого-то IP брут-форсят особо усердно, то заблокировать отдельные IP (или подсети) можно вот так в PowerShell:
Кстати у Elastic, помимо Winlogbeat ещё есть Auditbeat, который может следить за файлами и процессами на системе. Ещё есть SIEM (Security Information & Event Management) приложение в Kibana. Я пробовал и то и другое, но пользы особо не увидел — похоже Auditbeat будет более полезен для Linux систем, а SIEM ничего внятного мне пока не показал.
Ну и финальные рекомендации:
Риски открытия портов маршрутизатора для игры в онлайн и как этого избежать
В некоторых случаях для правильной работы программы или игры требуется, чтобы на маршрутизаторе были открыты определенные порты, чтобы они были доступны из Интернета. Однако по возможности рекомендуется держать порты закрытыми. Киберпреступники сканируют порты на предмет уязвимостей и способов проведения атак. Случается так, что иногда, чтобы использовать программу или играть в сети, нам нужно открыть порты. Здесь мы объясним, насколько опасно открывать порты маршрутизатора для игры в сети, а также, в случае, если мы должны это сделать, как мы должны это делать.
Когда мы говорим о транспортном уровне модели TCP / IP, мы должны иметь в виду два типа протоколов: TCP и UDP. Оба могут использоваться при открытии портов.
Как открывать порты и зачем их открывать?
Первое, что нам нужно сделать, чтобы открыть порты маршрутизатора для игры, или что нам нужно, это узнать IP-адрес нашего маршрутизатора. Мы сделаем это с помощью окна командной строки, набрав эту команду:
Затем появится экран, на котором Шлюз по умолчанию это IP нашего роутера.
Затем мы записываем его в интернет-браузере и вводим свой логин и пароль для входа в конфигурацию роутера. Затем мы ищем раздел, который обычно называется NAT, виртуальный сервер или перенаправление портов.
Опасно ли открывать порты роутера для игры?
В этом смысле, открывая порты маршрутизатора для игр или программ, мы должны убедиться, что диапазон как можно меньше. Чем меньше возможностей атаковать мы даем киберпреступникам, тем в большей безопасности мы будем.
Вот еще опасные порты TCP и UDP и как мы можем защитить себя. Эти порты, которые мы вам показали, являются самыми простыми и первыми, которые проверяет киберпреступник. Поэтому, если мы заблокируем все, кроме тех, которые используются и нужны нам, у нас будет очень защищенная система. Помните, что если у нас есть открытый порт, это может быть первым шагом к вторжению.
Проверить открытые порты онлайн
Далее пора проверить открытые порты на вашем роутере. Для этого воспользуемся сайтом теста скорости. Там у них естьтест порта чтобы быстро и легко проверить это онлайн.
После загрузки сети мы помещаем наш общедоступный IP-адрес и устанавливаем порт или порты, которые хотим проверить. Этот инструмент позволяет вам проверять диапазоны портов, а также порты, разделенные запятыми. Наконец, вот мои результаты, в которых вы можете видеть, что порты 21, 22 и 23, о которых мы говорили ранее, закрыты, что является хорошей новостью.
Вирусы, если я открою порты: опасность, которой мы можем избежать, если откроем их должным образом
Как правило, для выполнения большинства задач не требуется открывать порт на нашем маршрутизаторе. Однако для некоторых специальных задач это необходимо. В некоторые моменты для правильного функционирования программы или игры нам нужно открыть некоторые порты, чтобы они были доступны из Интернета. Эта задача должна выполняться с большой осторожностью, поскольку киберпреступники проводят сканирование портов в поисках различных возможностей для выполнения своих атак. Здесь мы собираемся объяснить, могут ли вирусы проникнуть, если я открою порты, и как мы должны это делать правильно.
Что нужно помнить о портах
Правильно открывайте порты роутера
Прежде чем начать, важно прокомментировать, что на транспортном уровне модели TCP / IP мы должны говорить о двух типах протоколов: TCP и UDP. Оба могут использоваться при открытии портов.
В этом смысле некоторые рекомендации, позволяющие избежать проблем при открытии портов:
Если мы хотим открыть порты на нашем Windows ПК, мы начнем с использования команды ipconfig / all в окне командной строки.
Затем мы записываем IP-адрес маршрутизатора в браузере и вводим наше имя пользователя и пароль, чтобы войти в конфигурацию маршрутизатора. Затем мы ищем раздел, который обычно называется NAT, Virtual Server или Port Forwarding, и выполняем шаги, которые я установил выше.
Могу ли я заразиться вирусом, если открою порты своего роутера?
Одна из причин, по которой мы это делаем, заключается в том, что в поисковых системах, таких как Shodan, вы можете видеть открытые порты различных сервисов, и он даже может сказать нам, есть ли сервис, работающий за этим портом.
В этом смысле для повышения нашей безопасности мы должны избегать использования некоторых портов, если мы не собираемся использовать эту службу. Например, порт 21 для FTP, 22 для SSH, 23 для Telnet или 80 для создания веб-сервера являются хорошо известными портами и будут первыми, которые будут обнаружены при сканировании портов. Даже если вы используете службы FTP или SSH, рекомендуется изменить порты прослушивания на другие, кроме портов по умолчанию.
Вот самые опасные порты TCP и UDP которые мы рекомендуем не использовать, если они вам не нужны. Следовательно, если мы откроем только строго необходимые порты, у нас будет более защищенная система. Помните, что чем больше у нас открытых портов, тем больше возможностей для атаки мы даем киберпреступникам.
Как защитить порты TCP и UDP и почему некоторые из них опасны
На транспортном уровне модели TCP / IP у нас есть два типа протоколов: TCP и UDP. Оба они постоянно используются различными программами и протоколами прикладного уровня, такими как порт 80 и 443 для просмотра веб-страниц, порт 22 для протокола SSH или популярный порт 1194 для виртуальных частных сетей OpenVPN. Некоторые из этих портов весьма опасны, если мы не отфильтруем их правильно с помощью брандмауэр, потому что они могли проводить разные виды атак и даже взламывать наше оборудование. Сегодня в этой статье мы покажем вам, какие порты мы должны защищать, чтобы избежать проблем.
Что такое порты TCP и UDP?
Как в TCP, так и в UDP у нас есть в общей сложности 65535 доступных портов, у нас есть классификация в зависимости от используемого номера порта, поскольку некоторые порты обычно называются «известными», и они зарезервированы для определенных приложений, хотя есть много других портов. Они обычно используются различным программным обеспечением для связи как в локальной сети, так и через Интернет. У нас также есть зарегистрированные порты и временные порты.
Известные порты
Известные порты в диапазоне от порта 0 до 1023 регистрируются и назначаются Управлением по присвоению номеров Интернета (IANA). Например, в этом списке портов есть порт 20 для FTP-Data, порт 21 для FTP-Control, порт 22 для SSH, порт 23 для Telnet, порт 80 и 443 для Интернета (HTTP и HTTPS соответственно), а также почта. port среди многих других протоколов прикладного уровня.
Зарегистрированные порты
Зарегистрированные порты варьируются от порта 1024 до порта 49151. Основное отличие этих портов состоит в том, что разные организации могут делать запросы в IANA, чтобы предоставить им определенный порт по умолчанию, и он будет назначен для использования с определенным приложением. Эти зарегистрированные порты зарезервированы, и никакая другая организация не сможет зарегистрировать их снова, однако они обычно являются «частично зарезервированными», потому что, если организация прекращает их использовать, они могут быть повторно использованы другой компанией. Наглядным примером зарегистрированного порта является 3389, который используется для RDP-подключений к удаленному рабочему столу в Windows.
Эфемерные порты
Диапазон этих портов от 49152 до 65535, этот диапазон портов используется клиентскими программами, и они постоянно используются повторно. Этот диапазон портов обычно используется при передаче на известный или зарезервированный порт с другого устройства, такого как пассивный Интернет или FTP. Например, когда мы посещаем веб-сайт, порт назначения всегда будет 80 или 443, но порт источника (чтобы данные знали, как возвращаться) использует порт эпиметра.
Какие порты я должен особенно защищать?
Все порты, которые используются для установления удаленной связи, будь то для обмена файлами, удаленного управления через консоль и даже приложений удаленного рабочего стола, e-mail и другие службы, подверженные атакам, должны быть надлежащим образом защищены. Затем у вас есть список портов (TCP), которые вы должны защищать особенно, и закрывайте их, когда мы не собираемся его использовать, потому что в будущем возможно, что они уже используются, и мы забыли защитить их должным образом.
Как мне правильно защитить порты?
По умолчанию все порты должны быть закрыты, если только вы не используете определенную службу и не должны ее открывать. Очень важно всегда иметь наименьшее количество экспортируемых локальных сервисов, так как поверхность атаки будет меньше. Брандмауэры позволят нам автоматически закрыть все порты и открывать только те, которые нам нужны.
Используемое программное обеспечение, открывающее сокет TCP или UDP, важно, чтобы оно было актуальным, мало полезно закрывать все порты, кроме одного, если служба, работающая на этом порту, не обновлена и имеет недостатки безопасности. По этой причине так важно обновлять все программное обеспечение, всегда рекомендуется использовать программное обеспечение, которое все еще поддерживается, для получения различных обновлений.
Если для доступа к определенной службе требуется аутентификация, необходимо, чтобы учетные данные были надежными, по возможности используйте цифровые сертификаты или ключи SSH (если вы собираетесь аутентифицироваться на сервере SSH). Например, всегда рекомендуется закрывать порт 23 Telnet, потому что это небезопасный протокол, и поэтому его лучше не использовать ни при каких обстоятельствах.
Настоятельно рекомендуется отслеживать, какие порты TCP и UDP используются, чтобы обнаруживать возможные проблемы вторжений или заражения троянами. Важно исследовать любой странный трафик или порты, которые открыты, хотя этого не должно быть. Также очень важно знать, как определенная служба (прослушивающая определенный порт) ведет себя при нормальном использовании, чтобы идентифицировать необычное поведение.
Наконец, в дополнение к использованию брандмауэров для закрытия всех портов, которые мы не используем, также настоятельно рекомендуется использовать IDS / IPS для обнаружения странного поведения на сетевом уровне, и было бы даже целесообразно установить IDS самостоятельно. ПК, чтобы он обнаружил любую аномалию.