WEB安全漏洞介绍及防范方案
2021-08-31 19:59:29 12 举报
AI智能生成
详细介绍web安全漏洞以及防范方案
作者其他创作
大纲/内容
中间件安全
中间件配置缺陷
中间件已知漏洞验证
中间件默认策略安全检测
中间件弱口令
中间件默认密码
业务逻辑安全
验证码重复利用
说明
验证码不过期,没有及时销毁会话导致同一验证码反复可用。攻击者可以在Cookie中带固定的sessionID和固定的验证码字符串
防范措施
验证码只能使用一次,验证通过后销毁
验证码绕过
说明
防范措施
验证码验证与业务接口同一个接口,处理业务前,进行验证码校验
短信验证码接口验证通过后,生成一次性token令牌,调用业务接口时上送token;
处理业务前,验证短信token是否有效
处理业务前,验证短信token是否有效
验证码爆破
说明
登录密码错误之后,session中的值没有更新,验证码不变。
无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解。
验证码图片过于简洁,容易被OCR识别扫描。
验证码过于简单,容易被攻击者使用字典进行爆破。
无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解。
验证码图片过于简洁,容易被OCR识别扫描。
验证码过于简单,容易被攻击者使用字典进行爆破。
防范措施
验证不通过要重新生成
图片验证码需要加入干扰项,防止OCR直接识别扫描
验证码复杂程度高,或可参考12306
反序列化命令执行
说明
借用Java反序列化和Apache Commons Collections这一基础类库实现远程命令执行。这个漏洞横扫WebLogic、WebSphere、JBoss、Jenkins、OpenNMS等中间件
Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库,实现了一个TransformedMap类,该类是对Java标准数据结构Map接口的一个扩展。该类可以在一个元素被加入到集合内时,自动对该元素进行特定的修饰变换,具体的变换逻辑由Transformer类定义,Transformer在TransformedMap实例化时作为参数传入。
如果某个可序列化的类重写了readObject()方法,并且在readObject()中对Map类型的变量进行了键值修改操作,并且这个Map变量是可控的,就可以实现我们的攻击目标了。
Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库,实现了一个TransformedMap类,该类是对Java标准数据结构Map接口的一个扩展。该类可以在一个元素被加入到集合内时,自动对该元素进行特定的修饰变换,具体的变换逻辑由Transformer类定义,Transformer在TransformedMap实例化时作为参数传入。
如果某个可序列化的类重写了readObject()方法,并且在readObject()中对Map类型的变量进行了键值修改操作,并且这个Map变量是可控的,就可以实现我们的攻击目标了。
防范措施
不要反序列化不可信的数据
给反序列数据加密签名,并确保解密在反序列之前
给反序列化接口添加认证授权
反序列化服务只允许监听在本地或者开启相应防火墙
用户名枚举
说明
存在于系统登录页面,利用登陆时输入系统存在的用户名错误密码和不存在的用户名错误密码,返回不同的出错信息可枚举出系统中存在的账号信息。
防范措施
建议对网站登录页面的判断回显信息修改为一致:用户名或密码错误
用户密码枚举
说明
存在于系统登录页面,利用登陆时输入系统存在的用户名错误密码和不存在的用户名错误密码,返回不同的出错信息可枚举出系统中存在的账号信息。
当枚举出系统存在的账号时,使用字典进行批量爆破
当枚举出系统存在的账号时,使用字典进行批量爆破
防范措施
建议对网站登录页面的判断回显信息修改为一致:用户名或密码错误
限制同一IP/用户账号重复登录频率
用户弱口令
说明
弱口令指的是仅包含简单数字和字母的口令,例如”123”、”abc”等,因为这样的口令很容易被别人破解。通过爆破工具就可以很容易破解用户的弱口令。
防范措施
所有的密码必须具有足够的长度和复杂度。 ——密码要求8位以上,包含大小写字母、数字、特殊符号等类型中至少两种。
所有密码之间不能有任何关联,如不能由邮箱的密码推测出OA的密码。
所有密码不得采用单一的英文单词、拼音或其他有意义的词语和符号,如员工的姓名拼音、生日等。
不同安全等级、不同用途的帐号应设置不同密码,禁止使用同一密码。
会话标志固定攻击(Session fixation attack)
说明
1、攻击者Attacker能正常访问该应用网站;
2、应用网站服务器返回一个会话ID给他;
3、攻击者Attacker用该会话ID构造一个该网站链接发给受害者Victim;
4-5、受害者Victim点击该链接,携带攻击者的会话ID和用户名密码正常登录了该网站,会话成功建立;
6、攻击者Attacker用该会话ID成功冒充并劫持了受害者Victim的会话。
攻击的整个过程,会话ID是没变过的,所以导致此漏洞。
2、应用网站服务器返回一个会话ID给他;
3、攻击者Attacker用该会话ID构造一个该网站链接发给受害者Victim;
4-5、受害者Victim点击该链接,携带攻击者的会话ID和用户名密码正常登录了该网站,会话成功建立;
6、攻击者Attacker用该会话ID成功冒充并劫持了受害者Victim的会话。
攻击的整个过程,会话ID是没变过的,所以导致此漏洞。
防范措施
每次登录后都重置会话ID,并生成一个新的会话ID,这样攻击者就无法用自己的会话ID来劫持会话
禁用客户端访问Cookie
平行越权访问
说明
水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时没有判断数据的所属人/所属部门而导致的越权数据访问漏洞。
假设用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。
很多网站,APP设计过程中对ID号是以userid=001等来命名的,我们在登录网站后,输入会员的账号密码,查看用户的信息,比如我的查看链接是www.xxx.com/user?user_id=008,打开这里链接就可以看到我的详细信息,包括姓名,注册的手机号,地址,上传的图片,余额等等,那么如果网站存在越权漏洞我们就可以来测试一下,将user_id=008改为user_id=009,打开网站就可以看到其他用户的详细信息,以此类推就可以查看任意的账户信息,导致信息泄露发生,危害较大。
假设用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。
很多网站,APP设计过程中对ID号是以userid=001等来命名的,我们在登录网站后,输入会员的账号密码,查看用户的信息,比如我的查看链接是www.xxx.com/user?user_id=008,打开这里链接就可以看到我的详细信息,包括姓名,注册的手机号,地址,上传的图片,余额等等,那么如果网站存在越权漏洞我们就可以来测试一下,将user_id=008改为user_id=009,打开网站就可以看到其他用户的详细信息,以此类推就可以查看任意的账户信息,导致信息泄露发生,危害较大。
防范措施
1. 返回前端的用户编号应无序无规律
2.对请求数据进行加密加签
垂直越权访问
说明
垂直越权是一种“基于URL的访问控制”设计缺陷引起的漏洞,又叫做权限提升攻击。
由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
防范措施
后台应用在调用功能前验证用户是否有权限
未授权访问
说明
未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。
常见的未授权访问漏洞
1.MongoDB 未授权访问漏洞
2.Redis 未授权访问漏洞
3.Memcached 未授权访问漏洞CVE-2013-7239
4.JBOSS 未授权访问漏洞
5.VNC 未授权访问漏洞
6.Docker 未授权访问漏洞
7.ZooKeeper 未授权访问漏洞
8.Rsync 未授权访问漏洞
常见的未授权访问漏洞
1.MongoDB 未授权访问漏洞
2.Redis 未授权访问漏洞
3.Memcached 未授权访问漏洞CVE-2013-7239
4.JBOSS 未授权访问漏洞
5.VNC 未授权访问漏洞
6.Docker 未授权访问漏洞
7.ZooKeeper 未授权访问漏洞
8.Rsync 未授权访问漏洞
防范措施
设置访问认证密码
支付模块业务逻辑漏洞
说明
支付逻辑漏洞是指系统的支付流程中存在逻辑层面的漏洞。
支付流程通常为选择商品和数量-选择支付及配置方式-生成订单-订单支付-完成订单
最常见的支付逻辑漏洞通常是由于服务端没有对客户端请求数据中的金额、数量等敏感信息作校验导致
一般在电子商务网站上容易出现此类漏洞
支付流程通常为选择商品和数量-选择支付及配置方式-生成订单-订单支付-完成订单
最常见的支付逻辑漏洞通常是由于服务端没有对客户端请求数据中的金额、数量等敏感信息作校验导致
一般在电子商务网站上容易出现此类漏洞
防范措施
敏感数据加密
检查交易金额、数量不允许负数,且必须以后台数据库为准
请求报文加密加签
短信轰炸
说明
短信轰炸指短信接口无安全防范,允许输入手机号码即可发送短信,被恶意利用该接口,对目标手机批量发送短信进行轰炸
防范措施
尽量不允许页面输入手机号码
设置发送短信间隔、短信次数
检查距离上次发送短信验证码时效,有效期内不再发送短信
业务逻辑漏洞
1、身份认证安全
常见情况
暴力破解
爆破用户名,当输入的用户名不存在时,会显示请输入正确用户名,或者用户名不存在
已知某个用户名,比如admin进行字典爆破(暴力爆破 -- 弱口令)
使用一个常用密码,比如123456对大量用户进行爆破
撞库
撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址,这就可以理解为撞库攻击。
1、用户所有网站使用同一组账号密码
2、网站不允许存储不加盐的明文(1.不能是明文,2.不能是未加盐的md5/sha1等,加盐算法不能公开)
2、网站不允许存储不加盐的明文(1.不能是明文,2.不能是未加盐的md5/sha1等,加盐算法不能公开)
2、数据篡改
邮箱更改
订单ID更改
商品编号更改
用户ID更改
手机号篡改
支付金额篡改
商品数量篡改
web安全
SQL注入
说明
就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
攻击方式
用户名输入框中输入:' or 1=1#,密码随便输入
防范措施
页面检查不允许输入特殊字符
使用预编码语句,如 mybatis #{},切记不可直接拼接SQL
跨站脚本攻击(XSS)
说明
跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
攻击方式
盗取用户Cookie
盗取用户Cookie
修改网页内容
网站挂马
利用网站重定向
XSS蠕虫
防范措施
输入与输出转义
将重要的cookie标记为httponly
XML外部实体注入(XXE)
说明
XML外部实体注入漏洞,即XXE(XML External Entity),此漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。
防范措施
DOM解析防护,限制外部实体的解析
跨站请求伪造攻击(CSRF)
说明
是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
防范措施
涉及敏感操作的请求改为POST请求
用户操作限制——验证码机制
额外验证机制——token的使用
服务器端请求伪造攻击(SSRF)
防范措施
1、限制请求端口只能为web端口,只允许访问HTTP和HTTPS的请求;
2、过滤返回的信息;
3、禁止不常使用的端口;
4、限制不能访问内网的IP,防止对内网进行攻击;
5、对于DNS重绑定,使用DNS缓存或者Host白名单。
说明
SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求,一般情况下,SSRF攻击的目标是外网无法访问的内部系统。
任意文件上传
防范措施
1)对文件格式限制,只允许某些格式上传
2)对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等)
3)将上传目录防止到项目工程目录之外,当做静态资源文件路径,并且对文件的权限进行设定,禁止文件下的执行权限。
任意文件下载或读取
防范措施
文件路径保存至数据库,让用户提交文件对应ID下载文件。
过滤../等敏感字符,使用户在url中不能回溯上级目录
任意目录遍历
防范措施
IIS中关闭目录浏览功能:在IIS的网站属性中,勾去“目录浏览”选项,重启IIS。
Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找“Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消,保存退出,重启Apache)。
Nginx 中默认不会开启目录浏览功能,若您发现当前已开启该功能,可以编辑nginx.conf文件,删除如下两行:autoindex on;autoindex_exact_size on,然后重启Nginx。
管理工具信息泄漏
说明
SVN、Git等管理工具隐藏文件被发布出去
防范措施
注意删除隐藏文件再发布
信息泄漏
.DS_Store文件泄露
WEB-INF泄露
备份文件泄露
配置错误导致的泄露
nginx目录穿越漏洞
location /files {
alias /home/;
}
alias /home/;
}
保证location和alias的值都有后缀/或都没有这个后缀
CRLF注入
说明
CRLF是CR和LF两个字符的拼接,它们分别代表”回车+换行”(\r\n)“,全称为Carriage Return/Line Feed”,十六进制编码分别为0x0d和0x0a,URL编码为%0D和%0A。CR和LF组合在一起即CRLF命令,它表示键盘上的"Enter"键,许多应用程序和网络协议使用这些命令作为分隔符。
而在HTTP协议中,HTTP header之间是由一个CRLF字符序列分隔开的,HTTP Header与Body是用两个CRLF分隔的,浏览器根据这两个CRLF来取出HTTP内容并显示出来。
所以如果用户的输入在HTTP返回包的Header处回显,便可以通过CRLF来提前结束响应头,在响应内容处注入攻击脚本。因此CRLF Injection又叫HTTP响应拆分/截断(HTTP Response Splitting)简称HRS。
而在HTTP协议中,HTTP header之间是由一个CRLF字符序列分隔开的,HTTP Header与Body是用两个CRLF分隔的,浏览器根据这两个CRLF来取出HTTP内容并显示出来。
所以如果用户的输入在HTTP返回包的Header处回显,便可以通过CRLF来提前结束响应头,在响应内容处注入攻击脚本。因此CRLF Injection又叫HTTP响应拆分/截断(HTTP Response Splitting)简称HRS。
防范措施
1. 对用户的数据进行合法性校验,对特殊的字符进行编码,如<、>、’、”、CR、LF等,限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头。
2. 创建安全字符白名单,只接受白名单中的字符出现在HTTP响应头文件中。
3. 在将数据传送到http响应头之前,删除所有的换行符。
命令执行注入
说明
命令执行漏洞是指可以随意执行系统命令,属于高危漏洞之一,也属于代码执行范围内
防范措施
尽量减少能命令执行的函数的使用,允许的话可直接在php的配置文件php.ini中禁用
在使用命令执行的函数之前,首先对用户输入参数进行过滤
参数的值尽量使用引号包裹,并在拼接之前调用addslashes进行转义
第三方组件安全
定时更新
任意代码执行
应用程序在调用一些能够将字符串转换为代码的函数(例如php中的eval中),没有考虑用户是否控制这个字符串,将造成代码执行漏洞
Struts2远程命令执行
Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。
Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10
Spring远程命令执行
Spring框架3.0.6以下版本,在一定的条件下,可以被攻击者利用,执行任意的java代码,从而威胁系统的安全性
缺少“X-Frame-Option”头
网页可能被别人用iframe框架使用
点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
修复方案
在apache配置文件中添加一行信息即可:Header always append X-Frame-Options SAMEORIGIN
配置 nginx 发送 X-Frame-Options 响应头:add_header X-Frame-Options SAMEORIGIN;
任意文件删除
PHP、Python等脚本语言
防范措施
正则严格判断用户输入参数的格式
检查使用者输入的文件名是否有“…”的目录阶层字符
检查使用者输入的文件名是否有“…”的目录阶层字符
未设置HTTPONLY
说明
会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。
方案
向所有会话cookie中添加“HttpOnly”属性。
Java示例:
HttpServletResponse response2 = (HttpServletResponse)response;
//response2.setHeader( "Set-Cookie", "name=value; HttpOnly");
response2.addHeader( "Set-Cookie", "name=value; HttpOnly");
Java示例:
HttpServletResponse response2 = (HttpServletResponse)response;
//response2.setHeader( "Set-Cookie", "name=value; HttpOnly");
response2.addHeader( "Set-Cookie", "name=value; HttpOnly");
X-Forwarded-For伪造
说明
伪造来源攻击,在Web应用开发中,经常会需要获取客户端IP地址。一个典型的例子就是投票系统,为了防止刷票,需要限制每个IP地址只能投票一次。
方案
nginx配置:proxy_set_header X-Forwarded-For $remote_addr;
nginx配置:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
nginx配置:proxy_set_header X-Forwarded-For $remote_addr;
不安全的http methods
说明
不安全的HTTP方法一般包括:TRACE、PUT、DELETE、COPY 等。其中最常见的为TRACE方法可以回显服务器收到的请求,主要用于测试或诊断,恶意攻击者可以利用该方法进行跨站跟踪攻击(即XST攻击),从而进行网站钓鱼、盗取管理员cookie等
方案
在中间件nginx、Tomcat或项目代码中拦截禁用危险方法
nginx:
if ($request_method ~ ^(PUT|DELETE)$) {
return 403;
}
if ($request_method ~ ^(PUT|DELETE)$) {
return 403;
}
暴力猜解
说明
暴力猜解简单来说就是将密码进行逐个推算,直到找出真正的密码为止。
防范措施
密码的复杂性
验证码措施
登陆日志(限制登录次数)
认证绕过
说明
大多数金融行业信息系统业务场景中,对于交易的安全,采用安全认证的方式保护,认证的因子包括静态密码、短信验证码、UsbKEY,OTP令牌等,一旦业务流程和业务逻辑设计不当,这种认证机制被绕过,可带来严重后果,比如:无需密码即可进行交易、无需短信验证码即可重置密码等。
典型场景就是验证校验流程
防范措施
优化业务逻辑,将认证和操作放在同一个客户端请求中,在服务器端按照业务流程进行分步执行操作。
如果采用客户端与服务端分步业务流程执行,认证通过后,服务端记录认证标识,最后操作时,验证其认证标识,认证标识应与用户绑定防止越权使用,且使用一次后应立即失效。
越权访问
说明
一般来说,越权放问就好比你是非系统管理员用户,却偷偷的跑进了系统管理菜单,僭越权利访问里面的信息甚至修改其中的数据(不同级别的越权又称垂直越权访问)
交互安全
加密
加签
重放攻击
说明
重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。
防范措施
时间戳
序号
双方必须事先协商一个初始序列号,并协商递增方法
加盐
随机数
0 条评论
下一页