




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
逻辑漏洞 王朋涛 深信服北京安全团队 逻辑漏洞概述逻辑漏洞攻击流程逻辑漏洞攻击之应用程序解析逻辑漏洞攻击之逻辑漏洞示例逻辑漏洞攻击之挖掘教程商业逻辑漏洞攻击逻辑漏洞攻击防御逻辑漏洞探测工具总结 培训提纲 逻辑漏洞概述 逻辑漏洞概述 逻辑漏洞的出现所有的应用程序都通过相关的逻辑实现各种功能 而编程实际上就是将这些功能分解成独立 简单的逻辑单元 并用代码实现 大量的逻辑操作加上不同背景的开发人员 增加了逻辑缺陷出现的概率 逻辑漏洞的本质主要源于设计者或者开发者在思考过程中做出的特殊假设存在明显或隐含的错误 逻辑漏洞概述 逻辑漏洞的特点普遍存在性 由于功能的实现需要大量的逻辑操作 同时受制于程序员的背景 这类缺陷普遍存在于各类应用程序中 不固定性 或者称作 十分有针对性 因为每一种逻辑缺陷似乎都是唯一的 它是基于逻辑操作 不同的功能逻辑不同 因此无法用一般的工具发现他们 隐蔽性 大多数的逻辑漏洞都十分隐蔽 它存在于操作关系当中 甚至是属于应用程序正常的功能 逻辑漏洞攻击流程 逻辑漏洞攻击流程 逻辑漏洞攻击之应用程序解析 逻辑漏洞攻击之应用程序解析 攻击一个应用程序 首先要分析这个应用程序 了解清楚其本身的功能 行为以及使用的技术 有针对性的攻击 那么成功的机会就变大了 下面就是针对逻辑攻击来说应该考虑的3个方面 了解应用程序功能 寻找数据的输入点 确定业务操作流程 应用程序解析之了解应用程序功能 大多数情况下 应用程序的功能我们可以通过web浏览的方式获得 其基本方法就是从主页面开始 查看网站标题或者首页导航菜单 以及多级页面的浏览遍历 就能大致知道这个网站的基本功能 如下图所示 就可以看出这个网站是一个在线票务类的网站 通过网站自带的网站地图就能快速的了解其一些基本的功能 应用程序解析之寻找数据的输入点 寻找数据输入点 就是寻找各种输入框 可编辑的 不可编辑的 隐藏的 显示的 脚本生成的 或者可点击的按钮等 简单点的办法就是使用爬虫工具进行web站点扫描 所有url地址本身 url的各个参数信息以及HTTP头部信息都属于输入点 但是这种情况 效率较低 若只是简单的测试某个流程是否有逻辑漏洞 就不推荐使用这种方法 若是要完整的检测安全性 则这种扫描是很有必要的 应用程序解析之确定业务操作流程 通常情况下 注册个测试账号 若需要 一般按照应用程序正常的流程完全的走一遍 在操作的同时 把所有操作步骤的数据包拦截下来 以便后续分析流程步骤涉及到的所有数据操作以及数据传输 若应用提供了操作步骤提示信息 则也可大致了解到每个业务的操作流程 了解到操作流程后 也就可猜测出可能存在哪个方面的逻辑漏洞 达到快速渗透的目的 如下图 逻辑漏洞攻击之逻辑漏洞示例 演示示例均引用自乌云 应用程序解析之逻辑漏洞示例 1 不校验原始数据引发的逻辑漏洞 比如乌云上的114票务网的示例 http www wooyun org bugs wooyun 2014 051779 114票务网对修改密码的时候不进行原密码验证就可直接修改任意用户密码 如下图 应用程序解析之逻辑漏洞示例 2 由于对验证码验证次数的不限制 可导致穷举出验证码 亦可修改任意用户密码 比如乌云上的易宝支付任意修改密码漏洞的示例 http www wooyun org bugs wooyun 2010 060501 易宝支付对手机认证码的验证次数不限制的原因 4位数字验证码可以在10分钟穷举出用户密码 原文如下图 应用程序解析之逻辑漏洞示例 3 操作数据在页面间跳转传输过程未进行有效性校验 导致可任意修改敏感数据 比如乌云上的中国联通某省套餐购买逻辑漏洞 订单泄露的示例 http www wooyun org bugs wooyun 2010 084515 套餐购买提交订单时 不对商品订单的金额进行校验 用户可随意修改订单的价格 甚至为负数 如下图 跨片 应用程序解析之逻辑漏洞示例 应用程序解析之逻辑漏洞示例 逻辑漏洞攻击之挖掘方法 逻辑漏洞挖掘之确定应用所使用的技术 实际分析中可参考以下基本步骤 确定客户端技术 如表单校验形式 客户端或服务端校验 脚本类型 cookie规则 Javaapplet ActiveX控件与Flash对象 确定服务器端技术 如脚本语言 PHP JSP ASP等 应用程序平台 数据库类型及电子邮件等交互系统 检查应用程序响应中的HTTP消息头 如Server Referer等 运行扫描工具对服务器做 指纹识别 分析所有获得信息 包括文件扩展名 目录列表或URL规律 检查所有会话令牌和其他cookie名称等 获取分析第三方代码组件的脚本 参数及行为等 发现应用程序隐藏的内容和功能 逻辑漏洞挖掘之测试项 测试客户端输入验证测试客户端数据传输测试客户端组件逻辑测试多阶段过程逻辑测试不完整输入处理测试信任边界测试业务逻辑 逻辑漏洞挖掘之测试客户端输入验证 逻辑漏洞挖掘之测试客户端输入验证 在客户端输入上 常采用的手段是HTML表单 客户端脚本 Javascript VBScript等 以及一些隐藏或禁用元素等 开发人员使用这些方法的假设为 用户的输入经过了客户端的限制 从而可以保证数据的合法性 逻辑漏洞挖掘之测试客户端输入验证 举例 功能 页面输入字段为防止各类攻击 eg SQL注入 采用了单引号转义 将两个单引号构成一个原义单引号 同时限制了输入长度为128字符 假设 对于攻击的防御采用转义 则攻击者无法实现单引号的输入攻击 攻击 考虑以下情况 如果经过应用程序单引号转义后的字符串 提交给了截断模块 那么是否可以绕过限制 逻辑漏洞挖掘之测试客户端输入验证 如果我们考虑用户名修改为 adminnnnnnn 127个字符 由于先做转义再截断 则输入数据依然是adminnnnnnn 127个字符 配合password字段输入or1 1 则查询语句变成 SELECT FROMusersWHEREname adminnnnnnn 127个字符 andpassword or1 1 由于在数据库中连续两个单引号作为转义 所以会被当做数据而非结构 则数据库实际查询的用户名为 adminnnnnnn 127个字符 andpassword 因此我们可以构造or1 1 部分 实现注入查询 逻辑漏洞挖掘之测试客户端输入验证 总结 在实际分析中可参考以下基本步骤 在用户输入提交给服务器之前 确定使用长度限制和JavaScript脚本等进行的数据输入检查条件 通过提交客户端限制的输入 轮流测试每一个受影响的字段 确定服务器是否使用相同的输入确认 检查确认HTML表单禁用元素 修改其数据 与其他表单一起提交 以确定该元素是否会对应用程序的逻辑产生影响 删除 修改或禁用客户端脚本 确定服务器是否只依赖客户端的检查 利用客户端本身的功能 如转义 长度限制等进行避开输入以改变程序执行逻辑 逻辑漏洞挖掘之测试客户端数据传输 逻辑漏洞挖掘之测试客户端数据传输 应用程序通常以终端用户无法查看或修改的方式向服务器传送数据 通常开发者认为所采用的传输机制将保证传输过程中数据不被修改 一般通过客户端传送数据的方式有隐藏表单字段 HTTPcookie URL参数 Referer消息头 模糊数据 ASP NETViewState等 逻辑漏洞挖掘之测试客户端数据传输 举例 功能 当前有一个用户登录系统 登录成功后会显示用户欢迎 用户名等信息以POST方式提交 假设 开发者假设用户数据传输过程中是安全的 逻辑漏洞挖掘之测试客户端数据传输 攻击 如果我们使用BurpSuiteProxy拦截传输过程中请求 逻辑漏洞挖掘之测试客户端数据传输 修改用户名和密码后forward 查看结果 逻辑漏洞挖掘之测试客户端数据传输 总结 实际分析中可参考以下基本步骤 在应用程序中 确认隐藏表单字段 cookie和URL参数明显用于客户端传送可控数据的所有情况 根据以上数据出现的位置极其名称与值 尝试确定其在应用程序逻辑中发挥的作用 修改在应用程序相关功能中的值 确定应用程序是否处理字段中提交的任意值 并确定这样做是否可以干扰其正常逻辑 如果应用程序通过客户端传输模糊数据 我们依然可以使用各种方式攻击它 如 如果模糊处理 则可以尝试破解算法 提交任意数据 如果采用安全加密 则可使用其他加密块替换提交以攻击程序逻辑 逻辑漏洞挖掘之测试客户端组件逻辑 逻辑漏洞挖掘之测试客户端组件逻辑 客户端组件及控件也是一种收集 确认并提交用户数据的主要方法 由于速度和用户体验方面的原因 之前在服务器端处理的任务将在客户端执行 这将有意无意的增加客户端的风险 开发者假设操作的用户都是可信任的或者浏览器扩展会自行防御恶意企图 由于相对HTML表单和JavaScript确认机制 控件方式更加不透明 这也使得开发者认为控件的确认更加安全 逻辑漏洞挖掘之测试客户端组件逻辑 举例 功能 购物网站一般都有购物车功能 这些功能大多是由控件实现 同时控件中会加载一些购物策略 eg 购物满多少可以打几折等 通过分析我们也许可以直接获得低折扣的商品价格 同时在结算页面确认时还可以选择商品数量及退订商品 假设 当购物车的商品满1000元的时候 可以享受8折优惠 当满2000元的时候可以享受7折优惠 同时在提交结算页面时计算最终折扣 逻辑漏洞挖掘之测试客户端组件逻辑 攻击 以上假设没有考虑到购物者放入商品后结算确认时再修改商品的情况 因此购物者可以将大量商品放入购物车以获得最优折扣 在结算确认页面再将部分商品退掉或修改商品数量 这样就可以获得最优的折扣 以上的例子举的比较浅显 实际的控件功能逻辑更加复杂 同时数据可能会采取模糊或者加密处理 因此实际的分析中应当更加严谨 逻辑漏洞挖掘之测试客户端组件逻辑 总结 实际分析中可参考以下基本步骤 使用代理工具对客户端和服务器端的流量进行监视 如果发现数据被序列化 则可以使用某种反序列化工具或插件 浏览控件在客户端的所有功能 并使用代理修改关键请求或者服务器响应 以确认任何可以改变数据逻辑的功能 反编译客户端控件 分析相关代码 确认其中的输入限制及其他逻辑方式 逻辑漏洞挖掘之测试客户端组件逻辑 附加调试器 查找监视关于安全及业务逻辑的功能和值 并设置断点 修改参数或返回值 尝试逻辑攻击 借助客户端组件或控件的调用代码 执行有目的的数据调用及输入或者进行模糊输入测试 并监控处理结果 尝试发现各种隐藏的功能 参数或资源 通过开启功能或调用资源等获得服务器资源 尝试通过组件功能获得其他相关信息 eg 对手信息 预发布信息等 逻辑漏洞挖掘之测试多阶段过程逻辑 逻辑漏洞挖掘之测试多阶段过程逻辑 应用程序的最终提交需要经过多个阶段的信息获取及确认 eg 找回密码 订单提交 针对这类功能 开发人员默认前一阶段提交过来的数据是可信的 这种假设也就造成了大量的多阶过程逻辑漏洞 举例 功能 一般的网上购物流程如下 浏览商品并添加到购物车确认订单输入支付信息输入交货信息 逻辑漏洞挖掘之测试多阶段过程逻辑 假设 开发者会认为用户总会按照预定的顺序执行每一个步骤 因为这是应用程序通过显示在浏览器中的导航链接和表单向用户提供的处理顺序 因此 开发者认为任何完成订购过程的用户一定已经提交了正确的支付信息 攻击 这里开发者的假设存在明显的缺陷 用户控制着他们向应用程提出的每一个请求 因此能够以任何顺序访问订购过程的每一个阶段 如果直接从步骤2进入步骤4 攻击者就可以生成一个最终确定交货但实际并未支付的订单 以上的攻击方法叫做强制浏览 包括突破浏览器导航对应用程序功能访问顺序实施的任何限制 逻辑漏洞挖掘之测试多阶段过程逻辑 总结 实际分析中可参考以下基本步骤 如果一个多阶过程需要按照预定的顺序提交一系列请求 尝试按其他顺序提交这些请求 尝试完全省略某个阶段 几次访问同一个阶段 或者推后访问前一个阶段 确保应用程序访问不同阶段所使用的机制 这些阶段可能通过一系列指向特殊URL的GET或POST请求进行访问 或者向同一个URL提交不同的参数 被访问的阶段可以通过提交的参数中指定名称或索引来确定 逻辑漏洞挖掘之测试多阶段过程逻辑 尝试提取某一阶段的参数 并在另一个阶段中提交这些参数 如果相关数据被应用程序更新 应当确定是否可以利用这种行为破坏应用程序的逻辑 根据执行功能的情形 了解开发者做出的假设及主要攻击面的位置 设法找到违反这些假设以在应用程序造成反常行为的方法 如果应用程序表现出一系列异常现象 eg 提示错误 变量未赋值或初始化等 寻找有用的错误消息及调试结果 可以通过他们进一步了解该功能的内部机制 从而调整攻击方向和方法 逻辑漏洞挖掘之测试不完整输入处理 逻辑漏洞挖掘之测试不完整输入处理 客户端完成对用户输入的收集及确认 必要时会对数据进行计算或简单的功能处理 部分情况下应用程序的处理过程和某些数据是否输入有关 eg 不勾选发票项 则不走发票流程 这些功能的处理是本着用户并不知情关键数据对功能具体影响的前提假设 客户端对用户屏蔽处理机制 这也会引入大量安全问题 逻辑漏洞挖掘之测试不完整输入处理 举例 功能 应用程序为用户提供密码修改功能 它要求用户填写用户名 当前密码 新密码以及新密码确认 同时应用程序还为管理员提供密码修改功能 它允许管理员修改任何用户的密码 而不需要提供用户当前密码 这两个功能在同一个服务器端脚本中执行 逻辑漏洞挖掘之测试不完整输入处理 假设 应用程序为用户和管理员提供的界面仅有一点不同 在管理员界面中没有用于填写现有密码的字段 而后端采用的是同一个脚本 它通过请求中是否包含当前密码来确认请求是来自用户还是管理员 攻击 一旦确定了假设 攻击就变得十分容易 普通用户可以通过提交不包含现有密码的请求修改任何用户的密码 从而完全控制用户账户 逻辑漏洞挖掘之测试不完整输入处理 总结 实际分析中可参考以下基本步骤 轮流测试每一个参数 从请求中删除参数的名称或值 监控应用程序的响应 查找所有行为异常或错误消息 以获得和应用程序逻辑有关的信息 一次仅修改一个参数 确保达到应用程序中所有与参数相关的代码路径 如果所操纵的请求属于一个多阶过程 应测试整个过程 因为应用程序可能将前一个阶段的数据保存在会话中 然后在后一个阶段处理 逻辑漏洞挖掘之测试信任边界 逻辑漏洞挖掘之测试信任边界 信任边界指在什么地方更改信任级别 大部分情况下表现为访问控制权限的更改 应用程序对信任边界的状态转换处理往往存在着看似安全的假设 因此分析清楚应用程序的信任边界将有助于发现此类逻辑缺陷 举例 功能 应用程序使用一种安全 多阶的登录机制 要求用户提供多个不同的证书才能获得访问权限 逻辑漏洞挖掘之测试信任边界 假设 应用程序在实现登录认证的过程中将通过验证用户的有关标示符临时保存在一个静态 非会话 变量中 然后执行其他 准备 工作 之后应用程序再读取这个变量的值 由于这个间隔时间十分短暂 因此开发者认为是安全的 攻击 如果出现这样一种情况 用户集中登录 这个时候就会出现 变量改写后 又被另一个登录用户改写 因此当前一个用户回来取变量值的时候 用户分配到的就是后一个登录者的会话 同时获得后者的访问权限 逻辑漏洞挖掘之测试信任边界 总结 实际分析中可参考以下基本步骤 了解应用程序如何处理不同用户信任状态之间的转换 通过在一个区域积累相关状态 在信任边界之间进行不恰当的转换 然后以正常不被允许的方式切换到另一个区域 确定是否可以利用更高权限的功能直接或间接访问或者猜测某些信息 逻辑漏洞挖掘之测试业务逻辑 逻辑漏洞挖掘之测试业务逻辑 业务逻辑攻击 其特点是利用正常的 合法的业务流程进行攻击 而非破坏逻辑 举例 用户登录为防止自动化登录攻击而设定了锁定次数 当正常登录错误达到一定次数后则封锁该用户一段时间 假设 此功能的假设是防止恶意登录攻击 从而保护用户账户安全 逻辑漏洞挖掘之测试业务逻辑 攻击 我们考虑另一种情况 假设某电商网站做活动 进行某件商品的竞拍 出价最高者获得此商品 如果在接近竞拍结束的时候 竞争对手的价格比自己高 而再次出价竞争对手也可能加价 这种情况下我们就可以利用业务逻辑攻击 故意使用错误的密码登陆对手账户另其锁定 无法再次出价 从而顺利的获得该商品 逻辑漏洞挖掘之测试业务逻辑 总结 实际分析中可参考以下基本步骤 分析应用程序的正常逻辑 目的以及使用场景 尽量将其应用场景进行扩展 并结合具体业务内容进行分析 分析是否可以使用一连串的交易达到一种状态 从而完成预期目的 eg 多次低额转账代替单次大额转账 如果应用程序根据用户控制的数据或操作确定处理方式或其他敏感内容 应首先分析应用程序使用的算法及需要调整的逻辑 努力想办法操纵应用程序的行为 使应用程序进行的调整与开发者最初设定的标准相矛盾 商业逻辑漏洞攻击 商业逻辑漏洞攻击概述 当前应用逻辑攻击发展出来的一种新型攻击方式称之为BLA 即BusinessLogicAttacks 商业逻辑攻击 的缩写 这是由世界著名数据安全公司Imperva在2011年6月至11月期间所发现的一种新型网络攻击方式 详情参阅 黑客发现攻击新手段 关注业务逻辑攻击 而这种攻击很可能将成为未来互联网世界里商战的雏形 商业逻辑漏洞攻击概要 攻击分类攻击目的攻击手段实际案例未来分析 商业逻辑漏洞攻击 攻击分类现在有两类商业逻辑攻击比较流行 电子邮件提取和垃圾评论 未来还会出现以操纵商业进程为目的的攻击手段 这类攻击一旦发展起来 将对互联网商业造成巨大的威胁 攻击目的电子邮件提取 建立垃圾邮件发送列表 垃圾评论 一方面导入流量 使得其获益的网站在搜索引擎的排名靠前 一方面让搜索引擎更多搜到获益网站 从而诈骗潜在消费者 商业逻辑漏洞攻击 攻击手段电子邮件提取 通过电子邮件地址抽取实现的攻击 它模拟真实用户访问客户网站 论坛 博客 社交网络 对客户Web网站中的电子邮件地址进行简单抽取和分类 而这一系列动作与正常用户访问几乎完全一样 很难辨识出其真实目的 垃圾评论 攻击者会在某些排名靠前的论坛注册 发表 回复某些言论 内嵌恶意链接地址来改变搜索引擎结果 为了让所发帖子处于显著位置被更多网友看到 恶意攻击者会发起投票 或想办法设置成置顶帖 商业逻辑漏洞攻击 实际案例在2006年 一家移动运营商 假设叫FlawedP 为其客户增加了一项webmail SMS的服务 开通和使用流程如下 新客户可以凭SIM卡开通一个以FlawedP为域名的免费 永久email账户 这个email账户在用户SIM卡转到其他运营商时仍会保留 由于SIM卡注册到了FlawedPhone 所以每次收到email邮件 FlawedPhone都会给客户发送一条SMS 内容包括发件人和邮件主题 同时SMS程序会每8个小时检查一下当前合法用户列表 商业逻辑漏洞攻击 攻击步骤 攻击者买一张新的FlawedPhoneSIM卡 攻击者马上将卡转到另一个运行商 这个运营商会在客户每收到一条SMS信息时支付给客户0 05欧元 一旦转卡完成 攻击者就会向FlawedPhone的email账户发送数以千计的邮件 在email SMS应用程序检查并更新合法用户列表前 攻击者最多拥有8个小时的空档 到发送截止时 攻击者的账户上大约已经有50 100欧元了 然后这个SIM卡就可以放到eBay上出售了 商业逻辑漏洞攻击 未来分析 据统计 这些商业逻辑攻击在恶意攻击流量中占到14 黑客可以利用应用程序截获私人信息 进行扭曲 并外泄给其他更多的用户 而这些行为通常不受安全控制 一旦商业逻辑攻击 BLA 与高级可持性 APT 类攻击相结合 所爆发出来的网络商战威力将不容小视 逻辑漏洞攻击防御 逻辑漏洞攻击防御概述 鉴于逻辑漏洞的本质 即使实施安全开发标准 使用代码审查工具或常规渗透测试 我们仍然无法避免这种缺陷 逻辑漏洞的多样性特点使得探查与防止他们往往需要从各个不同的角度思考问题 这预示着在很长一段时期内 逻辑缺陷仍将大量存在 基于开发流程及设计的预防基于网络行为识别的防御 基于开发流程及设计的预防 遵循以下最佳实践可以显著降低在应用程序中出现逻辑缺陷的风险 确保将应用程序中各个方面的设计信息清楚 详细的记录在文档中 以方便其他人员了解设计者做出的每个假设 要求所有源代码提供清楚的注释 包含但不限于以下内容 每个代码组件的用户和预计用法 每个组件对它无法直接控制内容做出的假设 清楚记录所有调用组件的代码效果 基于开发流程及设计的预防 在以安全为中心的应用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年贷款利率变动委托管理合同范本
- 2025版人工智能语音助手授权委托协议
- 2025年度高新技术项目居间对接服务协议
- 2025年度化工原料采购协议
- 2025年安防监控系统采购合同保密条款及保密协议
- 2025年企业出纳风险防控聘用服务协议
- 2025版汽车全车系事故车辆修复服务协议
- 2025年度融资租赁担保合同条款设计及法律适用研究
- 2025年智能穿戴设备采购协议书规范
- 2025范文大全:电力工程劳务合同范本
- 【电气施工】工业厂房机电安装工程施工组织设计方案
- 甲状腺的科普宣教课件
- 《数据结构》期末考试试卷试题及答案
- 2.3.1 匀变速直线运动的位移与时间的关系 课件高一上学期物理人教版(2019)必修第一册
- 统编版二年级上册语文《 妈妈睡了》 课件完整版
- 2025高中物理《课时作业》人教版必修第二册单元素养评价(一)
- 头脑特工队-Inside-Out中英文字幕对照
- XX村集体经济发展章程
- 工程项目决算书
- DZ∕T 0399-2022 矿山资源储量管理规范(正式版)
- 2024年国药控股股份有限公司招聘笔试冲刺题(带答案解析)
评论
0/150
提交评论