.ASPX POST 请求 - 隐私侵犯:BREACH
.ASPX POST Request - Privacy Violation: BREACH
根据网络检查报告,我们的网站属于隐私侵犯:违反。
推荐的修复是:
禁用 HTTP 压缩
确保用户输入和密码不包含在相同的响应内容中
随机化秘密
我们应用了 #1 从 IIS 禁用 HTTP 压缩 => 压缩 => 取消选中静态和动态。这在我们的 DEV 上确实有效,但是当我们在 PRODUCTION 服务器中尝试时,它不起作用。
*响应 header 仍然显示 content-encoding: gzip。即使 HTTP 压缩已关闭
- 我理解 HTTP 压缩被禁用的方式是检查响应 header 并确保没有 content-encoding。
以下是来自 PROD 服务器的示例响应 header。
Cache-Control
private
Connection
Keep-Alive
Content-Encoding
gzip
Content-Length
71447
Content-Type
text/plain; charset=utf-8
Date
Thu, 24 May 2018 16:57:04 GMT
Server
Microsoft-IIS/7.5
Strict-Transport-Security
max-age=31536000; includeSubDomains
Vary
Accept-Encoding
X-AspNet-Version
4.0.30319
X-Content-Type-Options
nosniff
X-Frame-Options
SAMEORIGIN
X-XSS-Protection
1; mode=block
--- Request Header
Accept
*/*
Accept-Encoding
gzip, deflate, br
Accept-Language
en-US,en;q=0.5
Cache-Control
no-cache
Connection
keep-alive
Content-Length
92398
Content-Type
application/x-www-form-urlencoded; charset=utf-8
Cookie
.ASPXANONYMOUS=fMbt3RErereq1AEkAAA…onId=00y51efaerreuc3pw0erereyehwc2wzxk
Host
example.org
Pragma
no-cache
Referer
https://example.org/dsearch.aspx
User-Agent
Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/60.0
X-MicrosoftAjax
Delta=true
X-Requested-With
XMLHttpRequest
此外,如何应用 2 和 3 中的修复程序。
报告显示问题:
TSM_HiddenField_=ctl00_ContentPlaceHolder1_ToolkitScriptManager1_HiddenField&_TSM_CombinedScripts_=%3b%
3bAjaxControlToolkit%2c+Version%3d3.5.7.123%2c+Culture%3dneutral%2c+PublicKeyToken
并且
ctl00_ContentPlaceHolder1_ToolkitScriptManager1_HiddenField=&__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS
=PRexdxaxbhgeccgjdchdfcgcdefRP(根据响应 body 进行了修改)
您可以在此处阅读有关 BREACH 攻击的所有信息:http://breachattack.com/
他们讨论了缓解措施以及受影响的压缩类型。
他们按有效性排序的缓解措施列表是:
- 禁用 HTTP 压缩
- 将秘密与用户输入分开
- 根据请求随机化秘密
- 掩盖秘密(有效
通过每个请求的随机秘密进行 XORing 随机化)
- 保护
具有 CSRF 长度隐藏的易受攻击页面(通过添加随机数
字节到响应)
- Rate-limiting 请求
攻击依赖于打乱压缩,因此禁用可以有效缓解攻击。
如何为 asp.net 禁用压缩的说明:(在 IIS 中禁用它)。
How to prevent BREACH attack in ASP.NET MVC Core?
如果您仍然有压缩,IIS 可能配置不正确。尝试从 IIS 服务器打开页面,并检查 headers。如果此时未启用压缩,则可能是另一个代理或负载平衡器正在另一跳添加压缩。
如果您无法在您的环境中取消压缩,下一步就是将机密与用户输入分开。
看着他们拉出的线,我觉得这并不是什么秘密。如果它不是秘密(即,如果攻击者找到了该值,他们将无法使用它),那么您实际上不会受到泄露攻击。
根据网络检查报告,我们的网站属于隐私侵犯:违反。 推荐的修复是:
禁用 HTTP 压缩
确保用户输入和密码不包含在相同的响应内容中
随机化秘密
我们应用了 #1 从 IIS 禁用 HTTP 压缩 => 压缩 => 取消选中静态和动态。这在我们的 DEV 上确实有效,但是当我们在 PRODUCTION 服务器中尝试时,它不起作用。 *响应 header 仍然显示 content-encoding: gzip。即使 HTTP 压缩已关闭
- 我理解 HTTP 压缩被禁用的方式是检查响应 header 并确保没有 content-encoding。
以下是来自 PROD 服务器的示例响应 header。
Cache-Control
private
Connection
Keep-Alive
Content-Encoding
gzip
Content-Length
71447
Content-Type
text/plain; charset=utf-8
Date
Thu, 24 May 2018 16:57:04 GMT
Server
Microsoft-IIS/7.5
Strict-Transport-Security
max-age=31536000; includeSubDomains
Vary
Accept-Encoding
X-AspNet-Version
4.0.30319
X-Content-Type-Options
nosniff
X-Frame-Options
SAMEORIGIN
X-XSS-Protection
1; mode=block
--- Request Header
Accept
*/*
Accept-Encoding
gzip, deflate, br
Accept-Language
en-US,en;q=0.5
Cache-Control
no-cache
Connection
keep-alive
Content-Length
92398
Content-Type
application/x-www-form-urlencoded; charset=utf-8
Cookie
.ASPXANONYMOUS=fMbt3RErereq1AEkAAA…onId=00y51efaerreuc3pw0erereyehwc2wzxk
Host
example.org
Pragma
no-cache
Referer
https://example.org/dsearch.aspx
User-Agent
Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/60.0
X-MicrosoftAjax
Delta=true
X-Requested-With
XMLHttpRequest
此外,如何应用 2 和 3 中的修复程序。 报告显示问题:
TSM_HiddenField_=ctl00_ContentPlaceHolder1_ToolkitScriptManager1_HiddenField&_TSM_CombinedScripts_=%3b% 3bAjaxControlToolkit%2c+Version%3d3.5.7.123%2c+Culture%3dneutral%2c+PublicKeyToken 并且
ctl00_ContentPlaceHolder1_ToolkitScriptManager1_HiddenField=&__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS =PRexdxaxbhgeccgjdchdfcgcdefRP(根据响应 body 进行了修改)
您可以在此处阅读有关 BREACH 攻击的所有信息:http://breachattack.com/
他们讨论了缓解措施以及受影响的压缩类型。
他们按有效性排序的缓解措施列表是:
- 禁用 HTTP 压缩
- 将秘密与用户输入分开
- 根据请求随机化秘密
- 掩盖秘密(有效 通过每个请求的随机秘密进行 XORing 随机化)
- 保护 具有 CSRF 长度隐藏的易受攻击页面(通过添加随机数 字节到响应)
- Rate-limiting 请求
攻击依赖于打乱压缩,因此禁用可以有效缓解攻击。
如何为 asp.net 禁用压缩的说明:(在 IIS 中禁用它)。
How to prevent BREACH attack in ASP.NET MVC Core?
如果您仍然有压缩,IIS 可能配置不正确。尝试从 IIS 服务器打开页面,并检查 headers。如果此时未启用压缩,则可能是另一个代理或负载平衡器正在另一跳添加压缩。
如果您无法在您的环境中取消压缩,下一步就是将机密与用户输入分开。
看着他们拉出的线,我觉得这并不是什么秘密。如果它不是秘密(即,如果攻击者找到了该值,他们将无法使用它),那么您实际上不会受到泄露攻击。