OWASP(开放式web应用程序安全项目)Top 10
注入

失效的身份认证
1、定义
身份认证:身份认证最常用于系统登录,形式一般为用户名和密码登录方式,在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等
会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中,之后的身份识别只需读授权令牌,而无需再次进行登录认证
2、原理
开发者通常会建立自定义的认证和会话管理方案。但与身份认证和回话管理相关的应用程序功能往往得不到正确的实现,要正确实现这些方案却很难,结果在退出、密码管理、超时、密码找回、帐户更新等方面存在漏洞,这就导致了攻击者攻击者破坏密码、密钥、会话令牌或攻击其他的漏洞去冒充其他用户的身份(暂时或永久的)
3、危害
可能导致部分甚至全部账户遭受攻击,攻击者一旦成功,攻击者能执行受害用户的任何操作。因此管理员账户、特权账户是常见的攻击目标
4、检测失效的身份认证和会话管理
4.1、用户身份验证凭证没有使用哈希或加密保护
4.2、认证凭证可猜测,或者能够通过薄弱的的帐户管理功能(例如账户创建、密码修改、密码恢复, 弱会话ID)重写
4.3、会话ID暴露在URL里 (例如URL重写)
4.4、会话ID容易受到会话固定(session fixation)的攻击
4.5、会话ID没有超时限制,或者用户会话或身份验证令牌特别是单点登录令牌在用户注销时没有失效
4.6、成功注册后,会话ID没有轮转
4.7、密码、会话ID和其他认证凭据使用未加密连接传输
5、防范
5.1、分区公共区域和受限区域:站点的公共区域允许任何人用户进行匿名访问,受限区域只能接受特定用户的访问
5.2、对cookie内容进行加密
5.3、可以设置锁定账户策略
5.4、设置密码和会话的有效期,并使用强密码(密码必须是数字和字母的组合)
5.5、账号密码以密文形式传输
敏感数据泄露
- 通用性web程序有默认的管理员用户或者测试用户,才应用上线时没有进行清除导致第三方可以直接登录,进行一些操作。
- 数据库软件。集成开发环境。CMS内容管理系统。路由器管理界面。
外部实体(XXE)
XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击。漏洞是在对非安全的外部实体数据进行处理时引发的安全问题。
由于站点的建站语言不同,PHP、JAVA、python等也有不同的解析规则,在实际情况中不能一概而论,但原理是相同的。
比如如下的三种:
file:///path/to/file.ext http://url php://filter/read=convert.base64-encode/resource=conf.phpXML在调用外部实体整体的写法如下:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xdsec [ <!ELEMENT methodname ANY > <!ENTITY xxe(实体引用名) SYSTEM "file:///etc/passwd"(实体内容) >]> <methodcall> <methodname>&xxe;</methodname> </methodcall>这种写法则调用了本地计算机的文件
/etc/passwd,XML内容被解析后,文件内容便通过&xxe被存放在了methodname元素中,造成了敏感信息的泄露。失效的访问控制
- 权限绕过:解决方法一句话bai在注册表里删除[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BrowserHelperObjects\{B69F34DD-F0F9-42DC-9EDD-957187DA688D}] 删不掉就更改[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BrowserHelperObjects]这个项的权限,改成“完全控制”。 如果不能保存权限,就用“高级”,把自己账户添加为所有者。
- 改了[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BrowserHelperObjects]权限后,进去把下面这个值删掉[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BrowserHelperObjects\{B69F34DD-F0F9-42DC-9EDD-957187DA688D}]如果还是权限不够,参照上述法继续改权限。也可以考虑用冰刃来删。


安全配置错误
- 安全配置错误可以发生在一个应用程序堆栈的任何层面,包括网络服务,平台,web服务器、应用服务器、数据库、框架、自定义的代码、预安装的虚拟机、容器、存储等。这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。
A:应用程序启用或者安装了不必要的安全功能
B:默认账户名和密码没有修改
C:应用软件已过期或易受攻击
D:应用程序服务器,应用程序框架等未进行安全配置。
E:错误处理机制披露大量敏感信息
F:对于更新的系统,禁用或不安全地配置安全功能。1、 配置所有的安全机制
2、 最小原则,关掉或限制不使用的服务
3、 更改默认账户信息
4、 使用日志和警报
5、 回显信息不显示任何与实际错误相关的信息
6、 检查和修复安全配置项跨站脚本(XSS)

安全的反序列化
分布式应用程序或那些需要在客户端或文件系统上存储状态的程序,可能正在使用对象序列化,具有公共倾听器或依赖于客户端维护状态的分布式应用程序,很可能允许对序列化数据进行篡改。这种攻击可使用于二进制格式,或基于文本的格式。
1,序列化机制允许创建任意数据类型;
2,有可用于将应用程序链接在一起的类,以反序列化期间或之后改变应用程序行为,或者使用非预期的内容来影响应用程序行为;
3,应用程序或API接受并反序列化攻击者提供的恶意对象,或者应用程序使用了不具有恰当防篡改控制的序列化不透明客户端状态。
4,安全状态发送到缺失了完整性控制的不受信客户端,很容易受到反序列化的攻击。唯一安全的架构模式是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体。
1,对序列化对象执行完整性检查或加密,以防止恶意对象创建或数据篡改;
2,在创建对象之前强制执行严格的类型约束;
3,隔离反序列化的代码,使其在非常低的特权环境中运行;
4,记录反序列化的丽娃情况和失败信息,如:传入的类型不是预期的类型,或者反序列处理引发的例外情况;
5,限制或监视来自于容器或服务器传入和传出的反序列化网络连接;
6,监视反序列化,当用户持续进行反序列化时,对用户进行警告。
使用含有已知漏洞的组件
如果满足下面的某个条件,那么你的应用就易受此类攻击:
如果你不知道所有使用的组件版本信息(包括:服务端和客户端)。这包括了直 接使用的组件或其依赖的组件。 如果软件易受攻击,不再支持或者过时。这包括: OS 、 Web 服务器、应用程序服 务器、数据库管理系统( DBMS )、应用程序、 API 和所有的组件、运行环境和库 • 如果你不会定期做漏洞扫描和订阅你使用组件的安全公告。如果你不基于风险并及时修复或升级底层平台、框架和依赖库。很可能发生这种 情况:根据变更控制,每月或每季度进行升级,这使得组织在这段时间内会受到 已修复但未修补的漏洞的威胁。如果软件工程师没有对更新的、升级的或打过补丁的组件进行兼容性测试。如果你没有对组件进行安全配置。
使用含有已知漏洞的组件-防止方法
应该制定一个补丁管理流程: 移除不使用的依赖、不需要的功能、组件、文件和文档。 利用如 versions 、 DependencyCheck 、 retire.js 等工具来持续的记录客户端和服务 器端以及它们的依赖库的版本信息。持续监控如 CVE 和 NVD 等是否发布已使用组 件的漏洞信息,可以使用软件分析工具来自动完成此功能。订阅关于使用组件 安全漏洞的警告邮件。 仅从官方渠道获取安全的组件,并使用签名机制来降低组件被篡改或加入恶意 漏洞的风险 , 监控那些不再维护或者不发布安全补丁的库和组件。如果不能打补丁,可以考 虑部署虚拟补丁来监控、检测或保护。 每个组织都应该制定相应的计划,对整个软件生命周期进行监控、评审、升级或 更改配置。
不足的日志记录和监控
示例
- 一个小团队运行的一个开源项目论坛软件被利用其软件中的一个漏洞进行了黑客攻击。攻击者设法清除了包含下一个版本和所有论坛内容的内部源代码存储库。尽管可以恢复源,但是缺少监视,记录或警报功能导致更严重的漏洞。由于此问题,论坛软件项目不再处于活动状态。
- 攻击者扫描具有公共密码的用户。他们可以使用此密码接管所有帐户。对于所有其他用户,此扫描仅留下一个错误的登录名。几天后,可能会使用不同的密码重复此操作。
- 据报道,一家大型美国零售商有一个内部恶意软件分析沙箱,用于分析附件。沙盒软件已检测到可能不需要的软件,但是没有人对此检测结果做出响应。在检测到由于外部银行进行欺诈性卡交易而造成的违规之前,沙盒已经发出警告了一段时间。
常用工具
