You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
13 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 模块串讲(一) | Web安全如何评估用户数据和资产数据面临的威胁
你好我是何为舟。“Web安全”模块已经结束了今天我会通过一篇串讲带你回顾这一模块的知识帮你复习巩固更好地掌握和应用这些内容。
有同学留言说:“老师,讲了这么多漏洞的防护知识,有没有什么好的记忆方法呀?”首先,我们要明确一点,不管学什么知识,想要学好,在前期,一定需要时常复习来加深记忆。在此基础上,我们才能深刻理解和熟练应用这些知识。
那你可能要说了,怎么才能“记住”这些知识呢?我这里有一个我自己非常常用的、好的记忆方法,那就是“体系化地记忆”。怎么个体系化呢?说白了,就是每学完一块内容,通过自己的理解把相关的内容串联在一起。这也就是我们常说的,把知识变成自己的东西,长久下来,你就可以形成自己的知识体系了。
那放到我们这个“Web安全”模块中我说过安全落地的第一步是进行[威胁评估](https://time.geekbang.org/column/article/178528)而威胁评估又可以分为识别数据、识别攻击和识别漏洞。所以今天我就基于比较常见的两种应用场景通过威胁评估的方式带你系统地复习我们学过的Web安全知识。
## 用户数据的威胁评估
假设,你正在为公司设计安全体系,首先要对用户数据进行威胁评估。以微博的用户数据为例,这些数据就包括:个人信息、博文信息以及关注互动信息等等。正常情况下,用户需要登录之后才能获取并修改自己的用户数据。那为了获取这些用户数据,黑客常常会通过盗取用户身份来进行未授权的操作。
我们之前讲过,黑客可以通过尝试弱密码或者通过社工手段盗取用户的密码。这种攻击漏洞出现的原因,主要是用户在密码保管上的安全意识薄弱。因此,我们需要通过管理机制(比如安全培训)和技术手段(比如限制密码强度),提升用户的安全意识,教用户如何更好地保管密码。
除此之外黑客还可以通过一些Web漏洞在不知道用户密码的情况模拟用户进行未授权的操作。可能的Web漏洞我们讲过3种。你可以先自己想想看能想起来几种。如果想不起来再看我下面的内容。
**第1个是XSS漏洞**。通过XSS漏洞黑客可以在Web应用中嵌入自己的JavaScript脚本从而篡改Web应用在用户浏览器上的行为。通过XSS黑客一方面可以模拟用户直接在Web应用中进行发博关注等互动行为另一方面也可以通过JavaScript脚本窃取到用户的Cookie信息。窃取到Cookie之后黑客就能够在不知道密码的情况下**绕过登录认证环节,直接获得用户身份。**
[![](https://static001.geekbang.org/resource/image/7d/f5/7d77973b1623717cd519b0d3f8b7d4f5.jpg)](https://time.geekbang.org/column/article/179592)
> 点击图片即可复习“XSS”章节
**第二个是SQL注入漏洞**。通过SQL注入漏洞黑客可以利用所谓的“万能密码”直接对登录环节进行破解。通过“万能密码”黑客可以将原本的登录认证SQL语句进行篡改使其变成一个恒为真的表达式让应用误以为黑客输入的是正确的用户名和密码。这样黑客就能**破解登录认证环节,直接获得用户身份。**
[![](https://static001.geekbang.org/resource/image/dc/28/dca53475b9ec945b9bd3dd30f37b6328.jpg)](https://time.geekbang.org/column/article/181424)
> 点击图片即可复习“SQL注入”章节
**最后一个是CSRF漏洞**。通过CSRF漏洞黑客能够直接对用户的浏览器进行控制。当黑客在自己的网页中向其他网页发起跨域请求的时候浏览器会自动带上对应网页的Cookie等信息。因此只要用户之前进行过认证并且已经将登录凭证保存在浏览器中黑客就能**以用户的身份发起未授权的操作请求。**
[![](https://static001.geekbang.org/resource/image/5c/70/5c0e68d5766befd701ab3f3fae3eea70.jpg)](https://time.geekbang.org/column/article/182074)
> 点击图片即可复习“CSRF和SSRF”章节
我们来总结一下这个过程。我们正在为公司设计安全体系进行威胁评估首先关注的数据通常是用户数据而为了破坏用户数据的CIA黑客会盗取用户身份。盗取用户身份的安全漏洞主要有用户自身的密码保管不当和Web应用的漏洞。这其中Web应用的漏洞可能是XSS、SQL注入和CSRF。
## 资产数据的威胁评估
讲完了用户数据的威胁评估,我们再以银行为例,说一说资产数据的威胁评估。因为金融行业相对更关注金钱相关的数据,所以,在做威胁评估时,最可能识别到的数据就是资产数据。这些资产数据中包括余额和交易记录等。因为资产数据保存在内部的数据库中,所以,黑客会通过控制内网服务器这样的攻击手段,窃取数据库中的信息。你可以先想一想,我们讲过的攻击方式,哪些可以控制内网服务器。
**我们先来看第1种利用SSRF漏洞攻击**。通过SSRF漏洞黑客可以控制服务器向内网发起任意的网络请求。因此如果某个内网的Web服务没有做好认证黑客就可以获取到Web服务内的数据。除此之外通过对一些特定端口或者协议的访问黑客还能够获取其他的数据。比如通过访问MySQL的3306端口黑客能够知道内网的整体网络结构或者通过file://协议,黑客可以直接读取服务器本地的文件。
**第2种是利用反序列化漏洞攻击**。通过反序列化漏洞黑客可以控制应用的服务端使得服务端执行黑客所定义的逻辑。更进一步比如在Java中黑客指定应用执行Runtime.exec(),就能够让应用执行任意的系统命令了。这样一来,黑客就能够实现从控制应用到控制服务器的权限提升了。
[![](https://static001.geekbang.org/resource/image/31/cb/31c5f69c95170783b7b3a38fc94105cb.jpg)](https://time.geekbang.org/column/article/182421)
> 点击图片即可复习“反序列化漏洞”章节
**第3种是利用插件漏洞攻击**。除了应用开发的代码中可能出现漏洞应用所依赖或者使用的插件本身也有可能出现各种安全漏洞。比如经典的Web框架Structs就出现过命令执行的漏洞。不管你的代码如何安全只要你使用了Structs黑客就能通过Structs来控制你的服务器。
[![](https://static001.geekbang.org/resource/image/7f/6d/7f07e241ed3066fba2c190cb840f8f6d.jpg)](https://time.geekbang.org/column/article/184728)
> 点击图片即可复习“插件漏洞”章节
**我们还要注意的就是“后门”**。除了通过前面这3种漏洞攻击控制服务器之外黑客为了能够对服务器实现长久的控制会在服务器中留下“后门”。这样一来黑客想要再次使用服务器的时候只需要直接通过“后门”进入即可。“后门”通常会以木马、Rootkit和WebShell的形式出现在服务器中并伴随定时任务、开机启动或者利用常驻进程在服务器中持续运行。
[![](https://static001.geekbang.org/resource/image/96/62/963a79368db3dbe99ace71f060a61762.jpg)](https://time.geekbang.org/column/article/185307)
> 点击图片即可复习“权限提升和持久化”章节
通过威胁评估我们知道银行的关键数据为资产数据而为了破坏资产数据的CIA黑客会通过控制内网服务器的方式来发起攻击。接着我们分析出在Web安全中黑客可以利用的漏洞有SSRF、反序列化漏洞和插件漏洞以及黑客还会在服务器中留下一个“后门”实现对服务器的长期掌控。
## 认证和授权的安全防护
在进行完威胁评估之后,我们知道了应用可能会面临的风险和漏洞有哪些。下一步,我们就要针对这些漏洞进行防护了。
实际上上面这些Web漏洞都是针对认证这一个环节发起的攻击也就是说通过各种漏洞黑客可以直接绕过认证环节或者通过异常的输入破解认证再或是以操控他人的形式来窃取身份信息。因此对于这些漏洞的防护我们最有效的防护手段还是加强检测避免这些漏洞的出现以此来保障认证环节的安全性。你可以回忆一下我们讲过的检测手段都有哪些。
主要的防护手段可以分为3种。
**第1种是检测和过滤**。对于应用来说一切由用户生成的信息都是不可信的。因此我们要对这些信息进行检测和过滤。比如在页面渲染输出的时候对信息进行编码在用户输入的时候对关键词进行过滤对用户的输入进行白名单的限制等。通过这些方法我们就能够对基于XSS、SQL注入和SSRF等漏洞的攻击进行一定的防护。
**第2种是加强认证。**大多数情况下为了用户体验应用会在用户进行一次登录后在前端对用户的身份信息进行保存。这样用户在进行后续操作时就不需要再次登录认证了。但是这种设计会对应用的安全性造成一定的影响。因为黑客可能控制用户的前端来仿冒用户进行操作。为此对于某些关键性的操作比如转账等应用需要通过一次性Token和安全性更高的支付密码等手段进行二次认证来保障操作的可信。
**第3种是补丁管理。**我们之前讲过“0 Day”漏洞黑客通过这个漏洞能够造成的危害更大而且黑客会比你更早地知道漏洞的存在。那像这样的插件漏洞其实具备和应用一样甚至更高的权限但是插件本身又不受开发控制。所以一旦插件出现漏洞就极容易成为黑客的目标。为了避免应用受到各类插件漏洞的影响我们需要使用各种自动化的插件管理工具对公开的插件漏洞进行监控及时更新补丁。
我们可以通过这3种防护手段加强认证环节的安全性。除此之外我们还要在授权和审计阶段加入检测来识别异常的身份认证尽可能地提高应用的安全性。比较典型的方式有3种。
**第1种最小权限原则。**在任何时候,最小权限原则一定是提升系统安全性的最佳实践方案。通过给各类应用和插件配置最小的权限,虽然不能够对异常的身份认证进行识别。但是,通过最小权限原则,我们能够在最大程度上,减少黑客在窃取到用户身份后产生的危害,也就保护了数据的安全性。
**第2种是WAFWeb Application Firewall网站应用级入侵防御系统。**WAF的主要作用就是对用户的输入进行检测拦截可疑地输入。检测原理就是普通用户在应用中的输入可预测基本不会去输入类似单引号这样可能对应用功能产生影响的输入。因此我们只要对各类攻击类型的输入进行分析提取出来其特征就可以准确地识别出黑客的攻击行为并进行拦截了。关于WAF我会在后面的课程中详细讲解这里就不再深入了。
**第3种是IDSIntrusion Detection System入侵检测系统。**当黑客进入内网或者控制了服务器之后其行为往往也会区别于内部员工。比如黑客可能会对内网发起探测扫描而内部员工只会按照工作需要访问特定的地址。因此我们可以对内网和服务器中的各类行为进行收集对异常的行为进行“挖掘”从而对已发生的入侵进行检测和告警。这就是IDS。
## 总结
今天我从互联网应用的用户数据的威胁评估讲到金融行业的资产数据的威胁评估最后讲到在威胁评估完成后我们要从认证、授权和审计上有针对性地进行防护。只要你真正用好这几种防护就能避免大部分的Web安全问题了。
最后我把“Web安全”涉及的主要内容梳理成了一张表格你可以利用它来及时回顾。
![](https://static001.geekbang.org/resource/image/50/65/50986ac4c0b3cbffa4e698921b5d7865.jpg)
## 思考题
在文章开头我提到了“体系化地记忆”这样一种学习方法。今天我用我的思路带着你复习了一遍Web安全这一模块的核心知识不知道你掌握得怎么样你可以尝试用自己的思路总结串联一下这一模块的内容相信你一定会非常有收获。
欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!