写点什么

读书笔记:我的安全世界观

发布于: 2021 年 03 月 12 日
读书笔记:我的安全世界观

再读《白帽子讲 Web 安全》一书,没有攻不破的系统,只有还没攻破的系统,有多少条路可以通罗马,大概就有多少种攻克之道。


正如开篇所说的:“互联网本来是安全的,自从有了研究安全的人,互联网就不安全了。


一个网站的数据库,在没有任何保护的情况下,数据库服务端口是允许任何人随意连接的;在有了防火墙的保护后,通过 ACL 可以控制只允许信任来源的访问。这些措施在很大程度上保证了系统软件处于信任边界之内,从而杜绝了绝大部分的攻击来源。

1、Web 安全的兴起

常见攻击:SQL 注入,XSS(跨站脚本攻击)


“破坏往往比建设容易”,但凡事都不是绝对的。

一般来说,白帽子选择的方法,是克服某种攻击方法,而并非抵御单次的攻击。比如设计一个解决方案,在特定环境下能够抵御所有已知的和未知的 SQL Injection 问题。假设这个方案的实施周期是 3 个月,那么执行 3 个月之后,所有的 SQL Injection 问题都得到了解决,也就意味着黑客再也无法利用 SQL Injection 这一可能存在的弱点入侵网站了。如果做到了这一点,那么白帽子们就在 SQL Injection 的局部对抗中化被动为主动了。


跟机场安全检查进行类比。通过一个安全检查(过滤,净化)的过程,可以梳理未知的人或物,使其变得可信任。被划分出来的具有不同信任级别的区域,我们成为信任域,划分两个不同信任域之间的边界,我们称之为信任边界

数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;数据从低等级的信任域流向高等级的信任域,是需要经过信任边界的安全检查。


安全问题的本质是信任的问题。

一切的安全方案设计的基础,都是建立在信任关系上的。我们必须相信一些东西,必须要有一些最基本的假设,安全方案才能得以建立。

安全的三要素

安全的三要素是安全的基本组成元素,分别为:

  • 机密性(Confidentiality)

机密性要求数据内容不能泄露,加密是实现机密性要求的常见手段。如果不将文件存在抽屉里,而是放在透明的盒子里,那么虽然无法得到这个文件,但是文件的内容将会被泄露。

  • 完整性(Integrity)

完整性则要求保护数据内容是完整,没有被篡改的。常见的保证一致性的技术手段是数字签名。

  • 可用性(Availability)

可用性要求保护资源是“随需而得”。

举例来说,假如有 100 个车位,有一天一个坏人搬了 100 块大石头将车位全占了,那么停车场无法再提供正常服务。在安全领域中叫做拒绝服务攻击,简称 DoS(Denial of Service)。拒绝服务攻击破坏的是安全的可用性。


如何实施安全评估

一个安全评估的过程,可以简单地分为 4 个阶段:

  1. 资产等级划分

资产等级划分是所有工作的基础,这项工作能够帮助我们明确目标是什么,要保护什么。

互联网安全的核心问题,就是数据安全的问题

  1. 威胁分析

在安全领域,我们把可能造成危害的来源成为威胁(Threat),而把可能会出现的额损失称为风险(Risk)。

威胁分析就是把所有的威胁都找出来,主要方法:头脑风暴、STRIDE 模型。

STRIDE 模型的 6 个方面:

  • Spoofing 伪装

  • Tampering 篡改

  • Repudiation 抵赖

  • InformationDisclosure 信息泄露

  • Denial of Service 拒绝服务

  • Elevation of Privilege 提升权限


  1. 风险分析

风险是由以下因素组成: Risk=Probability * Damage Potential

衡量风险: DREAD 模型 

  1. 确认解决方案

安全评估的产出物,就是安全解决方案。

一个优秀的安全方案,具备的特点:

  • 能够有效解决问题

  • 用户体验好

  • 高性能

  • 低耦合

  • 易于扩展与升级

白帽子兵法

Secure By Default 原则

1、黑名单、白名单

实际上,Secure By Default 原则,也可以归纳为白名单,黑名单的思想。如果更多地使用白名单,那么系统就会变得更安全。


2、最小权限原则

最小原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统,网络,应用,数据库出错的机会。

如果网站只提供 Web 服务,只允许开启 80,443 端口,屏蔽其它端口。

纵深防御原则

纵深防御原则包含两层含义:

1)要在各个不同层面,不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体;

2)要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。

数据与代码分离原则

这一原则适用于各种由于“注入”而引发安全问题的场景。

实际上,缓冲区溢出,也可以认为是程序违背了这一原则的后果——程序在栈或者堆中,将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生。

不可预测性原则

微软使用的 ASLR 技术,在较新版本的 Linux 内核中也支持。在 ASLR 的控制下,一个程序每次启动时,其进程的栈基址都不相同,具有一定的随机性,对于攻击者来说,这就是“不可预测性”。

不可预测性,能有效地对抗基于篡改,伪造的攻击。

不可预测性的实现往往需要用到加密算法,随机数算法,哈希算法,好好利用这条规则,在设计安全方案时往往会事半功倍。

总结

安全是一门朴素的学问,也是一种平衡的艺术,无论是传统安全,还是互联网安全,其内在原理都是一样的。我们只需抓住安全问题的本质,之后无论遇到任何安全问题,都会无往而不利!

发布于: 2021 年 03 月 12 日阅读数: 18
用户头像

坚持分享接地气儿的架构技术文章! 2018.02.26 加入

同名微信公众号「架构精进之路」,专注软件架构研究,技术学习与职业成长!坚持原创总结、沉淀和分享,希望能带给大家一些引导和启发,感谢各位的支持(关注、点赞、分享)!

评论

发布
暂无评论
读书笔记:我的安全世界观