服务器静态文件防篡改

avatar
作者
猴君
阅读量:0

本文调研了对CDN静态资源进行篡改的几种攻击手段,针对每种攻击手段,也调研了相应的防护手段,对于这些防护手段,思考服务器端有哪些可以做的防护措施。

篡改CDN静态资源的几种常见攻击手段

DNS劫持

攻击者可以劫持用户的DNS解析,将用户对网站的请求重定向到恶意CDN节点。这些恶意CDN节点可以返回被篡改的静态资源,例如注入恶意代码或广告。
DNS劫持流程

常见的几种DNS劫持的方法

DNS缓存感染

攻击者使用DNS请求,将数据放入一个具有漏洞的DNS服务器的缓存当中。这些缓存信息会在用户进行DNS访问时返回给用户,从而将用户对正常域名的访问引导到入侵者所设置木马、钓鱼等页面上。

DNS信息劫持

入侵者通过监听客户端和DNS服务器的对话,攻击者在DNS服务器之前将虚假的响应交给用户,就可以欺骗客户端去访问恶意的网站。

DNS重定向

攻击者如果将权威DNS服务器重定向到恶意DNS服务器,那么被劫持域名的解析就完全置于攻击者的控制之下。

防护手段

  • 定期的检查域名的账户信息及解析状态是否存在异常
  • 用户端配置安全可靠的递归解析服务器,网站方设置较小的TTL值
  • 域名锁定,加锁期间不接受用户在 DNS 解析上的任何更改,包括对域名服务器的修改
  • 安装SSL证书,SSL证书具备服务器身份认证功能,HTTPS 协议可以在数据传输中对数据进行加密传输,保护数据不被窃取和修改。

SSL/TLS劫持

攻击者可以劫持用户的SSL/TLS连接,在用户和CDN节点之间进行中间人攻击。攻击者可以窃听并篡改用户与CDN节点之间的通信,从而篡改静态资源。

中间人攻击

SSL/TLS劫持的核心是中间人攻击,具体包括窃取会话 cookie 或 ID、利用SSL/TLS 实现中的漏洞(如协议降级),以及操纵证书验证过程以获得未经授权的访问或拦截安全连接。
中间人攻击
上图是一个中间人在获取了客户端信任中间人的证书的前提下,伪装成客户端,获取客户端和服务器端所有通信内容的详细过程。

防护手段

  • 预共享秘钥加密:在网络上传输的内容,经过预共享秘钥加密之后,再在网络上传输
  • 身份认证:使用数字证书来验证服务器的身份。 这些证书由受信任的证书颁发机构(CA)颁发,包含验证服务器身份的信息(证书中一般包含了服务器的域名信息和所有人信息),可防止攻击者冒充服务器,诱骗客户端连接到恶意实体。另外,对于服务器而言,根证书CA需要预先分发到服务器上,并且要进行证书监控和告警。
  • 启用 HTTP 严格传输安全(HSTS),确保网络浏览器只通过 HTTPS 进行连接。

缓存投毒

攻击者可以向CDN节点注入恶意代码或数据,从而污染CDN缓存。当用户请求静态资源时,CDN节点会从缓存中返回被污染的静态资源。

原理

正常的逻辑

当一个用户访问了例如/static/test.png这一资源后,Cache服务将会缓存(如果是可缓存的话)这一资源,当之后再有用户访问相同的资源时,Cache服务将不会转发此请求至后端服务器,而是直接将其保存的对应的数据返回。
缓存投毒的目标就是欺骗前端的缓存服务器,让其误认为受害者与攻击者访问的是同一个资源,从而在不请示后端服务器的情况下,误把被攻击者污染后的资源文件提供给受害者。
缓存中毒的逻辑

CDN怎么知道用户要访问的是同一个页面呢?
当缓存接收到HTTP请求的时候,它会匹配vary头部指定的HTTP HEADER来进行判断。当指定的头部与缓存中的数据匹配时,则提供缓存的内容。如果不匹配,就直接与服务器交互。这些指定的头部被称作:缓存键 “cache key”。其他的头部就是非缓存键。
缓存投毒原理:
当一个页面的内容被缓存后,其他用户访问这个页面时会接收到同样的内容。如果在缓存的过程中,存入了有害的内容,比如存入了一个带有XSS payload的页面。其他用户访问时,就会受到XSS漏洞的攻击。这就是缓存投毒。

防护手段

对于CDN服务商而言,下面手段有助于防范缓存攻击:

  • 使用缓存验证机制: CDN 提供商可以使用缓存验证机制来验证缓存内容的完整性和真实性。
  • 限制缓存时间: CDN 提供商可以限制缓存内容的缓存时间,以减少恶意内容在缓存中停留的时间。
  • 使用内容安全网关(CSG): CDN 提供商可以使用 CSG 来扫描缓存内容中的恶意代码和恶意 URL。

修改静态文件造成的恶意攻击

跨站脚本攻击(XSS)

攻击者可以在静态资源中注入XSS脚本,当用户访问这些资源时,XSS脚本会被执行,从而窃取用户cookie、会话信息等敏感数据。

原理

跨站脚本的原理是操纵易受攻击的网站,以便将恶意脚本返回给用户。通常,这涉及 JavaScript,但也可以使用任何客户端语言。由于 JavaScript 在受害者的浏览器页面上运行,因此可以从会话中窃取与经过身份验证的用户有关的敏感详细信息,从而使不法分子可以将站点管理员作为目标并入侵网站。根据代码的注入方式,恶意内容甚至可能不在实际的网页本身上,而是作为一种瞬态元素,在利用漏洞时仅表现为网站的一部分。这可能会造成实际网站遭到入侵的错觉,而实际上并非如此。可通过不同的方法触发 XSS 攻击。例如,可以在页面加载或用户将光标悬停在特定页面元素(例如超链接)上时自动触发执行。在某些情况下,XSS 会更直接地执行,例如在电子邮件中。

攻击示例

在浏览电子商务网站时,不法分子发现了一个漏洞,该漏洞允许将 HTML 标签嵌入网站的评论部分。嵌入的标签成为页面的永久功能,导致浏览器在每次打开页面时将它们包含在其余的源代码中。
攻击者添加了一条评论,写道:物超所值的物品。在此处阅读我的完整评测 。之后,每次访问该页面时,评论中的 HTML 标记都会激活一个 JavaScript 文件,该文件托管在另一个站点上,可以窃取访问者的会话 Cookie。通过使用该会话 Cookie,攻击者可以入侵访问者的帐户,从而轻松访问他们的个人信息和财务数据。与此同时,访问者甚至可能没有向下滚动到评论部分,他们仍然不知道攻击已经发生。
从攻击者的角度来看,持久型 XSS 攻击更难执行,因为难以找到访问量大且存在相应漏洞(启用了永久脚本嵌入)的网站。

Waf防护手段

  • 过滤恶意输入: WAF可以扫描用户提交的数据,并识别可能包含XSS攻击的恶意代码。例如,WAF可以查找常见的XSS攻击payload,例如

SQL注入

SQL(结构化查询语言)注入(有时缩写为 SQLi)是一种安全漏洞,攻击者使用一段 SQL 代码来操纵数据库并访问可能有价值的信息。

原理

SQL 查询是发送到数据库的请求,用于执行某些类型的活动或功能,例如查询数据或执行 SQL 代码。其中一个示例是通过 Web 表单提交登录信息以允许用户访问某个网站。通常情况下,设计此类 Web 表单是为了仅接受特定类型的数据,例如名称和密码。在添加此类信息时,将会对照一个数据库进行检查,如果匹配则授权用户进入,否则,用户将被拒绝访问。
由于大多数 Web 表单都无法阻止在表单上输入附加信息,因此存在安全隐患。攻击者可以利用这一漏洞,通过表单上的输入框将自己的请求发送到数据库中。这样就可以实施各种非法活动,包括窃取敏感数据,或者操纵数据库中的信息以达到自己的目的。

防护手段

  • 过滤输入: WAF 可以过滤用户提交的输入,并删除可能包含 SQL 注入攻击的字符或字符串。例如,WAF 可以删除单引号、双引号、分号和其他特殊字符。
  • 验证输入: WAF 可以验证用户提交的输入,并确保其符合预期的格式。例如,WAF 可以确保用户提交的整数实际上是数字,而不是包含 SQL 语句的字符串。
  • 使用黑名单和白名单: WAF 可以使用黑名单和白名单来阻止或允许特定的 URL、IP 地址或用户代理字符串。例如,WAF 可以将已知用于 SQL 注入攻击的 IP 地址添加到黑名单中。

参考资料

DNS劫持:

SSL/TLS劫持:

缓存投毒:

跨站脚本攻击:

SQL注入

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!