安全服务/渗透测试工程师_面试题之OWASP TOP 10

欢迎关注我的微信公众号:安全攻防渗透

信息安全领域原创公号,专注信安领域人才培养和知识分享,致力于帮助叁年以下信安从业者的学习和成长。


BNkKyn.png

思考了很长时间,最近一直在准备安全服务工程师的面试题,说到底还是自己学的不够扎实,理解的不够深刻,想到CSDN可以写笔记,还能跟大家一同分享,就渐渐的喜欢上了这里。

持续更新

自我介绍

首先肯定是一段必不可少的自我介绍,时间大约为 3 min。
这一段必须要好好打磨,不可马虎,意简言赅(gai)。

正文

OWASP TOP 10 2020有哪些?

注入
失效身份验证和会话管理
敏感信息泄露
XML外部实体注入攻击(XXE)
访问控制中断
安全性错误配置
跨站脚本攻击(XSS)
不安全的反序列化
使用具有已知漏洞的组件
日志记录和监控不足

0x00 注入

当攻击者将无效的数据发送给web应用程序来让其执行为设计的操作,就会发生代码注入问题。
此安全漏洞最常见的示例便是使用不受信任数据的SQL查询。代码注入漏洞的核心是缺乏对web应用程序使用的数据的验证和清理。任何接受参数作为输入的内容都可能受到代码注入攻击。

危害: 注入可以使数据丢失或者被破坏掉,并且缺乏可审计性或者拒绝服务。注入漏洞有时甚至可导致完全接管主机。

如何进行防御代码注入漏洞

  • 首选方法是使用安全的API接口,该API避免完全使用解释器,或者说提供参数化的接口或迁移为使用对象关系映射工具(ORM)。注意,即使说你参数化了,但是如果PL/SQL或者T-SQL连接查询和数据,或者说使用EXECUTE IMMEDIATE 或者exec()执行恶意数据,则存储过程仍然可以引入SQL注入。
  • 使用肯定或“白名单”服务器端输入验证,由于许多应用程序都需要特殊字符,例如文本区域或者移动应用程序的API,因此这并不是一个完整的防御措施
  • 对于任何残留的动态查询,请使用该解释程序的特定转义语法来转义特殊字符。注意,表名(table),列名(column),等SQL结构无法转义,因此用户提供的结构名很危险。这是报表编写软件钟的常见问题。
  • 在查询钟使用limit和其他SQL控件可防止在SQL注入的情况下大量泄露记录

Conclusion

  • 数据和web应用程序逻辑要分离;
  • 实施限制,以在成功进行注入攻击的情况下限制数据公开。

0x01 失效身份验证和会话管理


身份验证漏洞可能让攻击者能尝试控制他们在系统中想要的任何账户,甚至更糟的是,获得对系统的完全控制。身份验证和会话管理失效通常是指在应用程序身份验证机制上发生的逻辑问题,例如恶意行为者暴力破解系统中的有效用户。
web应用程序包含一个失效身份验证和会话管理漏洞,如果它存在如下问题

  • 允许自动攻击,例如攻击者在其中拥有有效的用户名和密码的列表;
  • 允许暴力破解或其他自动攻击;
  • 允许使用默认密码,弱密码或者众所周知的密码。
  • 使用薄弱或者无效的身份恢复以及忘记密码的过程,这是很不安全的;
  • 使用纯文本,加密或弱哈希密码;
  • 缺少或无效的多因素身份验证
  • 在URL中公开会话ID
  • 成功登录后不轮换会话ID
  • 没有正确地让会话ID无效,用户会话或者身份验证令牌在注销或一段时间不活动期间未正确失效。

危害
可能导致部分甚至全部账户遭受攻击,一旦攻击成功,攻击者就能执行合法的任何操作。

如何防范?

  1. 多因素身份验证
  2. 弱密码检查,例如针对前10000个最差密码的列表尝试更改密码;
  3. 限制失败的登录尝试次数。记录所有故障,并在检测到暴力破解或者其他攻击时提醒管理员
  4. 使用服务器安全的内置会话管理器,该管理器在登录后生成具有较高熵的新随机会话ID。会话ID不应该位于URL中。ID应在注销,空闲和绝对超时后无效。

0x02 敏感信息暴露

敏感信息暴露是OWASP列表上最普遍的漏洞之一。它包括破坏应该受到保护的数据。

如何防止数据泄露?

  1. 加强存储和传输所有的敏感数
  2. 确保使用合适强大的标准算法和密钥,并且密钥管理到位
  3. 确保使用密码专用算法存储密码
  4. 及时清除没有必要存放的重要的敏感数据
  5. 禁止自动收集敏感数据,禁用包含敏感数据的页面缓存。

0x03 XML外部实体注入攻击(XXE)


XML外部实体注入攻击是针对解析XML输入的应用程序的一种攻击。当弱配置的XML解析器处理包含对外部实体的引用的XML输入时,就会发生此攻击。
默认情况下,大多数XML解析器容易收到XXE攻击。因此,确保应用程序不具有此漏洞的责任主要在于开发人员。

如何防止XML外部实体注入攻击

  • 尽可能使用简单的数据格式(例如JSON),并避免对敏感数据进行序列化。
  • 应用程序或基础操作系统上修补或升级正在使用的所有XML处理器和库
  • 使用依赖项检查器
  • 在应用程序的所有XML解析器中禁用XML外部实体和DTD处理。
  • 在服务器端实施(“白名单”)输入验证,过滤或清理操作,以防止XML文档,标头或节点内的攻击数据
  • 验证XML或XSL文件上传功能是否使用XSD验证或类似方法验证传入的XML
  • SAST工具可以帮助检测源代码中的XXE

0x04 访问控制中断

在网络安全中,访问控制意味着根据访问者的需求限制访问者可以访问的部分或页面。

例如 如果说你有一家电子商务商店,则可能需要访问管理面板才能添加新产品或为即将到来的假期设置促销。但是几乎没有人会需要它,允许网站的其他访客访问您的登录页面只会使您的电子商务商店收到攻击。

如何防止访问控制中断

  1. 采用特权最低的概念-将角色应用于任务,并且仅在完成该任务所需的时间范围内应用,而不再需要更多时间。
  2. 删除不需要的账户或不再需要其用户的账户。
  3. 审核您的服务器和网站-谁在做什么,什么时候以及为什么做。
  4. 如果可以,对所有访问点应用多因素身份验证
  5. 禁用访问点,直到需要他们为止,以减少访问窗口。
  6. 从服务器上删除不必要的服务。
  7. 检查可从外部访问的应用程序以及与网络绑定的应用程序。
  8. 如果需要开发网站,请记住生产盒不应该成为未经测试即可开发、测试或者发布更新的地方。

0x05 安全性配置错误


网站管理员最常见的缺陷之一就是保持CMS默认配置。
从安全角度来看,对于最终用户而言,今天的CMS应用程序可能会很棘手。到目前为止,最常见的攻击完全是自动化的。这些攻击中有许多都是依赖于用户仅仅具有默认设置。这意味着,在安装CMS时可以通过更改默认设置来缓解大量的攻击。同时还需要调整一些设置,以控制评论,用户和用户信息的可见性。文件权限是可以强化的默认设置的另一个示例。

如何防止安全性配置错误

  • 可重复的强化过程,可以快速轻松地部署正确锁定的另一个环境。开发,质量保证和生产环境均应该配置相同,并且在每个环境中使用不同的凭证,从而使该过程自动化,以最大程度地减少设置新的安全环境所需的工作。
  • 一个没有任何不必要的功能,组件,文档和样本的最小平台。删除或不安装未使用的功能和框架。
  • 作为修补程序管理过程的一部分,审查和更新适用于所有安全说明,更新和修补程序的配置的任务。特别请查看云存储的权限。
  • 一种分段的应用程序体系结构,可通过分段,容器化或者云安全组在组件之间提供有效且安全的隔离。
  • 将安全指令发送到客户端,例如安全标头。
  • 在所有环境中验证配置和设置有效性的自动化过程。

0x06 跨站脚本攻击(XSS)

跨站脚本(XSS)是一个广泛存在的漏洞,会影响许多web应用程序。XSS攻击包括将恶意的客户端脚本注入网站,并且将该网站作为传播方法。

XSS背后的风险在于,它允许攻击者将内容注入网站并且修改其显示方式,从而迫使受害者的浏览器在加载页面时执行攻击者提供的代码。

通常,XSS漏洞要求用户通过社工或通过访问特定的页面来触发某种类型的交互,如果未修补XSS漏洞,则对任何网站来说都非常危险。


XSS的类型

  • 反射型XSS:应用程序或API包含未经验证和未转义的用户输入,作为HTML输入的一部分。成功的攻击可以使攻击者在受害者的浏览器中执行任意HTML和JavaScript。通常,用户将需要与指向攻击者控制的页面的某些恶意链接进行交互,例如恶意注水网站,广告或类似内容。
  • 存储型XSS:应用程序或API存储未过滤的用户输入,稍后由其他用户或管理员查看。存储的XSS通常被认为是高风险或严重风险。
  • DOM型XSS:动态地将攻击者可控制的数据包包含到页面地JavaScript框架,单页应用程序和API容易收到DOM

如何防止跨站脚本攻击呢?

  • 使用根据设计自动逃避XSS的框架,例如最新的Ruby on Rails,React JS,了解每个框架的XSS保护的局限性,并适当处理未涵盖的用例。
  • 根据HTML输出中的上下文(正文、属性,JavaScript,CSS或URL)转义不受信任的HTTP请求数据将解决Reflected和Stored XSS漏洞,防止XSS的OWASP备忘单详细介绍了所需的数据转义技术。
  • 在客户端上修改浏览器文档时,应用上下文相关的编码会影响DOM XSS,如果无法避免这种情况,可以将类似的上下文相关的转义技术应用于浏览器API,如OWASP速查表中基于DOM的XSS预防中所述。
  • 启用内容安全策略(CSP)是针对XSS的深度防御缓解控制,如果不存在允许通过本地文件包含防止恶意代码的其他漏洞,(例如,路径遍历覆盖或来自允许的内容传递网络的易受攻击的库),则此方法有效。

0x07 不安全的反序列化


关键概念:

  • 序列化的过程是将对象转换为字节字符串;
  • 反序列化的过程是将字节字符串转化为对象

程序尝试在不进行任何验证的情况下对数据进行反序列化,这倾向于使攻击者可以模拟序列化的数据并发送给应用程序以采取任何暴力措施。

如何防止不安全的反序列化

  • 在任何序列化对象上实施完整性检查(例如数字签名),以防止恶意创建对象或者篡改数据。
  • 在对象创建之前的反序列化过程中强制执行严格的类型约束,因为代码通常希望使用一组可定义的类。已经证明绕过该技术,因此不建议仅仅依赖此技术。
  • 隔离并运行可能在低特权环境中反序列化的代码
  • 记录反序列化异常和失败,例如传入的不是预期的类型,或者说反序列化引发异常
  • 限制或监视反序列化的容器或服务器的传入和传出网络连接
  • 监视反序列化,并且警告用户是否不断反序列化。

0x08 使用具有已知漏洞的组件


简单的网站对其具有很大的依赖性。毫无疑问,如果不更新网站后端和前端的每个软件,无疑会给人们带来沉重的安全风险。

防止使用易受攻击的组件的方法

  • 删除所有不必要的依赖项
  • 在客户端和服务器端都有所有组件的清单
  • 监视诸如常见漏洞和披露(CVE)和国家漏洞数据库(NVD)之类的源,以查找组件中的漏洞。
  • 仅从官方来源获取组件
  • 摆脱未积极维护的组件
  • 在网站应用程序防火墙的帮助下使用虚拟修补程序。

0x09 日志记录和监控不足

保护网站的重要性不可低估。虽然100%的安全性不是一个现实的目标,但是有一些方法可以使您的网站受到定期监控,以便您在发生问题时立即采取行动。如果没有有效的日志记录和监视过程,则可能会增加网站收到危害的风险指数

示例

  1. 一个小团队运行的一个开源项目论坛软件被利用其软件中的一个漏洞进行了黑客攻击。攻击者设法清除了包含下一个版本和所有论坛内容的内部源代码存储库。尽管可以恢复源,但是缺少监视,记录或警报功能导致更严重的漏洞。由于此问题,论坛软件项目不再处于活动状态。
  2. 攻击者扫描具有公共密码的用户。他们可以使用此密码接管所有帐户。对于所有其他用户,此扫描仅留下一个错误的登录名。几天后,可能会使用不同的密码重复此操作。
  3. 据报道,一家大型美国零售商有一个内部恶意软件分析沙箱,用于分析附件。沙盒软件已检测到可能不需要的软件,但是没有人对此检测结果做出响应。在检测到由于外部银行进行欺诈性卡交易而造成的违规之前,沙盒已经发出警告了一段时间。

如何进行有效的网络监控

保持审核日志对于掌控网络的任何可疑更改至关重要。审核日志是一个文档,用于记录网站中的事情,因此您可以发现并与负责人确认该账户没有收到威胁。

你可能感兴趣的:(面试题,面试,安全,网络安全,渗透测试)