CUPS 형태의 치명적인 Linux RCE - 현재 알려진 사실과 대비 방법
핵심 요약
2024년 9월 26일, 많은 Unix 계열 호스트에 영향을 미칠 수 있는 것으로 추정되는 중요한 원격 코드 실행(RCE) 취약점 체인이 공개 되었습니다.
취약한 구성요소는 CUPS(Common Unix Printing System), 특히 cups-browsed입니다.
악용에 성공하려면. CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177의 4가지 취약점 체인이 필요합니다.
이 블로그 게시물에서는 취약점에 대한 세부 정보를 공유하고, 기술 공개 내용을 분석하고, 패치를 기다리는 동안 리스크를 효과적으로 대비하고 방어하기 위해 수행할 수 있는 작업에 대한 권장 사항을 제공합니다.
소개
2024년 9월 23일, 보안 연구원 심원 마르가리텔리(Simone Margaritelli) 는 소셜 미디어에 곧 공개될 취약점에 대한 세부 정보를 공유했습니다. 그는 게시물에서 3주 전에 개발자들에게 공개했던 중요한 취약점, 즉 모든 GNU/Linux 머신에 잠재적으로 영향을 미칠 수 있는 인증되지 않은 RCE 취약점에 대해 설명했습니다.
2024년 9월 26일, 전체 기술 공개 가 이루어졌습니다. 취약점은 총 4개가 있습니다.
CVE-2024-47176 : cups-browsed, 공격자가 제어하는 주소로 요청을 강제로 전송합니다
CVE-2024-47076 : libcupsfilters, 공격자 서버에서 반환된 데이터를 검증하거나 위생 처리하지 않고 나머지 CUPS 시스템으로 전달합니다
CVE-2024-47175 : libppd, 이 역시 입력을 위생 처리하지 않고 임시 파일에 기록합니다
CVE-2024-47177 : cups-filters, 임의의 명령 실행을 허용합니다
이 블로그 게시물의 목표는 기업이 대비함으로써 수정 프로세스를 최대한 원활하게 진행하도록 돕는 것입니다. 이를 위해 악용 체인에 대한 기술적 요약과 네트워크 관리자가 패치를 기다리는 동안 사용할 수 있는 몇 가지 방어 단계(세그멘테이션 권장 사항 형태)를 제공합니다.
대비하기 위해 무엇을 할 수 있나요?
공격자가 RCE 취약점을 악용하려면 취약한 소프트웨어와 (당연히) 원격 접속이라는 두 가지 '조각'이 필요합니다. 취약한 구성요소가 CUPS라는 것을 알고 있으므로 패치가 제공되면 간단히 패치를 적용하거나 해당 구성요소에 대해 특별히 몇 가지 방어 단계를 적용할 수 있지만, 가장 좋은 방법은 이 기회를 사용해 원격 접속을 보다 광범위하게 해결하는 것이라고 생각합니다.
하지만 더 시급한 문제부터 살펴보겠습니다.
위험한 노출과 악용 가능성
이번 논의 대상이자 취약한 구성요소는 컴퓨터가 프린트 서버 역할을 할 수 있도록 하는 서비스인 CUPS로, 매우 널리 사용되며 다양한 Unix 계열 머신에서 찾을 수 있습니다.
이 서비스는 매우 일반적이며 본질적으로 다른 머신(그리고 잠재적으로 인터넷)에 노출되는 경향이 있기 때문에 악용 가치가 높은 표적이 될 수 있습니다. 인쇄 서비스의 이전 취약점인 CVE-2021-34527(PrintNightmare) 또는 CVE-2010-2729는 이 공격 기법의 잠재적 영향력을 입증했습니다.
'공식적으로' 공개되기 전에도 Akamai는 CUPS가 취약한 구성요소라는 이론을 세웠습니다. 마르가리텔리는 GitHub 계정을 들여다보던 중 흥미로운 사실을 발견했는데, 바로 첫 게시물을 올리기 며칠 전인 2024년 9월 17일에 Apple CUPS 리포지토리의 포크가 생성되었다는 것입니다(그림 1).
GitHub의 cups-browsed 문제에 대해 주요 취약점의 후유증에 대한 마르가리텔리(@evilsocket)의 글을 인용한 이슈 도 있습니다 . (엄선한 해설도 있으니 팝콘을 준비해 오세요. )
악용 분석
이 공격은 특별히 복잡하지는 않지만, 성공적으로 악용하려면 여러 단계가 필요합니다. 그림 2는 프로세스를 요약한 것이지만, 자세한 설명은 전체 공개 블로그 를 통해 확인하시기 바랍니다.
1단계: 먼저, cups-browsed 데몬이 포트 631을 통해 들어오는 UDP 연결을 수신 대기합니다. 이 데몬의 목적은 발견된 프린터를 시스템에 추가하는 것입니다. 이 데몬과 통신하는 공격자는 피해 머신이 악성 주소를 정상적인 프린터로 등록하도록 강요할 수 있습니다(CVE-2024-47176).
2단계: 다음 단계는 악성 '프린터'를 등록하는 동안 발생합니다. 등록의 일부로 libcupsfilters 는 공격자에게 아웃바운드 요청을 보내 IPP(Internet Printing Protocol)를 통해 프린터 속성을 요청합니다. 이러한 속성의 일부로 프린터는 특정 PPD( PostScript Printer Description ) 파일을 정의할 수 있으며, 이 파일을 사용하면 프린터의 기능을 정상적으로 정의할 수 있습니다. 이제 .ppd 파일에 위생 처리가 안 된 상태로 제약 없이 기록할 수 있습니다. 이것이 바로 CVE-2024-47076 및 CVE-2024-47175입니다.
이제 악성 .ppd 파일이 생겼습니다. 하지만 이 파일을 통해 어떻게 명령을 실행할까요?
3단계: 새 인쇄 작업이 생성될 때마다 다양한 필터(실행 파일)를 실행하는 cupsFilter2 지시어를 PPD에 입력합니다. 필터 지시어를 사용해 임의의 명령어 인젝션에 취약한 foomatic-rip 필터를 실행합니다. 이것이 바로 CVE-2024-47177입니다.
자세히 알아보기
Shodan을 사용해 전 세계 약 7만 5000대의 머신이 CUPS를 인터넷에 노출하고 있으며, 대부분의 경우 기본 631 포트를 사용하고 있음을 확인할 수 있었습니다(그림 3).
다음 필터를 사용해 Shodan에서 노출된 CUPS 서버를 쿼리할 수 있습니다.
product:"CUPS (IPP)"
추가 인사이트
트래픽 데이터에 대한 Akamai의 고유한 인사이트를 통해 Ubuntu, macOS, CentOS, Debian, Fedora, OpenShift, Oracle Linux Server, Red Hat, Rocky Linux, SUSE, openSUSE, AlmaLinux, Amazon Linux 등 다양한 플랫폼에서 CUPS 서비스가 실행되고 있는 것을 확인했습니다.
Akamai 생태계의 Linux 머신 중 10.1%가 포트 631(CUPS 포트)이 열려 있습니다. 하지만 이 포트를 통해 정기적으로 외부 트래픽을 수신하는 머신은 3%에 불과합니다.
이 수치는 서비스가 일반적으로 외부에 노출되지 않는다는 것을 의미할 수 있지만, 기업은 자체 노출을 평가하고 그에 따라 보안 정책을 검토해야 합니다.
인터넷 노출 분석
공격자가 기업을 유출하는 가장 일반적인 방법 중 하나는 인터넷에 노출된 서비스를 이용하는 것입니다. CUPS는 이러한 서비스의 한 예시에 불과하지만, 문제는 여기서 끝나지 않습니다. Akamai는 트래픽 데이터에 대한 인사이트를 바탕으로 수천 개의 기업에서 다양한 서비스의 노출 현황을 평가했습니다.
Akamai의 데이터에 따르면, Linux 시스템의 약 5.4%가 인터넷에 노출되어 있으며 외부 소스에서 유입되는 트래픽을 수신하고 있습니다(그림 4).
이 트래픽에 영향을 미치는 네트워크 정책을 조사한 결과, 이러한 시스템 중 19.3%는 기본적으로 수신 인터넷 트래픽을 허용 하는 것으로 나타났는데, 이는 수신 트래픽의 흐름을 제한하거나 제어하기 위한 특정 네트워크 정책이 마련되어 있지 않음을 의미합니다.
노출된 서비스는 쉽게 공격 기법이 될 수 있으므로 기업은 접속 제어를 검토하고 강화해야 합니다.
권장 사항
이 취약점은 아직 공개되지 않았고 패치 일정도 정해져 있지 않으므로 이 취약점 공개에 대비하는 가장 좋은 방법은 네트워크의 모든 '제약 조건' 지점(모든 Linux 머신 목록, 인터넷 노출, CUPS 사용 등)과 이에 대한 세그멘테이션 정책을 매핑하는 것입니다.
모든 것이 매핑되면 세그멘테이션 정책을 적용해 잠재적인 공격의 폭발 반경을 제한하는 것이 좋습니다. 이는 현재 상황과 관계없이 좋은 관행입니다. Linux 측면 이동 은 SSH나 RCE에만 국한되지 않기 때문입니다.
기업에서 CUPS 사용 파악하기
머신에서 실행 중인 CUPS를 식별하려면 서비스 및 프로세스 이름을 검색하면 됩니다. 다양한 Unix 시스템과 배포판에 걸쳐 관찰한 결과, 다음과 같은 프로세스가 CUPS의 사용을 나타낼 수 있습니다.
cups-browsed (영향을 받는 프로세스).
cupsd
cancel.cups
lpq.cups
cupsfilter
lpc.cups
lp.cups
cupsaccept
cups-lpd
lpstat.cups
lpr.cups
cupsctl
osquery를 배포하는 기업은 다음 쿼리를 사용해 시스템에서 잠재적인 CUPS 사용을 식별할 수 있습니다(Akamai Guardicore Segmentation 고객은 Insight 기능을 사용해 이러한 쿼리를 실행할 수 있습니다).
포트 631에서 수신 대기 중인 머신 탐지:
SELECT pid, port, protocol, family, address, path
FROM listening_ports
WHERE port = 631
CUPS와 관련이 있을 수 있는 실행 중인 프로세스 탐지:
SELECT name, parent, cwd, cmdline, pid, start_time, path
FROM processes
WHERE path LIKE '%cups%'
인터넷 노출 확인
Shodan과 같은 노출 스캐닝 서비스를 사용해 CUPS를 포함해 인터넷에 노출된 서비스를 확인할 수 있습니다.
Akamai Guardicore Segmentation 고객은 Reveal 탭의 Internet Connection 필터를 사용해 인터넷에서 트래픽을 수신하는 모든 서비스와 머신을 시각화할 수 있습니다(그림 5).
세그멘테이션을 사용해 잠재적인 폭발 반경 제한하기
다음과 같은 시나리오를 고려하세요. '예상하거나 준비하지 못한 취약점이 공개되고, 누군가 실제 작동하는 악용을 만들고, 악의적인 공격자가 이를 사용해 네트워크를 유출합니다.'
그러면 어떻게 될까요? 도메인 컨트롤러로 이동해 전체 네트워크를 감염시키고 봇넷/크립토마이너/랜섬웨어/트로잔을 배포한 후 탐지되지 않고 빠져나갈 수 있을까요? 아니면 더 열심히 일하고, 복잡한 정찰 스캔을 수행하고, 여러 측면 이동 홉을 사용하고, 더 일반적으로 선제적으로 대응해 유출을 탐지하고 대응할 수 있는 충분한 기회를 제공해야 할까요?
보안 유출은 계속 발생하기 때문에 세그멘테이션이 중요합니다. 오늘 RCE가 아니라면 내일 또 다른 제로데이 가 발생할 수 있습니다. 평평한 네트워크는 쉬운 표적이지만, 공격자의 삶을 더 어렵게 만들면 공격자가 포기하고 더 쉬운 곳으로 이동하거나 충분한 시간을 투자하고 실수하고 탐지될 만큼 조치를 취하도록 만들 수 있습니다.
2단계로 보안 체계 강화
보안 체계를 크게 향상시킬 수 있는 비교적 쉬운 두 가지 단계, 즉 DMZ를 구축하고 애플리케이션 서버를 세그멘테이션하는 방법이 있습니다.
DMZ를 구축하세요. 인터넷에 개방된 서버는 본질적으로 더 높은 리스크에 노출되므로 나머지 네트워크에 대해 완전한 접속을 허용해서는 안 됩니다. 이러한 서버에 경계 DMZ를 구축해 서버가 네트워크의 더 민감한 부분에 접속할 수 없도록 하면 공격자의 공격을 훨씬 더 어렵게 만들 수 있습니다.
애플리케이션 서버를 세그멘테이션하세요. 일반적으로 유사한 애플리케이션 서버를 함께 세그먼테이션할 수 있으며, 애플리케이션 로직에 따라 인바운드 및 아웃바운드 트래픽을 쉽게 제한할 수 있습니다.
CUPS 서버를 예로 들어 보겠습니다. 포트(UDP 631), 프로세스(cupsd)를 알고 있으며 기술적으로 실제 프린터로만 트래픽을 생성하면 된다는 것을 알고 있습니다. 이를 통해 해당 CUPS 서버에 대한 애플리케이션 세그먼트를 생성해 특정 트래픽만 허용하고 대부분의 트래픽은 차단할 수 있습니다.
이렇게 하면 CUPS를 악용해 서버에 침입하는 데 성공한 공격자는 프린터에만 접속할 수 있으며, 그리 무섭지 않은 인쇄 장난만 할 수 있습니다.
자세히 보기
세그멘테이션을 통해 기업이 보안 체계를 강화하기 위해 적용할 수 있는 다른 빠른 솔루션도 있습니다. 블로그 게시물에서 실용적인 세그멘테이션을 확인해 보세요.