F5 WAF for NGINX – Parameters Validation
이 포스트에서는 F5 WAF for NGINX 를 활용하여 User-Defined Parameters 기능을 통해 파라미터를 세밀하게 검증하고, 유효하지 않은 입력을 탐지·차단하는 방법을 소개합니다.
웹 애플리케이션에서 사용자 입력 파라미터는 보안 취약점의 주요 원인 중 하나입니다. User-Defined Parameters는 각 파라미터의 속성(데이터 타입, 위치, 길이, 값 범위 등)을 사용자 정의하여 제어할 수 있는 기능으로, OWASP 입력 검증 공격을 방어합니다.
F5 WAF for NGINX의 이 기능을 통해 파라미터별로 데이터 타입, 최소/최대 값, 길이, 필수 여부 등을 지정할 수 있으며, 위반 시 VIOL_PARAMETER_NUMERIC_VALUE나 VIOL_PARAMETER_VALUE_LENGTH 같은 위반을 트리거합니다. 이를 통해 애플리케이션의 입력 유효성을 강화하고, 잠재적 공격을 사전에 차단할 수 있습니다.
목차
1. F5 WAF for NGINX – User-Defined Parameters란?
1-1. 파라미터 검증 실패 공격의 개요
2. F5 WAF for NGINX 구성
2-1. 길이 검증 모드 설정
2-2. 값 범위 검증 모드 설정
3. 결론
1. F5 WAF for NGINX – User-Defined Parameters 란?
User-Defined Parameters는 F5 WAF for NGINX의 정책에서 파라미터를 사용자 정의하여 속성을 지정하는 기능입니다. 각 파라미터의 데이터 타입, 위치(헤더, 쿼리 등), 최소/최대 값, 길이, 필수 여부 등을 세밀하게 제어할 수 있습니다. 이를 통해 애플리케이션에서 예상치 못한 입력을 방지하고, 보안 위반을 트리거합니다.
이 기능은 파라미터별로 유연한 설정을 허용하며, 예를 들어 문자열 길이 제한, 숫자 범위 검사, 빈 값 허용 여부 등을 정의할 수 있습니다. NGINX 문서에 따르면, 이는 전체 정책의 차단 모드와 연동되어 VIOL_PARAMETER_VALUE_LENGTH 같은 위반을 발생시키며, 애플리케이션의 입력 검증을 강화합니다.
1-1. 파라미터 검증 실패 공격의 개요
파라미터 검증 실패 공격은 일반적으로 다음과 같은 방식으로 이루어집니다:
- 길이 초과 입력: 과도한 문자열로 버퍼 오버플로나 DoS 유발.
- 잘못된 데이터 타입: 숫자 필드에 문자열 주입으로 SQL 인젝션 등.
- 범위 외 값: 최소/최대 값을 초과하여 권한 상승이나 오류 유발.
- 필수 파라미터 누락: 빈 값으로 보안 우회.
F5 WAF for NGINX는 이러한 패턴을 탐지하기 위해 VIOL_PARAMETER_NUMERIC_VALUE 같은 위반을 활용하며, User-Defined Parameters로 세밀한 방어를 제공합니다.
2. F5 WAF for NGINX 구성
아래에서는 두 가지 정책 구성 예시를 통해 User-Defined Parameters를 적용합니다. 첫 번째는 길이 검증 모드, 두 번째는 값 범위 검증 모드입니다. 공통으로 user_id 쿼리 파라미터를 integer 타입으로 정의합니다.
2-1. 길이 검증 모드 설정
이 정책은 user_id 파라미터의 최대 길이를 5로 제한합니다. 길이 초과 시 VIOL_PARAMETER_VALUE_LENGTH 위반을 발생시킵니다.
{
"policy": {
"name": "param_validation_policy",
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },
"applicationLanguage": "utf-8",
"enforcementMode": "blocking",
"bot-defense": {
"settings": {
"isEnabled": false
}
},
"blocking-settings": {
"violations": [
{ "name": "VIOL_PARAMETER_VALUE_LENGTH", "alarm": true, "block": true }
]
},
"parameters": [
{
"name": "user_id",
"type": "explicit",
"parameterLocation": "path",
"valueType": "user-input",
"dataType": "integer",
"checkMaxValueLength": true,
"maximumLength": 5,
"mandatory": false
}
]
}
}
2-2. 값 범위 검증 모드 설정
이 정책은 user_id 파라미터의 값을 3~5 범위로 제한합니다. 범위 초과 시 VIOL_PARAMETER_NUMERIC_VALUE 위반을 발생시킵니다.
{
"policy": {
"name": "param_validation_policy",
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },
"applicationLanguage": "utf-8",
"enforcementMode": "blocking",
"bot-defense": {
"settings": {
"isEnabled": false
}
},
"blocking-settings": {
"violations": [
{ "name": "VIOL_PARAMETER_NUMERIC_VALUE", "alarm": true, "block": true }
]
},
"parameters": [
{
"name": "user_id",
"type": "explicit",
"parameterLocation": "path",
"valueType": "user-input",
"dataType": "integer",
"checkMinValue": true,
"checkMaxValue": true,
"minimumValue": 3,
"maximumValue": 5,
"mandatory": false
}
]
}
}
위 정책들을 적용한 후 nginx -s reload 명령을 실행하여 설정을 반영합니다.
정책 핵심 설정 상세 설명
parameters | 사용자 정의 파라미터 배열. 각 파라미터 속성 지정. |
name: "user_id" | 파라미터 이름. |
parameterLocation: "path" | URL 경로. |
dataType: "integer" | 데이터 타입(정수). |
checkMaxValueLength: true | 최대 길이 검사 활성화(길이 모드). |
checkMinValue / checkMaxValue: true | 최소/최대 값 검사 활성화(범위 모드). |
mandatory: false | 필수 여부(아님). |
특징: 길이 모드는 최대 길이 초과를, 범위 모드는 값 범위 초과를 각각 검증. 필요 시 두 설정을 결합하여 사용하세요.
파라미터 검증 실패를 테스트하기 위해 curl 명령을 사용하여 유효하지 않은 쿼리를 보냅니다.
# 정상 요청 테스트
$ curl -k https://ho.devops.com/?user_id=3
Received user_id: 3
# 길이 검증 모드 테스트
$ curl -k "https://ho.devops.com/?user_id=123456" # 길이 6 초과
<html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: 16844358358984458447<br><br><a href='javascript:history.back();'>[Go Back]</a></body></html>
# 값 범위 검증 모드 테스트
$ curl -k "https://ho.devops.com/?user_id=10" # 값 5 초과
<html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: 16844358358984458447<br><br><a href='javascript:history.back();'>[Go Back]</a></body></html>
NGINX Instance Manager에서 탐지된 결과를 확인하여 파라미터 위반이 기록되었는지 확인합니다.
파라미터 길이 초과 요청:

파라미터 범위 초과 요청:

위와 같이 VIOL_PARAMETER_VALUE_LENGTH 또는 VIOL_PARAMETER_NUMERIC_VALUE 시그니처에 해당되어 요청이 차단된 것을 확인할 수 있습니다. 대시보드에서 위반된 파라미터 이름, 값, IP 등을 상세히 로깅하여 분석하세요.
3. 결론
F5 WAF for NGINX를 활용하면 User-Defined Parameters를 통해 파라미터 검증을 정교하게 수행할 수 있습니다. 길이와 값 범위 검증 모드를 조합하여 입력 기반 공격을 효과적으로 방어합니다.
위 설정 예시를 기반으로 실제 환경에 맞게 파라미터 이름, 위치, 범위를 조정하여 적용하세요. NGINX Instance Manager를 통해 위반 이벤트와 입력 패턴을 지속적으로 모니터링하면, 웹 애플리케이션의 입력 보안 수준을 한층 더 강화할 수 있습니다.
F5 WAF for NGINX의 User-Defined Parameters 기능에 대해 더 궁금하시거나 직접 사용해 보고 싶으시다면, NGINX STORE에 연락하여 자세한 정보를 확인해 보세요.
댓글을 달려면 로그인해야 합니다.