白帽子讲Web安全读书笔记

  • Part1:安全的发展,或者说,黑客的发展
    • 黑客是什么?
    1. 互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。
    2. “root”对黑客的吸引,就像大米对老鼠,美女对色狼的吸引。不想拿到“root”的黑客,不是好黑客
    3. 在黑客的世界里,有的黑客,精通计算机技术,能够自己挖掘漏洞,并编写“exploit”(黑客们使用的漏洞利用代码叫做exploit);而有的黑客,只是对攻击本身感兴趣,对计算机原理和各种编程技术的了解比较粗浅,因此只懂得编译别人的代码,自己并没有动手能力,这种黑客被称为“Script Kids”(脚本小子)。在现实世界中,真正造成破坏的,往往并非那些挖掘并研究漏洞的“黑客们”,而是这些脚本小子。
    • 黑客简史
    1. 中国黑客发展分为三个阶段:启蒙时代、黄金时代、黑暗时代
    2. 启蒙时代
    3. 20世纪90年代,也正是中国互联网刚刚起步阶段,热爱新兴技术的青年收到国外黑客技术影响,开始研究安全漏洞。启蒙时代的黑客大多由于个人爱好走上这条路,好奇心和求知欲是他们前进的动力,没有任何利益瓜葛。这个时期的中国黑客们通过互联网,看到了世界,因此与西方发达国家同期诞生的黑客精神是一脉相传的,他们崇尚分享、自由、免费的互联网精神,并热衷于分钟自己的最新研究成果。
    4. 黄金时代
    5. :以2001年中美黑客大战为标志(感兴趣的同学可以百度一下“中美黑客大战”,相信大家都记得2001年中国飞行员王伟为了捍卫国家主权,被美国侦察机撞毁事件,起因正是这件事,这次事件中,中国黑客空前团结,与美国黑客开展了一场激烈的黑客大战,非常轰动,也这是世界第一次黑客大战),这次事件大大推动了中国黑客的发展,崛起了一批黑客、红客联盟,也让黑客这个特殊群体一下吸引了社会的眼球,黑客圈子所宣扬的黑客文化和黑客技术的独特魅力也吸引了无数的青少年走上黑客这条道路。这次事件之后,各种黑客组织如雨后春笋般冒出,他们普遍的特点是:年轻、有活力、充满激情,但技术上也许还不够成熟。此时,黑客圈子里贩卖漏洞、恶意软件的现象开始升温,因为黑客群体良莠不齐,开始出现以赢利为目的的攻击行为,黑色产业链逐渐成型
    6. 黑暗时代
    7. :这个时代大概从几年前开始一直持续到现在(PS. 是哪一年呢?个人觉得大概是07年底左右开始吧),也许还将继续下去。这个时期的黑客组织也遵循社会发展规律,优胜劣汰,大多数黑客组织没有坚持下去,20世纪非常流行的黑客技术论坛也越来越没有人气,最终走向没落。所有门户型的漏洞披露站点,再也不公布任何漏洞相关技术细节。随着安全产业发展,黑客的功利性越来越强,黑色产业链开始成熟。在20世纪技术还不太成熟的黑客们,凡是坚持下来的,都已经成为安全领域的高级人才,要么,在安全公司贡献自己的专业技能,要么带着非常强的技术进入黑色产业。此时期的黑客群体因为互相之间缺失信任,已经不再具有开放和分享的精神,最纯粹的黑客精神实质上已经死亡。整个互联网笼罩在黑色产业链的阴影之下,每年数十亿经济损失和数千万网民受害,黑客精神的死亡,让我们没有理由不把这个时代称为黑暗时代。也许,黑客精神所代表的Open、Free、Share,真的一去不复返了
    • 黑客技术的发展历程 
    1. 早期,黑客攻击目标以系统软件居多。一方面,由于这个时期的Web 技术发展还远远不成熟;另一方面,则是因为通过攻击系统软件,黑客们往往能够直接获取root 权限。早期互联网中,Web 并非互联网的主流应用,相对来说,基于 SMTP 、POP3、FTP 等协议的服务拥有着绝大多数的用户。因此黑客们主要的攻击目标是网络、操作系统以及软件等领域,Web 安全领域的攻击与防御技术均处于非常原始的阶段。相对于那些攻击系统软件的exploit 而言,基于Web 的攻击,一般只能让黑客获得一个较低权限的账户,对黑客的吸引力远远不如直接攻击系统软件。
    2. 防火墙技术兴起改变的安全格局,WEB逐渐成为黑客的焦点:随着时代发展,防火墙技术的兴起改变了互联网安全的格局。尤其是以Cisco、华为等为代表的网络设备厂商,开始在网络产品中更加重视网络安全,最终改变了互联网安全的走向。防火墙、ACL技术的兴起,控制只允许信任来源的访问,使得直接暴露在互联网上的系统得到了保护。2003年的冲击波蠕虫是一个里程碑式事件,这个针对Windows 操作系统RPC 服务(运行在445 端口)的蠕虫,在很短的时间内席卷了全球,造成了数百万台机器被感染,损失难以估量。在此次事件后,运营商们很坚决地的骨干网络上屏蔽了135 、445 等端口,此次事件后,整个互联网对于安全的重视达到了一个空前的高度。运营商、防火墙对于网络的封锁,使得暴露在互联网上的非Web 服务越来越少,且Web技术的成熟使得Web 应用的功能越来越强大,最终成为了互联网的主流。黑客们的目光,也渐渐转移到了Web 这块大蛋糕上。 
    3. 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应用安全的重要敌人就行,后面慢慢讲解他们具体是什么,有什么危害,怎么防范)
    4. PS以上SQL注入、XSS跨站、CSRF跨站伪请求伪造等名词,不明白意思没关系,先熟悉他们的名字吧,知道它们是WEB应用安全的重要敌人就行,后面慢慢讲解他们具体是什么,有什么危害,怎么防范。

    • 白帽子、黑帽子

    你知道吗, “黑客”是有好坏之分的!

    白帽子、黑帽子,他们是谁:在黑客的世界中,往往用帽子的颜色 来比喻黑客的好坏。白帽子,是指那些精通安全技术,工作在反黑客领域的专家们;而 黑帽子,是指利用黑客技术造成破坏,甚至进行网络犯罪的群体 。 

    白帽子和黑帽子工作的心态完全不同:正是因为白帽子和黑帽子的目标不同,所以他们在工作时的 心态是完全不同的。 对于黑帽子来说,只要能够找到系统的一个弱点,就可以达到入侵系统的目的;而对于白 帽子来说,必须找到系统的所有弱点,不能有遗漏,才能保证系统不会出现问题。

    白帽子要求全面宏观、黑帽子思考问题是有选择性的、微观的:白帽子一般为企业或安全公司服务,工作的出发点就是 要解决所有的安全问题,因此所看所想必然要求更加的 全面、宏观;黑帽子的主要目的是要入侵系统,找到对他们有价值的数据,因此黑帽子只需要 以点突破,找到对他们最有用的一点,以此渗透,因此思考问题的出发点必然是有 选择性的、微观的

    从对待问题的角度来看,黑帽子是不断组合问题,白帽子是不断分解问题 :黑帽子为了完成一次入侵,需要利用各种不同漏洞的组合来达到 目的,是在不断地组合问题;而白帽子在设计解决方案时,如果只看到各种问题组合后产生的 效果,就会把事情变复杂,难以细致入微地解决根本问题,所以白帽子必然是在不断地分解问 ,再对分解后的问题逐个予以解决。 这种定位的不对称,也导致了白帽子的安全工作比较难做。“破坏永远比建设容易”, 白帽子选择的方法,是克服某种攻击方 法,而并非抵御单次的攻击。

    安全问题往往发生在一些意想不到的 地方上述一切都是理想状态,在现实世界中,存在着各种各样不可回避的问题。工程师们很喜 欢一句话:“No Patch For Stupid!”,在安全领域也普遍认为:“最大的漏洞就是人!”。写得再好 的程序,在有人参与的情况下,就可能会出现各种各样不可预知的情况,比如管理员的密码有 可能泄露,程序员有可能关掉了安全的配置参数,等等。安全问题往往发生在一些意想不到的 地方。

    防御技术在不断完善的同时,攻击技术也在不断地发展。这就像一场军备竞赛,看谁跑在前面。

    • 返璞归真,安全问题的本质是信任的问题 

    安全是什么?什么样的情况下会产生安全问题?我们要如何看待安全问题?只有搞明白 了这些最基本的问题,才能明白一切防御技术的出发点,才能明白为什么我们要这样做,要那 样做。 

    让我们想想,安全问题是怎么产生的:一个安全问题是如何产生的呢?我们不妨先从现实世界入手。火车站、机场里,在乘客们开始正式旅程之前,都有一个必要的程序: 安全检查。机场的安全检查,会扫描乘客的行李箱,检查乘客身上是否携带了打火机、可燃液体等危险物品。抽象地说,这种安全检查,就是 过滤掉有害的、危险的东西。因为在飞行的过程中,飞机远离地面,如果发生危险,将会直接危害到乘客们的生命安全。因此,飞机是一个高度敏感和重要的区域,任何有危害的物品都不应该进入这一区域。为达到这一目标,登机前的安全检查就是一个非常有必要的步骤。

    安全问题的本质是信任的问题: 从安全的角度来看,我们 将不同重要程度的区域划分出来, 通过一个安全检查(过滤、净化)的过程,可以梳理未知的人或物,使其变得可信任。被划分出来的具有不同信任级别的区域,我们称为 信任域,划分两个不同信任域之间的边界,我们称为 信任边界。 

     

    数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;数据从低等级的 信任域流向高等级的信任域,则需要经过信任边界的安全检查。 就像 我们在机场通过安检后,想要从候机厅出来,是不需要做检查的;但是想要再回到候机厅, 则需要再做一次安全检查,就是这个道理。

    所以, 安全问题的本质是信任的问题一切的安全方案设计的基础,都是建立在信任关系上的 。我们 必须相信一些东西,必须有 一些最基本的假设,安全方案才能得以建立;如果我们否定一切,安全方案就会如无源之水, 无根之木,无法设计,也无法完成。

    把握住信任条件的度,是安全的艺术魅力: 在现实生活中,我们很少设想最极端的前提条件,因为 极端的条件往往意味者小概率以及 高成本,因此在成本有限的情况下,我们往往会根据成本来设计安全方案,并将一些可能性较 大的条件作为决策的主要依据

    从另一个角度来说, 一旦我们作为决策依据的条件被打破、被绕过,那么就会导致安全假 设的前提条件不再可靠,变成一个伪命题。因此,把握住信任条件的度,使其恰到好处,正是 设计安全方案的难点所在,也是安全这门学问的艺术魅力所在

    安全的世界里,没有一劳永逸的银弹在解决安全问题的过程中,不可能一劳永逸,也就是说“没有银弹”。 任何人想要一劳永逸地解决安全问题,都属于一 相情愿,是“自己骗自己”,是不现实的。

    安全是一个持续的过程。  自从互联网有了安全问题以来,攻击和防御技术就在不断碰撞和对抗的过程中得到发展。 从微观上来说,在某一时期可能某一方占了上风;但是从宏观上来看,某一时期的攻击或防御 技术,都不可能永远有效,永远用下去。这是因为防御技术在发展的同时,攻击技术也在不断 发展,两者是互相促进的辩证关系。以不变的防御手段对抗不断发展的攻击技术,就犯了刻舟 求剑的错误。在安全的领域中,没有银弹。 

    微软的例子:微软在发布Vista时,曾信誓旦旦地保证这是有史以来最安全的操作系统。我们看到了微 软的努力,在Vista下的安全问题确实比它的前辈们(Windows XP、Windows 2000、Windows 2003 等)少了许多,尤其是高危的漏洞。但即便如此,在2008年的Pwn2own竞赛上,Vista也被黑 客们攻击成功。P wn2own竞赛是每年举行的让黑客们任意攻击操作系统的一次盛会,一般黑客 们都会提前准备好0day 漏洞的攻击程序,以求在Pwn2own上一举夺魁。( 来大致 了解一下0day漏洞 0Day的概念最早用于软件和游戏破解,属于非盈利性和非商业化的组织行为,其基本内涵是“即时性”,所以0Day漏洞指那些 已经被发现的(包括有可能未被公开的),而官方还没有出相关补丁的 漏洞。由于暂时没有解决的补丁,0Day漏洞可以说是一种“不治之症”,危险程度极高。所以软件公司非常关注涉及自身的0Day漏洞,甚至会高额“悬赏”发现者,以期在这些漏洞被公众于众之前或者之初,尽快知晓并开发出补丁
    Part 3 安全三要素

    安全三要素,理解安全问题的组成属性,是正确全面认识安全问题的前提

    在设计安全方案之前,要正确、全面地看待安全问题。要正确全面的认识一个安全问题,首先要理解安全问题的组成属性。前人通过无数实践,最后将安全的属性总结为安全三要素,简称CIA安全三要素是安全的基本组成元素,分别是机密性(Confidentiality)完整性(Integrity )可用性(Availability )

    机密性要求保护数据内容不能泄露加密是实现机密性要求的常见手段。

    完整性要求保护数据内容是完整、没有被篡改。常见的保证一致性的技术手段是数字签名。(什么是数字签名?数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串是对信息的发送者发送信息真实性的有效明举个例子传说清朝康熙皇帝的遗诏,写的是“传位十四子”,被当时还是四阿哥的胤禛篡改了遗诏,变成了“传位于四子”。姑且不论传说的真实性,在故事中,对这份遗诏的保护显然没有达到完整性要求。如果在当时有数字签名等技术,遗诏就很难被篡改。从这个故事中也可以看出数据的完整性、一致性的重要意义。 

    可用性要求保护资源是随需而得、随时可用。(举例假设一个停车场里有100 个车位,在正常情况下,可以停 100 辆车。但是在某一天,有个坏人搬了100 块大石头,把每个车位都占用了,停车场无法再提供正常服务。在安全领域中这种攻击叫做拒绝服务攻击,简称DoS (Denial of Service),拒绝服务攻击破坏的就是安全的可用性)

    在安全领域中,最基本的要素就是这三个,后来还有人想扩充这些要素,增加了诸如可审计性、不可抵赖性等,但最最重要的还是以上三个要素。在设计安全方案时,也要以这三个要素为基本的出发点,去全面地思考所面对的问题。


    Part4-安全评估过程

    一个安全评估的过程,可以分为 4个阶段资产等级划分威胁分析风险分析制定解决方案

    这里需要插播一下:什么是威胁,什么是风险?这两个概念经常会被人混淆,弄清他们对于了解安全评估每阶段做的事情很重要。 威胁,是指可能造成危 害的来源,英文叫Threat, 风险,是指可能会出现的损失,英文叫Risk。这里要明确一件事:虽然危害可能导致损失,但是 危害≠损失。所以威胁分析,是要找到可能造成危害的来源,风险分析,就是在找到这些来源的基础上,分析他们可能造成的损失。

    第一个阶段:资产等级划分
    这项工作是所有安全评估工作的基础,这阶段的任务是: 明确评估目标。应该可以再加一个: 明确安全边界
    根据资产的重要性,划分资产等级。在互联网中,安全的核心问题,可能是数据的安全问题。所以做资产等级划分时,很重要的一个参考依据就是: 按照数据的重要性确定与数据相关联的资产的重要性。怎么确定各类数据的重要性呢?主要通过访谈形式,当然,如果企业自己已经对数据做出了等级划分,就更好了。

    划分完资产等级后,就开始划分安全域和安全边界,建立一个安全模型。后面的评估,就要围绕着安全边界的内部和外部来开展。

    第二个阶段:威胁分析
    Part 2 讲到过,白帽子和黑帽子对待安全问题的区别:白帽子是宏观的,他要找到所有弱点,不能有遗漏;而黑帽子就简单的多,他是微观的,只要突破一点就可以攻陷系统。白帽子防护系统比黑帽子入侵系统要难得多。所以,白帽子做安全评估, 需要对系统的安全威胁做全面的分析,尽可能的找到所有安全弱点。
    虽然想找到所有安全弱点很难,但是也不是盲目乱找,有一些科学的威胁建模方法可以帮助我们较为全面的查找威胁。这里介绍较通用的 STRIDE模型,最早由微软提出。
    STRIDE是6个单词的首字母缩写,我们在分析威胁时,可以从以下6个方面去考虑。
     
    在进行威胁分析时,要尽可能地不遗漏威胁,头脑风暴的过程可以帮助确定攻击面。 威胁分析模型也不是一成不变的,相反,它需要经常更新。

    第三个阶段:风险分析
    并非每个威胁都会造成难以承受的损失,一个威胁到底能够造成多大的危害,如何去衡量它?这就要考虑到风险了。我们判断风险高低的过程,就是风险分析的过程。
    风险由两个因素组成: 发生的可能性破坏性(Risk = Probability * Damage Potential)
    如何更科学地衡量风险,也相应模型可以帮助我们做判断,这里介绍 DREAD模型,它也是由微软提出的。
     
    在DREAD模型里,每一个因素都可以分为高、中、低三个等级。在上表中,高、中、低三个等级分别以3、2、1的分数代表其权重值,因此,我们可以具体计算出某一个威胁的风险值。

    介绍完威胁建模和风险分析的模型后,我们对安全评估的整体过程应该有了一个大致的了解。在任何时候都应该记住:模型是死的,人是活的,再好的模型也是需要人来使用的,在确定攻击面,以及判断风险高低时,都需要有一定的经验,这也是安全工程师的价值所在。类似STRIDE和DREAD的模型可能还有很多,不同的标准会对应不同的模型,只要我们觉得这些模型是科学的,能够帮到我们,就可以使用。但 模型只能起到一个辅助的作用,最终做出决策的还是人

    第四个阶段:制定安全解决方案
    安全评估的产出物,就是安全解决方案。
    很多人认为,安全和业务是冲突的,因为往往为了安全,要牺牲业务的一些易用性或者性能,事实上并非如此。从产品的角度来说, 安全也应该是产品的一种属性一个从未考 虑过安全的产品,是不完整的。(比如:我们要评价一个杯子是否好用,除了它能装水,能装多少水外,还要思考这个杯子内壁的材料是否会溶解在水里,是否会有毒,在高温时会不会熔化,在低温时是否易碎,这些问题都直接影响用户使用杯子的安全性。)

    对于互联网来说,安全是要为产品的发展与成长保驾护航的。我们不能使用“粗暴”的安全方案去阻碍产品的正常发展,所以应该形成这样一种观点: 没有不安全的业务,只有不安全 的实现方式。作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。 安全方案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不能拖后腿好的安全方案对用户应该是透明的,尽可能地不要改变用户的使用习惯

    一个优秀的安全方案应该具备以下特点: 能够有效解决问题用户体验好高性能低耦合易于扩展与升级



    第7页
    "No Patch for stupid"即“最大的漏洞就是人”,所以安全问题是一直存在的,
    安全的本质是信任问题,数据来源不可信,这是安全的一个原则
    安全是一个持续的过程,不断的升级与改善
    互联网安全的核心问题,是数据安全的问题。
    安全的3要素:CIA
    机密性(Confidentiality):要求数据内容不能被泄露,常见实现技术为加密。
    完整性(Integrity):要求数据内容是完整的,没有被篡改,常见实现技术为数字签名。
    可用性(Availability):要求保护资源是“随需而得”,例如DOS(Denial of Service)攻击,是常见的破坏可用性的方法
    扩展:可审计性、不可抵赖性
    安全的评估:
    1、资产等级划分:
    2、威胁分析:
    Threat:可能造成危害的来源;Risk:可能会出现的损失。这两个概念要分清。
    微软提出的STRIDE模型:
    3、风险分析:Risk = Possibility * Damage Potential
    微软提出的DREAD模型:
    当然,所有的这些模型都是辅助作用,模型可能会有更新,根据不同的产品模型也有不同,做决策的是人。
    4、设计安全方案:
    安全和业务并不冲突,安全也应该是产品的一种属性,一个从未考虑过安全的产品,是不完整的
    一些原则:
    1、Secure by default 原则:也可以归纳为白名单、黑名单的思想,最小权限原则。
    2、纵深防御原则(Defense in depth):
    a、不同层面,不同方面实施安全方案
    b、在正确的地方做正确的事,比如说XSS,只需要在输出的时候进行处理即可
    3、数据库与代码分离原则
    4、不可预测性(Unpredictable):比如说id的生成,自增长就很容易被预测,往往需要用到加密、随机数算法、哈希算法,常见的常见为预防CSRF的时候采用token
    2012-04-29 17:32:40  回应
  • 第34页
    浏览器安全:
    同源策略(Same Origin Policy):Web是构建在同源策略的基础上的,同源策略现在离来自不同源的“document”或者脚本,对当前“document”的读写权限。

你可能感兴趣的:(安全)