【读书】《白帽子讲web安全》个人笔记Ⅰ-1

news2024/11/16 7:34:38

目录

前言:

第1章 我的安全世界观

1.1 Web安全简史

1.1.1中国黑客简史

1.1.2黑客技术的发展历程

1.1.3web安全的兴起

1.2黑帽子,白帽子

1.3返璞归真,揭秘安全的本质

1.4破除迷信,没有银弹

1.5安全三要素

1.6如何实施安全评估

1.6.1资产等级划分

1.6.2威胁分析

1.6.3风险分析

1.6.4设计安全方案

1.7白帽子兵法

1.7.1Secure By Default原则

1.7.1.1黑名单、白名单

1.7.1.2最小权限原则

1.7.2纵深防御原则

1.7.3数据与代码分离原则

1.7.4不可预测性原则

1.8小结


前言:

即将考试周了,考前死盯着那几门复习不是我的作风,但花大功夫去学一些新的技术时间会有些吃紧。所以翻出这本尘封已久的道哥著作,挑战这本让三个月前的自己败下阵来的小部头,希冀每天有所思考有所沉淀,深化对web安全的理解。

冷静下来,暂时从具体的技术细节脱身,冷静审视安全本身为何。

“种一棵树的最好时间是十年前,其次是现在。”

第1章 我的安全世界观

1.1 Web安全简史

1.1.1中国黑客简史

在计算机安全领域,黑客是一群破坏规则、不喜欢被拘束的人,因此总想着能够找到系统的漏洞,以获得一些规则之外的权力。

不想拿到root的黑客,不是好黑客。

有的黑客,精通计算机技术,能自己挖掘漏洞,并编写exploit;而有的黑客,只对攻击本身感兴趣,对计算机原理和各种编程技术的了解比较粗浅,因此只懂得编译别人的代码,自己并没有动手能力,这种黑客被称为“Script Kids”,即“脚本小子”。

中国黑客的发展分为了:启蒙时代、黄金时代、黑暗时代。

启蒙时代:20世纪90年代,中国互联网刚刚处于起步阶段,这时候的黑客们多是由于个人爱好而走上这条道路,好奇心与求知欲驱使他们前进,没有任何利益瓜葛,崇尚分享、自由、免费的互联网精神。

黄金时代:以中美黑客大战为标志,各种黑客组织如雨后春笋般冒出。此阶段的中国黑客,其普遍的特点是年轻,有活力,充满激情,在技术上也许还不够成熟。此时期开始出现以盈利为目的的攻击,黑色产业链逐渐形成。

黑暗时代:大多数黑客组织没有坚持下来,在上一个时期非常流行的黑客技术论坛式微没落,所有门户型的漏洞披露站点也不再公布漏洞相关的技术细节。整个互联网笼罩在黑色产业链的阴影之下,纯粹的黑客精神(开放、分享)实质已经死亡。

1.1.2黑客技术的发展历程

因为早期的web技术发展远远不成熟,加之通过攻击系统软件,黑客们往往能直接获取root权限,所以初期黑客的攻击目标以系统软件居多。

在早期互联网中,web并非互联网的主流应用,因此黑客们主要的攻击目标是网络、操作系统以及软件等领域,web安全领域的攻击与防御技术均处于非常原始的阶段。

运营商、防火墙对于网络的封锁,使得暴露在互联网上的非web服务越来越少,且web技术的成熟使得web应用的功能越来越强大,最终成为了互联网的主流。黑客们的目光也渐渐转移到了web上。

1.1.3web安全的兴起

在web1.0时代,人们更多的是关注服务器端动态脚本的安全问题,比如将一个可执行脚本(俗称webshell)上传到服务器上,从而获得权限。

SQL注入的出现是web安全史上的一个里程碑,黑客们发现通过SQL注入攻击,可以获取很多重要的、敏感的数据,甚至能够通过数据库获取系统访问权限,这种效果不比直接攻击系统软件差。

XSS的出现则是web安全史上的另一个里程碑。

伴随着web2.0的兴起,XSS,CSRF等攻击已经变得更为强大。web攻击的思路也从服务端转向了客户端,转向了浏览器和用户。

web安全将紧跟着互联网发展的脚步,不断演化出新的变化。

1.2黑帽子,白帽子

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

对于黑帽,只要能够找到系统的一个弱点,就可以达到入侵系统的目的;而对于白帽,必须找到系统的所有弱点,不能有遗漏才能保证系统不会出现问题。

从对待问题的角度来看,黑帽为了完成一次入侵,需要利用各种不同漏洞的组合来达到目的,是在不断地组合问题;而白帽在设计解决方案时,要不断分解问题,再对分解后的问题逐个予以解决。

随着防御技术的不断完善,攻击技术也在不断发展。谁能在技术上领先,谁就能占据主动。互联网技术日新月异,在新技术领域的发展中,也存在着同样的博弈过程。

1.3返璞归真,揭秘安全的本质

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

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

把握信任条件的度,使其恰到好处,是设计安全方案的难点所在,也是安全这门学问的艺术魅力所在。

1.4破除迷信,没有银弹

在解决安全问题的过程中,不可能一劳永逸,即“没有银弹”。

安全是一个持续的过程。

自从互联网有了安全问题以来,攻击和防御技术就在不断碰撞和对抗的过程中得到发展。以不变的防御手段对抗不断发展的攻击技术,就犯了刻舟求剑的错误。

黑客们在不断地研究和寻找新的技术攻击,作为防御的一方,没有理由不持续跟进。

1.5安全三要素

安全三要素,简称CIA,是安全的基本组成元素,分别是机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。

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

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

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

1.6如何实施安全评估

一个安全评估的过程,可以简单分为4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。

1.6.1资产等级划分

互联网公司除了拥有一些固定资产,如服务器等死物外,最核心的价值就是其拥有的用户数据。

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

1.6.2威胁分析

在本书中介绍一种威胁建模的方法,它最早是由微软提出的,叫做STRIDE模型。

 

1.6.3风险分析

风险由以下因素组成:

Risk=Probability * Damage Potential

本书中用微软提出的DREAD模型来更科学地衡量风险。

在上表中,高、中、低三个等级分别以3、2、1的分数代表其权重值,因此我们可以具体计算出某一个威胁的风险值。

高危:12~15分 中危:8~11分 低危:0~7分

1.6.4设计安全方案

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

作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。安全方案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不能拖后腿。

好的安全方案对用户应该是透明的,尽可能地不要改变用户的使用习惯。

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

1.7白帽子兵法

本节将讲述在具体设计安全方案时的技巧,在实战中可能用到的方法。

1.7.1Secure By Default原则

1.7.1.1黑名单、白名单

如果更多地使用白名单,那么系统就会变得更安全。

但并不是用了白名单就一定安全了。选择白名单的思想,基于白名单来设计安全方案,其实就是信任白名单是好的,是安全的。但是一旦这个信任基础不存在了,那么安全就荡然无存。

1.7.1.2最小权限原则

最小权限原则也是安全设计的基本原则之一,其要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。

在使用最小权限原则时,需要认真梳理业务所需要的权限。

1.7.2纵深防御原则

纵深防御(Defense in Depth)是设计安全方案时的重要指导思想。

“木桶理论”

纵深防御包含两层含义:

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

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

1.7.3数据与代码分离原则

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

在Web安全中,如XSS、SQL Injection、CRLF Injection、X-Path Injection等由“注入”引起的问题均可以根据“数据与代码分离原则”设计出真正安全的解决方案,因为这个原则抓住了漏洞形成的本质原因。

不能让用户输入的数据变为可执行的代码。(如防止SQL注入的参数化查询就符合这一原则)

1.7.4不可预测性原则

Secure By Default是时刻要牢记的总则;纵深防御,是要更全面、更正确地看待问题;数据与代码分离,是从漏洞成因上看问题;接下来要讲的“不可预测性”原则,则是从克服攻击方法的角度看问题。

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

不可预测性原则可以巧妙地用在一些敏感数据上。比如在CSRF的防御技术中,通常会使用一个token来进行有效防御。

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

1.8小结

本章归纳了笔者对于安全世界的认知和思考,从互联网安全的发展史说起,揭示了安全问题的本质,以及应该如何展开安全工作,最后总结了设计安全方案的几种思路和原则。

安全是一门朴素的学问,也是一种平衡的艺术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1360371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​结构体数组

1. 结构体的声明 1.1 结构体的基础知识 结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag {member - list; }variable-list; 例:描述一个人的信息:名字电话性别身高 //声明的…

Vue2 - computed 和 method 的原理区别

目录 1,简单对比2,原理的不同1,method 的处理2,computed 的处理实现缓存触发更新 3,触发更新时的问题 1,简单对比 computed 当做属性使用,method 当做方法使用。computed 可以提供 getter 和 s…

DS|图(连通与生成树)

题目一:DS图 -- 图的连通分量 题目描述: 输入无向图顶点信息和边信息,创建图的邻接矩阵存储结构,计算图的连通分量个数。 输入要求: 测试次数t 每组测试数据格式如下: 第一行:顶点数 顶点…

【激活函数】GELU 激活函数

1、介绍 GELU (Gaussian Error Linear Units) 是一种基于高斯误差函数的激活函数,相较于 ReLU 等激活函数,GELU 更加平滑,有助于提高训练过程的收敛速度和性能。 # GELU激活函数的定义 def gelu(x):return 0.5 * x * (1 torch.tanh(np.sqrt…

了解统计分析中的岭回归

一、介绍 在统计建模和机器学习领域,回归分析是用于理解变量之间关系的基本工具。在各种类型的回归技术中,岭回归是一种特别有用的方法,尤其是在处理多重共线性和过拟合时。本文深入探讨了岭回归的概念、其数学基础、应用、优点和局限性。 在…

OpenHarmony从入门到放弃(四)

设计一款使用Harmony开发的App 接下来我会通过设计并开发一款资讯类的App来入门OpenHarmony; 以下是我对App的设计想法; 一、模块划分 内容模块:App的核心模块,负责管理和展示资讯内容,具体包括内容获取与处理&…

云化XR技术于农业领域中的表现

随着科技的不断发展和应用的深入,农业领域也在逐渐引入新技术来优化生产效率和成本、改进管理和监控等。云化XR(CloudXR)作为一种融合了云计算、虚拟现实(VR)和增强现实(AR)等技术的解决方案&am…

AntV-G6 -- 将G6图表应用到项目中

1. 效果图 2. 安装依赖 npm install --save antv/g6 3. 代码 import { useEffect } from alipay/bigfish/react; import G6 from antv/g6;const data {id: root,label: 利息收入,subLabel: 3,283.456,ratio: 3,children: [{id: child-a,label: 平均利息,subLabel: 9%,ratio:…

机器视觉兄弟们,没有项目订单,机器视觉项目行业难题来了

产品没一个正形,光源像是打了几十年的光棍一样,偏偏配不上,n次“相亲”之后图像硬是“阴晴圆缺”,老板阴阳怪气你这打不出来,给客户看之后说,这都打不出来,你们不行啊。 我听了后真想&#xff…

字节填充与0比特填充以及数据链路的基本问题

目录 字节填充: 比特填充: 数据链路有三个基本问题 1.封装成帧 2.透明传输 3.差错检测 首先介绍一下PPP的帧结构: 首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E (符号“0x”表示它后面的字符是用十六…

Android低功耗蓝牙开发总结

基础使用 权限申请 蓝牙权限在各个版本中略有不同 Android 12 及以上版本,如果不需要通过蓝牙来推断位置的话,蓝牙扫描不需要开启位置权Android 11 及以下版本,蓝牙扫描必须开启位置权限Android 9 及以下版本,蓝牙扫描可开启粗…

弧形导轨和直线导轨的区别

弧形导轨和直线导轨是两种常见的导轨类型,都具有支撑和引导功能,都可以将运动的能量传递到接收端,实现稳定的运动。那么这两者有什么区别呢? 从结构上来看,直线导轨呈现直线的形状,在机器设备的运动中起到了…

Java学习苦旅(十八)——详解Java中的二叉树

本篇博客将详细讲解二叉树 文章目录 树型结构简介基本概念表示形式 二叉树概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的简单创建二叉树的遍历前中后序遍历层序遍历 结尾 树型结构 简介 树是一种非线性的数据结构,它是由n(n>0&#xff09…

Pytest——Fixture夹具的使用

一、什么是Fixture 在测试开展的过程中,会需要考虑到测试前的准备工作,以及测试后的释放操作行为。这些在Pytest中,会通过Fixture的方式来实现。如果说在运行pytest的测试用例的时候,需要调用一些数据来实现测试行为,…

AJAX(三)跨域

一、同源策略 同源策略最早由Netscape公司提出,是浏览器的一种安全策略。 同源:协议、域名、端口号必须完全相同。(同一个来源) 违背同源策略就是跨域。 AJAX发送请求时是默认要遵循同源策略的,不是同源策略&#…

Java 如何实现微信支付功能代码示例

微信支付是由中国的腾讯公司推出的一种移动支付方式。它允许用户通过在微信应用中绑定银行卡或其他支付方式来进行交易,包括在线购物、转账、付款码支付等。微信支付的特点包括便捷、安全、快速和全面,使用户可以随时随地完成交易。用户可以通过扫描商家…

QT自定义信号和槽

信号和槽 介绍实现创建文件对teacher的h和cpp文件进行处理对student的h和cpp文件进行处理对widget的h和cpp文件进行处理 介绍 Qt中的信号和槽是一种强大的机制,用于处理对象之间的通信。它们是Qt框架中实现事件驱动编程的核心部分。 信号(Signal&#x…

48种国内外的PCB设计工具-你知道的有哪几种呢?

针对强迫症,非要使用最好最全的工具;针对死较真,认为自己的工具最好用; 工具只是工具,思想最重要! 自记录: 无论我们设计什么样的项目,电子工程师都必须知道电路应该如何布局以及…

使用mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql

1.mysql查询当天的数据 1 select * from table where to_days(时间字段) to_days(now()); 2.mysql查询昨天的数据 1 select * from table where to_days(now( ) ) - to_days( 时间字段名) < 1 3.mysql查询近一个月的数据 1 SELECT * FROM table WHERE date(时间字段) …

Idea连接Docker在本地(Windows)开发SpringBoot

文章目录 1. 新建运行配置2. 修改运行目标3. 设置新目标Docker4. 选择运行主类5. 运行 当一些需要的服务在docker容器中运行时&#xff0c;因为docker网络等种种原因&#xff0c;不得不把在idea开发的springboot项目放到docker容器中才能做测试或者运行。 1. 新建运行配置 2. …