OWASP Top 10 (2017)
A1:2017 - 注入
漏洞描述:
将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。漏洞影响:
注入能导致数据丢失、破坏或泄露给无授权方,缺乏可审计性或是拒绝服务。注入有时甚至能导致主机被完全接管。
检测场景:
SQL注入:
数字型 若 and 1=1正常,and 1=2 异常,则存在注入点。
字符型 若 ‘and ‘1’=’1正常,‘and ‘1’=’2异常,则存在注入点。
OS注入:
尝试用 && 、|| 符号插入OS命令
预防思路:
1、(参数化)将数据与命令语句、查询语句分隔开来。选择是使用安全的API,完全避免使用解释器,或提供参数化界面的接口。
2、(输入过滤)使用白名单过滤或转义的方法过滤用户输入
A2:2017 - 失效的身份验证
漏洞描述:
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。
漏洞影响:
攻击者只需要访问几个帐户,或者只需要一个管理员帐户就可以破坏我们的系统。根据应用程序领域的不同,可能会导致放任洗钱、社会安全欺诈以及用户身份盗窃、泄露法律高度保护的敏感信息。检测场景:
弱验证:
弱口令、弱验证码、登录绕过(逻辑、cookie)、密码找回
弱会话:
明文传输、URL中暴露会话ID、会话ID不更新
预防思路:
1、加强验证方面:加强密码策略、登录失败处理、多因素验证
2、加强会话方面:加密会话(SSL/TLS)、加入token
A3:2017-敏感信息泄露漏洞描述:
许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。
漏洞影响:
这个领域的错误频繁影响那些本应该加密的数据。通常情况下,这些数据通常包括很多个人敏感信息(PII),例如:医疗记录、认证凭证、个人隐私、信用卡信息等。这些信息受到相关法律和条例保护,例如:欧盟《通用数据保护条例》(GDPR)和地方隐私保护法律。
检测场景:
用户信息:
如用户账号,姓名,身份证ID,电话号码,银行账户,驾驶证号码,社保卡号,护照号码等
web服务器信息:
OS类型、版本信息;数据库类型、版本信息;web配置信息(PHPinfo)
预防思路:
1、对系统处理、存储或传输的数据分类,并根据分类进行访问控制。
2、对用户敏感信息的传输与存储做加密(TLS、SHA)。
3、定制统一出错页面,杜绝显示Web中间件的名称和版本信息等敏感信息到Web客户端。
A4:2017-XML 外部实体(XXE)
漏洞描述:
如果攻击者可以上传XML文档或者在XML文档中添加恶意内容,通过易受攻击的代码、依赖项或集成,他们就能够攻击含有缺陷的XML处理器。
漏洞影响:
攻击者可以利用XML外部实体窃取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。检测场景:
以下提供几种简单的Payload模型。
1、文件读取
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE xdsec [
<!ELEMENT methodname ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<methodcall><methodname>&xxe;</methodname></methodcall>
2、拒绝服务
<?xml version = "1.0"?><!DOCTYPE lolz [
<!ENTITY lol "lol"><!ELEMENT lolz (#PCDATA)><!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"><!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"><!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"><!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"><!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"><!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"><!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"><!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"><!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">]>
<lolz>&lol9;</lolz>
3、内网信息
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE xdsec [
<!ELEMENT methodname ANY ><!ENTITY xxe SYSTEM "http://192.168.0.1:80" >]>
<methodcall><methodname>&xxe;</methodname></methodcall>
预防思路:
1、过滤用户提交的XML数据
2、使用开发语言提供的禁用外部实体的方法
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
A5:2017 失效的访问控制
漏洞描述:
未对通过身份验证的用户实施恰当的访问控制,攻击者可以利用这些缺陷访问未经授权的功能或数据。漏洞影响:
技术影响是攻击者可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。业务影响取决于应用程序和数据的保护需求。
检测场景:
越权:
横向越权、纵向越权
文件操作:
文件上传、文件包含、任意文件下载、任意文件删除
预防思路:
1、加强引用参数的封装、加密
2、利用安全标签,采用强访问控制模型(MAC)
A6:2017 安全错误配置
漏洞描述:
安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP 标头配置以及包含敏感信息的详细错误信息所造成的漏洞影响:
攻击者能够通过未修复的漏洞、访问默认账户、不再使用的页面、未受保护的文件和目录等来取得对系统的未授权的访问或了解。
检测场景:
1、高危端口(22、3389、139等)
2、默认账户
3、目录遍历预防思路:
1、最小原则,移除不必要的功能、组件、文档和示例。
2、限制中间件管理界面、限制默认端口。
3、修改默认账户。
A7:2017 跨站脚本(XSS)
漏洞描述:
当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建HTML或JavaScript 的浏览器API 更新现有的网页时,就会出现XSS 缺陷。
漏洞影响:
常见危害为窃取凭证为主。该漏洞的危害性由JavaScript代码决定,可参见相关XSS平台或BEEF工具。
检测场景:
基于不同标签的检测命令:
1、
2、
3、
4、 </ iframe>
5、 x 预防思路:
XSS防护思路:规范输入,编码输出。
规范输入:(前台)字符过滤:黑白名单
(后台)加强判断:验证字符合理性
A8:2017-不安全的反序列化
漏洞描述:
不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。
在java中有一个ObjectOutputStream类的writeobject方法可以实现序列化,而ObjectInputStream类的Readobject方法可以实现反序列化。
该漏洞的原因出自于如果应用对不可信的数据,例如恶意构造的用户输入进行反序列化,从而产生非预期的对象,从而有可能产生远程代码执行。
预防思路:
总的防范思想是采用白名单策略,只允许白名单上的对象生成,不允许生成未经定义的对象。
如果做不到的话,可采取以后策略:
1.对序列化对象执行完整性检查和加密处理,防止被恶意篡改和创建恶意对象。
2.反序列化过程之前执行严格的类型限制。
3.隔离反序列化的代码,将其放在低权限的状态下运行。
A9:2017-使用含有已知漏洞的组件
漏洞描述:
组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏 洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组 件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。
修复方案:
1.识别正在使用的组件和版本,包括所有的依赖
2.更新组件或引用的库文件到最新
3.建立安全策略来管理组件的使用
4.在适当情况下,对组件进行安全封装,精简不必要的功能,封装易受攻击部分
A10:2017- 不足的日志记录和 监控
漏洞描述:
不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统、保持持 续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超 过200天,且通常通过外部检测方检测,而不是通过内部流程或监控检测。
预防思路:
1.确保对所有的登录失败,访问控制失败,输入验证失败留下足够的上下文信息,并为后期的数字取证留下足够的时间保存。
2.建立有效的检测和告警机制,保留足够的反应处理时间。
3.建立和采取一个应急响应机制和灾后恢复方案。