了解 OWASP TOP 10
OWASP TOP 10 了解程度
OWASP(开放式Web应用程序安全项目)的工具、文档、论坛和全球各地分会都是开放的,对所有致力于改进应用程序安全的人士开放,其最具权威的就是“10项最严重的Web 应用程序安全风险列表” ,总结了Web应用程序最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识。
1. 注入injection
输入时将一些包含指令的数据发送给解析器,解释器当成命令执行。会产生类似于SQL注入、NoSQL注入、OS注入和LDAP注入(轻量目录访问协议) 的缺陷,
如何防范:(写代码时尽量是数据和代码分离原则)
1.使用安全的API,避免使用解释器
2.对输入的特殊的字符进行ESCAPE转义处理
3.使用白名单来规范化的输入验证方法
********************************************************
2. 外部实体(XXE)
XXE 全称为XML External Entity attack 即XML(可扩展标记语言) 外部实体注入攻击,许多过时的或配置不当的XML处理器在XML文档内进行外部实体引用。外部实体可用于泄露内部文件,通过使用文件URI处理器、内部文件共享、内部端口扫描、远程代码执行以及拒绝服务攻击等手段。
防护措施:
1. 使用开发语言提供的禁用外部实体的方法
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))
2. 过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。
********************************************************
3. 跨站脚本(xss)
xss攻击全称为跨站脚本攻击,当应用程序的新网页中包含不受信任的、未经恰当验证、转义的数据或可以使用HTML、JavaScript的浏览器API更新的现有网页时,就会出现xss漏洞。xss会执行攻击者在浏览器中执行的脚本,并劫持用户会话,破坏网站或用户重定向到恶意站点,使用xss还可以执行拒绝服务攻击。
如何防范:
1.验证输入
2.编码输出(用来确保输入的字符被视为数据,而不是作为html被浏览器所解析)
需要编码的部分:
1. HTML实体
2. HTML属性
3. JavaScript
4. css
5. URL
3. 过滤<>''等
4. 使用ESAP验证实例
********************************************************
4. 失效的身份认证
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者暂时或永久的冒充其他用户的身份。
如何防范:
1.使用内置的会话管理功能
2.通过认证的问候
3.使用单一的入口点
4.确保在一开始登录SSL保护的网页
********************************************************
5. 敏感数据泄露
未加密的信息极易遭到破坏和利用,我们应该加强对敏感数据的保护,web应用应该在传输过程中数据、存储的数据以及和浏览器的交互时的数据进行加密,保证数据安全。
防范措施:
1. 针对个人数据,必须加密存储,而且一定要用安全的加密算法(1. 针对本地存储且需要密文明文转换的使用aes128及以上的加密算法。2.常见的md5、base64等都是不安全的。)
2. 针对敏感数据传输,需要采用ssl加密通道(每一个请求都应该使用ssl加密通道,因为每个请求里面都带有会话ID,会话ID就是敏感信息)
3. 应用程序运行出错容易造成敏感信息泄露(如网站的程序堆栈信息直接显示,暴露web容器的名称和版本号),定制统一出错页面
4.禁止敏感信息明文传递到web客户端,禁止明文存贮在文件或者数据库中,严格控制访问权限。
********************************************************
6. 中断的访问控制
与认证和会话管理相关的应用函数经常被错误地实现,从而允许攻击者破坏密码、密钥或是会话令牌,或者利用其他的应用漏洞来暂时或永久地获取用户身份信息。
防护措施:
1. 实现“默认拒绝”的访问控制机制,并且控制措施都应在服务器端创建。
********************************************************
7. 安全配置错误
安全配置错误是比较常见的漏洞,由于操作者的不当配置(默认配置,临时配置,开源云存储,http标头配置,以及包含敏感信息的详细错误),导致攻击者可以利用这些配置获取到更高的权限,安全配置错误可以发生在各个层面,包含平台、web服务器、应用服务器、数据库、架构和代码。
如何防范:
1.自动化安装部署
2.及时了解并部署每个环节的软件更新和补丁信息
3.实施漏洞扫描和安全审计
4.及时关闭不需要的服务
********************************************************
8. 不安全的反序列化
不安全的反序列化可以导致远程代码执行、重放攻击、注入攻击或特权升级攻击
如:shiro java反序列化漏洞
防范措施:
1.对序列化对象执行完整性检查和加密处理,防止被恶意篡改和创建恶意对象。
2.反序列化过程之前执行严格的类型限制。
3.隔离反序列化的代码,将其放在低权限的状态下运行。
4.监视反序列化的过程。
********************************************************
9. 使用含有已知漏洞的组件
组件(eg:库、框架或其他软件模块)拥有应用程序相同的权限,如果应用程序中含有已知漏洞,攻击者可以利用漏洞获取数据或接管服务器。同时,使用这些组件会破坏应用程序防御,造成各种攻击产生严重的后果。
防范:
1. 识别正在使用的组件和版本,包括所有的依赖
2. 监控这些在公共数据库中、项目的邮件列表、以及安全邮件列表的组件的安全性,并保持他们更新到最新版本。
3. 建立安全策略来管理组件的使用,如需要一定的软件开发时间,通过安全测试和可接受的许可证
********************************************************
10. 不足的日志记录和监控
不足的记录和监控漏洞,再加上事件响应能力欠缺以及缺少有效的整合,使得攻击者可以进一步攻击系统,维持其持久性,转而攻击更多的系统,并篡改、提取或销毁数据。大部分的数据泄露研究显示,检测出发生数据泄漏的时间通常需要超过200天,而且通常是外部机构率先发现数据泄漏的事实,而不是通过内部的审计流程或监控发现的。
防范措施:(严格按照安全日志管理要求)
1. 应用系统日志的保存期限要求如下:
安全级别为高的应用系统,日志保存时间至少为36个月;
安全级别为中或者低的应用系统,日志保存时间至少为12个月。
2. IT基础设备和系统的日志保存时间至少为12个月。
3. 日志记录应设置合理的阀值并进行监控,确保达到阀值前进行有效的处理,确保日志的安全性和完整性。
4. 在未确保日志安全备份前,任何人不得以任何理由删除日志。对于恶意破坏日志独立性和真实性的行为将按照《信息安全奖惩管理办法》进行处罚。
5. 日志销毁 超出本规范要求的保存期限的日志,由系统管理员自行删除。