Web ACL (Web Access Control List) 是AWS WAF部署时的核心模块, 它会对收到的每个请求进行规则评估。Web ACL要绑定在其他AWS服务(CloudFront、ALB、API Gateway)上。
本Workshop使用最新版的AWS WAF,不会使用WAF Classic。
入门AWS WAF最快的方法是部署AWS托管规则 。
托管规则组 (Managed Rule Group)是由AWS或第三方在 AWS Marketplace创建和维护的一组规则。 这些规则提供了针对常见攻击的防护,或对于特定应用的防护。
每个托管规则组都可以防御一些攻击类型,例如SQL注入或命令行形式的攻击。
AWS提供了一系列托管规则组,例如Amazon IP Reputation list、 Known Bad Inputs、 Core rule set,当然还有其他的规则组:
现在假设你是Juice Shop 的唯一开发者。该网站是一个由SQL数据库支持的简单Web应用程序, 由于某些原因,一群黑客已经盯上了你的网站!
幸运的是,你最近参加了AWS WAF Workshop,于是决定部署自己的WAF以保护站点。
在WAF控制台中创建Web ACL。
命名为waf-workshop-juice-shop
,资源类型是CloudFront distributions
:
将Web ACL与CloudFront绑定:
选中刚才添加的CloudFront,并进入下一步:
现在进入添加规则组的步骤,这里我们使用AWS托管的规则组:
从AWS managed rule groups选中 Core Rule Set 和 SQL Database , Core Rule Set 涵盖Web应用常见的各种漏洞,SQL database 提供防止SQL注入的规则:
接下来一路点击Next,直到Create web ACL:
使用以下命令测试部署的的规则:
export JUICESHOP_URL=<Your Juice Shop URL>
# 测试XSS攻击,下面的请求将会被拦截
curl -X POST $JUICESHOP_URL -F "user='<script><alert>Hello></alert></script>'"
# 测试SQL注入,请求同样也会被拦截
curl -X POST $JUICESHOP_URL -F "user='AND 1=1;"
如果请求被阻止,将在返回结果中含有以下字段:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>ERROR: The request could not be satisfied</title>
</head>
<body>
<h1>403 ERROR</h1>
<!-- Omitted -->
</body>
</html>
如果收到以下返回结果,那么请求就没有被WAF阻拦:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>OWASP Juice Shop</title>
// Omitted for brevity
</head>
</html>
也可以在浏览器中构造请求进行测试,如果页面显示The request could not be satisfied,则请求被WAF拦截:
随着WAF部署完成, web应用可以免受常见攻击。
本节介绍了WAF的AWS托管规则,托管规则组可以快速保护应用程序免受各种常见攻击的侵害,并且可以从AWS和AWS Marketplace获取其他规则。