未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。
目前主要存在未授权访问漏洞的有:NFS服务,Samba服务,LDAP,Rsync,FTP,GitLab,Jenkins,MongoDB,Redis,ZooKeeper,ElasticSearch,Memcache,CouchDB,Docker,Solr,Hadoop,Dubbo 等。
Redis默认情况下,会绑定在0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他费信任来源ip访问等,这样会将Redis服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件夹的authorized_keys文件只能,进而可以使用对应私钥直接使用ssh服务登录目标服务器、添加计划任务、写入webshell等操作。
禁止使用root权限启动Redis服务
对Redis访问启动密码认证
添加IP访问限制,并更正默认6379端口
VNC是虚拟网络控制台Virtual Network Console的英文缩写。它是一款优秀的远程控制工具软件,由美国电话电报公司AT&T的欧洲研究实验室开发。VNC是基于UNXI和Linux的免费开源软件,由VNC Server和VNC View两部分组成。VNC默认端口号为5900、5901。VNC未授权访问漏洞如果被利用可能造成恶意用户直接控制target主机
配置VNC客户端登录口令认证并配置符合密码强度要求的密码
以最小普通权限身份运行操作系统
Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以同步本地硬盘中的不同目录。Rsync默认允许匿名访问,如果在配置文件中没有相关的用户认证以及文件授权,就会触发隐患。
账户认证:正确配置认证用户名及密码
权限控制:使用合理的权限
网络访问控制:控制接入源ip
数据加密传输等
开启MongoDB服务不添加任何参数时,默认是没有权限认证的,登录的用户可以通过默认端口无需要密码对数据库任意操作(增、删、改、查高危操作),而且可以远程访问数据库
造成未授权访问的根本原因就在于启动MongoDB的时候未设置--auth,也很少会有人给数据库添加上账号、密码(默认为空口令),使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登录到数据库。
为MongoDB添加认证:MongoDB启动时添加--auth参数、为MongoDB添加用户
MongoDB自身带有一个HTTP服务并支持REST接口。在2.6以后这些接口默认是关闭的。MongoDB默认是使用默认端口监听web服务,一般不需要通过web方式进行远程管理,建议禁用。,修改配置文件或在启动的时候选择-nohttpinterface参数nohttpinterface=false
启动时加入参数--bind_ip127.0.0.1或在/etc/mongodb.conf文件中添加以下内容:bind_ip=127.0.0.1
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。默认情况下Jenkins面板中用户可以选择执行脚本界面来操作一些系统命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务,通过执行界面从而获取服务器权限。
升级版本。
添加认证,设置强密码及账号锁定
禁止把Jenkins直接暴露在公网。
Memcached是一套常用的key-value分布式高速缓存系统,由于Memcached的安全设计缺陷没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者无需认证通过命令交互可直接读取Memcached中的敏感信息
设置Memcached只允许本地访问
进制外网访问Memcached11211端口
配置访问控制策略
最小化权限运行
修改默认端口等
JBoss是一个基于J2EE的开放源码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB1.1、EJB2.0和EJB3规范。默认情况下访问http://ip:8080/jmx-console就可以浏览JBoss的部署管理的信息,不需要输入用户名和密码可以直接部署上传木马。
对jmx控制页面访问添加访问验证
进行JMX Console安全配置
Docker是一个开源的引擎,可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括VMs、bare metal、OpenStack集群和其他的基础应用平台Docker
Docker Remote API是一个取代远程命令行界面(rcli)的REST API。存在问题的版本分别为1.3和1.6因为权限控制等问题导致可以通过docker client或者http直接请求就可以访问这个API,通过这个接口,我们可以新建container,删除已有container,甚至是湖区宿主机的shell。
简单粗暴的方法,对2375端口做网络访问限制,如ACL控制,或者访问规则
修改docker swarm的认证方式,使用TSL认证:Overview Swarm with TLS 和 Confifigure Docker
Swarm for TLS这两篇⽂档,说的是配置好TLS后,Docker CLI 在发送命令到docker daemon之前,
会⾸先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执⾏。
Zookeeper是分布式协同管理工具,常用来管理系统配置信息,提供分布式协同服务。Zookeeper的默认端口是2181。Zookeeper安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用Zookeeper,通过服务器收集敏感信息或者在Zookeeper集群内进行破坏(比如:kill命令)。攻击者能够执行所有只允许由管理员执行的命令。
修改Zookeeper默认端口,采用其他端口服务
添加访问控制,配置服务来源地址限制策略
增加Zookeeper的认证配置
Atlassian Crowd和Atlassian Crowd Data Center都是澳⼤利亚Atlassian公司的产品。Atlassian
Crowd是⼀套基于Web的单点登录系统。该系统为多⽤户、⽹络应⽤程序和⽬录服务器提供验证、授
权等功能。Atlassian Crowd Data Center是Crowd的集群部署版。Atlassian Crowd和Crowd Data
Center在其某些发⾏版本中错误地启⽤了pdkinstall开发插件,使其存在安全漏洞。攻击者利⽤该漏
洞可在未授权访问的情况下对Atlassian Crowd和Crowd Data Center安装任意的恶意插件,执⾏任意
代码/命令,从⽽获得服务器权限。
设置访问/crowd/admin/uploadplugin.action的源ip。
升级最新版本(3.5.0以上)。
Apache CouchDB是⼀个开源数据库,专注于易⽤性和成为"完全拥抱web的数据库"。它是⼀个
使⽤JSON作为存储格式,JavaScript作为查询语⾔,MapReduce和HTTP作为API的NoSQL数据库。
应⽤⼴泛,如BBC⽤在其动态内容展示平台,Credit Suisse⽤在其内部的商品部⻔的市场框架,
Meebo,⽤在其社交平台(web和应⽤程序),默认会在5984端⼝开放Restful的API接⼝,如果使⽤
SSL的话就会监听在6984端⼝,⽤于数据库的管理功能。其HTTP Server默认开启时没有进⾏验证,
⽽且绑定在0.0.0.0,所有⽤户均可通过API访问导致未授权访问。
在官⽅配置⽂档中对HTTP Server的配置有WWW-Authenticate:Set this option to trigger
basic-auth popup on unauthorized requests,但是很多⽤户都没有这么配置,导致漏洞产⽣。
绑定指定ip
设置访问密码
ElasticSearch是⼀个基于Lucene的搜索服务器。它提供了⼀个分布式多⽤户能⼒的全⽂搜索引
擎,基于RESTful web接⼝。Elasticsearch是⽤Java开发的,并作为Apache许可条款下的开放源码发
布,是当前流⾏的企业级搜索引擎。Elasticsearch的增删改查操作全部由http接⼝完成。由于
Elasticsearch授权模块需要付费,所以免费开源的Elasticsearch可能存在未授权访问漏洞。该漏洞导
致,攻击者可以拥有Elasticsearch的所有权限。可以对数据进⾏任意操作。业务系统将⾯临敏感数据
泄露、数据丢失、数据遭到破坏甚⾄遭到攻击者的勒索。Elasticsearch服务普遍存在⼀个未授权
访问的问题,攻击者通常可以请求⼀个开放9200或9300的服务器进⾏恶意攻击。
访问控制策略,限制访问ip
绑定固定ip
Hadoop是⼀个由Apache基⾦会所开发的分布式系统基础架构,由于服务器直接在开放了
Hadoop 机器 HDFS 的 50070 web 端⼝及部分默认服务端⼝,⿊客可以通过命令⾏操作多个⽬录下
的数据,如进⾏删除,下载,⽬录浏览甚⾄命令执⾏等操作,产⽣极⼤的危害。
如⽆必要,关闭 Hadoop Web 管理⻚⾯。
开启身份验证,防⽌未经授权⽤户访问。
设置“安全组”访问控制策略,将 Hadoop 默认开放的多个端⼝对公⽹全部禁⽌或限制可信任的 IP 地
址才能访问包括 50070 以及 WebUI 等相关端⼝。
Jupyter Notebook(此前被称为 IPython notebook)是⼀个交互式笔记本,⽀持运⾏ 40 多种编
程语⾔。 如果管理员未为Jupyter Notebook配置密码,将导致未授权访问漏洞,游客可在其中创建⼀
个console并执⾏任意Python代码和命令。
开启身份验证,防⽌未经授权⽤户访问。
访问控制策略,限制IP访问,绑定固定IP。