记一下读书时自己有所触动的点以及所思考的问题,顺便扫一下盲。(持续更新ing)
第一篇:世界观安全
《白帽子讲Web安全》1-2章
安全是一个动态的过程,因为敌方攻击手段在变,攻击方法在变,漏洞不断出现;我方业务在变,软件在变,人员在变,妄图通过一个系统、一个方案解决所有的问题是不现实的,也是不可能的,安全需要不断地运营、持续地优化。
1、安全世界观
互联网公司安全,与传统的网络安全、信息安全技术有区别,有很多问题,不放到一个海量用户的环境下,是难以暴漏出来的。
互联网公司安全还有一些鲜明的特色,比如注重用户体验、注重性能、注重产品发布时间。需要把安全技术变得更加工业化。
- 假如想要解决安全问题,那是不是要先了解甚至精通整个开发的流程,才能有更好或者更安全的角度来解决问题。就像庖丁能做到目无全牛一样。
1.1、Web安全简史
1.1.2、黑客技术的发展历程
TCP/IP协议名词释义 |
---|
简单邮件传输协议(Simple Mail Transfer Protocol, SMTP):用于发送电子邮件。它通过TCP端口25传输邮件数据。 |
邮局协议版本3(Post Office Protocol 3, POP3):用于从邮件服务器接收电子邮件。它通过TCP端口110连接,允许用户下载邮件到本地计算机。 |
互联网中继聊天协议(Internet Relay Chat, IRC):用于实时文本通信。用户可以通过IRC客户端连接到IRC服务器,加入频道进行聊天。 |
文件传输协议(File Transfer Protocol, FTP):用于在计算机之间传输文件。它通过TCP端口21建立控制连接,并通过单独的TCP连接传输数据。 |
- 缓冲区溢出如何到非法提升权限?
—测试每个可以提交参数的地方是否会产生报错,通过报错观察输入的数据是否可以溢出到别的寄存器,从而影响系统函数的执行。如果有涉及到权限请求的函数,便有了提权的机会。
1.1.3、Web安全的兴起
- 伴随着Web2.0的兴起,XSS、CSRF等攻击已经变得更为强大。Wen攻击的思路也从服务器端转向了客户端,转向了浏览器和用户。
- 互联网业务的蓬勃发展,也催生出了许多新兴的脚本语言,比如Python、Ruby、NodeJS等,敏捷开发成为互联网的主旋律。而手机技术、移动互联网的兴起,也给HTML5带来了新的机遇和挑战。
- PHP语言至今仍然只能靠较好的代码规范来保证没有文件包含漏洞,而无法从语言本身杜绝此类安全问题的发生。
—PHP允许动态包含文件,这意味着文件路径可以由用户或其他外部数据决定。如果这些输入没有经过严格的验证,攻击者可以利用这一点来包含恶意文件。对PHP并不是太了解。
1.2、黑帽子,白帽子
对于黑帽子来说,只要能够找到系统的一个弱点,就可以达到入侵系统的目的;而对于白帽子来说,必须找到系统的所有弱点,不能有遗漏,才能保证系统不会出现问题。
想到了作者开篇的“自从有了研究安全的人之后,互联网就变得不安全了”。
- 从对待问题的角度来看,黑帽子为了完成一次入侵,需要利用各种不同漏洞的组合来达到目的,是在不断地组合问题;而白帽子在设计解决方案时,如果只看各种问题组合后产生的效果,就会把事情变复杂,难以细致入微地解决根本问题,所以白帽子必然是在不断地分解问题,再对分解后的问题逐个予以解决。
- 如果新技术不在一开始就考虑安全设计的话,防御技术就必然会落后于攻击技术。
1.3、返璞归真
- 安全问题的本质是信任的问题。
- 在成本有限的情况下,我们往往会根据成本来设计安全方案,并将一些可能性较大的条件作为决策的主要依据。
- 从另一个角度说,一旦我们作为决策依据的条件被打破、被绕过,那么就会导致安全假设的前提条件不再可靠,变成一个伪命题。因此,把握住信任条件的度,使其恰到好处,正是设计安全方案的难点所在,也是安全这门学问的艺术魅力所在。
1.4、破除迷信,没有银弹
- 银弹被比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称。
1.5、安全三要素
机密性(confidentiality)要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。 完整性(Integrity)要求保护数据内容是完整、没有被篡改的。常见的保证一致性的技术手段是数字签名。可用性(Availability)要求保护资源是“随需而得”。DoS(Denial of Service)拒绝服务攻击破坏的是安全的可用性。
-
数字签名?感觉搜了好多次,但还是对这些很模糊。
— 数字签名使用到了非对称密钥加密技术,非对称密钥算法过程:- 首先,接收方先生成一对密钥,即公钥和私钥;
- 然后,接收方把公钥发送给发送方;
- 发送方用收到的公钥对数据进行加密,再发送给接收方;
- 接收方收到数据后,使用自己的私钥解密,由于在非对称算法中,公钥加密的数据必须用对应的私钥才能解密,而私钥又只有接收方自己知道,这样就保证了数据传输的安全性。
-
“数字签名”通常是用来验证发送方的身份并帮助保护数据的完整性。例如:一个发送者A想要传些资料给大家,用自己的私钥进行加密,即签名。这样一来,所有收到资料的人都可以用发送者的公钥进行验证,便可以确定资料是由A发出来得到。
-
数字签名怎么保证的数据一致性呢?
—通过哈希算法将任意长度的数据转换为固定长度的字符串,因此如果数据再传输过程中被修改,那接收方使用发送发的公钥对数字签名进行解密时得到的哈希值就不同了。
1.6、如何实施安全评估
一个安全评估的过程,可以简单地分为4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。在这几个阶段中,上一个阶段将决定而一个阶段的目标,需要实施到什么程度。
1.6.1、资产等级划分
在互联网 基础设施已经比较完善的今天,互联网的核心其实是由用户数据驱动的——用户产生业务,业务产生数据。互联网公司除了拥有一些固定资产,如服务器等死物外,最核心的价值就是其拥有的用户数据,所以——互联网安全的核心区问题,是数据的安全问题。
在当下大数据时代,更加印证了作者的这个观点。
对互联网公司所拥有的资产进行等级划分,就是对数据做等级划分。
1.6.2、威胁分析
在本书中介绍一种威胁建模的方法,它最早是由微软提出的,叫做STRIDE模型。
威胁 | 定义 | 对应的安全属性 |
---|---|---|
Spoofing(伪装) | 冒充他人身份 | 认证 |
Tampering(篡改) | 修改数据或代码 | 完整性 |
Repudiation(抵赖) | 否认做过的事情 | 不可抵赖性 |
InformationDisclosure(信息泄露) | 机密信息泄露 | 机密性 |
Denial of Service(拒绝服务) | 拒绝服务 | 可用性 |
Elevation of Privilege(提升权限) | 未经授权获得许可 | 授权 |
漏洞的定义:系统中可能被威胁利用以造成危害的地方。
1.6.3、风险分析
- 风险由以下因素组成:Risk = Probability * Damage Potential”。
- 再介绍一个DREAD模型,它也是由微软提出的。
等级 | 高(3) | 中(2) | 低(1) |
---|---|---|---|
Damage Potential | 获取完全验证权限;执行管理员操作;非法上传文件 | 泄露敏感信息 | 泄露其他信息 |
Reproducibility | 攻击者可以随意再次攻击 | 攻击者可以重复攻击,但有时间限制 | 攻击者很难重复攻击过程 |
Exploitability | 初学者在短期内能掌握攻击方法 | 熟练的攻击者才能完成这次攻击 | 漏洞利用条件非常苛刻 |
Affected users | 所有用户,默认配置,关键用户 | 部分用户,非默认配置 | 极少数用户,匿名用户 |
Discoverability | 漏洞很显眼,攻击条件很容易获得 | 在私有区域,部分人能看到,需要深入挖掘漏洞 | 发现该漏洞极其困难 |
1.6.4、设计安全方案
- 作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。安全方案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不要拖后腿。
- 好的安全方案是透明的,尽可能地不要改变用户的习惯。
- 一个优秀的安全方案应该具备以下特点:
- 能够有效解决问题;
- 用户体验好;
- 高性能;
- 低耦合;
- 易于扩展与升级。
1.7、白帽子兵法
安全评估最后的产出物就是安全方案。
1.7.1、Secure By Defult原则
“Secure By Defult”原则,也可以归纳为白名单、黑名单的思想。如果更多地使用白名单,那么系统会变得更安全。
1.7.1.1、黑名单、白名单
1.7.1.2、最小权限原则
1.7.2、纵深防御原则
纵深防御包含两层含义:首先,要在各个不同层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体;其次,要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。
- 富文本。
—包含丰富的格式信息,比如多媒体元素。非富文本就是纯文本,不包含任何格式设置,仅包含基本的文字字符和控制字符。
1.7.3、数据与代码分离原则
1.7.4、不可预测性原则
- 前面介绍的几条原则:Secure By Defult,是时刻要牢记的总则;纵深防御,是要更全面、更正确得看待问题;数据与代码分离,是从漏洞成因上看问题;接下来要讲的‘不可预测性’原则,则是从客克服攻击方法的角度看问题。
- 数据执行保护,(Data Execution Prevention, DEP)能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。其基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
- 地址空间布局随机化(Address Space Layout Randomization, ASLR)是一种常见的防御机制。它通过随机化内存中代码、数据和堆栈的布局,使得每次程序加载时,各个段的起始地址都发生变化,增加了攻击者进行缓冲区溢出等攻击的难度。
1.8、小结
1.附
计算机用0和1定义了整个世界,但在整个世界中,并非所有事情都能简单用“是”或者“非”来判断,漏洞也是如此,因为破坏有程度轻重之分,当破坏程度超过某一临界值时,会被多数人(注意不是所有人),接受为这是一个漏洞的事实。但事物是变化的,这个临界值也不是一成不变的,“多数人”也不是一成不变的,所以我们要用变化的观点去看待变化的事物。
- 00截断。
—00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf的白名单限制。
第一篇:客户端脚本安全
2、浏览器安全
2.1、同源策略
- 浏览器的同源策略,限制了来自不同源的‘document’或脚本,对当前“document”读取或设置某些属性。
- 为了不让浏览器的页面行为发生混乱,浏览器提出了“Origin”(源)这一概念,来自不同Origin额对象无法互相干扰。
- 对于当前页面来说,页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在域是什么。
2.2、浏览器沙箱
- IPC Channel是.NET Framework 2.0 里面新增的,它使用 Windows 进程间通信 (IPC)系统在同一计算机上的应用程序域之间传输消息。在同一计算机上的应用程序域之间进行通信时,IPC 信道比 TCP 或
HTTP信道要快得多,但是IPC只在本机应用之间通信。- 安全结构化异常处理(Safe Structured Exception Handling, SafeSEH)是一种在Windows操作系统中防止漏洞利用的技术。它的原理是通过在异常处理链中引入额外的保护机制,来防止异常处理过程中发生缓冲区溢出等漏洞攻击。其基本原理为:
- Windows操作系统在处理异常时会按照一定的顺序查找可处理该异常的异常处理程序(异常处理链);
- SafeSEH通过修改程序的异常处理链,将一个额外的异常处理程序添加到链表的开头;
- 该额外的异常处理程序会检测异常处理链本身的有效性,以及是否存在被攻击者恶意篡改的异常处理程序;
- 如果检测到异常处理链被恶意篡改,SafeSEH会终止程序的执行,防止漏洞利用继续进行。
- Sandbox,即沙箱,计算机技术发展到今天,Sandbox已经成为泛指‘资源隔离类模块’的代名词。Sandbox的设计目的一般是为了让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源。如果一定要跨越Sandbox边界产生数据交换,则只能通过指定的数据通道,比如经过封装的API来完成,在这些API中会严格检查请求的合法性。
2.3、恶意网址拦截
- 常见的恶意网址分为两类:一类是挂马网站,这些网站通常包含有恶意的脚本如JavaScript或Flash,通过利用浏览器漏洞(包括一些插件、控件漏洞)执行shellcode,在用户电脑中植入木马;另一类是钓鱼网站,通过模仿知名网站的相似页面来欺骗用户。
- 除了恶意网址黑名单拦截功能外,主流浏览器都开始支持EV SSL证书(Extended Validation SSL Certificate),以增强对安全网站的识别。
- X.509。
—X.509 是密码学里公钥证书的格式标准,常见的.pem、.pfx后缀的文件就是X.509证书。X.509证书核心组成部分:- 公钥:用于加密信息,确保只有对应的私钥持有者可以解密;
- 身份信息:标识证书所有者的详细信息(比如网络主机名,组织的名称或个体名称等);
- 签名信息(可以是证书签发机构CA的签名,也可以是自签名)。
2.4、高速发展的浏览器安全
- 在Firefox4中推出了Content Security Policy(CSP)。这一策略是有安全专家Robert Hanso最早提出的。其做法是由服务器端返回一个HTTP头,并在其中描述页面应该遵守的安全策略。由于XSS攻击在没有第三方插件的帮助下,无法控制HTTP头,所以这项措施是可行的。
- CSP的设计理念无疑是出色的,但是CSP额规则配置较为复杂,在页面较多的情况下,很难一个个配置起来,且后期维护成本也非常巨大,这些原因导致CSP未能很好的推广。
2.5、小结
浏览器是互联网的重要入口,在安全攻防中,浏览器的作用也越来越被人们所重视。在以往研究攻防时,大家更重要的是服务器端漏洞;而现在,安全研究的范围以及涵盖了所有用户使用互联网的方式,浏览器正是其中最为重要的一个部分。
浏览器的安全以同源策略为基础,加深理解同源策略,才能把握住浏览器安全的本质。在当前浏览器高速发展的形式下,恶意网址检测、插件安全等问题都会显得越来越重要。紧跟浏览器发展的脚步来研究浏览器安全,是安全研究者需要认真对待的事情。