서문
BYOVD(Bring Your Own Vulnerable Driver)는 위협 행위자가 멀웨어와 함께 알려진 취약한 서명된 드라이버를 가져와 커널에 로드한 다음 이를 악용하여 커널 내에서 다른 방법으로는 할 수 없는 작업을 수행하는 공격 기법으로 점점 더 널리 사용되고 있습니다. 커널 액세스 권한을 얻은 후에는 보안 소프트웨어를 변조 또는 비활성화하거나, 다른 방법으로는 액세스할 수 없는 자격 증명을 덤프하거나, 운영 체제 동작을 수정하여 자신의 존재를 숨길 수 있습니다. 조 데시몬과 저는 Black Hat USA 2018에서 다른 커널 모드 위협과 함께 이 문제를 심층적으로 다루었습니다. 지능형 위협 공격자들이 10년 넘게 사용해 온 BYOVD는 랜섬웨어와 상품 멀웨어에서 점점 더 보편화되고 있습니다.
Windows Vista x64에서 2007 에 처음 배포된 DSE(드라이버 서명 적용 )는 Microsoft가 관리자의 권한을 제한하려고 시도한 첫 번째 사례입니다. DSE가 도입되면서 관리자는 더 이상 어떤 코드도 커널에 즉시 로드할 수 없게 되었습니다. 이전에는 자체 부트로더/부트킷을 설치할 수 있었던 관리자 멀웨어로부터 부트 체인을 보호하기 위해 부트 가드, 보안 부팅 및 신뢰할 수 있는 부팅이 출시되면서 관리자 제한은 시간이 지남에 따라 증가했습니다.
관리자의 권한을 더욱 제한하기 위해 Microsoft는 최근 Windows 11 22H2부터 취약한 드라이버 차단 목록을 기본값으로 배포했습니다. 이는 올바른 방향으로 나아가는 것으로, 기본적으로 Windows 11 보안을 강화합니다. 안타깝게도 차단 목록의 배포 모델은 일반적으로 1년에 한두 번만 자동으로 업데이트가 배포되기 때문에 새로운 위협에 적응하는 속도가 느릴 수 있습니다. 사용자가 수동으로 차단 목록을 업데이트할 수 있지만, 이러한 개입은 '기본적으로 안전한' 영역에서 벗어나게 됩니다.
보안 경계
수정할 취약점을 결정할 때 Microsoft 보안 대응 센터(MSRC)는 보안 경계라는 개념을 사용하며, 이를 다음과 같이 정의합니다:
보안 경계는 서로 다른 신뢰 수준을 가진 보안 도메인의 코드와 데이터를 논리적으로 분리합니다. 예를 들어 커널 모드와 사용자 모드를 분리하는 것은 고전적이고 간단한 보안 경계입니다.
이 정의에 따르면 사용자 모드에서 실행되는 멀웨어는 커널 메모리를 수정할 수 없어야 한다고 생각할 수 있습니다. 결국 경계는 "간단"합니다. 논리적으로 이 경계를 위반할 경우 패치 또는 차단 목록 업데이트와 같은 시정 조치를 취해야 합니다.
안타깝게도 여기서부터 상황은 더 어두워집니다. 이 문서에서는 관리자 대 커널은 보안 경계가 아니라고 다음과 같은 설명과 함께 명시하고 있습니다:
관리 프로세스 및 사용자는 Windows용 TCB(신뢰할 수 있는 컴퓨팅 기반)의 일부로 간주되므로 커널 경계에서 강력하게 분리되어 있지 않습니다.
이 시점에서 우리는 두 가지 상반된 관점을 가지고 있습니다. 한편으로 MSRC는 관리자-커널 간 경계는 방어할 수 없는 경계이며 고칠 가치가 없다고 말합니다. 반면에 Microsoft는 드라이버 서명 적용, 보안 부팅 및 취약한 드라이버 차단 목록과 같은 메커니즘을 통해 이 경계를 방어하려고 시도하고 있습니다. 방어가 불완전하기 때문에 MSRC는 이를 "심층 방어 보안 기능"이라고 부릅니다.
MSRC도 마찬가지로관리자-PPL 간을 보안 경계로 간주하지 않고 심층 방어 보안 기능으로 분류합니다. 이에 대한 자세한 내용은 다음 섹션에서 설명합니다.
이 문서의 나머지 부분에서는 MSRC와 Microsoft를 별도로 언급합니다. MSRC가 Microsoft의 일부이기는 하지만 Microsoft는 MSRC보다 훨씬 더 큰 조직이므로 두 조직을 동일시해서는 안 됩니다.
취약점 악용
2022년 9월, 저는 MSRC에 VULN-074311을 제출하여 Windows의 제로데이 취약점 두 가지(관리자-PPL 및 PPL-커널 취약점)를 알렸습니다. 두 익스플로잇의 소스 코드를 제공했습니다. 응답은 아래와 같이 취약점을 이해하고 있으며 추가 조치를 취하지 않겠다는 의사를 간결하게 표시했습니다:
이 연구는 커널 코드 실행을 얻기 위해 PPL 우회를 활용하는 다단계 공격에 대해 설명합니다. 제안된 모든 공격은 수행하기 위해 관리자 권한이 필요하므로 보고된 문제는 즉각적인 서비스 제공 기준에 부합하지 않습니다. 추가적인 조치는 없을 것으로 예상하며 사건을 종결 처리할 예정입니다.
이 용어에서 "서비스"는 "패치"를 의미합니다. 이러한 대응은 앞서 언급한 정책과 관리자-커널 경계에 대한 과거 처리 방식과 일치합니다. 11 몇 달이 지났지만 여전히 두 가지 취약점을 패치하지 않고 있습니다. Microsoft는 커널 메모리를 수정할 수 있는 드라이버를 기꺼이 차단하지만, MSRC는 동일한 작업을 수행할 수 있는 취약점을 서비스하지 않으려 한다는 점이 흥미롭습니다.
제가 블랙햇 아시아 강연을 2023 발표했을 때, PPLdump는 죽었습니다. MSRC 보고서가 나온 지 5개월이 지난 후 트위터에서 PPLdump 만세, Windows Defender 팀은 신속하게 자세한 내용을 알아보기 위해 연락을 취했습니다. MSRC는 수억 대의 Windows 컴퓨터를 보호하기 위해 PPL에 의존하는 Defender 팀에게 PPL 우회에 대해 알리지 않고 사건을 종결한 것으로 보입니다. 이러한 유형의 잘못된 커뮤니케이션이 계속되도록 방치해서는 안 됩니다.
턴키 툴링
EDRSandBlast는 취약한 드라이버를 무기화하여 AV & EDR 소프트웨어를 우회하는 도구입니다. 커널 메모리를 수정하여 AV & EDR이 설치한 후크를 제거하여 시스템의 악의적인 활동을 일시적 또는 영구적으로 차단할 수 있습니다.
제가 블랙햇 아시아 강연에서 설명했듯이, MSRC는 사실상 관리자-PPL 및 관리자-커널 취약점에 대한 서비스를 제공할 의사가 없으며, 마이크로소프트의 행동을 유도하기 위해서는 깃허브에 턴키 툴이 존재해야 한다는 것을 보여주었습니다. 이를 통해 관리자 대 PL 익스플로잇 PPLFault와 관리자 대 커널 익스플로잇 체인 GodFault를 사용하기 쉬운 도구로 GitHub에 공개하게 되었습니다. 간결성을 위해 아래에서는 각각 'PPL 취약점'과 '커널 취약점'이라고 부르겠습니다.
이와 같은 '턴키 툴링' 정신에 따라, 알려진 취약 드라이버를 차단하는 동시에 관리자-커널 익스플로잇 체인 패치를 거부하는 모순을 강조하기 위해 취약한 드라이버 없이 동일한 결과를 보여주기 위해 PPLFault를 통합한 EDRSandBlast 버전을 출시합니다. 여기에서 Windows Defender 드라이버를 비활성화하는 것을 볼 수 있습니다. 이 정보를 공개하는 저의 목표는 MSRC가 PPL과 커널 취약점을 더 긴급하게 처리하도록 동기를 부여하는 것입니다.
완화
PPL 익스플로잇을 차단하는 NoFault라는 작은 커널 드라이버를 PPLFault 및 GodFault와 함께 출시했습니다. Windows가 수정될 때까지 맬웨어 방지 공급업체는 이 코드를 사용하여 PPL 취약성을 완화할 수 있습니다. 아직 업데이트하지 않으셨다면 8.9.0+ 버전으로 업데이트해 주세요. 한 가지 포괄적인 해결 방법은 메모리 관리자가 전체 보호 프로세스에 이미 적용된 기능인 PPL에 로드되는 모든 실행 이미지에 대해 페이지 해시를 적용하는 것입니다.
갓폴트는 커널 취약점을 악용하는 최초의 도구가 아닙니다. ANGRYORCHARD는 현재 패치된 KnownDLLs PPL 취약점과 함께 이 취약점을 처음 사용했습니다. PPL 취약점은 이후 수정되었지만 커널 취약점은 수정되지 않았습니다. 코드 몇 줄만 있으면 GodFault의 커널 취약점을 쉽게 재사용할 수 있었습니다. 이를 패치하지 않으면 향후 모든 PPL 익스플로잇이 즉시 커널에 연쇄적으로 적용될 수 있습니다. 노폴트는 필수 PPL 코드 실행을 방지하여 커널 익스플로잇 체인을 차단하지만 커널 취약점 자체는 수정하지 않습니다.
토론
이러한 익스플로잇으로 할 수 있는 일의 한 예로 EDRSandBlast를 드라이버 없이 만드는 것이 있습니다. 관리자-커널 익스플로잇을 사용하면 사용자 모드에서는 일반적으로 불가능한 멀웨어 기능의 전체 메뉴를 사용할 수 있습니다:
- 프로세스, 스레드, 개체 관리자, 파일 시스템 및 레지스트리 콜백을 포함한 커널 모드 원격 측정을 비활성화합니다. EDRSandBlast는 이러한 기능 중 일부를 수행합니다.
- 커널 ETW 로거 비활성화하기
- PPL 안티멀웨어 프로세스에멀웨어 종료 및/또는 주입
- 자격 증명을 덤프하거나 Credential Guard를 변조하기 위해 LSA RunAsPPL을 우회합니다.
- PPL로 실행되는차폐된 VM 워커 프로세스의 메모리 읽기/쓰기
- 안티 멀웨어보다 더 높은 권한으로 멀웨어를 실행하여 사용자 모드에서 검사하거나 종료할 수 없도록 합니다.
- 프로세스, 파일 및 레지스트리 키 숨기기와 같은 루트킷 동작을 구현합니다.
- 물리적 메모리에 대한 전체 읽기-쓰기 액세스 권한 확보
이러한 커널 기반 기능은 종종 BYOVD에 의해 활성화되며,범죄자들이 보안 제품을 무력화하고 성능을 저하시켜 사람과 기업에 피해를 입히는 데 정기적으로 사용됩니다. PPL 및 커널 취약점을 통해 이와 동일한 기능을 사용할 수 있으므로 위협 행위자가 이를 악용하기 전, 즉 사후가 아닌 사전에 MSRC가 선제적으로 서비스를 제공해야 합니다.
관리자로부터 커널을 방어하는 것은 어렵고 새로운 우회 방법이 발견됨에 따라 지속적인 노력이 필요하기 때문에 문제의 난이도를 과소평가하고 싶지 않습니다. 이 문제는 해결되는 것이 아니라 어렵고 지속적인 군비 경쟁이 될 것입니다. 다행히도 Microsoft는 최근 "더 이상 어려운 일을 피하지 않는다"는 새로운 철학을 채택했습니다(타임스탬프가 찍힌 링크). 이러한 유형의 취약점을 해결하는 것은 오늘날 Windows 보안에 영향을 미치는 '어려운 일'이지만, Microsoft는 관리자가 필요 없는 미래라는 비전을 향해 나아가는 동시에 무언가를 할 수 있습니다. 한 번에 여러 문제를 해결할 수 있는 스마트한 인재들로 가득 찬 자금력이 풍부한 대규모 회사입니다.
결론
Microsoft는 관리자가 커널을 변조하는 것을 막기 위해 취약 드라이버 차단 목록을 만들었지만, 몇 달 전에 11 에 보고된 관리자-커널 간 익스플로잇 체인에 대해서는 아무런 조치를 취하지 않았습니다. 갓폴트를 통해 EDRSandBlast에서 취약한 드라이버 요구 사항을 제거함으로써 관리자 대 커널 익스플로잇도 취약한 드라이버만큼 위험할 수 있으며 MSRC가 이를 심각하게 받아들여야 한다는 것을 증명하고 싶습니다. Windows 11의 기본 보안 목표와 취약 드라이버 차단 목록이 이제 기본적으로 활성화되어 있다는 사실을 고려할 때 MSRC는 PPL 및 커널 익스플로잇에 대한 무관심 정책을 재고할 필요가 있습니다.