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.

165 lines
11 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.

# 26包含敏感信息的报错将安全开发标准应用到项目中
你好,我是王昊天。
在如今的信息时代里个人隐私是非常重要的我们每个人都会有自己的隐私信息这些信息可能存在于日记本、手机或者Web应用的数据库中。其中如果Web应用中存在信息泄露漏洞用户的隐私信息就有可能被攻击者获取到。那么**攻击者是如何获取的呢?**这节课我们就一起看看,顺便加强一下安全开发标准。
接下来我们将分为四个部分进行学习,这里包括信息泄露漏洞的定义、示例、原因及防御方案。
![图片](https://static001.geekbang.org/resource/image/c0/aa/c0c3e91bc6a3c599b0b151f2300183aa.jpg?wh=1593x482)
首先,让我们从最基础的定义开始。
## 信息泄露漏洞的定义
当攻击者恶意发起一些Web应用设计者预期之外的操作使得Web应用无意的将一些敏感信息展示给攻击者这就是信息泄露漏洞。这些敏感信息可能是其他用户的隐私信息、敏感的商业信息以及Web网站的技术细节。
其中我们很容易知道泄露用户的隐私信息和敏感的商业信息都是非常危险的而Web网站的技术信息泄露其实也很重要攻击者很可能会借助这些信息实现对这个Web应用的恶意攻击行为。
## 信息泄露的示例
当然了确实有很多种方式会导致信息泄露漏洞我们不妨一起看几个示例吧。这里包括robots.txt 信息泄露、备份文件信息泄露、报错信息泄露以及非必要敏感信息展示等等。接下来我们逐一看下。
![图片](https://static001.geekbang.org/resource/image/a0/17/a037f60d37bea53d07c9a32fdb63d517.jpg?wh=1485x478)
### robots.txt信息泄露
在一些Web应用目录下会存在一个名为robots.txt的文件这个文件主要是用来限制整个站点的搜索引擎访问情况即**设置哪些内容可以被访问,哪些内容不可以被访问**。如果在这个文件中,包含了用户不可见目录的信息、结构以及内容,那么攻击者就可以访问这个文件来获取这些隐私信息,这就是一个典型的信息泄露示例。
例如在这个Web应用中的目录信息下就存在images、content等不允许被访问的文件夹。
![图片](https://static001.geekbang.org/resource/image/e5/34/e519b4970f53ef6aa7fe543b92071234.png?wh=1364x473)
接下来,让我们继续学习备份文件引起的信息泄露。
### 备份文件信息泄露
Web应用管理者在更新Web应用时很可能会将网页内容进行备份。如果管理者出于方便考虑直接将备份文件放到网站目录下并且没有对它进行访问控制的设置那么攻击者就可以直接访问这个文件名来获取备份文件。
那么攻击者是如何知道Web应用可能存在的备份文件名的呢事实上攻击者也不知道具体的备份文件名而是**利用一个常见备份文件名的字典文件来进行枚举测试**,如果备份文件名很简单,那么攻击者就很可能成功获取到备份文件。
为了让你更好地理解这个过程,我们一起看看下面这个备份文件字典示例:
```plain
/2022.zip
/a.zip
/old.zip
/web.zip
/1.zip
/a.zip
/2021.zip
/1.rar
......
```
我们可以看到字典文件中列举了一些常见的备份文件名称攻击者就是用它们去对攻击的Web应用进行测试。
攻击者如果获取到备份文件那么他就可以获得网页的源代码这使得他更容易对Web应用进行分析从而实施自己的攻击行为。
下面,我们来看报错信息泄露,它的严重性可能会进一步升级。
### 报错信息泄露
我们知道如果我们对Web应用进行错误的操作那么就可能会得到一些报错信息比如下面这个示例
![图片](https://static001.geekbang.org/resource/image/24/f8/2499546f25d43a7f05906768a17c67f8.png?wh=1281x758)
这是一个购物信息网站里面有各种商品我们可以选择自己感兴趣的商品点击View details进行观看。这里我对这条会飞的小狗很感兴趣让我们一起看看它的详细信息吧。
![图片](https://static001.geekbang.org/resource/image/4f/47/4f5f6765d24e357824368954b0b8bb47.png?wh=1294x611)
从图中我们已经看到这条飞狗的详细描述了。此外我们还发现这个Web应用是通过GET方式上传参数productId。为了让页面显示出报错信息我们将productId的值改为一个字符类型例如App这样页面就可能会出现参数类型错误。
可以看到,页面确实爆出来了很多错误信息。
![图片](https://static001.geekbang.org/resource/image/37/09/37fe531e4f79ab8d3176f20364df1209.png?wh=1042x664)
这里错误页面中包含了很多的Java程序信息它们都属于Web应用的技术细节。如果这些信息被泄露出去那么会对网站的安全造成极大的威胁。
最后,让我们一起来看一个危险性没有那么强的非必要敏感信息泄露。
### 非必要敏感信息泄露
非必要敏感信息泄露就是Web应用将一些较为敏感的信息非必要地展示给其他用户。
举一个简单的例子就比如有个购物应用我们需要向商家购买商品按照道理商家只需要知道我们的地址信息、联系方式即可完成货物的发送但是Web应用却将我们的身份证号码、银行卡账号都展示给了商家。对于商家而言这是非必要的信息可是Web应用却将这些隐私信息展示给了他们。这就是非必要敏感信息泄露它会对用户的账户安全产生威胁。
到这里,我们就学习完了信息泄露漏洞的示例,这让我们更加具体地了解了信息泄露漏洞的实际场景。接下来,让我们进一步分析这个可怕的漏洞产生的原因。
## 信息泄露漏洞的原因
信息泄露漏洞产生的方式多种多样,不过它可以分为三种类型。
第一种类型为Web应用的开发者在开发时需要写入一些调试信息来方便自己及他人的合作开发这是正确的行为。但是部分开发者在将Web应用正式部署上线时忘记将这些信息删除干净导致用户可以看到这些信息这就导致了信息的泄露。
第二种类型更加常见它是由于Web应用的开发者没有正确的对Web页面进行配置。这使得在Web页面出现错误时会详细的给用户展示出很多包含敏感信息的报错内容。我们在查看飞狗页面引起的报错中就属于这种情况。
最后一种情况最为普遍这是因为Web应用开发者的不安全设计所导致的这么说可能会比较抽象我们可以通过一个例子来理解。
![图片](https://static001.geekbang.org/resource/image/e1/28/e11e83f77aec75fceedb71ccbaf39a28.png?wh=864x435)
这是一个设计上存在安全隐患的Web应用我们用字典探测到它存在一个目录admin。于是访问上去发现页面提示到这个页面仅允许本地用户访问**这句话就像一个间谍,它仿佛在告诉攻击者“只要伪装成本地用户就可以访问了”。**
于是我们按照“间谍”的提示尝试利用BurpSuite拦截这一请求并利用添加配置 `X-Custom-IP-Authorization: 127.0.0.1`,将自己伪造成为本地用户,实现授权的限制。
```plain
GET /admin HTTP/1.1
Host: ac5c1f411f91c174c07f828d004100b8.web-security-academy.net
Cookie: session=A5X8EOtt3Wtp2QOAoWxnJYXfXd8NNWFm
Sec-Ch-Ua: "Chromium";v="95", ";Not A Brand";v="99"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
#我们自己添加的IP信息。
X-Custom-IP-Authorization: 127.0.0.1
Connection: close
```
将这个报文发送出去,我们可以发现,已经成功绕过授权机制了,获取到的页面如下:
![图片](https://static001.geekbang.org/resource/image/b9/aa/b995f81f9647ca81ca7602daf09006aa.png?wh=1242x420)
可以看到,该页面列举出了一些用户的用户名信息,我们可以点击删除按钮,将它们删去。
这个授权绕过漏洞的根本原因就是**信息泄露**所以应用开发者在设计Web应用时需要避免隐私信息的泄露否则很可能会对应用产生安全威胁。
那么在了解完一些信息泄露的原因后,我们就可以对症下药,学习如何防御信息泄露漏洞了。
## 信息泄露漏洞的防御
因为造成信息泄露的途径多种多样,所以我们很难全面的去做好对信息泄露漏洞的防御。不过我们还是要采取一些措施,来降低信息泄露漏洞的可能性。
首先我们需要让所有的Web应用开发者知道什么是敏感信息因为有些信息可能看起来很安全没有什么危险之处但事实上它的泄露会给应用造成极大的安全威胁。
其次,我们要做到**让报错信息趋于通用化**,而不是在报错信息中将一些关于应用运行方式的线索传递给攻击者。
最后我们还要彻底地理解Web应用程序运行的配置信息以及安全执行策略然后禁用掉其中不需要的功能防止这些功能造成信息泄露问题。
## 总结
在这一讲中,我们学习了信息泄露漏洞相关的知识。
首先我们学习了信息泄露漏洞的定义了解到信息泄露漏洞就是攻击者恶意发起一些Web应用设计者预期之外的操作使得Web应用无意的将一些敏感信息展示出来。
在明白了信息泄露漏洞的定义之后我们看了一些信息泄露示例值得一提的是那个飞翔的小狗示例我们通过让页面输出报错信息让Web应用将很多技术细节展示出来。而这些泄露示例可以帮助我们更具体地理解信息泄露是怎么一回事。
之后,我们具体地分析了信息泄露漏洞产生的原因,并将这些原因归为三类。第一类为开发者对于调试信息的漏删,第二类为开发者没有对页面进行正确的配置,最后一类为开发者的不安全设计,它们都是信息泄露漏洞的罪魁祸首。
最后,我们学习了信息泄露漏洞的防御方案,知道了信息泄露漏洞是难以完全去除的,但是我们可以通过让开发者正确认知什么是敏感信息,将报错信息趋于通用化以及禁用不需要的功能来降低信息泄露漏洞发生的概率。
## 思考题
你觉得还有什么方法能帮助Web应用抵御信息泄露漏洞吗
欢迎在评论区留下你的思考。如果觉得今天的内容对你有所帮助的话,也欢迎你把课程分享给其他同事或朋友,我们共同学习进步!