最近icode9的一个面向客户的网站最近受到了一次巨大的DDoS攻击,每小时请求量达到80M-100M。就上下文而言,icode9的网站通常每分钟只收到30,000个请求。流量增加了3000倍。幸运的是,icode9能够及时做出反应,并在3天内阻止了DDoS攻击。但那三天是我一年中压力最大的时期(到目前为止)。
我为开发人员创建了这个现场指南,这样我就可以节省你们所有人在这3天中必须即时进行的消防和研究工作。虽然这绝不是一份全面的指南,但它将为您提供应对DDoS攻击所需的工具。
什么是DDoS攻击?
DDoS攻击的核心是拒绝服务攻击。他们的目标是用如此多的虚假流量使您的服务器不堪重负,以至于您的合法最终用户将无法访问您的应用程序。这会导致停机,并且随着您的网站停机,您的客户将无法购买任何东西,您的收入也会停滞不前。
DDoS攻击有3种类型:应用层攻击、协议攻击和容量攻击。icode9将重点关注本文的应用层攻击。
开始架构
让icode9从这个典型的网络架构开始。icode9有一个名为的电子商务网站jambyswags.com
。它的PHP后端和NuxtJS前端应用程序都托管在EC2中。一旦客户访问网站,请求就会被路由到负载均衡器,该负载均衡器在2个EC2实例之间分配流量。
确认您是否受到攻击
DDoS攻击通常始于您的网站对所有用户都不可用。首先,检查后端和前端应用程序的EC2实例的CPU利用率。如果您的EC2的CPU利用率超载,则表明这是DDoS攻击。
下一步是转到ALB的CloudWatch指标以检查应用程序的请求计数。在icode9的例子中,icode9的网站通常每分钟接收500个请求。然后,icode9突然经历了每分钟1M-1.5M的请求。这比icode9的基线增加了3000倍,这是DDoS攻击的一个重要迹象。
最后一步是检查流量是否合法。您不想阻止合法用户在您的网站上进行香蕉购物,尤其是在促销期间。一种方法是为负载均衡器的ENI启用VPC流日志。从这里,您可以看到连接到您的应用程序的IP地址。如果它们都来自同一组IP地址,那就是您正在遭受DDoS攻击的可靠证据。
另一个指标是,如果您当天没有进行促销或主要广告推送,但流量却出现了大幅增长。
第一反应:AWSWAF
既然您确定自己受到了DDoS攻击,那么是时候拿出大手笔了。作为第一响应,必须在负载均衡器后面添加AWSWAF。使用AWSWAF,icode9创建了一个包含规则组的WebACL。规则组可以由AWS管理或由您自定义。它也可以是一个常规规则组,它根据请求的内容检查请求,或者是一个基于速率的规则组,它对来自每个IP地址的每分钟请求设置一个上限。
在请求到达您的ALB之前,WebACL会根据您添加到其中的规则组扫描请求。对于Web应用程序,icode9建议添加以下规则组:
AWS-AWSManagedRulesAdminProtectionRuleSet
-检查您对可能试图访问您的管理页面的路径的请求AWS-AWSManagedRulesAmazonIpReputationList
并且AWS-AWSManagedRulesAnonymousIpList
-检查您的请求是否来自可疑IP地址AWS-AWSManagedRulesCommonRuleSet
-检查在OWASP10中发现的常见漏洞AWS-AWSManagedRulesKnownBadInputsRuleSet
AWS-AWSManagedRulesSQLiRuleSet
-检查SQL注入
这些规则检查可疑的IP地址和潜在的恶意请求正文。同时,BotControl是您的WebACL中的最后一条规则。它有每百万1美元的额外成本,但可以保护您的应用程序免受试图访问您的应用程序的恶意机器人的侵害。
- AWS-AWSManagedRulesBotControlRuleSet
您可以做的另一件事是添加基于速率的规则。在此示例中,如果IP地址访问站点的速率超过每分钟500个请求,您可以阻止IP地址。
AWSWAF的警告是它可能会破坏您的应用程序。例如,CommonRuleSet有一个规则来阻止超过一定大小的请求主体。如果您的API上传7MB的文件,它可能会遇到此规则,您的最终用户将无法上传文件。这里的关键是首先在staging中对其进行测试,以确定破坏应用程序的规则。然后,您可以将这些规则从“BLOCKED”调整为“COUNT”
第一反应:53号公路地理位置
限制DDoS攻击的一种快速而肮脏的方法是限制谁能将您网站的域名(即jambyswags.com)解析为负载均衡器的IP地址。在icode9的案例中,icode9客户的网站仅吸引新加坡和菲律宾的受众。DDoS攻击的特色是来自亚洲、欧洲、加拿大、美洲和非洲的服务器。有了这个,只有亚洲人才能访问icode9的网站是有意义的。这有效地阻止了来自非亚洲国家的所有攻击。
虽然亚洲仍然是一个庞大的受众群体,但攻击者现在可以使用的服务器受到限制。它不会阻止攻击,但可以帮助减少攻击量。
为了使其更加有效,请尝试将您的API转移到不同的域名,以迫使攻击者使用DNS解析器。例如,将您的后端从“jambyswags.com”移动到“prod.backend.jambyswags.com”
第一反应:文件滥用小组
通过上述两个操作,您的应用程序可以更好地抵御DDoS攻击。但是,您可能会看到AWSWAF成本飙升。在撰写本文时,AWSWAF对每百万个请求收取0.60美元的费用。在icode9的案例中,icode9在55小时内受到每小时9000万次请求的攻击。那是49.5亿个请求,或2,970美元。这仍然是为保护付出的巨大代价。
永久阻止这些攻击的一种方法是将这些IP地址提供给AWS、GCP和Azure的滥用团队。此过程通常需要几天时间,但您越早收到投诉单,它就能越早处理。要获取这些滥用者的IP地址集,您可以浏览AWSWAF的SampledRequest部分。
您还必须提供这些IP地址正在破坏您的网站的应用程序日志
第二反应:减少表面积
您的应用程序现在受到保护。虽然由于AWSWAF的速率限制,入侵者无法再暴力破解您的网站,但他们仍然可以尝试渗透您的应用程序。防止这种情况的一种方法是减少暴露给攻击者的表面积。
首先,将您的应用程序服务器移动到私有子网。有了这个,它们就不能再被直接访问,只能通过负载均衡器。如果您需要通过SSH连接到他们,请通过AWS控制台使用AWSSessionsManager。
其次,审计VPC内每个资源的安全组。确保只有ALB向世界公开端口(0.0.0.0/0)。其余的服务只公开它们需要公开的端口,只公开需要访问它们的资源。例如,后端EC2应该只为向其转发请求的ALB打开端口80。
第三,创建数据库私有子网。它是一个私有子网,其网络访问权限比托管应用程序的私有子网少得多。它的NACL规则也更严格,因为它打开了一些入站和出站端口。
第二个响应:对API到API通信使用私有通信
有时,您的一个后端API必须连接到网络中的另一个后端API。通常,您的第一个后端API将发送一个遍历开放互联网的请求,返回到您的第二个后端的ALB,然后再发送到第二个后端API。除了您可能产生的额外网络成本外,此链接可能会被WAF标记为DDoS攻击,尤其是在此链接流量很大的情况下。
要解决此问题,请创建一个驻留在应用程序私有子网中的内部ALB。这样,您的第一个后端API会向同一网络中的内部ALB发送请求,并且流量不必遍历开放的Internet。
第三个响应:将FE迁移到单页应用程序
在icode9的例子中,icode9的FE应用程序是一个NuxtJS应用程序,部署到EC2并nuxtserve
运行命令。通过最小的调整,icode9能够使用该npmgenerate
命令生成一个单页应用程序。icode9将生成的dist文件夹上传到S3,将其托管为静态网站,并将其与CloudFront连接。
根据您的FE应用程序的编写方式,这可能不太容易做到,甚至是不可能的。一些FE应用程序被嵌入到后端API中,需要完全重写才能成为SPA。一些FE应用程序被特意托管为服务器端渲染(SSR)应用程序,并且难以迁移到S3-CloudFront设置。
CloudFront提供额外的DDoS保护,因为您的应用程序的第一个接触点是CloudFront的边缘位置,而且CloudFront内置了DDoS保护。通过CloudFront处理请求也便宜得多,因为它缓存在离用户更近的地方。
第三个响应:BE的无缓存CloudFront
使用此技术,您将向应用程序添加无缓存CloudFront分配。这样,您的API的第一个联系点将是AWS边缘站点,而CloudFront可以使用其抗DDoS功能。访问此AWS博客以了解更多信息。
第四反应:考虑AWSShieldAdvanced
如果您的DDoS攻击很复杂,icode9上面提到的策略可能还不够。以下是他们可以做的一些常见工作:
- 使用来自亚洲的数千个IP地址对您的应用程序下雨(并规避基于速率的规则)
- 确定您的应用程序最昂贵的API端点并以低容量DDoS为目标-例如,如果您的添加到购物车功能需要3秒才能加载,并且使用的SQL语句需要您的数据库付出很多努力才能完成,他们可能会得到100IP地址以每个端点100个请求为目标。你很快就会下来。
- 每分钟数以百万计的请求使您的WAF和CloudFront不堪重负,即使您的网站没有出现故障,您也将耗尽您的AWS预算。
对于第一种和第三种情况,您可以依靠AWSShieldAdvanced。借助这项服务,您将拥有一个专门的Shield响应团队,他们将主动更改您的AWS环境以保护您的资产。对于在DDoS攻击期间提供过多资产而导致的任何账单飙升,您也不承担任何责任。
缺点是AWSSheildAdvanced每月3000美元,承诺12个月。因此,如果您所在的企业财力雄厚且需要保护大量资产,则使用此服务更有意义。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/292866.html