RPC 런타임, 2차: 새로운 취약점 발견
Executive Summary
Akamai 연구원 벤 바네아는 원격 프로시저 호출(RPC) 런타임 라이브러리에서 기본 점수 8.8의 CVE-2022-22019라는새로운 취약점을 발견했습니다.
새로운 취약점은 이전에 Microsoft에 보고되어 2022년 4월에 패치된 정수 오버플로를 이용합니다.
이 새로운 취약점은 Microsoft의 5월 패치 화요일에서 해결되었습니다.
Akamai는 Microsoft의 이전 방어 목록과 함께 신속하게 패치를 적용하고, 네트워크 세그멘테이션을 활용하여, 측면 이동에 취약점을 악용하는 것을 제한하라고 권장했습니다.
서론
2022년 4월 12일 Microsoft는 원격 프로시저 호출(RPC) 런타임 라이브러리(rpcrt4.dll)의 세 가지 취약점에 대한 패치를 릴리스했습니다. 이 취약점에는 다음과 같이 CVE가 지정되었습니다. CVE-2022-26809, CVE-2022-24492 및 CVE-2022-24528. 영향을 받는 운영 체제는 Windows 7, 8, 10 및 11과 Windows Server 2008, 2012, 2019 및 2022입니다.
인증되지 않은 원격 공격자는 이 취약점을 악용하여 RPC 서비스 권한으로 취약한 머신에서 코드를 실행할 수 있습니다. 이 취약점으로 네트워크에 침투하고 측면 이동을 실시할 수 있기 때문에 공격자와 랜섬웨어 운영자들이 이 취약점을 원하는 것입니다. Microsoft는 이러한 취약점이 악용될 가능성이 높다고 발표했습니다. Akamai는 취약점의 심각성(CVSS 9.8) 때문에 패치된 라이브러리를 심층 검토하여 결과를 이전 블로그 게시물에서공개했습니다.
세 가지 취약점은 모두 정수 오버플로이며 패치는 정수 오버플로의 발생 여부를 확인합니다. 이를 통해 Microsoft는 이들 취약점의 악용을 방지할 수 있었습니다. 그러나 검토 과정에서 이전에 발견된 것과 동일한 변수의 정수 오버플로를 활용하는 추가 취약점이 발견됐으며, 이는 패치에서 처리되지 않았습니다.
Microsoft와 책임 있는 공개 프로세스를 통해, 새로운 RPC 취약점의 개요를 설명할 수 있게 되었습니다. 이 문제는 4월 패치 화요일이 발표된 날에 발견되었으며, 현재 5월 패치에서 해결되었습니다. 서버 및 클라이언트 코드에 존재하는 이 취약점에는 단일 CVE:
발견된 취약점 이해하기
새로 발견된 RPC 취약점을 이해하기 위해 4월에 패치된 취약점을 다시 살펴보겠습니다. 이전 블로그 게시물의 결론처럼RPC 런타임 라이브러리 코드에 정수 오버플로 버그가 존재하며, 이것이 악용되면 힙 버퍼 오버플로가 일어나 데이터가 처리 용량이 너무 작은 버퍼에 복사됩니다. 이러한 상황이 발생하면 데이터는 버퍼를 벗어나 힙에 쓰이게 됩니다. 이 취약점을 적절히 악용하면 원격 코드를 실행할 수 있습니다.
이 문제를 해결하기 위해 ProcessReceivedPdu에 새 호출이 추가되었습니다.
이 호출은 함수를 트리거하여 정수 매개 변수가 오버플로되었는지 정확히 확인합니다.
OSF_SCALL::GetCoalescedBuffer(힙 오버플로가 발생하는 함수)에서 추가된 검사를 확인할 수도 있습니다.
GetCoalescedBuffer는 ProcessReceivedPdu에서 대기 중인 버퍼 조각을 병합합니다. 기존 정수 오버플로는 대기 중인 버퍼 조각의 총 길이가 현재 수신된 버퍼 길이에 추가될 때 발생하여 오버플로로 이어집니다. Microsoft는 오버플로를 검사하는 함수를 호출하여 원 취약점을 해결했습니다.
하지만, 일부 취약점은 패치로 해결하지 못했습니다. Akamai는 검토 중 새로 병합된 버퍼에 메모리를 할당하기 직전에 코드가 할당 크기에 24바이트를 추가하는 것을 발견했습니다(위에서 OSF_SCALL::TransGetBuffer 호출). 이 24바이트는 버퍼 헤더 역할을 하는 rpcconn_request_hdr_t라는 구조체의 크기입니다. 패치는 헤더 크기를 추가하기 전에 정수 오버플로를 검사하기 때문에 이 헤더를 고려하지 않습니다. 따라서 패치가 해결하려던 정수 오버플로가 발생할 수 있습니다.
새로운 취약점(클라이언트 측 함수에 하나와 서버 측 함수에 하나)은 해결되었습니다. 새로운 패치는 또 다른 호출을 추가하여 24바이트를 추가할 때 오버플로가 발생하지 않는지 확인합니다.
방어 방법
이 취약점을 해결하는 5월 보안 업데이트를 추가합니다.
기업 외부의 디바이스에서 TCP 포트 445로 향하는 트래픽을 차단합니다.
필요한 머신(도메인 컨트롤러, 인쇄 서버, 파일 서버, 기타)에서만 수신 TCP 포트 445를 허용하여 측면 이동을 제한합니다.
공개 일정
2022년 4월 13일: 보고서가 Microsoft로 전송
2022년 4월 13일: 상태가 신규에서 검토/재현으로 변경
2022년 4월 22일: 상태가 검토/재현에서 개발로 변경
2022년 5월 10일: 패치 릴리스
결론
패치는 가장 기본적인 보안 조치 중 하나이며, 취약점이 발견되고 패치가 릴리스되어 취약점을 처리합니다. 제로데이가 미디어와 커뮤니티에서 많은 관심을 받고 있지만, Akamai는 실무 기업으로서 가장 큰 취약점이 이와 유사한 상황에서 발생한다는 사실을 알고 있습니다. 이러한 사실은 이 프로세스를 지속적으로 반복해야 하는 이유는 잘 보여주고 있습니다.
Akamai는 커뮤니티로서 버그를 검색할 때 원본 코드에 초점을 맞추는 경우가 많지만, 특히 업데이트와 패치를 다룰 때 새로운 방식으로 버그를 검색할 수 있습니다. 즉 솔루션을 찾고 전반적인 보안을 강화하는 데 협력을 촉진할 수 있습니다.
이러한 상황 속에서 독립적인 보안 연구자의 역할이 중요합니다. Akamai는 다른 보안 연구자에게 패치를 계속 분석하여 취약점을 찾을 것을 권장합니다.
Akamai가 발견한 것에 대해 질문하거나 논의할 것이 있나요? Twitter의 @Akamai_Research로 의견을 보내주시기 바랍니다.