Уязвимые сервисы
Есть сервисы, которые недостаточно хорошо защищены от несанкционированного доступа третьими лимицами, либо их работа не предусматривает такой защиты в принципе. Запускать такие сервисы с открытым внешним доступом не рекомендуется.
Внешний доступ - это возможность доступа к сервису через внешний IP-адрес сервера. В большинстве случаев это не нужно, и проще всего будет отключить внешний доступ, чтобы сервис был доступен только на внутреннем IP-адресе сервера - 127.0.0.1
.
Если Вы з апускаете какой-либо из таких сервисов через docker
- пожалуйста, ознакомьтесь с данной статьей, а если внешний доступ к сервису все же нужен - здесь описано, как ограничить доступ только для доверенных IP-адресов.
Redis
Популярный сервис кеширования, не обладающий должной защитой от несанкционированного доступа. Установка авторизации средствами самого Redis
(AUTH) не является надежным решением, т.к. отсутствует какая-либо защита от перебора паролей, и с учётом высокой скорости работы redis это позволяет перебирать параллельно большое их количество, при этом создавая паразитную нагрузку на сервер. Об этом прямо говорится в официальной документации:
https://redis.io/topics/security
Посредством получения доступа к сервису злоумышленник может получить какие-либо важные данные из хранилища, сбросить хранящиеся данные, а также получить возможность запускать на сервер е процессы от пользователя, от которого запщен Redis
. Подробнее об этом можно прочесть здесь:
Чтобы настроить сервис на работу только на локальном 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 можно двумя способами:
- listeners.tcp.*
Откройте файл конфигурации (обычно/etc/rabbitmq/rabbitmq.conf
, но может отсутствовать) и внесите значения:listeners.tcp.1 = 127.0.0.1:5672
listeners.tcp.2 = ::1:5672
Если есть другие настройки listeners.tcp.*, удалите их.
- Переменная окружения 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