概述
第一篇 — 世界观安全,这里的安全世界观是作者的安全世界观,作者对安全的考虑和理解,起到了提纲挈领的作用。讲述了一些概念,理论和原则,比如什么是Web安全、什么是黑帽子和白帽子、安全的三要素是什么、如何做安全评估等。互联网安全与传统网络安全、信息安全技术是有所区别的,Web作为互联网的核心,是未来云计算和移动互联网的最佳载体,因此Web安全也是互联网公司安全业务中最重要的组成部分。
安全工程师的核心竞争力不在于他能拥有多少个0day,掌握多少种安全技术,而是在于他对安全理解的深度,一级由此引申的看待安全问题的角度和高度。
第一章 我的世界观
Web 安全简史
- Hacker —> 获取用户态最高权限root/administrator,分为exploit和Script Kids(脚本小子)
- exploit:精通计算机技术,能自己挖掘漏洞并编写exploit,黑客们使用的漏洞利用代码,被称为exploit。
- Script Kids的特点
- 只对攻击本身感兴趣,对计算机原理和各种编程技术的了解比较粗浅
- 只懂得编译别人的代码,自己没有动手能力
- 在现实世界里,会形成计算机犯罪、网络犯罪
中国黑客简史
- 启蒙时代
- 时间:20世纪90年代(受国外黑客技术的影响)
- 特点:崇尚分享(Share)、开放(Open)、免费(Free)
- 黄金时代
- 标志:中美黑客大战
- 特点:形成各种黑客组织,良莠不齐,开始以盈利为目的
- 黑暗时代
- 特点:优胜劣汰,走向没落,不在公布任何漏洞相关的技术细节
- 最为纯粹的黑客精神实质上已经死亡
黑客技术的发展历程
- 早期
- 攻击目标:系统软件居多,比如:网络、操作系统以及软件
- 原因:(1)Web技术发展不够成熟,并非主流,获取的权限比较低(2)攻击系统软件可以直接获得root权限
- 常用协议:SMTP、POP3、FTP、IPC
- 防火墙的出现:Cisco、华为等开始重视网络安全,改变了互联网安全的走向
- 里程碑事件:2003年冲击波蠕虫
- Windows操作系统RPC服务(运行在455端口)的蠕虫,在很短的时间席卷全国,造成数百万台机器被感染,损失难以估量
- 网络运营商在骨干网络上屏蔽了135/445等端口的链接请求
- 整个互联网对于安全的重视达到了空前的高度
Web安全的兴起
- Web 1.0 时代
- 服务器端动态脚本:一个可执行脚本(俗称webshell)上传到服务器上,从而获得权限
- SQL 注入:
- 时间:1999年
- Web安全史上的一个里程碑,通过 SQL 注入攻击
- XSS(跨站脚本工具)
- 时间:2003年以后
- 又一个里程碑
- 与蠕虫事件有密切关系,在 OWASP 2007 TOP 10 威胁上XSS位居首榜
- Web 2.0 兴起
- 催生了很多脚本 Python、Ruby、NodeJS
黑帽子,白帽子
- 白帽子
- 精通安全技术,但是工作在反黑客领域的专家
- 特点:只要能够找到系统的一个弱点,就可以达到入侵系统的目的
- 黑帽子
- 利用黑客技术造成破坏,甚至进行网络犯罪的群体
- 特点:必须找到系统所有弱点,不能有遗漏,才能保证系统不会出现问题
安全的本质
安全问题的本质是 信任的问题,例如汽车站、火车站、高铁站等地方的安检(安全检查),分列出哪些是不安全的,哪些是安全的,进行过滤。又例如重要文件的保管,安全的前提,制作抽屉的工匠可信任,他没有私藏钥匙,但是信任如果被打破就不安全了,工匠私藏了一把钥匙。
安全是一个持续的过程。在安全的领域,不可能一劳永逸,也就是说“没有银弹”(银弹:在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人等超自然怪物的特效武器。后来也被比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称)
安全三要素
- 机密性(Confidentiality)
- 要求保护数据内容不能泄露
- 常用手段:加密
- 案例:文件放在透明的玻璃盒子里,增加一个封面,遮掩文件内容
- 完整性(Integrity)
- 要求保护数据内容是完整、没有被篡改的
- 常用手段:数字签名
- 案例:康熙遗诏
- 可用性(Availability)
- 要求保护资源时“随需而得”
- 案例:停车场车位被占,这种攻击叫做拒绝服务攻击,简称DoS(Denial of Service)
- 拒绝服务攻击破坏的是安全的可用性
- 其他
- 可审计性、不可抵赖性
如何实施安全评估
四个阶段:(层层递进,前后因果)
资产等级划分
- 所有工作的基础,这项工作能帮助苏我们明确目标是什么,要保护什么
- 互联网安全的核心问题,是数据安全的问题(用户产生业务,业务产生数据)
划分信任域和信任边界
- 威胁分析
- 可能造成危害的来源,称为威胁;可能出现损失的称为风险
- 威胁分析:把所有的威胁都找出来
- 使用头脑风暴法,尽可能地不遗漏威胁,头脑风暴可以确定攻击面。案例:《智取华山》,正路布重兵,忽略了小路/悬崖(漏洞)
- STRIDE 建模
风险分析
- 风险因素:Risk = Probability(可能性) * Damage Potential(破坏潜力)
- 案例:火山、地震带,日本火山、地震多发,风险可能性较大,但是破坏潜力一般不大;大陆中心,火山、地震不易发生,但是发生了会有很大的破坏力
DREAD 模型
- 确认解决方案 – 设计安全方案
- 安全评估的产出物,就是安全解决方案
- 解决方案要有针对性,这种针对性是由资产等级划分、威胁分析、风险分析等阶段的结果给出的
- 优秀安全方案的特点
- 能够有效解决问题
- 用户体验好
- 高性能
- 低耦合
- 易于扩展与升级
设计解决方案不难,难的是如何设计一个好的解决方案。案例一:杯子,评价一个杯子是否好用,除了能盛水之外,还有它的材质是否健康无毒,高温会不会熔化,低温会不会易碎。案例二:Windows Vista 的 UAC 功能,询问用户是否允许该行为
白帽子兵法
什么兵法?带兵打仗的方法。安全评估最后的产出物就是安全方案,但是在具体设计安全方案时有什么样的技巧和方法呢?
- 白帽子兵法有四个原则:Secure By Default (安全缺省) 原则、纵深防御(Defense in Depth) 原则、数据与代码分离原则、不可预测(Unpredictable)原则
Secure By Default 原则
- 最基本、最重要的原则
- 一个方案设计得是否足够安全,与有没有应用这个原则有很大的关系
- 也可以归纳为白名单、黑名单的思想(安全问题的本质是信任问题,安全方案也是绝育信任来做的,白名单就是用户信任的,黑名单就是不被信任的不安全的)
- 另一层含义:最小权限原则
- 最小权限原则也是安全设计的基本原则之一,最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。
- 最小权限案例:Linux 需要 root 权限时,通过 sudo 完成。
- 在使用最小权限时,需要认真梳理业务所需要的权限,开发者并不会意识到业务授予用户的权限过高
纵深防御原则
- 重要指导思想
- 两层含义
- 要在各个不同分层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体
- 一滴水经过十多层安全过滤,这种多层过滤体系,就是纵深防御,是有立体层次感的安全方案
- 并不是同一个安全方案做两遍或多遍,而是从不同层面、不同角度对系统做出整体的解决方案。
- 将风险分散到系统的各个层面,就入侵系统来说,我们需要考虑的可能有Web应用安全、OS系统安全、数据库安全、网络环境安全等。在这些不同层面设计的安全方案,将共同组成整个防御体系,这就是纵深防御的思想
- 要在各个不同分层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体
要在正确的地方做正确的事情,即在解决根本问题的地方实施针对性的安全方案
- (做正确的事,把事做正确。这是 PMP 中杨述讲到的。世间万事万物都是相通的,做正确的事,是选择一个正确的安全解决方案;把事做正确,是用正确的解决方案解决它能解决的问题上,针对性的解决问题)
- UTM,统一威胁管理(Uniform Threat Managment),集成了很多主流安全产品的功能,如防护墙、VPN、反垃圾邮件、IDS、反病毒等,但是UTM并不是万能药,很多问题并不应该在网络层、网关处解决(这个产品就没什么针对性)
XSS 防御技术(最近几年XSS防御思路逐渐成熟和统一)
数据与代码分离原则
- 重要的安全原则
- 广泛用于各种“注入”引发的安全问题
- 缓冲区溢出,程序在栈或堆中,将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生
- 注入,XSS、SQL Injection、CRLF Injection、X-Path Injection,数据与代码分离原则可以设计注入问题的解决方案
不可预测原则
- Secure By Default,是时刻要牢记的总则;纵深防御,是要更全面、更正确地看待问题;数据与代码分离,是从漏洞成因上看问题;不可预测性原则,是从克服攻击方法的角度看问题
- 不可预测性能有效地对抗基于篡改、伪造的攻击
- 不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法,好好使用这条原则,在设计安全方案时往往会事半功倍