一、SQL注入
漏洞描述
由于应用程序缺少对输入进行安全性检查,攻击者利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行,把一些包含攻击代码当做命令或者查询语句发送给解释器,这些恶意数据可以欺骗解释器,从而执行计划外的命令或者未授权访问数据。
修复建议:
- 通过使用静态和动态测试,定期检查并发现应用程序中的SQL注入漏洞。
- 通过正则规范用户输入,校验输入数据中是否包含SQL语句的保留字,如:SELECT,WHERE,EXEC,DROP等。或使用转义字符,来修复SQL注入漏洞,以便忽略掉一些特殊字符。
- 通过使用参数化查询和对象关系映射(Object Relational Mappers,ORM),来避免和修复注入漏洞。此类查询通过指定参数的占位符,以便数据库始终将它们视为数据,而非SQL命令的一部分。
- 通过对数据库强制执行最小权限原则,来减缓SQL注入漏洞的影响。籍此,应用程序的每一个软件组件都只能访问、并仅影响它所需要的资源。
- 对访问数据库的Web应用程序采用Web应用防火墙(Web Application Firewall,WAF)。这有助于识别出针对SQL注入的各种尝试,进而防止此类尝试作用到应用程序上。
- 避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
二、跨站脚本攻击漏洞
漏洞描述
跨站脚本攻击,是WEB程序中一种常见的漏洞。其主要的攻击手段是在在利用网站上的可由用户输入信息的地方,恶意注入含有攻击性的脚本,达到攻击网站或者窃取用户cookied等隐私信息的目的。
修复建议
- 在表单提交或者url参数传递前,对需要的参数进行过滤。
- 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了。
- 表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。
- 对数据进行Html Encode 处理。
- 过滤或移除特殊的Html标签, 例如:
三、弱口令
系统弱口令
漏洞描述
弱口令漏洞指系统口令的长度太短或者复杂度不够,如仅包含数字或字母等,弱口令容易被破解,一旦被攻击者获取,可用来直接登录系统,读取甚至修改网站代码。
修复建议
- 修改口令,增加口令复杂度,如包含大小写字母、数字和特殊字符等。
- 修改默认口令,避免默认口令被猜解。
- 指定健壮的口令策略,比如指定每隔30天修改一次密码,密码不得与历史密码相同。
数据库弱口令
漏洞描述
数据库弱口令漏洞指数据库管理员账号对应密码的长度太短或者复杂度不够,仅包含数字,或仅包含字母等,弱口令容易被破解,一旦被攻击者获取,可用来直接登录数据库系统,读取甚至修改服务器上的文件,或者导致服务器沦陷。
修复建议
- 修改口令,增加口令复杂度,如包含大小写字母、数字和特殊字符等。
- 修改默认口令,避免默认口令被猜解。
- 指定健壮的口令策略,比如指定每隔30天修改一次密码,密码不得与历史密码相同。
SSH弱口令
漏洞描述
SSH 弱口令漏洞指 Linux 系统口令的长度太短或者复杂度不够,如仅包含数字,或仅包含字母等,弱口令容易被破解。攻击者可以利用弱口令直接登录SSH服务器,读取甚至修改网站代码,或者导致服务器沦陷。
修复建议
- 修改口令,增加口令复杂度,如包含大小写字母、数字和特殊字符等。
- 修改默认口令,避免默认口令被猜解。
- 指定健壮的口令策略,比如指定每隔30天修改一次密码,密码不得与历史密码相同。
四、暴力破解
漏洞描述
暴力破解攻击是指攻击者通过系统地组合并尝试所有的可能性以破解用户的用户名、密码等敏感信息。攻击者往往借助自动化脚本工具来发动暴力破解攻击,理论上,只要拥有性能足够强的计算机和足够长的时间,大多密码均可以被破解出来。
修复建议
- 制定密码复杂度策略,并进行服务加固。密码的长度要大于 8 位,且最好大于 20 位;密码应由数字、大小写字母和特殊符号混合组成;密码的最长有效期为 90 天。
- 增加验证码机制,每次验证加入Token参数,保证验证码复杂度,防止被自动化识别。
- 配置好网络访问控制。严格限制将高危服务管理端口直接发布到互联网;建议您使用 VPN 和堡垒机的方式集中管理和审计。
- 提高内部全员安全意识,禁止借用或共享使用账号。
五、任意文件上传
漏洞描述
由于代码作者没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验,导致攻击者通过上传木马文件,直接得到WEBSHELL,可以读取修改服务器上的文件,或者导致服务器沦陷。
修复建议
- 对上传的文件,返回数据包时隐藏上传文件的路径
- 对文件格式限制,只允许某些格式上传。
- 对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等),进行MIME文件类型安全检测,上传的文件大小限制。
- 将上传目录防止到项目工程目录之外,当做静态资源文件路径,并且对文件的权限进行设定,禁止文件下的执行权限。
六、任意文件下载
漏洞描述
由于未对用户查看或下载的文件做限制,恶意用户就能够查看或下载任意的文件,可以是源代码文件、敏感文件等、如脚本代码、服务及系统配置文件等,攻击者可用得到的代码进一步代码审计,得到更多可利用漏洞。
修复建议
- 过滤.(点),使用户在url中不能回溯上级目录。
- 正则严格判断用户输入参数的格式,限定用户访问范围。
- 将下载区独立出来,放在项目路径外,给每个下载资源固定的URL,而不是所有的下载资源都是统一的URL。
七、任意文件读取
漏洞描述
通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感信息文件。
修复建议
- 过滤点(.)使用户在url中不能回溯上级目录。
- 正则严格判断用户输入参数的格式,限定用户可访问范围。
八、任意文件包含
漏洞描述
通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者检验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
修复建议
- php中可以使用open_basedir配置限制访问权限在指定区域。
- 过滤 . (点) / (斜杠) \ (反斜杠)。
- 禁止服务器远程文件包含。
九、远程命令执行
漏洞描述
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
修复建议
- 建议假定所有输入都是可疑的,尝试对所有输入提交可能执行命令的构造语句进行严格的检查或者控制外部输入,系统命令执行函数的参数不允许外部传递。
- 不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
- 不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
- 对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
- 在发布应用程序之前测试所有已知的威胁。
十、未授权访问
Redis未授权
漏洞描述
Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,攻击者还可以写入WEBSHELL,或者通过计划任务反弹服务器shell。
修复建议
- 配置redis.conf,默认只对本地开放。
- 添加登陆密码,进行身份验证。
- 在需要对外开放的时候修改默认端口。
- 配合iptables限制开放。
Jenkins未授权访问
漏洞描述
默认情况下Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进脚本执行界面从而获取服务器权限,可导致服务器沦陷,或写入WEBSHELL。
修复建议
- 禁止把Jenkins直接暴露在公网。
- 添加认证,设置强密码复杂度及设置账号锁定机制。
MongoDB未授权访问
漏洞描述
开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,而且可以远程访问数据库,登录的用户可以通过默认端口无需密码对数据库进行增、删、改、查等任意高危操作。
修复建议:
- 为MongoDB添加认证。
- 禁用HTTP和REST端口。
- 限制绑定IP。
ZooKeeper未授权访问
漏洞描述
Zookeeper的默认开放端口是2181。Zookeeper安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用Zookeeper,通过服务器收集敏感信息或者在Zookeeper集群内进行破坏(比如:kill命令)。攻击者能够执行所有只允许由管理员运行的命令。
修复建议
- 禁止把Zookeeper直接暴露在公网。
- 添加访问控制,根据情况选择对应方式(认证用户,用户名密码)。
- 绑定指定IP访问。
Elasticsearch未授权访问
漏洞描述
Elasticsearch是一款java编写的企业级搜索服务。越来越多的公司使用ELK作为日志分析,启动此服务默认会开放9200端口,可被非法操作数据。
修复建议
- 防火墙上设置禁止外网访问9200端口。
- 使用Nginx搭建反向代理,通过配置Nginx实现对Elasticsearch的认证。
- 限制IP访问,绑定固定IP。
- 在config/elasticsearch.yml中为9200端口设置认证。
Memcache未授权访问
漏洞描述
Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者通过命令交互可直接读取Memcached中的敏感信息。
修复建议
- 设置memchached只允许本地访问。
- 禁止外网访问Memcached 11211端口。
- 编译时加上–enable-sasl,启用SASL认证。
Hadoop未授权访问
漏洞描述
由于服务器直接在开放了Hadoop机器HDFS的50070 web端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目录浏览甚至命令执行等操作,产生极大的危害。
修复建议
- 如无必要,关闭Hadoop Web管理页面。
- 开启身份验证,防止未经授权用户访问。
- 设置“安全组”访问控制策略,将Hadoop默认开放的多个端口对公网全部禁止或限制可信任的IP地址才能访问包括50070以及WebUI等相关端口。
Docker未授权访问
漏洞描述
Docker Remote API是一个取代远程命令行界面(rcli)的REST API。通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,攻击者可以新建 container,删除已有 container,甚至是获取宿主机的 shell。
修复建议
- 在不必需的情况下,不要启用docker的remote api服务,如果必须使用的话,设置ACL,仅允许信任的来源IP连接,设置TLS认证。
- 客户端连接时需要设置以下环境变量export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker export DOCKER_HOST=tcp://10.10.10.10:2375 export DOCKER_API_VERSION=1.12 - 在 docker api 服务器前面加一个代理,例如 nginx,设置 401 认证
十一、权限提升
漏洞描述
权限提升是指利用系统中的安全漏洞或是别的方法使得自己突破了原来的限制,能够非法访问对方目录甚至是使得自己能够向管理员那样来获取整个系统控制,简称提权。
修复建议:
- 定期进行固件、中间件的升级。
- 不要给员工设置工作之外的权限。
- 对文件格式限制,只允许某些格式上传。
十二、越权漏洞
漏洞描述:
越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,可以导致用户A可以操作其他人的信息。
修复建议:
- 服务器端使用的是http服务而不是https,实际上还是可以在用户注册时通过抓包工具获取token来进行恶意操作,但加了权限认证之后黑客只能通过构造请求来对token对应的用户进行恶意操作。
- 日常开发中要多留意业务逻辑可能出现的漏洞和水平权限漏洞或者其它未发现的漏洞。
十三、逻辑漏洞
漏洞描述:
逻辑错误漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误。
修复建议:
- 在输入接口设置验证。
- 注册界面的接口不要返回太多敏感信息,以防遭到黑客制作枚举字典。
- 验证码请不要以短数字来甚至,最好是以字母加数字进行组合,并且验证码需要设定时间期限。
十四、明文传输漏洞
漏洞描述:
http明文传输协议,导致管理员admin密码泄露,同时该系统登录失败处理功能存在安全问题,登录失败提示admin用户存在且密码错误信息,由于系统未应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,导致可暴力破解,成功爆破出密码,一直攻击者成功破解或者截获密码,管理员可任意重置用户密码,导致系统数据泄露。
修复建议:
- 建议应用系统增加除用户名/口令以外的身份鉴别技术,如密码/令牌、生物鉴别方式等,实现双因子身份鉴别,增强身份鉴别的安全力度。
- 建议采用密码技术确保重要数据在传输过程中的保密性。