AWS WAF 규칙 세트를 테스트하기 위해 이 랩은 두 가지 스캔 기능으로 구성되었습니다.
수동 스캐닝을 호출할 수 있는 레드 팀 호스트와 환경 외부에서 실행되는 자동 스캐너.
스캐너는 일반적인 웹 공격 벡터를 시뮬레이션하고 완화하도록 설계된 10가지 기본 테스트를 수행
redteam host의 시스템매니저로 접속하여 아래의 명령어를 실행한다.
runscanner
#urlib3 openssl error 발생시
pip3 install urllib3==1.26.6
스크립트 결과 확인
스크립트를 실행하면 알 수 있듯이 해결해야 할 몇 가지 취약점이 존재
요청을 차단하도록 웹 ACL을 구성해본다.
{
"Name": "matchXSS",
"Priority": 2,
"Statement": {
"OrStatement": {
"Statements": [
{
"XssMatchStatement": {
"FieldToMatch": {
"AllQueryArguments": {}
},
"TextTransformations": [
{
"Priority": 0,
"Type": "URL_DECODE"
}
]
}
},
{
"XssMatchStatement": {
"FieldToMatch": {
"Body": {
"OversizeHandling": "MATCH"
}
},
"TextTransformations": [
{
"Priority": 0,
"Type": "HTML_ENTITY_DECODE"
},
{
"Priority": 1,
"Type": "URL_DECODE"
}
]
}
},
{
"XssMatchStatement": {
"FieldToMatch": {
"SingleHeader": {
"Name": "cookie"
}
},
"TextTransformations": [
{
"Priority": 0,
"Type": "URL_DECODE"
}
]
}
}
]
}
},
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "matchXSS"
}
}
{
"Name": "matchXSS",
"Priority": 2,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "matchXSS"
},
"Statement": {
"AndStatement": {
"Statements": [{
"NotStatement": {
"Statement": {
"ByteMatchStatement": {
"SearchString": "/reportBuilder/Editor.aspx",
"FieldToMatch": {
"UriPath": {}
},
"TextTransformations": [{
"Priority": 0,
"Type": "NONE"
}],
"PositionalConstraint": "STARTS_WITH"
}
}
}
},
{
"OrStatement": {
"Statements": [{
"XssMatchStatement": {
"FieldToMatch": {
"QueryString": {}
},
"TextTransformations": [{
"Priority": 0,
"Type": "URL_DECODE"
}]
}
},
{
"XssMatchStatement": {
"FieldToMatch": {
"Body": {}
},
"TextTransformations": [{
"Priority": 0,
"Type": "HTML_ENTITY_DECODE"
},
{
"Priority": 1,
"Type": "URL_DECODE"
}
]
}
},
{
"XssMatchStatement": {
"FieldToMatch": {
"SingleHeader": {
"Name": "cookie"
}
},
"TextTransformations": [{
"Priority": 0,
"Type": "URL_DECODE"
}]
}
}
]
}
}
]
}
}
}
{
"Name": "matchCSRF",
"Priority": 3,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "matchCSRF"
},
"Statement": {
"AndStatement": {
"Statements": [{
"NotStatement": {
"Statement": {
"RegexPatternSetReferenceStatement": {
"ARN": "arn:aws:wafv2:YOUR_REGION:ACCOUNT_ID:regional/regexpatternset/csrf/YOUR_REGEX_PATTERN_ID",
"FieldToMatch": {
"SingleHeader": {
"Name": "x-csrf-token"
}
},
"TextTransformations": [{
"Priority": 0,
"Type": "URL_DECODE"
}]
}
}
}
},
{
"OrStatement": {
"Statements": [{
"ByteMatchStatement": {
"SearchString": "/form.php",
"FieldToMatch": {
"UriPath": {}
},
"TextTransformations": [{
"Priority": 0,
"Type": "NONE"
}],
"PositionalConstraint": "STARTS_WITH"
}
},
{
"ByteMatchStatement": {
"SearchString": "/form.php",
"FieldToMatch": {
"UriPath": {}
},
"TextTransformations": [{
"Priority": 0,
"Type": "NONE"
}],
"PositionalConstraint": "EXACTLY"
}
}
]
}
}
]
}
}
}
```jsx
runratest
```
- 400개의 요청을 보냄. 설정한 규칙이 트리거 되어 차단된것을 확인
- 403 forbidden 확인
AWS Systems Manager 패치 관리자 사용