黑客大曝光:Web应用程序安全(原书第3版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-10 21:41:05

点击下载

作者:(美)斯坎布雷,(美)刘,(美)西玛

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

黑客大曝光:Web应用程序安全(原书第3版)

黑客大曝光:Web应用程序安全(原书第3版)试读:

前言

早在1999年,本书第1版就向读者介绍了计算机网络和系统多么容易闯入。尽管今天还有许多人没有意识到这个事实,但是很多人正在开始理解防火墙、安全操作系统配置、软件供应商补丁维护和许多其他以前觉得很神秘的信息系统安全的基础知识。

遗憾的是,互联网所带来的快速发展已经把“球门柱”推向了前场。防火墙、操作系统安全性和最新的补丁都可能被简单的Web攻击所绕过。尽管那些要素仍然是所有安全架构中的关键部件,但是对于越来越频繁而且不断成熟的新一代攻击来说明显无能为力。

这不是我的一家之言。Gartner集团指出,75%的网络攻击都在Web应用级别,而在300个经过审核的网站中,97%的网站都容易受到攻击。2009年秋季的WhiteHat网站安全统计报告称,83%的网站至少有一个严重的漏洞,64%的网站目前至少有一个漏洞,而漏洞解决率仅为61%,余留了8902个未解决的问题(样本大小:1364个网站)。毁灭性攻击的新闻现在已经很常见:身份盗窃资源中心(Identity Theft Resource Center,ITRC)称,在2010年上半年,至少有301个安全性缺口导致了超过820万份身份记录曝光。估计因为安全性缺口所引起的敏感数字记录侵害总数还会再攀新高:Verizon Business 2010数据破坏调查报告中称,6年来,仅查看900余种缺口样本就有超过9亿条记录受到侵害。

我们不能停止互联网商务的脚步,关上大门。我们除了划定一条底线,并保卫信息空间中无数的组织和个人所划定的阵地之外,别无选择。对于已经组建了最基本的网站的人来说,这是一个令人畏惧的任务。面对现有协议如HTTP的安全局限性,以及技术挑战(包括XML Web服务、AJAX、RSS、移动应用以及用户生成内容等)不断加速的脚步,设计和实现一个安全的Web应用可能成为一个戈尔地雅[1]斯难结。面对Web应用安全挑战

本书为你展示如何使用书中提出的双管齐下的方法来应对这一挑战。

首先,我们把Web应用将要面对的最大威胁分类,并且非常详细地解释它们的工作原理。我们是如何知道这些最大的威胁的?因为我们受雇于世界上最大的公司,进入它们的Web应用,每天使用基于这些威胁的攻击来开展工作。我们几人做这项工作的时间加起来已经超过30年,我们研究最新出现的攻击,开发自己的工具和技术,并且将它们组合成为最有效方法,用于渗透现有的Web应用安全。

在你注意到我们展示的这些危险之后,我们告诉你如何避免所有这些攻击。在不理解本书中的信息的情况下开发Web应用,等同于开车时不系安全带,还开上光滑的路面,穿过大裂谷,没有刹车,并且把油门踩到最大。本书的组织结构

本书由多个章节组成,每个章节描述攻击方法论的一个方面。这种结构组成了本书的主干,因为如果没有一种方法论,那么本书就仅仅是一堆没有上下文和意义的信息。以下是本书章节内容。

第1章 Web应用入侵基础。这一章中,我们广泛地概述了Web应用入侵攻击和技术,同时展示了具体的实例。系上你的安全带,因为我们就要离开堪萨斯了。

第2章 剖析。任何方法论的第一步往往是最重要的,剖析也不例外。该章讲解了作为攻击Web应用及其相关基础设施前奏的侦查过程。

第3章 Web平台入侵。如果建立在充满安全漏洞的Web平台之上,那么没有一个应用能够安全,该章描述了大部分流行的Web平台包括IIS、Apache、PHP和ASP.NET的攻击、检测躲避技术及其对策。

第4章 攻击Web验证。该章介绍常见Web验证机制的攻击和对策,包括基于密码、多因素(例如CAPTCHA)以及Windows Live ID这样的在线验证服务。

第5章 攻击Web授权。了解通过高级会话分析、劫持和完成(Fixation)技术。

第6章 输入注入攻击。从跨站脚本到SQL注入,大部分Web攻击的实质是意外的应用输入。在该章中,我们回顾经典的恶意输入类别,从超长输入(像缓冲区溢出)到规范化攻击(像臭名昭著的dot-dot-slash),并且揭示应该始终加以怀疑的元字符(包括角括号、引号、单引号、双破折号、百分号、星号、下划线、换行、&、管道符号和分号),从入门级到高级的SQL注入工具和技术,以及隐蔽编码技术和输入验证/输出编码对策。

第7章 攻击XML Web服务。不要遗漏了SOAP,因为这一章将揭示如何通过包括WSDL暴露、输入注入、外部实体注入和XPath注入等技术发现和攻击Web服务漏洞。

第8章 攻击Web应用管理。如果前门上锁,就试试后门!该章揭示了大部分针对远程服务器管理、Web内容管理/授权、管理员错误配置以及开发者造成错误的常见Web应用管理攻击。

第9章 入侵Web客户端。你可知道,浏览器实际上是不安全的东西直接进入你家里和办公室的一个有效的途径?来一次最危险的Web浏览器攻击之旅,然后遵循我们提出的“获得更安全的互联网体验10大步骤”(以及本章列出的许多附加对策),在浏览的时候就能更轻松地呼吸。

第10章 企业Web应用安全计划。在该章中,我们短暂地告别零知识/黑盒分析,解释一种健壮的全知识/白盒Web应用安全评估方法学的优点,包括威胁建模、代码评审、动态Web应用扫描、安全测试以及将安全集成到整个Web应用开发生命期和IT运作中。该章是针对中大型企业的IT运作和开发人员,他们需要实施我们的Web应用评估方法从而得到伸缩性、一致性和可接受的投资回报。

最后,我们添加了有用的附录,这并不代表这些内容不重要,具体包括:“Web安全检查列表”和“Web黑客工具和技术快速参考”。模块性、组织和易读性

很显然,本书可以从头到尾阅读,来得到Web应用渗透测试的全面描述。但是,我们尽力使每章独立,这样可以逐个模块地消化本书,适合时间紧张的目标读者。

而且,我们严格地坚持清晰、易于理解和简练的写作风格,这是读者对本书的总体印象。我们知道读者很忙,需要直接地得到第一手资料,而不是大量的空话和无谓的行话。正如本书以前版本的读者们所评论的:“读起来像小说,如地狱般令人惊恐!”我们认为,从头到尾阅读和逐个章节阅读都能使你满意,本书的结构适合于任何一种阅读风格。章节小结及参考与延伸阅读

本书每一章的结尾处都有两个特别部分:“小结”和“参考与延伸阅读”。“小结”顾名思义,是本章中介绍的主要概念的摘要,以及对各种对策的强调。我们希望,如果你阅读了每章的小结,就能知道如何加固Web应用来对付任何形式的攻击。

每章的“参考与延伸阅读”部分包含了该章正文介绍的每个条目所需的URL、ISBN号码和其他信息,这些条目包含供应商安全通告和补丁、第三方建议、商业和免费工具、新闻中的Web入侵事件以及关于正文的信息详细或者扩展读物。这样,如果你需要查找某些内容,可以翻到这一章的末尾去寻找。我们希望通过汇集附加的参考内容能够改进本书的整个阅读体验。基本组成部分:攻击与对策

本书的基本组成部分是每一章所讨论的攻击和对策,因此我们使用了非常醒目的攻击与对策图标。攻击图标

这个图标强调了各种攻击方法,使读者找到特定的渗透测试工具和方法很容易,并直接为你指出说服管理层投资新的安全倡议所需要的信息。

许多攻击附有危险等级,计分方法如下:

伴随着每种或者每个系列的攻击,也有相应的对策,图标如下:对策图标

这个标志应该会引起你对关键修复信息的注意。其他辅助图标

我们还使用了很多视觉增强图标来突出显示那些经常被忽视的细节。

注意 提示 警告在线资源和工具

Web应用安全技术变化很快,我们承认书籍通常很难跟上这种急剧变化的研究领域。

因此,我们建立了一个网站,跟踪与本书讨论的主题相关的新信息、勘误表,以及书中介绍的公共工具、脚本和技术。网站地址为

http://www.webhackingexposed.com

网站还提供了论坛,可直接与作者通过以下邮件交流:

joel@webhackingexposed.com

我们希望读者在阅读本书各个章节时经常登录这个网站,查看更新的材料、获得我们提到的工具,并跟上Web安全技术的变化形势。否则,你永远无法在进行防御时预先得知哪些新的发展可能危及你的应用。致读者的最后一段话

我们在本书中倾注了感情、才智和经验,我们真诚地希望所有的努力能为负责Web应用安全的读者节约大量的时间。我们认为你已经做出了一个有勇气和前瞻性的决策,希望在互联网上获得一席之地,但是,就像你将在本书中看到的那样,你的工作在网站启动的一刻才刚刚开始。不要惊慌,打开这本书,通过学习你会得到莫大的安慰:在下一个Web大灾难登上报纸头版时,你甚至连眼睛都不会眨一下。[1] 戈尔地雅斯难结——希腊神话中的一个难题,神谕解开该结即为亚细亚国王。——译者注作者简介Joel Scambray

Joel Scambray是一家战略安全资讯服务提供商Consciere的联合创始人和CEO。他已经帮助从新兴公司到《财富》前50大公司在内的许多公司处理信息安全问题,历时超过12年。

他曾经担任过高管、技术顾问和企业家。他曾经是Microsoft公司的高级主管,在那里他领导Microsoft的在线服务安全工作三年多,然后加入Windows平台和服务部门,专门研究安全技术架构。Joel还与他人共同创办了安全软件和服务公司Foundstone,并获得了McAfee 8600万美元的投资。他先前还担任过Ernst&Young的经理,Microsoft TechNet安全专栏作者,InfoWorld Magazine的自由撰稿人,以及一家大型商业房地产公司的IT主管。

他是1999年首次出版的畅销世界的计算机安全书籍《Hacking Exposed:Network Security Secrets and Solutions》的合著者。他还是《Hacking Exposed Windows》和《Hacking Exposed Web Applications》的主要作者。

他在很多场合发表关于信息安全的演讲,包括Black Hat、I-4、INTERFACE以及亚欧会议(ASEM)等论坛,IANS、CERT、计算机安全学会(CSI)、ISSA、ISACA、SANS等组织,私有公司以及韩国信息安全局(KISA)、FBI和RCMP等政府机关。

他拥有加州大学戴维斯分校的学士学位,加州大学洛杉矶分校的硕士学位,他还是一位认证信息系统安全专家(CISSP)。

Vincent Liu

Vincent Liu(CISSP)是Stach&Liu的任事股东。在创办Stach&Liu之前,Vincent在Honeywell国际公司领导全球安全单位的攻击与渗透及逆向工程团队。在此之前,他是Ernst&Young高级安全中心的顾问和美国国家安全局的分析师。Vincent是广受欢迎的演说家,曾在Black Hat、ToorCon和Microsoft BlueHat等业界会议上介绍自己的研究成果。Vincent拥有宾夕法尼亚大学的科学与工程学士学位,主修计算机科学与工程并选修心理学。Caleb Sima

Caleb Sima是以Santa Clara为基地的集成Web应用安全解决方案提供商Armorize Technologies的CEO。他在2000年创立了SPI Dynamics,并作为CTO目睹了堪称Web应用安全测试工具解决方案标杆的WebInspect的发展。2007年Hewlett-Packard(惠普公司)收购了SPI Dynamics,Sima成为了惠普公司的应用安全中心首席技术专家,在这里他指导并建立了该公司安全解决方案并且领导开发了基于云的安全服务。在这个位置上,他还管理一个训练有素的安全专家团队,成功地识别了新的安全威胁并且设计出先进的对策。在创办SPI Dynamics之前,他是Internet Security Systems/IBM精锐的X-Force研究和开发团队工作,推动了该公司的企业安全性评估。Sima是一位Web应用安全领域的思想领袖和技术预言家,在Web安全技术上有五项专利并合著了这方面的多本书籍,他经常在媒体上投稿,并且定期地在主要的业界会议如RSA和Black Hat上演讲。他是ISSA的成员,OASIS中的应用漏洞描述语言(AVDL)的创建者之一,还是Web应用安全协会(WASC)的创办会员。对本书的贡献者

Hernan Ochoa是具有14年专业经验的安全顾问和研究者。Hernan于1996年随着Virus Sentinel的创立开始其职业生涯,Virus Sentinel是一个基于特征码的文件/内存/MBR/启动扇区检测/删除的防病毒应用程序,并且具备启发式检测多态病毒的能力。Hernan还开发了一个详细的技术性病毒信息数据库和与之相伴的时讯报道。他在1999年加入Core Security Technologies并在那里供职10年,担任了多个职务,包括安全顾问和攻击程序编写者。作为攻击程序编写者,他进行了多种多样的安全评估,开发了多种方法论、外壳代码和安全工具,并对新的攻击方向提出了意见。他还为一种最终部署在某家金融机构的多OS安全系统设计和开发了多种低级/内核组件。Henan已经发表了许多安全工具,包括Universal Hooker(使用Python编写的动态处理例程的运行时工具),Pass-The-Hash Toolkit for Windows和WifiZoo。他目前在Amplia Security担任顾问/研究员,进行网络、无线和Web应用的渗透测试,独立/客户-服务器应用黑箱评估,源代码审核,逆向工程,漏洞分析,以及其他信息安全相关的服务。

Justin Hays是Stach&Liu的一位高级安全顾问。在加入Stach&Liu之前,Justin是PTC日本公司的企业支持工程师,负责调试、逆向工程以及缓解PTC的旗舰产品Windchill企业服务器J2EE软件缺陷。Justin拥有肯塔基大学的学士学位,主修计算机科学,兼修数学。

Carl Livitt是Stach&Liu的管理安全顾问。在加入Stach&Liu之前,Carl领导一家广受尊敬的英国安全公司的网络安全服务组,这家公司为世界最大的许多制药公司提供网络安全咨询服务。Carl还曾经与英国警察反恐怖单位合作,为执法部门人员举办安全技术讲座。

Rob Ragan是Stach&Liu的一位高级安全顾问。在加入Stach&Liu之前,Rob在惠普公司的应用安全中心任软件工程师,开发Web应用安全测试工具并且管理应用渗透测试。Rob积极开展Web应用安全研究并在Black Hat、Defcon、InfoSec World和Outerz0ne等大会上加以展示。Rob拥有宾夕法尼亚州大学的学士学位,主修信息科学与技术,主要关注系统开发。本书的技术编辑

Robert Hensing是Microsoft的高级顾问,他已经担任各种安全工作超过12年。Robert以前在Microsoft安全响应中心(MSRC)工作,关注于提供安全漏洞的根源分析、鉴别缓解和变通方法,帮助客户免遭攻击。在MSRC工程团队工作之前,Robert是客户支持服务安全团队的高级成员,帮助客户进行事故响应相关的研究。Robert还是《Hacking Exposed Windows:Windows Security Secrets and Solutions,Third Edition》的作者。致谢

没有许多人的支持、鼓励、投入和贡献,本书就不可能出版。我们希望能够在这里提及所有这些人,如果因为我们的疏忽而忽略了某些人,请接受我们的歉意。

首先,要感谢我们的家人和朋友在这段繁忙的研究和写作时间里对我们的支持,他们的理解和支持对本书的完成至关重要,我们希望可以弥补这段离开他们完成又一个图书项目的日子(真的,这次我们保证!)。

其次,感谢我们的伙伴Hernan Ochoa、Justin Hays、Carl Livitt和Rob Ragan对本书的宝贵贡献。还要特别感谢Robert Hensing犀利的技术评审和许多重大的贡献。

特别感谢先前版本的主要作者对这个版本的巨大影响。Caleb Sima(第1版和第3版的合著者)在Web应用安全领域不断推出新发明,Mike Shema(第1版的合著者)坚持不懈地将书中的想法精炼为自动化的过程。

当然,要再次深深地感谢不知疲倦的McGraw-Hill制作团队,包括我们的组稿编辑Megg Morin、黑客曝光系列“名誉编辑”Jane Brownlow、组稿协调员Joya Anthony,感谢他们使一切工作井然有序,感谢制作顾问Melinda Lytle和项目编辑LeeAnn Pickrel,他们即使面对周末交付的样稿和其他作者强加给他们的不公平的任务时都保持着负责任的心态。

我们还要感谢在本书许多主题上提供了意见和指导的很多人,包括Consciere的Kevin Rich、Kevin Nassery、Tab Pierce、Mike DeLibero和Cyrus Gray。此外,我们还要衷心地感谢Stach&Liu的Fran Brown、Liz Lagman、Steve Schwartz、Brenda Larcom、Shyama Rose和Dan对我们工作的不懈支持。

还要感谢Chris Peterson对本书手稿的反馈意见以及序言中对本书的赞扬,感谢对我们的初稿提出意见的同事们:Chad Greene、Robert Hansen、Cem Paya、Andrew Stravitz和Ken Swanson。

我们要一如既往地向全世界许多敏锐而且有创造力的黑客们脱帽致敬,他们持续不断地创新并且为《黑客大曝光》提供原始素材,特别是那些经常与我们通信的人们。

最后,要对所有《黑客大曝光》的读者说声“谢谢”,你们的支持使得所有辛勤的工作都有了价值。——Joel、Vinnie、Caleb

感谢Jane让《黑客大曝光》系列图书起飞,并且坚持了这么多年。——Joel

感谢Heather在本书整个写作过程中让我总是带着笑。——Vinnie

感谢我的母亲和父亲(对我的宽容),我的哥哥Jonathon、RJ和Andrew,以及我的姐姐Emily。最后,感谢SPI的所有人,他们改变了我的生活并且帮助我建立了一个伟大的公司。——Caleb第1章Web应用入侵基础

本章概述了Web应用入侵中的“谁、什么、何时、何处、如何以及为什么”等内容,旨在为后续的章节打下一个基础,后面将会更深入地研究Web应用攻击的细节以及对策。我们还将介绍基本的Web应用入侵工具集,因为本书后续内容将介绍这些工具的各种用途。1.1 什么是Web应用入侵

我们不打算浪费太多的时间去定义Web应用程序——除非你在过去的十年中与世隔绝,否则你可能已经直接体验过数十个Web应用(Google、Amazon.com、Hotmail等)。更深入的背景材料,可以在Wikipedia.org上搜索“Web application”这个词。在这里我们将尽可能快速而简洁地集中介绍与安全相关的内容。

我们将Web应用定义为通过超文本传输协议HTTP(关于HTTP的背景资料参见本章末尾的“参考与延伸阅读”)访问的应用。因此,Web入侵的本质是通过HTTP篡改应用,有3种简单的Web入侵方法:

·通过图形化Web界面直接操纵应用

·篡改统一资源标识符(URI)

·篡改没有包含在URI中的HTTP元素1.1.1 GUI Web入侵

许多人都有这种印象:Web入侵是一种非常棘手的技术工作,最好是留给住在黑屋子里、喝了许多威士忌的年轻人去干。但是,借助Web应用直观的图形用户界面(GUI,读做“gooey”),这件工作并不一定有这么困难。

我们来看看Web入侵有多么简单。在第6章中,我们将介绍最具杀伤力的Web应用攻击之一:SQL注入。尽管这种攻击的内部原理有些复杂,但是对于任何会在网上搜索的人来说,SQL注入的基本细节到处可见。通过搜索可以发现进行相对简单的攻击指南,这种攻击能够绕开质量低下的Web应用的登录页面,只需输入简单的字符集就能让登录功能返回“授权访问”——屡试不爽!图1-1说明实施这种类型的攻击有多么容易,样例是Foundstone公司Web应用Hacme Bank的简单GUI。

有些纯粹主义者无疑会嘲笑仅仅使用浏览器进行“真正”的Web应用入侵的念头,当然,在本章稍后的部分以及整本书中,还将描述许多能够大大地改进基本Web浏览器能力、进行业界领先的入侵工具。但是,不要过分地轻视浏览器。在我们多年的Web应用入侵的经历中,我们已经确定,黑客试图战胜的是应用的基本逻辑,而不在乎使用的是什么工具。实际上,我们所见过的一些最巧妙的攻击仅仅涉及浏览器。

更好的是,这样的攻击也能为Web应用管理员/开发人员/经理/主管提供修复问题的最好动因。还有什么方法比使用这个几乎所有地球人都熟悉的工具进行攻击更能说明漏洞的严重性呢?图1-1 输入字符串'OR 1=1--绕过了Foundstone的Hacme银行应用示例的登录屏幕。是的,就这么简单1.1.2 URI入侵

想看高明的技术型黑客是怎么入侵的吗?下面就是。最近5年使用过电脑的人们都知道统一资源标识符,这是在网上冲浪时,你所喜爱的浏览器的地址栏上出现的文字串,通常是这种形式:“http://www.somethingorother.com”。

从更技术性的角度来讲,RFC 3986描述了URI(及其子集,包括更常用的术语统一资源定位符(URL))的结构和语法。根据RFC 3986,URI由如下部分组成:scheme://authority/path?query

用更常用的术语来解释,URI描述用于访问服务器(authority)上的一个资源(path)或者应用(query)的协议(scheme)。对于Web应用来说,协议几乎都是HTTP(最重要的例外是HTTP的“安全”版本HTTPS,在这种协议中,会话数据受到SSL或TLS协议的保护;更多的信息参见“参考和延伸阅读”)。

警告 标准HTTPS(无客户端验证)除了使客户端和服务器之间的通信更难以窃听和干扰以外,对Web应用的整体安全性没有任何作用。

服务器是一台或者多台运行HTTP软件(通常由其DNS名如www.somesite.com指定)的计算机,路径(path)描述了应用文件所在文件夹或者目录的层次结构,而查询包含了需要传递给服务器上保存的应用可执行文件的参数。

注意 URI中“?”右边的部分称作查询串。

HTTP客户端(通常是Web浏览器)简单地请求这些资源,服务器对此做出响应。我们在喜爱的浏览器中都看过上百万次,所以无需赘言。下面是一些示例:

http://server/file.html

http://server/folder/application?parameter1=value1&parameter2=value2

http://www.webhackingexposed.com/secret/search.php?input=foo&user=joel

正如我们在前面所说的,Web入侵不过是以巧妙的方式操纵URI。下面是这种操纵的一些简单示例:

https://server/folder/../../../../cmd.exe

http://server/folder/application?parameter1=aaaaa...256 a's...]

http://server/folder/application?parameter1=

如果你能猜出这些攻击的所作所为,那么你已经是一位专业的Web黑客了!如果你还看不出来,我们很快将为你详细说明。首先,我们需要澄清一些细节。1.1.3 方法、首部和主体

接下来是一些URI所未能显现出来的(但是不多!)。HTTP是一种无状态的“请求-应答”协议。除了URI中的信息(在protocol://domain的右边),HTTP还传递用于请求中的方法(method)、协议首部(header),以及主体(body)部分中携带的数据。这些部分在URI中都不可见,但是对于理解Web应用非常重要。

HTTP方法是在目标资源上执行的操作类型。HTTP RFC定义了少数方法,Web分布式创作和版本管理(WebDAV)扩展定义了更多方法。但是大部分Web应用只使用两种方法:GET和POST。GET请求信息,GET和POST都能向服务器发送信息,但两者之间有一个重要的不同点:GET将所有数据保留在URI,而POST在请求的主体中放置数据(在URI中不可见)。POST一般用于向应用提交表单数据,例如要求姓名、发货地址以及付款方式的在线购物应用。常见的一种误解是,因为缺乏可见性,POST能够比GET更好地保护数据。在本书中我们将无数次地说明,这种假设通常是错误的(但是使用GET在查询串上发送敏感数据确实更可能在各种地方暴露该数据,包括客户端缓存和Web服务器日志)。

HTTP首部一般用于存储关于协议级事务的附加信息。HTTP首部中与安全相关的示例包括:

·Authorization:定义请求是否使用某种类型的验证,在许多实例中兼做验证数据(例如使用基本(Basic)验证)。

·Cache-control:定义是否将请求的一个副本缓存在中间代理服务器上。

·Referer(按照HTTP RFC,这种错误的拼写是有意的):列出浏览器到达当前链接的源URI。有时用于早期的容易攻破的验证方案。

·cookies:常用于存储自定义应用验证/会话令牌。我们将在本书中谈到很多关于cookie的内容。

下面的示例是用流行的netcat工具揭示HTTP的“隐秘”之处。我们首先连接www.test.com服务器的TCP端口80(用于HTTP的标准端口;HTTPS使用TCP 443端口),然后请求/test.html资源。这个请求的URI将是http://www.test.foo/test.html。www.test.foo [10.124.72.30] 80 (http) openGET /test.html HTTP/1.0HTTP/1.1 200 OKDate: Mon, 04 Feb 2002 01:33:20 GMTServer: Apache/1.3.22 (Unix)Connection: closeContent-Type: text/htmlTEST.FOOetc.

在这个示例中,很容易看到请求中的方法(GET),响应首部(Server:等),以及响应主体数据(等)。一般来说,黑客对HTTP不需要理解得这么细,只要使用现成的工具来自动完成所有的低级工作,暴露那些需要操纵的部分就可以了。我们将在下面的部分图解说明Web应用是“如何”受到攻击的。1.1.4 资源

一般来说,攻击者的最终目标是获得对Web应用资源的未授权访问。Web应用拥有哪些资源?

尽管Web应用可以有许多层次,但是大部分分为三层:表示层、逻辑层和数据层。表示层一般是超文本标识语言(HTML)页面,静态或者由脚本动态生成。这些页面一般不包含攻击者使用的信息(至少意图是如此;但本书还会介绍一些例外情形)。逻辑层也一样,但是Web应用开发人员经常在这一层犯错误,导致应用其他方面遭到侵害。在数据层的有诱人的数据,如客户数据、信用卡号码等。

这些层如何映射到URI?表示层一般由静态HTML文件或者主动生成HTML的脚本组成。例如:

http://server/file.html(as static HTML file)

http://server/script.php(a HyperText Preprocessor,or PHP,script)

http://server/script.asp(a Microsoft Active Server Pages,or ASP script)

http://server/script.aspx(a Microsoft ASP.NET script)

动态脚本可以作为逻辑层,接受输入参数和值。例如:

http://server/script.php?input1=foo&input2=bar

http://server/script.aspx?date=friday&time=1745

许多应用为这个目的使用独立的可执行文件,所以你可能看到下面这样的例子而不是脚本文件:

http://server/app?input1=foo&input2=bar

许多框架可以用于开发这样的第2层逻辑应用。最常见的包括Microsoft的Internet服务器应用编程结构(ISAPI)和公开的通用网关接口(CGI)规范。

不管实现哪种类型的第2层逻辑,几乎都要访问第3层的数据。因此,第3层一般是某种数据库,通常是SQL的变种。这为攻击者从应用操作和提取数据创造了单独的机会,因为SQL语法通常经过表示和逻辑层以不合适的方式暴露出来。我们将在第6章中关于输入注入攻击的部分中图解介绍这一过程。1.1.5 验证、会话和授权

HTTP是无状态的,协议本身不维护任何会话状态。也就是说,如果你请求一个资源并且收到一个有效的响应,然后请求另一个资源,服务器将其看做完全独立和唯一的请求。它不会维护任何东西(例如会话)或者维护与客户的链接的完整性。这也对攻击者有利,因为他们不需要计划多阶段的攻击来击垮错综复杂的会话维护机制,只用一个请求就可以击垮Web应用。

更好的是,Web开发人员已经试图解决基本协议的这个问题,方法是采用自己的验证、会话管理和授权功能,通常通过实施某种形式的验证,然后将授权/会话信息隐藏在cookie中来实现。你在第4章中将看到关于验证的内容,在第5章中将看到关于授权的内容(还介绍了会话管理),这也为攻击者创建了富饶的土壤,可一再挖掘。1.1.6 Web客户端与HTML

根据我们对Web应用的定义,Web应用客户端是能够理解HTTP的程序,规范化的Web应用客户端是Web浏览器,它的语言是HTTP(以及其他协议)并用超文本标记语言(HTML)以及其他标记语言表现。

和HTTP类似,Web浏览器看上去似乎很简单。由于HTML等语言的扩展性,看似静态的Web内容中可以嵌入大量的功能。例如,下面这个例子中HTML嵌入了可执行的JavaScript:

将这段文本复制到一个名为test.html的文件中,并在浏览器中打开它,看看这段代码能做什么(注意,较新版本的浏览器将首先提示用户启用脚本)。许多其他的危险内容可以嵌入到HTML中;除脚本以外,ActiveX程序、远程映像“Web bugs”以及层叠样式单(CSS)文件都可以用来在客户端进行恶意的活动,使用的仅仅是我们刚才示范的简单ASCII文本。

当然,正如许多攻击者了解到的,让最终用户点击URI就能够使攻击者完全控制受害者的机器。这再次显示了URI的威力,这是从Web客户端的角度。不要忘记那些看似无辜的小字符串指向可执行代码!

最后,正如我们将在1.1.7节中描述的那样,新颖的和强大的“Web 2.0”技术(如AJAX和RSS)仅仅增加了Web客户端需要解析的输入的复杂性。Web技术的这一革新在可见的未来将继续扩大攻击面,像HTML5、WebGL和NaCL这样的更新明显指出了这一点(关于这些技术的更多信息可以在本章末尾的“参考与延伸阅读”中看到)。

可以这么说,近来Web应用安全的问题在客户端比服务器端更多。因为服务器管理员已经变得更加了解Web应用攻击并且加固了其安全态势,攻击社区重新将注意力转向客户端也就不足为奇了,因为对攻击了解较少的最终用户更易于对付。不断增加的客户端技术包括富互联网应用(Rich Internet Application,RIA)、用户生成内容(User-Generated Contents,UGC)、AJAX和移动设备“应用商城”,你会发现另一场风暴正在兴起,最终用户实际上被无数脆弱的软件所包围,使他们无从防备。我们将在第9章中谈论更多这方面的内容。1.1.7 其他协议

HTTP似乎很简单,有创造力的人们使用HTTP基本请求/响应机制的次数是令人吃惊的。但是,HTTP并不总是应用开发问题的最佳解决方案,因此,更有创造力的人们将这个基本的协议封装在各种新动态功能之中。

最近最重要的新事物之一就是Web分布式创作和版权管理(Web-based Distributed Authoring and Versioning,WebDAV)。WebDAV在RFC 4918中定义,描述了用于远程Web服务器上的多种内容创作和管理机制。从个人角度讲,我们不认为这是一个好主意,因为一个协议在其默认形式下可以将数据写入Web服务器,除了麻烦以外不会带来什么,这是我们在本书中一再看到的主题。但是,WebDAV已经被包括从Microsoft的客户端和服务器(例如SharePoint)到开源的Alfresco等各种产品广泛采用,所以讨论其安全品质目前可能没有意义。

最近,基于XML的Web服务的概念变得流行。虽然在定义文档元素的标记的使用上与HTML很相似,但是可扩展标记语言(XML)已经演变成为更处于幕后的角色,为应用之间的通信定义模式和协议。简单对象访问协议(SOAP)是基于XML的用于Web服务之间消息和RPC风格通信的协议。我们将在第7章详细讨论Web服务的漏洞和对策。

其他一些类似协议包括异步JavaScript和XML(AJAX)以及简易信息聚合(Really Simple Syndication,RSS)。AJAX是一种新颖的Web应用编程方法,使用轻量级的JavaScript和XML技术创建了“胖客户端”应用的体验。有些人将AJAX称为“Web 2.0”的基础。这种技术示例可以参见http://www.crn.com/software/192203330。我们已经指出了客户端上可执行内容的潜在安全问题,在第9章中将再做深入介绍。

RSS是一种基于XML的轻量级机制,用于在网站和客户端之间动态地反馈变化的“新闻提要”。RSS一个最明显的例子是在Windows Vista及更新版本的桌面上提供滚动新闻标题/超链接的“Feed Headlines”工具。RSS的安全后果可能很严重,它从许多来源接受随意的HTML,并且盲目地重新发布。正如前面的讨论中提到的HTML可能携带的危险载荷,这为Web浏览器在各种场合下的安全加上了更沉重的负担。

具有广阔前景的用户生成内容(UGC)混合了目前讨论过的各种技术的风险。为了符合对新鲜素材的全天候需求,许多新的和传统的媒体组织精明地从最终用户那里得到越来越多的内容。讨论区、博客、Wiki、社交网站、照片和视频共享应用、客户评论网站等都是这种来源的例子。这种潮流大大扩展了内容创建者的队伍,从而也增加了遇到恶意攻击的机会。

AJAX、RSS和UGC代表着Web应用初始设计原理受到的广泛挑战,最初预期的是单个客户和单个网站(也就是一个域如amazon.com)之间的一种简单关系。这种安全模型有时被称为同源策略(Same-origin policy),源于Netscape Navigator浏览器的早期版本。因为Web应用努力将各种来源的更加丰富的功能集成到单个浏览器里,这种概念有时被称作混搭(Mashup)。早期浏览器中老式的同源策略开始显出老态,敏捷的程序员(双关语)正在以更多和更好的功能为名,开发避开老式安全模型的方法。新的安全机制,如HTTP“Origin”首部,为跨站验证提供了更健壮的框架,这样,攻击和对抗双方又开始了较量。1.2 为什么攻击Web应用

黑客的动机有很多种,各种论坛多年以来对此已经进行了详细的讨论。我们不打算老调重弹,但是我们认为指出Web应用中一些吸引攻击者的特性是很重要的。理解这些特点,能够对为何防御有更清晰的认识。

·普遍存在:今天,Web应用几乎无处不在,并且持续地在公共和私有网络上快速传播。Web黑客任何时候都不会缺乏有趣的目标。

·简单的技术:Web应用攻击技术相当容易理解,甚至外行也能掌握,因为它们大部分都是基于文本的,这使得操纵应用输入相当简单。和攻击更复杂的应用或者操作系统(例如制造缓冲区溢出)所需要的知识相比,攻击Web应用简直是小菜一碟。

·匿名性:今天的互联网仍然有很多免责区域,可以很容易地发起进攻而不用害怕被跟踪。Web入侵特别容易通过(常常是无人知晓的)网上大量的开放HTTP/S代理进行。高级黑客会通过不同的代理路由各个请求,使得请求更难追踪。可以证明,这是恶意入侵爆发的主要原因,因为这种匿名性消除了黑客在现实世界中的顾忌(也就是被抓住并受到惩罚)。

·绕开防火墙:大部分典型的防火墙策略允许入站的HTTP/S(需要澄清的是,这不是防火墙的漏洞,而是管理员配置的策略)。对于攻击者来说更好的是,这种配置可能随着越来越多的应用迁移到HTTP而增加。你已经看到这样的情况,越来越多的人通过Web分享家庭照片、个人博客、PC上的一次单击“将文件夹分享到Web”功能等。

·定制代码:随着易于理解的Web开发平台如ASP.NET和LAMP(Linux/Apache/MySQL/PHP)的发展,大部分Web应用由缺乏有经验的开发人员制作(这仍然是因为Web技术易于理解,门槛相当低)。

·不成熟的安全性:HTTP甚至没有实施分离单独客户的会话。HTTP的基本验证和授权技术从流行之后已经应用多年,到今天仍在发展中。许多开发人员自己编写这些机制而且会出错(不过,随着越来越多常用的现成Web开发平台组合了经过审查的授权/会话管理,这种情况正在改变)。

·不断的变化:许多人总是不断地“接触”Web应用:开发人员、系统管理员和所有内容管理者(我们曾经看到许多公司的市场团队能够直接访问生产用的Web Farm!)。这些人当中很少受过足够的安全培训,却要求他们经常(我们曾看到每小时一次的)修改复杂的、面向互联网的Web应用。在这种变化水平之下,很难遵守简单的更改管理程序,更不用说确保安全策略的一贯执行了。

·钱:尽管.com时代遇到很多困难,但是很明显,通过HTTP的电子商务将在可见的未来支持许多赢利的业务。不出意料,最近的统计表明,和Web的成熟同步,Web入侵的动机已经从沽名钓誉转向盗取钱财。权威机关越来越多地揭露,在Web应用入侵中,出现了许多以赢利为目的、有组织的犯罪。直接闯入Web服务器、对Web最终用户的欺诈(也称钓鱼),使用拒绝服务的勒索等,当前这些问题正是Web犯罪所造成的。1.3 谁、何时、何处

我们渴望知道Web应用是“如何”被入侵的问题,但是为了完成这个主题,下面用几句话来描述Web应用攻击中的“谁、何时、何处”。

和前面讲的“为什么攻击Web应用”一样,攻击Web应用的人不断变化。最初的Web入侵者是暑假离校的无聊少年,通过网站的损毁发动地盘争夺战。现在,Web入侵已经职业化:有组织的犯罪进入了Web入侵并且正在获得利润。

回答Web应用在“何时”和“何处”遭到攻击很简单:全天候,所有地方(甚至在内部网络!)。Web应用的最大魅力在于它们“始终向公众开放”的特性,所以很明显,它始终有着或多或少的风险。我们讨论Web应用在“什么位置”遭到攻击可能更有意义。换句话说,Web应用安全的常见弱点在哪里?弱点

如果你猜到了Web应用遭到攻击的位置是“所有地方”,说明你已经很熟悉这个诡异问题的概念,答案也正确。下面简要概述本书将要讨论的对Web应用各个部件的各种攻击:

·Web平台:Web平台软件包括HTTP服务器软件这样的底层基础架构(例如IIS、Apache)和应用所用的开发框架(例如,ASP.NET或PHP),参见第3章。

·Web应用:攻击验证、授权、网站结构、输入验证、应用逻辑和管理界面,主要在第4章到第8章中介绍。

·数据库:通过数据库查询和查询操纵运行特权命令返回过量的数据集。最具毁灭性的攻击是SQL注入,这将在第6章中介绍。

·Web客户端:活动内容执行、客户端软件漏洞利用、跨站脚本错误以及网络欺诈。Web客户端入侵在第9章中讨论。

·传输:对“客户-服务器”通信和SSL重定向的窃听。我们在本书中对此不做特别介绍,因为这是一种普通的通信层攻击,在Web上有大量相关的文章。

·可用性:在匆忙处理更加耸人听闻的“入侵”攻击时经常被忽视,拒绝服务(DoS)是任何公共访问的Web应用将要面对的最大威胁之一。让任何资源可供公众使用是一个难题,在网络世界中更是如此,在网络世界中,匿名的攻击者可以利用分布式的僵尸军队,向任何互联网目标释放史无前例的请求风暴。本书没有专门章节讲述DoS攻击及其对策,但自始至终都将讨论容量耗尽攻击和防御性编程方法。

哪些Web应用组件最经常遭到攻击是有一些统计数字的,例如开放Web应用安全计划(OWASP)组织公布的前10名,列出了根据安全社区中“广泛意见”得出的前10个最严重的Web应用漏洞。有更多统计数字的资源是WhiteHat网站安全统计报告,包含了丰富的半自动Web安全评估业务的数据。引用WhiteHat自己的一段话,对这个报告

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载