白帽子讲Web安全读书笔记
作者:芬妮199025 | 来源:互联网 | 2023-10-11 18:00
Part1:安全的发展,或者说,黑客的发展黑客是什么?互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。“root”对黑客的吸引,就像大米对老鼠,美女对色狼的吸引。不想拿到“root
Part1:安全的发展,或者说,黑客的发展
- 互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。
- “root”对黑客的吸引,就像大米对老鼠,美女对色狼的吸引。不想拿到“root”的黑客,不是好黑客。
- 在黑客的世界里,有的黑客,精通计算机技术,能够自己挖掘漏洞,并编写“exploit”(黑客们使用的漏洞利用代码叫做exploit);而有的黑客,只是对攻击本身感兴趣,对计算机原理和各种编程技术的了解比较粗浅,因此只懂得编译别人的代码,自己并没有动手能力,这种黑客被称为“Script Kids”(脚本小子)。在现实世界中,真正造成破坏的,往往并非那些挖掘并研究漏洞的“黑客们”,而是这些脚本小子。
- 中国黑客发展分为三个阶段:启蒙时代、黄金时代、黑暗时代
- 启蒙时代
- :20世纪90年代,也正是中国互联网刚刚起步阶段,热爱新兴技术的青年收到国外黑客技术影响,开始研究安全漏洞。启蒙时代的黑客大多由于个人爱好走上这条路,好奇心和求知欲是他们前进的动力,没有任何利益瓜葛。这个时期的中国黑客们通过互联网,看到了世界,因此与西方发达国家同期诞生的黑客精神是一脉相传的,他们崇尚分享、自由、免费的互联网精神,并热衷于分钟自己的最新研究成果。
- 黄金时代
- :以2001年中美黑客大战为标志(感兴趣的同学可以百度一下“中美黑客大战”,相信大家都记得2001年中国飞行员王伟为了捍卫国家主权,被美国侦察机撞毁事件,起因正是这件事,这次事件中,中国黑客空前团结,与美国黑客开展了一场激烈的黑客大战,非常轰动,也这是世界第一次黑客大战),这次事件大大推动了中国黑客的发展,崛起了一批黑客、红客联盟,也让黑客这个特殊群体一下吸引了社会的眼球,黑客圈子所宣扬的黑客文化和黑客技术的独特魅力也吸引了无数的青少年走上黑客这条道路。这次事件之后,各种黑客组织如雨后春笋般冒出,他们普遍的特点是:年轻、有活力、充满激情,但技术上也许还不够成熟。此时,黑客圈子里贩卖漏洞、恶意软件的现象开始升温,因为黑客群体良莠不齐,开始出现以赢利为目的的攻击行为,黑色产业链逐渐成型。
- 黑暗时代
- :这个时代大概从几年前开始一直持续到现在(PS. 是哪一年呢?个人觉得大概是07年底左右开始吧),也许还将继续下去。这个时期的黑客组织也遵循社会发展规律,优胜劣汰,大多数黑客组织没有坚持下去,20世纪非常流行的黑客技术论坛也越来越没有人气,最终走向没落。所有门户型的漏洞披露站点,再也不公布任何漏洞相关技术细节。随着安全产业发展,黑客的功利性越来越强,黑色产业链开始成熟。在20世纪技术还不太成熟的黑客们,凡是坚持下来的,都已经成为安全领域的高级人才,要么,在安全公司贡献自己的专业技能,要么带着非常强的技术进入黑色产业。此时期的黑客群体因为互相之间缺失信任,已经不再具有开放和分享的精神,最纯粹的黑客精神实质上已经死亡。整个互联网笼罩在黑色产业链的阴影之下,每年数十亿经济损失和数千万网民受害,黑客精神的死亡,让我们没有理由不把这个时代称为黑暗时代。也许,黑客精神所代表的Open、Free、Share,真的一去不复返了!
- 早期,黑客攻击目标以系统软件居多。一方面,由于这个时期的Web 技术发展还远远不成熟;另一方面,则是因为通过攻击系统软件,黑客们往往能够直接获取root 权限。早期互联网中,Web 并非互联网的主流应用,相对来说,基于 SMTP 、POP3、FTP 等协议的服务拥有着绝大多数的用户。因此黑客们主要的攻击目标是网络、操作系统以及软件等领域,Web 安全领域的攻击与防御技术均处于非常原始的阶段。相对于那些攻击系统软件的exploit 而言,基于Web 的攻击,一般只能让黑客获得一个较低权限的账户,对黑客的吸引力远远不如直接攻击系统软件。
- 防火墙技术兴起改变的安全格局,WEB逐渐成为黑客的焦点:随着时代发展,防火墙技术的兴起改变了互联网安全的格局。尤其是以Cisco、华为等为代表的网络设备厂商,开始在网络产品中更加重视网络安全,最终改变了互联网安全的走向。防火墙、ACL技术的兴起,控制只允许信任来源的访问,使得直接暴露在互联网上的系统得到了保护。2003年的冲击波蠕虫是一个里程碑式事件,这个针对Windows 操作系统RPC 服务(运行在445 端口)的蠕虫,在很短的时间内席卷了全球,造成了数百万台机器被感染,损失难以估量。在此次事件后,运营商们很坚决地的骨干网络上屏蔽了135 、445 等端口,此次事件后,整个互联网对于安全的重视达到了一个空前的高度。运营商、防火墙对于网络的封锁,使得暴露在互联网上的非Web 服务越来越少,且Web技术的成熟使得Web 应用的功能越来越强大,最终成为了互联网的主流。黑客们的目光,也渐渐转移到了Web 这块大蛋糕上。
- Web安全的兴起:Web 攻击技术发展的几个阶段:①Web 1.0时代,人们更多的是关注服务器端动态脚本的安全问题,比如将一个可执行脚本(俗称webshell)上传到服务器上,从而获得权限。动态脚本语言的普及,以及 Web 技术发展初期对安全问题认知的不足导致很多“血案”的发生,同时也遗留下很多历史问题,比如PHP 语言至今仍然只能靠较好的代码规范来保证没有文件包含漏洞,而无法从语言本身杜绝此类安全问题的发生。②SQL注入的出现是Web 安全史上的一个里程碑。SQL注入最早出现在 1999年,并很快就成为Web 安全的头号大敌。通过SQL 注入攻击,可以获取很多重要的、敏感的数据,甚至能够通过数据库获取系统访问权限,这种效果并不比直接攻击系统软件差,Web 攻击一下子就流行起来。(SQL 注入漏洞至今仍然是Web 安全领域中的一个重要组成部分。)③XSS (跨站脚本攻击)的出现则是 Web 安全史上的另一个里程碑。实际上,XSS 的出现时间和SQL 注入差不多,但是真正引起人们重视则是在大概 2003年以后。在著名的是2005年的MySpace的XSS 蠕虫事件后,安全界对 XSS 的重视程度提高了很多。④随着Web 2.0 的兴起,XSS 、CSRF(跨站请求伪造) 等攻击已经变得更为强大。Web 攻击的思路也从服务器端转向了客户端,转向了浏览器和用户。黑客们天马行空的思路,覆盖了Web 的每一个环节,变得更加的多样化。⑤互联网的蓬勃发展,也催生出许多新兴的脚本语言,比如Python 、Ruby、NodeJS等,敏捷开发成为互联网的主旋律。而手机技术、移动互联网的兴起,也给HTML 5 带来了新的机遇和挑战。Web安全技术,也紧跟着互联网发展脚步,不断地演化出新的变化。(以上名词:SQL注入、XSS跨站、CSRF跨站伪请求伪造等,不明白意思没关系,先熟悉个名词吧,知道它们是WEB应用安全的重要敌人就行,后面慢慢讲解他们具体是什么,有什么危害,怎么防范)
PS:以上SQL注入、XSS跨站、CSRF跨站伪请求伪造等名词,不明白意思没关系,先熟悉他们的名字吧,知道它们是WEB应用安全的重要敌人就行,后面慢慢讲解他们具体是什么,有什么危害,怎么防范。
你知道吗,“黑客”是有好坏之分的!
白帽子、黑帽子,他们是谁:在黑客的世界中,往往用帽子的颜色来比喻黑客的好坏。白帽子,是指那些精通安全技术,工作在反黑客领域的专家们;而黑帽子,是指利用黑客技术造成破坏,甚至进行网络犯罪的群体。
白帽子和黑帽子工作的心态完全不同:正是因为白帽子和黑帽子的目标不同,所以他们在工作时的心态是完全不同的。对于黑帽子来说,只要能够找到系统的一个弱点,就可以达到入侵系统的目的;而对于白帽子来说,必须找到系统的所有弱点,不能有遗漏,才能保证系统不会出现问题。
白帽子要求全面宏观、黑帽子思考问题是有选择性的、微观的:白帽子一般为企业或安全公司服务,工作的出发点就是要解决所有的安全问题,因此所看所想必然要求更加的全面、宏观;黑帽子的主要目的是要入侵系统,找到对他们有价值的数据,因此黑帽子只需要以点突破,找到对他们最有用的一点,以此渗透,因此思考问题的出发点必然是有选择性的、微观的。
从对待问题的角度来看,黑帽子是不断组合问题,白帽子是不断分解问题:黑帽子为了完成一次入侵,需要利用各种不同漏洞的组合来达到目的,是在不断地组合问题;而白帽子在设计解决方案时,如果只看到各种问题组合后产生的效果,就会把事情变复杂,难以细致入微地解决根本问题,所以白帽子必然是在不断地分解问题,再对分解后的问题逐个予以解决。这种定位的不对称,也导致了白帽子的安全工作比较难做。“破坏永远比建设容易”,白帽子选择的方法,是克服某种攻击方法,而并非抵御单次的攻击。
安全问题往往发生在一些意想不到的地方:上述一切都是理想状态,在现实世界中,存在着各种各样不可回避的问题。工程师们很喜欢一句话:“No Patch For Stupid!”,在安全领域也普遍认为:“最大的漏洞就是人!”。写得再好的程序,在有人参与的情况下,就可能会出现各种各样不可预知的情况,比如管理员的密码有可能泄露,程序员有可能关掉了安全的配置参数,等等。安全问题往往发生在一些意想不到的地方。
防御技术在不断完善的同时,攻击技术也在不断地发展。这就像一场军备竞赛,看谁跑在前面。
安全是什么?什么样的情况下会产生安全问题?我们要如何看待安全问题?只有搞明白了这些最基本的问题,才能明白一切防御技术的出发点,才能明白为什么我们要这样做,要那样做。
让我们想想,安全问题是怎么产生的:一个安全问题是如何产生的呢?我们不妨先从现实世界入手。火车站、机场里,在乘客们开始正式旅程之前,都有一个必要的程序:安全检查。机场的安全检查,会扫描乘客的行李箱,检查乘客身上是否携带了打火机、可燃液体等危险物品。抽象地说,这种安全检查,就是过滤掉有害的、危险的东西。因为在飞行的过程中,飞机远离地面,如果发生危险,将会直接危害到乘客们的生命安全。因此,飞机是一个高度敏感和重要的区域,任何有危害的物品都不应该进入这一区域。为达到这一目标,登机前的安全检查就是一个非常有必要的步骤。
安全问题的本质是信任的问题:从安全的角度来看,我们将不同重要程度的区域划分出来, 通过一个安全检查(过滤、净化)的过程,可以梳理未知的人或物,使其变得可信任。被划分出来的具有不同信任级别的区域,我们称为信任域,划分两个不同信任域之间的边界,我们称为信任边界。
2012-05-05 17:24:51 回应
第192页
Authentication & Authorization.认证与授权密码必须以不可逆的加密算法,或者是单项散列函数算法,加密后存储在DB中,一般采用的加密方式是需要加上salt可采用多因素认证来增加认证强度,例如支付宝中的各种认证方式需要预防Session劫持,这个和SessionID的管理有关,个人认为只要控制了xss,就不会出现session劫持的情况。SSO:最开放和流行的SSO系统是OpenID
2012-05-06 17:12:09 回应
第205页
RBAC(Role-Based Access Control):基于角色的访问控制基于URL的访问控制,基于方法的访问控制:Spring Security是框架实现了Filter Chain,但是缺乏一个管理界面供灵活配置,因此每次调整权限时,需要重新修改配置文件或代码,学习成本较高,维护成本也较高例子:http://www.wooyun.org/bugs/wooyun-2010-0788http://www.wooyun.org/bugs/wooyun-2010-01429http://www.wooyun.org/bugs/wooyun-2010-01352不要把后台管理页面藏起来,虽然搜索引擎的爬虫搜索不到这些页面,但是攻击者管用的几辆是使用一部包含了很多后台路径的字典把“藏起来”的页面扫出来。水平权限管理:基于数据的访问控制,这个问题很常见OAuth:从OpenID中分离出来,解决了交互的信任问题
2012-05-06 17:56:23 回应
第220页
Stream Cipher Attack:流加密法是基于异或(XOR)操作进行的,每次都只操作一个字节,但是性能非常好,常见的加密算法有RC4, ORYX, SEALWEP破解:
现实中,最著名的针对流密码攻击可能就是WEP密钥的破解。WEP是一种常用无线加密传输协议,破击了WEP的密钥,就可以以此密钥连接无线的Access Point,WEP采用RC4算法
page 233分组加密法:有通用的几种加密模式:ECB, CBC, CFB, OFB, CTR常见的分组加密算法有DES, 3-DES, Blowfish, IDEA, AESEBC模式(Electronic Codebook, 电码薄)
2012-05-06 18:09:49 1人收藏 回应
第281页
防御XSS, 采用模板引擎可以统一控制1. 在HTML标签中输出变量2. 在HTML属性中输出变量3. 在Script标签中输出变量4. 在事件中输出变量5. 在CSS中输出变量6. 在URL中输出变量防御CSRF: 跟业务挂钩比较重,一般在“增、删、改”操作的时候需要防御,“读”并不需要1. token2. “增、删、改”操作时需要采用post,不能使用get关于Ajax的例子可见page 286Header管理:主要是需要对抗CRLF注入,将value编码所有的\r\n即可。管理好跳转的页面,采用白名单,设置HttpOnly
2012-05-26 13:30:02 1人推荐 3人收藏 回应
第295页
DDOS ( Distributed Denial of Service)分布式拒绝服务CC攻击( Challenge Collapsar):对资源消耗大的应用页面不断发起正常的请求,以达到小号服务器资源的目的。防御方案:1. 针对每个“客户端”做请求频率限制page 2982. 代码要做好性能优化3. 网络架构需要做优化Slowloris攻击:原理是以极低的速度往服务器发送http请求,使Web Server的所有连接都被恶意链接占用, page 307, 该攻击对很多Web Server都是有效的,当然很多Web Server可以通过配置参数来解决这个问题HTTP Post DDOS:类似于Slowloris, 在发送Http post包时,指定一个非常大的Content-Length值,然后以很低的速度发送,以保持连接不断开Server Limit DOS:Web Server的Http长度都是有限制的,request header与request body. 攻击者可以在利用xss在COOKIE里面写入超长的信息,超过header的限制,服务器则会返回4xx错误,防御方式可以修改Server参数ReDOS:正则表达式DOS,是代码的缺陷,和以上攻击以略有占用资源不同,有的正则写得有缺陷的话,会导致运算时间加长,这个影响看来是挺大的通用的防御:CAPTCHA( Completely Automated Public Turing Test to Computer and Humans Apart, 全自动区分计算机和人类的图灵测试),/**好拗口 */ 现在常用方式为验证码,但是并不是最优的solution,Yahoo( Detecting system abuse) 提出了更宽广的思路
2012-05-26 14:03:59 回应
第317页
直接跳过了.以后接触到php的时候再回来读简单来说,因为灵活,所以导致了PHP代码安全评估的难度较高,常见漏洞有:文件包含漏洞、代码执行漏洞
2012-05-27 09:59:05 回应
第353页
Apache Httpd:1. 检查Module的安装情况,根据“最小权限原则”,应该尽可能的减少不必要的Module,对于要使用的Module,检查起对应版本是否存在安全漏洞2. 需要为Apache Httpd建立单独的一个user/group,该user/group的唯一作用就是运行Apache Httpd,不能具备shell3. 保护好Apache log,比如实时的发送到远程的syslog服务器上Nginx:同Httpd的第2点,http://nginx.org/en/security_advisories.html 官方已经列出了安全的隐患和漏洞,需要保持Nginx升级更新jBoss默认安装时,访问JMX-Console (http://address:port/jmx-console )是没有认证的需要删除JMX-Console的,移除jmx-console.war和web-console.war即可TomcatTomcat Manager部署war包所需的manager权限应该单独配置给一个账号,不要使用默认的tomcat账号 tomcat-users.xmlHTTP Parameter Pollution通过向服务器发送GET或者POST请求时,提交两个相同的参数,不同服务器的选择会有不同,可能会绕过安全检查,关于服务器的处理方式,参见page 364
2012-05-27 10:33:44 回应
第402页
Secure at the Source,以最小的成本提高产品的安全性关于SDL,我们可以基于Microsoft或者OWASP的帮助,例如Microsoft的STRIDE模型,OWASP的SAMM( Software Assurance Maturity Model https://www.owasp.org/index.php/Category:Software_Assurance_Maturity_Model)针对于敏捷开发,SDL有着不同的实现方式,但是有一下准则:1. 与Project Manager充分沟通,排出足够的时间,否则裸奔是很危险的2. 规范公司的立项流程,确保所有项目都能通知到安全团队3. 树立安全部门的权威,项目必须由安全部门审核完成后才能发布4. 将技术方案写入开发、测试的工作手册中5. 培训6. 记录所有的安全BUG,产生需要有report,并且能够让程序员活跃起来交流需求:check list: from page 410 to 414开发阶段1. 采用安全的组件 (OWASP ESAPI: https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API)2. 指定安全的开发规范,并且将安全的开发规范写入文档中,让安全方案落地审计:核心思想并非直接检查代码是否安全,而是检查开发者是否遵守了开发规范审计工具:commercial: IBM Rational Appscan, WebInspect, Acunetix WVSfree: w3af, skipfish( http://code.google.com/p/skipfish/ , 二次开发的上佳选择)
Part4-安全评估过程
一个安全评估的过程,可以分为4个阶段:资产等级划分、威胁分析、风险分析、制定解决方案。
这里需要插播一下:什么是威胁,什么是风险?这两个概念经常会被人混淆,弄清他们对于了解安全评估每阶段做的事情很重要。威胁,是指可能造成危害的来源,英文叫Threat,风险,是指可能会出现的损失,英文叫Risk。这里要明确一件事:虽然危害可能导致损失,但是危害≠损失。所以威胁分析,是要找到可能造成危害的来源,风险分析,就是在找到这些来源的基础上,分析他们可能造成的损失。
第一个阶段:资产等级划分这项工作是所有安全评估工作的基础,这阶段的任务是:明确评估目标。应该可以再加一个:明确安全边界。根据资产的重要性,划分资产等级。在互联网中,安全的核心问题,可能是数据的安全问题。所以做资产等级划分时,很重要的一个参考依据就是:按照数据的重要性确定与数据相关联的资产的重要性。怎么确定各类数据的重要性呢?主要通过访谈形式,当然,如果企业自己已经对数据做出了等级划分,就更好了。
划分完资产等级后,就开始划分安全域和安全边界,建立一个安全模型。后面的评估,就要围绕着安全边界的内部和外部来开展。
第二个阶段:威胁分析Part 2 讲到过,白帽子和黑帽子对待安全问题的区别:白帽子是宏观的,他要找到所有弱点,不能有遗漏;而黑帽子就简单的多,他是微观的,只要突破一点就可以攻陷系统。白帽子防护系统比黑帽子入侵系统要难得多。所以,白帽子做安全评估,需要对系统的安全威胁做全面的分析,尽可能的找到所有安全弱点。虽然想找到所有安全弱点很难,但是也不是盲目乱找,有一些科学的威胁建模方法可以帮助我们较为全面的查找威胁。这里介绍较通用的STRIDE模型,最早由微软提出。STRIDE是6个单词的首字母缩写,我们在分析威胁时,可以从以下6个方面去考虑。 在进行威胁分析时,要尽可能地不遗漏威胁,头脑风暴的过程可以帮助确定攻击面。 威胁分析模型也不是一成不变的,相反,它需要经常更新。
第三个阶段:风险分析并非每个威胁都会造成难以承受的损失,一个威胁到底能够造成多大的危害,如何去衡量它?这就要考虑到风险了。我们判断风险高低的过程,就是风险分析的过程。风险由两个因素组成:发生的可能性、破坏性(Risk = Probability * Damage Potential)如何更科学地衡量风险,也相应模型可以帮助我们做判断,这里介绍DREAD模型,它也是由微软提出的。 在DREAD模型里,每一个因素都可以分为高、中、低三个等级。在上表中,高、中、低三个等级分别以3、2、1的分数代表其权重值,因此,我们可以具体计算出某一个威胁的风险值。
介绍完威胁建模和风险分析的模型后,我们对安全评估的整体过程应该有了一个大致的了解。在任何时候都应该记住:模型是死的,人是活的,再好的模型也是需要人来使用的,在确定攻击面,以及判断风险高低时,都需要有一定的经验,这也是安全工程师的价值所在。类似STRIDE和DREAD的模型可能还有很多,不同的标准会对应不同的模型,只要我们觉得这些模型是科学的,能够帮到我们,就可以使用。但模型只能起到一个辅助的作用,最终做出决策的还是人。
第四个阶段:制定安全解决方案安全评估的产出物,就是安全解决方案。很多人认为,安全和业务是冲突的,因为往往为了安全,要牺牲业务的一些易用性或者性能,事实上并非如此。从产品的角度来说,安全也应该是产品的一种属性,一个从未考虑过安全的产品,是不完整的。(比如:我们要评价一个杯子是否好用,除了它能装水,能装多少水外,还要思考这个杯子内壁的材料是否会溶解在水里,是否会有毒,在高温时会不会熔化,在低温时是否易碎,这些问题都直接影响用户使用杯子的安全性。)
对于互联网来说,安全是要为产品的发展与成长保驾护航的。我们不能使用“粗暴”的安全方案去阻碍产品的正常发展,所以应该形成这样一种观点:没有不安全的业务,只有不安全的实现方式。作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。安全方案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不能拖后腿。好的安全方案对用户应该是透明的,尽可能地不要改变用户的使用习惯。
一个优秀的安全方案应该具备以下特点:能够有效解决问题、用户体验好、高性能、低耦合、易于扩展与升级。