与NewBing一起写作:《Web应用安全入门》
前言
本文内容基于我的《Web应用安全入门》公开课视频。
Prompt:下面是一篇课程音频转录后的文本,请把它转成老师和学生对话形式的文本,要求遵循原文结构,语言衔接流畅,保持 Markdown 结构。
New Bing: 你好,这是Bing。我可以帮你把课程音频转录后的文本转成老师和学生对话形式的中文文本,但是我不能保证完全准确和流畅,因为这是一个比较复杂的任务。我会尽力做到简洁和清晰,但是你可能需要自己检查和修改一下。以下是我的尝试:
目录
- Web安全是什么(20min)
- Web安全漏洞分类(40min)
- 如何评估漏洞危害(15min)
- 我们能做什么(15min)
老师: 好,我们开始。我先做个自我介绍,我是experdot,今天给大家做一场Web应用安全的分享,本次演示是用白板而不是PPT,白板的好处是可以写写画画,我可以这样涂画,大家听课的话也更轻松一点。
老师: 我们看一下本次Web应用安全课程的目录,总共分4个章节,第一个章节是讲Web安全是什么,我们首先要搞清楚Web安全的本质。第二个是讲一些常见的Web安全漏洞,也就是有一些常规的分类。第三个是当我们在产品中遇到Web安全漏洞时,怎么评估它的危害。最后是讲,在日常工作中,我们应该怎么做来保证Web应用的安全。
老师: 有没有同学有什么问题?
学生: 老师,这个课程是针对什么人群的?我们需要有什么基础知识吗?
老师: 这是个入门课程,针对所有对Web应用安全感兴趣的人,不管你是开发者,测试者,运维者,还是项目经理,都可以从中学到一些基本的概念和方法。我们不需要有太多的专业知识,只要你对Web应用有一些了解,比如说什么是HTTP协议,什么是前端和后端,什么是数据库,什么是cookie,就可以了。如果你不太清楚,也没关系,我会尽量用简单的语言和例子来解释。
学生: 好的,谢谢老师。
老师: 不客气,那我们开始第一个章节——Web安全是什么?
一. Web安全是什么
老师: 这个章节相当轻松,我们从现实中去考虑,安全是什么。你查词典的话,它的定义是人没有威胁,也就是说一个人没有危险,它是安全。那么人有哪些危险?我们看第一小节。
01. 人的安全需求
- 野兽 房屋
- 寒冷 衣物
- 病毒 皮肤
老师: 请看这个页面,一个原始人在野外生存,他可能会遇到野兽,也可能在冬天遭遇寒冷,也可能遇到生物界里面的病毒,病毒入侵了他的体内人就会生病。这就是人会遇到的几种常规危险。
老师: 我们有危险就有相应的防护措施,那就是用房屋来保护野兽的侵袭,然后用衣物保温,再用皮肤抵御病毒,皮肤是人体免疫系统的第一道防线。关于这点,大家有问题吗?
学生A: 老师,为什么要用房屋来保护野兽的侵袭呢?野兽不是应该用武器来对付吗?
老师: 这个问题很好,其实武器也是一种防护措施,但是武器有一个缺点,就是它需要你主动去攻击野兽,而且有可能会失败,而房屋的话,它是一种被动的防护措施,它可以让你隔绝野兽的视线,让你不被发现,或者让你有一个安全的避难所,这样就可以减少你和野兽的冲突,也可以减少你的危险。
学生A: 明白了,它们是主动与被动的区别,谢谢老师。
学生B: 老师,我想问一下,皮肤是怎么防护病毒的呢?病毒不是很小吗?它们不是可以穿过皮肤吗?
老师: 这个问题也很好,其实皮肤是人体最大的器官,它有很多功能,其中一个就是防护功能,它可以阻挡很多外界的微生物,比如细菌,真菌,寄生虫等等,它们都不能轻易地穿过皮肤,而病毒的话,它们虽然很小,但是它们也不能直接穿过健康的皮肤,它们需要借助一些途径,比如伤口,黏膜,或者是通过其他生物的媒介,比如蚊子,跳蚤等等,才能进入人体。总之皮肤是一种很有效的防护屏障,它可以减少病毒的入侵。
学生B: 懂了,谢谢老师。
老师: 不客气,那我们继续。我们做一个绘图,把这几个概念画一下。为什么要画这个画?待会还有个彩蛋。
老师: 我们先画一个野兽,野兽就画成老虎,可能是长得像猫咪;然后寒冷的话,我们用一个雪花来描述;病毒的话就是非常抽象的一个病毒。
老师: 然后房屋的的话,先画一个房子,再在里面画一个人。衣服我们就画一个T恤衫,可能T恤衫不能保温,我们应该画一个长袖的衣服。最后皮肤不知道怎么画,我们就画一个薄片,这样就可以了。
老师: 我们先观察一下这6幅图,然后我们做一个划分,一分为二,我们会发现左边这一栏他们是没有什么共同点,不尽相同,千变万化,但是右边是有明显的一个共同点,是什么共同点?你们能看出来吗?
学生C: 老师,我看出来了,其实就你画的这条线,它是边界,
老师: 你说的对,房屋,衣物,皮肤就像这条线一样,都是一种边界,它们可以把人和外界的危险隔开。让我们继续下一节。
02. 安全第一步
- 建立边界(隔离)
老师: 至此,我们就得出了一个推论,人没有危险是为什么?是因为边界把他保护了起来,边界可以阻挡威胁。需要注意的是,截止目前我讲的都是现实生活中的安全,后续会讲Web系统中对应的边界概念。
老师: 那我们就可以这样说:安全第一步就是建立边界,边界的首要特性就是为了隔离。那边界还有哪些特性呢?让我们看下一节。
03. 边界是什么
- 房屋有门和窗户 边界需要交换
- 衣服要多穿几件 边界可以累加
- 病毒会绕过皮肤 边界可能失效
- 人体内免疫系统 边界冗余多样
老师: 我们看一下。人居住在房子里他就安全了,但是房屋要有门和窗户,这意味着什么?你虽然住在房子里,但这个房子不能是一个无懈可击的一个铁笼子,因为人还得出去还得呼吸是吧?也就是得有光线和空气进入,所以我们发现它有这样一个特点,必须交换。第二个是说衣服可以多穿几件,我刚刚T恤穿薄了,我就再穿一件厚一点的衣服,达到一个保温的效果。第三是病毒会绕过皮肤,虽然你建立了边界隔离,但是边界会失效,病毒它就绕过皮肤就进入你体内了。不过即使失效了,我们体内还有一套免疫系统,这是一种冗余机制,就是说哪怕你绕过了我第一层保护,我还有第二层保护,而这同时也说明了边界是多种多样的。
04. 边界的特性
- 隔离
- 交换
- 冗余
- 多样
老师: 我们在上一节试图理解什么是边界,归纳一下,它有四个方面特性,分别是隔离、交换、冗余和多样。让我考查一下大家,隔离是什么意思?
学生A: 老师,隔离是指把有害的物质和有益的物质分开,比如我们的皮肤就是一个隔离的边界,它可以阻止病毒和细菌进入我们的身体。
老师: 很好,那么交换呢?
学生B: 交换是指让有益的物质通过边界,比如我们的皮肤可以排汗,我们的鼻子可以呼吸,我们的眼睛可以看东西,这些都是交换的例子。
老师: 对,那么冗余呢?
学生C: 冗余是指当一个边界失效时,还有其他的边界可以保护我们,比如我们的皮肤被划破了,我们还有血小板可以凝血,我们还有免疫系统可以抵抗感染,这些都是冗余的机制。
老师: 没错,最后一个是多样,怎么理解它?
学生D: 多样是指不同的边界有不同的功能和形式,比如我们的墙壁可以防止风雨,我们的衣服可以保暖,我们的口罩可以过滤空气,这些都是多样的边界。
老师: 很棒,你们都理解了。接下来再看一个具体的例子,方便我们深入理解和记忆。
05. 例子:古代士兵
- 古代重骑兵穿甲
老师: 这个例子是说古代士兵,比如重骑兵,他们会穿三层防护物,由里到外,分别是衣服、软甲和重甲,这些都是边界,它们有什么特性呢?
学生A: 老师,我发现,它们有隔离的特性,因为它们可以把士兵和敌人的兵器分开,防止受伤。
老师: 对,还有呢?
学生B: 它们也有交换的特性,因为它们不会完全包裹士兵,士兵还可以看到、听到、说话、呼吸、握住武器,这些都是交换的过程。
老师: 嗯,继续。
学生C: 它们还有冗余的特性,因为它们是三层的,如果一层被破坏了,还有两层可以保护,这样就增加了安全性。
老师: 最后一个呢?
学生D: 它们还有多样的特性,因为它们的材料和功能不同,比如衣服是柔软的,可以防止划伤,软甲是弹性的,可以防止切割,重甲是坚硬的,可以防止穿刺,这些都是多样的边界。
老师: 非常好,你们都说得很清楚,我们再次理解了边界特性的四个方面。我们看下一节。
06. 失效的边界
-
隔离失效
-
交换失效
-
冗余失效
-
多样失效
-
可能带来危害(风险)
老师: 刚刚我们学习了边界特性,它们可以保护我们免受危害,但是我们也要知道,边界是可能失效的,比如我们的皮肤被刺破了,口罩被撕裂了,墙壁被打穿了,这些都是边界失效的情况。那么,当边界失效时,会发生什么呢?
学生A: 老师,当边界失效时,就会有危险的物质进入我们的边界,比如病毒、细菌、毒气、子弹等,这些都会对我们造成伤害。
老师: 对。那么,我们刚刚学习的四个边界特性,它们都有可能失效吗?
学生A: 老师,我觉得都有可能失效,比如隔离失效,就是边界不能有效地分开有害的物质和有益的物质,比如我们的口罩被撕裂了,就不能阻止病毒进入我们的呼吸道,这就是隔离失效的例子。
老师: 嗯,还有呢?
学生B: 还有交换失效,就是边界不能有效地让有益的物质通过,比如我们的眼镜被雾气遮住了,就不能看清楚周围的情况,这就是交换失效的例子。
老师: 对,继续。
学生C: 还有冗余失效,就是边界的数量或质量不足以保护我们,比如我们的衣服被火烧了,我们的皮肤被烫伤了,我们的免疫系统被压制了,这些都是冗余失效的例子。
老师: 最后一个呢?
学生D: 还有多样失效,就是边界的功能或形式不适合应对不同的危险,比如我们的墙壁可以防止风雨,但是不能防止地震,我们的口罩可以过滤空气,但是不能过滤水,这些都是多样失效的例子。
老师: 很好,这些都是边界失效的情况,同时,不同的的威胁可能造成不同的安全风险。
学生: 老师,风险和威胁有什么区别?
老师: 风险是指危害可能的严重程度。而威胁是指危险的物质本身,比如病毒、细菌、毒气、子弹等,这些都是威胁。
学生: 老师,那么,我们怎么评估风险的大小呢?
老师: 这首先取决于保护对象的重要程度。其次,评估风险的大小时,要看两个因素,一个是威胁的强度,一个是边界的强度,如果威胁的强度大于边界的强度,那么风险就很大,反之亦然。
老师: 简单说,降低风险,先考察保护的东西,再看是否要看减少威胁和增强边界。
学生: 懂了,谢谢老师。
老师: 好,到目前为止,我们讲的都是现实生活中的例子。我想一下,接下来我们就直接讲Web应用,还有个故事典例放到后面讲。
07. Web应用结构
- 服务端
- 客户端
- 通信管道
老师: 我们接下来要学习的是Web应用的结构和安全需求。首先,我们来看看Web应用的结构,它由三个部分组成,分别是什么呢?
学生: 服务端、客户端和通信管道。
老师: 没错,服务端就是提供服务的一方,它负责处理客户端的请求,返回响应数据。客户端就是发起请求的一方,它负责展示响应数据,与用户交互。通信管道就是连接服务端和客户端的线路,它负责传输数据,保证数据的完整性和私密性。在Web应用中,我们常见的客户端是什么呢?
学生: 浏览器。
老师: 对,浏览器是最常见的客户端,它可以解析HTML、CSS、JavaScript等网页语言,呈现出网页的内容和效果。当然,客户端也可以是手机APP或者桌面应用,只要它们能够通过HTTP协议与服务端通信。本次分享我们默认客户端就是浏览器。
老师: 那么我们刚刚讲,我们抽象出了几个概念来,第一个是说安全是什么?我们得先有一个保护的对象,保护的对象得用一个边界隔离开来,把危险隔离开来,这是一个极简的一个模型。那么我们要探索Web应用的安全是什么?就得理解Web应用里我们要保护什么?
08. Web安全需求
- 数据完整性
- 数据私密性
- 数据可用性
老师: Web应用其实是一个系统,看一下这个结构,它是一个信息系统,信息在系统里流通,然后信息系统的基础就是数据,数据有三个特性,实质上Web应用我们保护的就是这三个特性,数据的完整性指的是它不能被篡改防篡改,如果你把一个数据给篡改了,那么就破坏了它的完整性,私密性是说不能泄露,可用性指的是服务可用。你们能举个例子说明什么是数据的完整性、私密性和可用性吗?
学生: 数据的完整性就是数据不能被修改或删除,比如说我在网上购物,我付了款,但是商家把我的订单信息改了或者删了,那就破坏了数据的完整性。
老师: 不错,这是一个很好的例子。数据的私密性呢?
学生: 数据的私密性就是数据不能被未授权的人看到,比如说我在网上注册账号,我输入了我的密码,但是有人截取了我的密码,那就破坏了数据的私密性。
老师: 对,这也是一个很常见的情况,密码泄露还有可能导致更多的私密数据泄露。数据的可用性呢?
学生: 数据的可用性就是数据能够被正常地访问和使用,比如说我想上一个网站,但是网站被攻击了,无法打开,那就破坏了数据的可用性。
老师: 非常好,这几个例子都很贴切。
老师: 我们详细讲一下可用性,什么时候可用性遭到破坏,就是你保护的对象资源遭到破坏时,其实它破坏的是你的资源冗余度。比如说左边这个结构,它有服务器客户端,那么服务器上的资源冗余度是指什么?就是我们常见的CPU、内存,然后硬盘这些资源,比如说硬盘最多100g,结果你上传了一个1000g的文件,直接塞满了硬盘,资源的冗余度不足了,你就破坏了可用性。再例如带宽,刚刚的将通信通道上面需要保护带宽资源。
老师: Web应用安全需求除了这三个特性,后面还有人提出了数据的可追溯性。什么意思?简单讲就是我们用日志去记录数据的变化过程——谁操作了数据。一旦发生问题,我可以回溯,最终找到问题的根源。
老师: 这就是我们这两节要学习的Web应用的结构和安全需求,大家有什么问题吗?
学生: 没有了,老师请继续。
09. Web安全边界
- 接口
- 网关
- 防火墙
- 堡垒机
- 蜜罐
老师: 好,我们现在知道了保护对象,那就是要保护数据的这三个特性,我们再来看一下Web系统中有哪些边界。其实很好识别,Web系统里的边界就是发生I/O的地方,input和output的地方,那就是边界。这里举了几个例子,就是接口、网关、防火墙、堡垒机和蜜罐。蜜罐可能不常见,我们后面会在一个故事典例里再次提到蜜罐。
学生A: 老师,还有什么边界吗?
老师: 当然有,这里只列举了与软硬件有关的技术边界。在Web应用中,边界多样性体现在它不一定是一个技术的边界,也可以是一个逻辑的边界,也可以是一个生物的边界,也可以是一个物理的边界。
学生: 老师,什么是接口?
老师: 好问题,我会逐一解释。接口就是Web应用和其他系统或者用户之间的交互点,比如说你用浏览器访问一个网站,那么浏览器和网站之间就有一个接口,它可以是HTTP协议或者HTTPS协议,接口的作用就是定义了数据的格式和传输方式,接口也是一个安全的边界,因为它可能会接收到恶意的数据或者请求,所以我们要对接口做一些安全的检查和过滤。
学生: 那网关呢?
老师: 网关就是一个网络设备,它可以连接不同的网络或者子网,比如说你的电脑和互联网之间就有一个网关,它可以是一个路由器或者一个交换机,网关的作用就是转发数据包,根据目的地址找到合适的路径,网关也是一个安全的边界,因为它可能会遇到一些恶意的数据包,比如说DDoS攻击、ARP欺骗等等,所以我们要对网关做一些安全的配置和监控,比如说设置防火墙规则、开启日志等等。
学生: 那防火墙呢?
老师: 防火墙就是一个软件或者硬件,它可以对网络流量进行过滤和控制,比如说你可以设置防火墙只允许特定的端口或者协议或者IP地址通过,防火墙的作用就是阻止一些不合法或者不安全的网络访问,防火墙也是一个安全的边界,因为它可以实现一些信任机制,比如说白名单和黑名单,白名单就是只允许信任的访问,黑名单就是禁止不信任的访问,防火墙可以部署在网关上,也可以部署在服务器上,也可以部署在客户端上,不同的位置有不同的作用和效果。
学生: 那堡垒机呢?
老师: 堡垒机就是一个专门用于管理和监控网络安全的服务器,它可以提供一些安全的服务,比如说远程登录、文件传输、日志审计等等,堡垒机的作用就是隔离和保护内部网络,比如说你有一个内网,你不想让外网直接访问你的内网,你就可以在内网和外网之间设置一个堡垒机,所有的访问都要经过堡垒机的验证和授权,堡垒机也是一个安全的边界,因为它可以实现一些安全的措施,比如说双因素认证、会话录像、操作审计等等。
学生: 那蜜罐呢?
老师: 蜜罐就是一个故意设置的诱惑和欺骗攻击者的系统,它可以模拟一些真实的服务或者数据,比如说一个假的网站或者一个假的数据库,蜜罐的作用就是吸引和分散攻击者的注意力,同时收集和分析攻击者的行为和特征,蜜罐也是一个安全的边界,因为它可以保护真正的系统和数据,同时可以提供一些情报和预警,比如说发现一些新的攻击手法或者工具,蜜罐可以部署在外网,也可以部署在内网,不同的位置有不同的目的和效果。
学生: 老师,这些技术边界看起来大同小异。
老师: 很准确的观察。其他边界就有所不同了,比如逻辑边界——业务逻辑漏洞,生物或社会边界——内部人员删库跑路,物理边界——机房老化着火。
学生: 懂了,谢谢老师,你的讲解很详细。
老师: 不客气,若你能持续关注Web安全的学习,也可以这样。接下来我们展开讲一下边界交换的信任机制。
10. Web边界交换
- 白名单
- 黑名单
老师: 好,我们可以这样想,危险的东西就是Web中的那种病毒木马,刚刚讲,有害的东西要隔离,有益的东西要通过。Web边界交换其实就是一个信任机制,信任机制的话有且只有两种——白名单和黑名单。比如登录名和密码,这是我们常见的一种认证机制,它的本质是白名单,就是你先在这个系统中做一个注册,管理员拿个小本本在后台记下来,那么你下次再次登录,先验证你是否在已经注册的用户列表里,然后你才能登录。
学生: 那老师,那黑名单是什么?
老师: 黑名单就是相反的,就是说你把一些不信任的东西列出来,然后拒绝它们的访问。比如你的电脑上有一个防火墙,它可以设置一些规则,比如说禁止某些IP地址的访问,这就是黑名单。还有一个典型例子是病毒库。
老师: 好,我们接着讲——我们应该怎么保护Web应用。
11. Web应用保护
- 隔离(信任机制保护)
- 备份
- 监测
老师: 保护Web应用,首先就是做隔离,通过信任机制做保护,信任机制就是白名单和黑名单,然后做冗余也就是备份,比如说我们刚刚说CPU不足,那我们可以搞负载均衡,水平扩展多台服务器。
学生: 老师,有了备份机制,是不就万无一失了?
老师: 不是的,备份不能防数据泄露,无法保护数据的私密性,它只能保证一定的完整性和可用性。
学生: 懂了,那监测有什么用?
老师: 监测,就是实时监控资源冗余度和异常日志,可以起到预警的作用。
老师: 我们回顾一下,首先Web系统中的保护对象就是数据的三个特性,边界就是那种发生I/O的地方,危险的东西就是病毒和木马,这样我们就建立了对Web应用安全的初步的认识。
12. 例子:亡羊补牢
老师: 这里我举一个具体的例子,就是我们刚刚提到我们要讲一个故事典例,这个例子是什么?如题:亡羊补牢。
老师: 亡羊补牢后一句是为时已晚还是为时不晚,唔,都有可能。假如你牢里没有羊了,肯定为时已晚了。我们首先还是画画,先画一个方方正正的盒子,假如这就是牢,首先这是羊圈,我们画一个门,然后亡羊补牢里面的攻击者是谁,就有危险的东西是谁,它是狼。
学生: 老师,狼是怎么进入羊圈的呢?
老师: 我们把它叫狼人甲,他不会开门,他只能去挖洞,他在这就是挖了一个破洞,破洞怎么画?就这样画吧。他挖了一个破洞,这个破洞叫漏洞,他进入了羊群,我们把破洞后来补上了,牧羊人发现了它,把它补上了,这个东西就叫补丁。
学生: 老师,那补丁能防止狼再次进入吗?
老师: 很难说,补丁有可能再次破损,也还可能会有其他地方的漏洞。
老师: 现在有另外一个狼叫狼人乙,他是披着羊皮的狼。本来这里的牧羊人他是有一个认证机制的,它是说凡是长一个羊皮的动物,它就可以进入,他有这样一套认证机制,这是白名单还是黑名单,大家思考一下。
学生: 老师,这是白名单吧,因为它只允许有羊皮的动物进入。
老师: 对,这是白名单。那么狼人乙只要披着羊皮他就进入了,这是一种伪装措施伪装,或者说是一个绕过你的信任机制的措施。伪装在Web应用中叫什么?一般是叫木马,木马背后也有个故事,它是伪装的意思,这就是一个亡羊补牢的故事,便于我们理解Web系统中的安全。
学生: 老师,那木马是怎么被发现的呢?
老师: 羊圈里少了羊,牧羊人自然就要去找原因了,比如他给羊圈安装了监控,发现是披着羊皮的狼干的。
老师: 好,我们再讲一下之前提到的蜜罐,什么是蜜罐?我们还是用羊圈这个例子来做解释。牧羊人他发现自己的羊圈里的羊经常少,其实就是披着羊皮的狼干的,于是他给羊圈划分了一栏,后面是真正的羊圈,前面他放了一块羊肉,披着羊皮的狼进入,它去吃羊肉就暴露了,暴露以后它可能就直接走了,也可能就被发现了,这就是蜜罐,真正的羊群是受到了保护的,
13. 第一节总结
- 没有边界,或者失效的边界,将可能导致系统处于受损的状态
老师: 我们最后做一个总结,这个总结就是:没有边界或者说失效的边界,将可能导致系统处于受损的状态,这就是安全领域要解决的问题。我们整体回顾一下第一章节的内容,第一节我们讲了什么是 Web安全,安全的话,人没有威胁,我们从人的例子开始讲起,然后举了1个古代士兵的例子,理解边界的4个特性,最后回到Web应用中,我们去理解Web应用的安全,就是保护数据的三个特性,如何让Web系统远离病毒和木马的威胁。最后举了一个亡羊补牢的例子。
老师: 那么我们最后做一个认识,就是从字义角度理解“什么是安全”。有没有同学知道,安全这两个字是怎么来的?
学生A: 老师,我知道,安这个字,它的上边一个宝盖头,在古汉语里是指房子,下面则坐着一个人,也就是你之前画的这个图。
老师: 你说的对。它表的意思是什么?
学生A: 是安宁平静。
老师: 不错。那全是什么?
学生B: 全下面是个王字,王本来是玉,它指的是一个纯洁无瑕的玉,也就是一块完整的玉——表完整的意思。
老师: 是的。这样我们就从字义层面理解了安全,安全就是人们对安静、安宁、平静、完整生活的一种美好期望。
学生C: 老师,这个期望是否能永恒地实现呢?
老师: 恐怕不能,安全状态是短暂的,截止目前你是安全的,但不代表以后你是安全的,这就是安全的时效性。
学生C: 理解了,安全是短暂的,所以我们才说要居安思危,时刻保持警惕,防范边界失效,从而不使系统受到威胁。
老师: 很棒。这就是第一章节的全部内容,下一章节我们将讲解Web安全漏洞。
附录
更新进度:
- Web安全是什么
- Web安全漏洞分类(未更新)
- 如何评估漏洞危害(未更新)
- 我们能做什么(未更新)