了解 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. 日志销毁 超出本规范要求的保存期限的日志,由系统管理员自行删除。