访问控制
如果说安全是一座城堡,访问控制则是城门上的守卫大将。每天,他都要面对很多来往过客。这些过客,鱼龙混杂,大将要做的不只是根据过客们的身份腰牌放行,还要检验身份腰牌的真伪,以及检查一下过客们的行李,防止非法人员带着有害物进入城堡。
说到这里,访问控制的作用大致也说明白了,下面就做一个具体总结吧。
1
基于授权的访问控制
通过以下授权机制,访问控制对主体进行鉴权,并控制放行或退回。具体策略如下:
-
基于属性的访问控制
-
基于角色的访问控制
-
基于任务的访问控制
-
基于ACL的访问控制
-
基于专家知识的访问控制
-
基于其他规则的访问控制:如IP辅助决策、时间段等等
2
基于校验参数的访问控制
不怕用户一看就不合法,就怕合法用户夹带“私货”。攻击者通过参数恶意输入等行为可造成的攻击有:缓冲区溢出、URL跳转、SQL注入、XSS、路径遍历、SSRF、上传脚本文件漏洞等等。
这边有一句金玉良言:永远不要相信你的用户。这个思想在软件测试最先使用,用户的异常使用往往会发现各种软件的bug。事实上,在安全的实现中也是如此。
那么,具体校验参数怎样实现呢?
SQL注入
漏洞产生原因是在信任用户输入的基础上直接将用户的输入拼接到SQL查询语句中去,导致查询结果中返回了敏感的数据库数据,从而难以保证用户的数据安全。
目前较为成熟的方式是基于预编译和参数绑定的参数化查询机制,先处理用户输入,间接制作SQL查询语句。
在安全评估中会发现,一些程序员会使用白名单或黑名单的方式来防护,有一定的安全防护效果,但往往web漏洞会与程序员本身的思维漏洞形如影随。
还有一些防护方式,比如在指定排序名和升序降序时,前端传回的数据是代号,后端根据代号转化成对应的数据,再拼接到SQL语句中。
XSS
XSS的实现是在信任用户输入的基础上,未经任何处理直接输出到前端,则用户插入的js语句可在前端动态执行,恶作剧就是弹个窗,利用漏洞的攻击形式有盗取cookie、钓鱼、挂马、蠕虫等。XSS出现的最根本原因即代码与数据边界混淆,而产生混淆的原因有恶意闭合引号、闭合前端元素等等。
针对XSS的防御,可以通过输入输出的转义、对js、html关键字符的过滤等等来实现。
CSRF
执行CSRF的并不是攻击者,反而是不知情的受害者。
通常,技术人员使用csrf token或其他防重放字串来防止CSRF攻击的实现,还有一些系统通过校验referer校验,防止用户通过点击csrf攻击链接或在其他界面异常跳转到敏感操作界面进行敏感操作。
路径遍历
攻击者一般会使用../../来进行路径遍历,如read.php?file=../../../../../etc/passwd。
一般要避免这种直接通过路径访问服务器上文件的操作,或对../及其其他形式进行过滤。在实际业务中,尽可能避免服务器测的路径,如业务实在无法避免,则需要限定目录,并使用整型ID访问。
SSRF
URL作为参数进行传递时,黑客往往会通过提交内部域名、内部ip通过SSRF漏洞进行内网探测。
一般系统中要避免使用URL参数作为参数,或者使用白名单进行限定输入。
URL跳转
URL跳转最常见的就是登录成功、退出系统后跳转到目标URL,黑客往往会通过修改目标URL或插入恶意的URL,以达到恶意的URL跳转目的。
一般系统中要使用白名单进行限定输入。
任意文件上传
文件上传是我们在网络中常见的操作流程。如上传个人头像,上传证书等。攻击者往往通过修改文件后缀、修改文件头、插入恶意代码、图片隐写等方式上传允许范围外的恶意文件,如果有可执行权限,甚至可进行远程代码执行等高危严重操作。
前后端都要对文件格式进行校验,再严格一些的要对文件头等进行校验。同时,对于上传的文件一般要进行重命名,且存放到没有执行权限的文件夹内。访问文件时也要尽可能避免使用服务器侧物理或逻辑路径来访问。
Method控制
避免使用危险的PUT、DELETE、TRACE等METHOD。
缓冲区溢出
超长的输入往往会带来严重问题,如系统崩溃、被获取root权限、内存数据等等。
为了防止缓冲区溢出,所有接受外部数据的缓冲区,都需要在接收数据前执行边界检查,防止收到超出自身容量的数据。
遍历带来的问题
如果资源是通过有规则的id来进行访问,且并未进行身份绑定,则攻击者通过遍历资源id即可获得大量未授权访问的资源。如果没有限制遍历行为,SQL注入也可以通过拖库来获取大量敏感数据。
一般要先进行身份认证,通过身份进行授权和访问控制,资源id一般要使用加密字串,要对读取资源的频率进行限制。更完善的有通过监控告警和审计,来察觉数据泄露时间。
原文始发于微信公众号(火枪手联盟安全团队):访问控制篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论