Перейти к основному содержимому

Уязвимые сервисы

Есть сервисы, которые недостаточно хорошо защищены от несанкционированного доступа третьими лимицами, либо их работа не предусматривает такой защиты в принципе. Запускать такие сервисы с открытым внешним доступом не рекомендуется.

Внешний доступ - это возможность доступа к сервису через внешний IP-адрес сервера. В большинстве случаев это не нужно, и проще всего будет отключить внешний доступ, чтобы сервис был доступен только на внутреннем IP-адресе сервера - 127.0.0.1.

Если Вы запускаете какой-либо из таких сервисов через docker - пожалуйста, ознакомьтесь с данной статьей, а если внешний доступ к сервису все же нужен - здесь описано, как ограничить доступ только для доверенных IP-адресов.

Redis

Популярный сервис кеширования, не обладающий должной защитой от несанкционированного доступа. Установка авторизации средствами самого Redis (AUTH) не является надежным решением, т.к. отсутствует какая-либо защита от перебора паролей, и с учётом высокой скорости работы redis это позволяет перебирать параллельно большое их количество, при этом создавая паразитную нагрузку на сервер. Об этом прямо говорится в официальной документации:

https://redis.io/topics/security

Посредством получения доступа к сервису злоумышленник может получить какие-либо важные данные из хранилища, сбросить хранящиеся данные, а также получить возможность запускать на сервере процессы от пользователя, от которого запщен Redis. Подробнее об этом можно прочесть здесь:

https://antirez.com/news/96

Чтобы настроить сервис на работу только на локальном IP, Вам нужно в конфигурационном файле сервиса задать директиву bind следующим образом:

bind 127.0.0.1

Конфигурационные файл, в зависимости от ОС и метода установки, может быть:

  • /etc/redis.conf
  • /etc/redis/redis.conf
  • /etc/redis/*.conf

После изменения настройки перезапустите сервис. Для этого может использоваться одна из следующих команд, в зависимости от дистрибутива ОС:

  • sytemctl restart redis-server
  • sytemctl restart redis
  • /etc/init.d/redis restart
  • /etc/init.d/redis-server restart

Memcached

Популярный сервис кеширования, также не обладающий надежной защитой. Установка авторизации возможна на свежих дистрибутивах, однако документация не рекомендует использовать это во внешних сетях:

https://docs.memcached.org/protocols/binarysasl/

Посредством получения доступа к сервису злоумышленник может получить какие-либо важные данные из хранилища, сбросить хранящиеся данные, и пр, а также сервис memcached может быть задействован злоумышленниками для атаки "UDP-based Amplification Attacks". Более подробно с описанием данной уязвимости Вы можете ознакомиться по ссылкам:

https://securityaffairs.com/69974/hacking/memcached-ddos-attacks-kill-switch.html https://www.cloudflare.com/learning/ddos/memcached-ddos-attack/

Чтобы настроить сервис на работу только на локальном IP, Вам нужно в конфигурационном файле сервиса задать флаг -l 127.0.0.1 следующим образом:

  • В Debian/Ubuntu в файле /etc/memcached.conf прописать строку (если в файле уже есть стрка с флагом -l, то нужно ее заменить):
    -l 127.0.0.1
  • В RHEL-based (CentOS, Almalinux, Rocky linux) следует в файле /etc/sysconfig/memcached прописать строку:
    OPTIONS=" -l 127.0.0.1"

После изменения настройки перезапустите сервис одной из следующих команд, в зависимости от дистрибутива:

  • sytemctl restart memcached
  • /etc/init.d/memcached restart

RabbitMQ

Популярный менеджер очередей, при наличии к которому доступа злоумышленник может нарушить его работу, получить доступ к данным и удалить их, а также, потенциально - загрузить вредонсоынй код. При этом уязвимости в данном ПО периодически позволяют получать доступ к данным без какой-либо авторизации, например:

https://nvd.nist.gov/vuln/detail/CVE-2016-9877

Настроить сервис на работу только на локальном IP можно двумя способами:

  1. listeners.tcp.*
    Откройте файл конфигурации (обычно /etc/rabbitmq/rabbitmq.conf, но может отсутствовать) и внесите значения:
    listeners.tcp.1 = 127.0.0.1:5672
    listeners.tcp.2 = ::1:5672

Если есть другие настройки listeners.tcp.*, удалите их.

  1. Переменная окружения RABBITMQ_NODE_IP_ADDRESS
    В файле /etc/rabbitmq/rabbitmq-env.conf Вам нужно внести значение переменной:
    NODE_IP_ADDRESS=127.0.0.1

После внесения изменений в настройках перезапустите сервис одной из следующих команд, в зависимости от дистрибутива:

  • sytemctl restart rabbitmq-server
  • /etc/init.d/rabbitmq-server restart

MongoDB

Сервис баз данных, открытый доступ к которому может являться крайне небезопасной и привести как к полному удалению всех MongoDB баз, так и к получению злоумышленниками доступа к данным авторизации пользователей Ваших сайтов, взлому административной части сайта и загрузке вредоносного кода. Более подробно с описанием уязвимостей Вы можете ознакомиться по ссылкам:

https://nvd.nist.gov/vuln/detail/CVE-2015-7882 https://nvd.nist.gov/vuln/detail/CVE-2019-20925 https://nvd.nist.gov/vuln/detail/CVE-2024-3374

Настроить сервис на работу только на локальном IP можно с помощью директивы bind_ip или bindIP, в зависимости от версии сервера, в файле /etc/mongodb.conf для Debian/Ubuntu и /etc/mongod.conf в CentOS. Найдите текущее значение и замените его на 127.0.0.1.

После внесения изменений в настройках перезапустите сервис одной из следующих команд, в зависимости от дистрибутива:

  • sytemctl restart mongod
  • /etc/init.d/mongod restart

Elasticsearch

Популярный сервис, обычно используемый для реализации работы поисковых механизмов на сайтах, уязвим и потенциально может позволить запуск произвольного вредоносного кода на сервере. Более подробно с описанием данной уязвимости Вы можете ознакомиться по ссылкам:

https://nvd.nist.gov/vuln/detail/cve-2015-1427 https://nvd.nist.gov/vuln/detail/cve-2021-44228

Настроить сервис на работу только на локальном IP можно с помощью директивы network.host в конфигурационном файле /etc/elasticsearch/elasticsearch.yml:

network.host: 127.0.0.1

После внесения изменений в настройках перезапустите сервис одной из следующих команд, в зависимости от дистрибутива:

  • sytemctl restart elasticsearch
  • /etc/init.d/elasticsearch restart

Portmapper

Сервис, который может быть задействован злоумышленниками для атаки "UDP-based Amplification Attacks". Ознакомиться с описанием проблемы Вы можете по ссылке:

https://www.us-cert.gov/ncas/alerts/TA14-017A

Данный сервис использует для подключения порт 111. Проверить наличие сервиса на данном порту Вы можете командой "lsof -i:111". Если на Вашем сервере есть ПО, использующее порт 111, то вывод может быть следующим:

# lsof -i:111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 21855 root 6u IPv4 345137924 0t0 UDP *:sunrpc
rpcbind 21855 root 8u IPv4 345137928 0t0 TCP *:sunrpc (LISTEN)
rpcbind 21855 root 9u IPv6 345137931 0t0 UDP *:sunrpc
rpcbind 21855 root 11u IPv6 345137935 0t0 TCP *:sunrpc (LISTEN)

Также для проверки своего сервера Вы можете использовать утилиту rpcinfo. В случае если на Вашем сервере открыт 111 порт её вывод может быть следующим:

# rpcinfo -p IP
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 57271 status
100024 1 tcp 40538 status

Чаще всего данная служба используется для работы механизма NFS. Если Вы не используете NFS, то скорее всего можно отключить службу portmap, используя команды:

  • На Debian 6:
    /etc/init.d/portmap stop; update-rc.d -f portmap remove
  • На Debian 7, Ubuntu 12.04, 14.04:
    /etc/init.d/rpcbind stop; update-rc.d -f rpcbind remove
  • На CentOS 6:
    service rpcbind stop; chkconfig rpcbind off
  • На Debian 8, CentOS 7 и выше:
    systemctl stop rpcbind.socket; systemctl disable rpcbind.socket
    systemctl stop rpcbind; systemctl disable rpcbind

Или даже удалить:

  • На Debian 6:
    apt-get remove portmap
  • На Debian (7 и выше), Ubuntu:
    apt-get remove rpcbind

NetBIOS

Данный сервис, используемый для обеспечения сетевых операций ввода-вывода, уязвим к атакам типа "NetBIOS NBSTAT Traffic Amplification".

Ознакомиться с описанием проблемы Вы можете по ссылке:

http://www.rapid7.com/db/vulnerabilities/netbios-nbstat-amplification

Проверить уязвимость NetBIOS-сервиса можно обратившись к нему следующим образом (обратите внимание, домовые провайдеры зачастую блокируют такие запросы, так что выполнять проверку стоит с какого-либо сервера, а не с домашнего компьютера):

  • С Windows ОС:
    nbtstat -A IP
  • С Linux ОС (Может потребоваться установить пакет samba-common-bin):
    nmblookup -A IP 

Если в ответ Вы получаете данные от NetBIOS-сервиса, значит Ваш сервер уязвим.

На серверах Linux данный сервис предоставляется сервисом samba. Если Вы его не используете, то отключите его:

  • На Debain младше 7 версии и Ubuntu младше 14:
    service samba stop; update-rc.d -f samba remove
  • На Debian 8 и старше, Ubuntu 16 и старше:
    systemctl stop samba; systemctl disable samba
  • На CentOS 6:
    service smb stop; chkconfig smb off
  • На CentOS 7 :
    systemctl stop smb; systemctl disable smb

Либо, можете удалить сервис полностью:

  • На Debain, Ubuntu:
    apt-get remove samba
  • На CentOS:
    yum remove samba

Если служба нужна, но не требуется её NetBIOS составляющая, можно добавить в конфигурационный файл (обычно это /etc/samba/smb.conf) строку:

disable netbios = yes

После этого перезапустите службу командами, в зависимости от ОС:

  • sytemctl restart samba
  • /etc/init.d/samba restart
  • sytemctl restart smb
  • /etc/init.d/smb restart