[방어] 분석 — CVE-2021-20016
CVE-2021-20016 is a critical unauthenticated SQL injection in SonicWall SMA SSL‑VPN that can steal credentials and VPN session tokens, requiring immediate external ACL blocking of the management interface, short‑term WAF input validation, and long‑term patching.
📋 요약
- 심각도 critical · CVSS 9.8 · EPSS 0.36952 · 악용난이도 easy · KEV
🔍 공격 기법
인증이 필요 없는 HTTP(S) 요청에 username·password 등 파라미터를 조작해 SQL 구문(' OR 1=1 --, UNION SELECT …)을 삽입합니다. 데이터베이스가 이를 실행해 users 테이블에서 사용자명, 비밀번호, session_id 등을 반환하고, 탈취된 session_id를 그대로 VPN 인증 토큰으로 사용해 내부망에 무단 접속할 수 있습니다.
악용 가능성: 이 취약점은 CVSS 벡터 AV:N/AC:L/PR:N/UI:N 로 표시되는데, 이는 공격자가 인터넷을 통해 직접 접근할 수 있으며 복잡한 사전 작업 없이도(낮은 난이도) 인증 없이 바로 이용 가능하고 사용자 개입도 전혀 필요하지 않음을 의미합니다. EPSS 값 0.36952는 현재 36 % 수준의 실측 악용 확률을 나타내며, KEV 목록에 등재된 점과 맞물려 실제 공격이 빈번히 발생하고 있음을 뒷받침합니다. 공격자는 SonicWall SSL‑VPN 포털(예: https://<gateway>/admin) 에 공개된 파라미터(보통 로그인 폼의 username/password 필드)를 조작해 SQL Injection 페이로드를 삽입함으로써 데이터베이스 쿼리를 강제 실행할 수 있습니다. 이 과정에서 별도의 프리‑레인지 스캐닝이나 내부 네트워크 접근이 요구되지 않으므로, 외부 공격자가 바로 시도할 수 있는 고위험 공격 표면을 제공합니다. 결과적으로 취약점은 낮은 기술적 장벽과 높은 실전 활용 가능성을 동시에 갖추고 있어, 방어자는 즉시 위험 평가와 대응을 우선시해야 합니다.
💥 영향 분석
- DB에서 사용자 계정·비밀번호가 유출되어 직접 로그인 가능
- 탈취된
session_id로 SSL‑VPN 터널을 생성하면, SMA 장비가 내부망의 Trust Anchor 역할을 하므로 공격자는 내부 시스템 전체에 무제한 접근이 가능합니다.
🔗 관련 취약점·체이닝
SQLi(CWE‑89) → 세션 토큰 탈취 → VPN 인증 우회 → 내부망 침투 로 이어지는 전형적인 체인이며, 동일 제품군에서 과거에 보고된 인증 우회 취약점과 결합될 경우 추가 권한 상승 없이도 목표 달성이 가능합니다.
🔎 탐지
로그 위치·필드
sma_http.log:client_ip,request_method,uri_path,uri_query,response_codesma_auth.log:username,auth_result,session_id
SIEM 규칙 예시
- SQLi 패턴 탐지
1index=sma sourcetype=web_access 2| where uri_path="/sslvpnsso/login" 3 and (match(uri_query, "(?i)(%27|')\s*or\s+1=1") 4 or match(uri_query, "(?i)union\s+select")) 5| stats count by client_ip, uri_query 6| where count > 5- 오탐 튜닝: 관리자가 대량 테스트를 수행할 경우
client_ip를 화이트리스트에 추가하고, 임계값을 10 으로 상향.
- 세션 토큰 탈취 시도 탐지
1index=sma sourcetype=web_access 2| regex uri_query="session_id=([A-Fa-f0-9]{32,64})" 3| stats dc(session_id) as distinct_tokens by client_ip 4| where distinct_tokens > 1- 오탐 튜닝: 내부 관리 API가 자동으로 여러 토큰을 발급하는 경우
client_ip를 내부 IP 대역(10.0.0.0/8 등)으로 제한.
- VPN 인증 연계 탐지
1index=sma sourcetype=vpn_auth 2| where auth_result="success" 3| fields session_id, client_ip, timestamp 4| join type=inner session_id [search index=sma sourcetype=web_access | regex uri_query="session_id=([A-Fa-f0-9]{32,64})"] 5| stats count by client_ip 6| where count > 1- 오탐 튜닝: 정상 사용자가 다중 디바이스에서 로그인할 경우
count임계값을 3 이상으로 조정.
오탐 시나리오와 대응
- 자동 보안 스캐너가 대량 SQLi 문자열 전송 → 위 규칙의
count/distinct_tokens임계값을 실환경 평균보다 높게 설정. - 내부 관리 툴이 이미 인증된 세션으로 동일 파라미터 사용 →
auth_result="success"조건 추가 후 조인 수행.
🛡️ 완화 방안
-
WAF 입력 검증 룰: URI 파라미터에
' OR,union select,--등 SQLi 특수문자가 포함될 경우 400 반환하도록 정책 추가.- 구현 난이도: ★★ (WAF 정책 파일 수정)
- 운영 영향: 비밀번호 등에 특수문자를 허용해야 하는 경우 예외 리스트에 해당 문자열을 명시적으로 추가.
- 검증 방법: 정상 계정으로 로그인 시도 후 응답 코드와 WAF 차단 로그 확인.
-
세션 토큰 TTL 축소: 기본 TTL(예: 12 시간)을 30분 이하로 감소시켜 탈취된 토큰의 활용 시간을 제한합니다.
- 구현 난이도: ★ (SMA UI 또는 CLI 설정)
- 운영 영향: 사용자 재인증 빈도가 증가해 인증 서버 부하가 약간 상승할 수 있음.
- 검증 방법: 새 세션 생성 후
sma_auth.log에 기록된 만료 시각을 확인.
⚖️ 위험도 / 우선순위
- 조치: immediate (지금 즉시(24h 내))
- 근거: CVSS=9.8 · KEV · EPSS=0.36952 · exploit=easy · in_scope=None