Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-45451 — Acronis 임의 파일 읽기 PoC - CVE-2022-45451 | Kitploit
도구/GitHubGitHub/alfarom256/cve-2022-45451
Privilege EscalationVulnerability AnalysisCode AnalysisExploitationBinary Analysis
GitHubalfarom256/cve-2022-45451

CVE-2022-45451

Acronis 임의 파일 읽기 PoC - CVE-2022-45451

저장소 보기
18623년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

소개

시스템 사양:
  • Windows 10 1809 x64 EN
대상:
  • Acronis Home Cyber Protect
  • Acronis Cyber Protect

취약점 설명

Acronis "ngscan" 안티멀웨어 스캔 드라이버는 필터 통신 포트에 적용된 잘못된/부적절한 액세스 제어로 인해 문제가 발생한다. 미니필터 드라이버는 악용될 수 있는 다음 기능을 지원한다:

  • 임의 파일 읽기
  • 중요한 레지스트리 키 수정(악용되지 않음, 트리거 조건 불명)으로 인해 로컬 코드 실행이 발생할 수 있음

임의 파일 읽기

ngscan.sys 드라이버 분석은 Ida Pro로 드라이버를 디컴파일하는 것으로 시작되었다. 연구자는 디바이스 객체가 생성되었지만 DeviceIoControl을 사용하여 드라이버와 상호 작용할 수 있는 심링크는 생성되지 않았다는 점을 기록했다. 따라서 필터 통신 포트 기능을 관찰하는 방식으로 분석을 계속했다. 초기화 중에 드라이버는 다른 프로세스와의 상호 작용을 지원하기 위해 5개의 통신 포트를 생성한다.

그림 1: 최대 5개의 필터 통신 포트(FCP) 생성을 지원하는 루틴

이 함수는 5개의 FCP 각각을 기본 dacl로 초기화하고 마지막 FCP는 NULL dacl로 생성하면서 호출되는 것이 관찰되었다.

그림 2: 기본/NULL DACL로 FCP 생성

필터 드라이버가 지정한 CreateNotifyCallback 및 MessageNotifyCallback 함수를 관찰하면서 분석을 계속했다. 이 콜백 함수는 프로세스가 연결을 열고 통신 포트에 메시지를 보낼 때마다 호출된다.

MessageNotifyCallback을 처음 검사한 결과, 들어오는 메시지의 버퍼는 다음 요구 사항을 충족해야 한다는 것이 확인되었다:

  • 첫 번째 DWORD는 예상 헤더 값 "TrMs"와 일치해야 함(37행)
  • 두 번째 DWORD는 메시지 내용의 길이를 포함해야 함(참고: 이는 InputBufferLength와 별개로 다름)
  • 메시지 내용 길이는 전체 입력 버퍼 크기에서 메시지 헤더 크기를 뺀 값보다 작거나 같아야 함
    • 메시지 헤더는 헤더와 크기, 그리고 또 다른 알 수 없는 값으로 구성되며 총 0xC(12) 바이트임

검사가 통과되면 InputBuffer에서 함수 번호가 파싱되고 다음 switch 케이스에서 제공된 입력으로 실행할 함수를 선택하는 데 사용된다.

그림 3: MessageNotifyCallback에서 지원하는 함수의 일부

지원되는 각 함수를 검사한 결과, 임의 파일 읽기로 이어질 수 있는 잠재적 남용 가능성이 있는 두 가지 함수가 확인되었다.

그림 4: 스캔 컨텍스트 생성 및 스캔 컨텍스트의 파일 핸들 반환을 지원하는 함수(206행, 233행)

"스캔 컨텍스트"의 정확한 기능은 완전히 알려져 있지 않지만, 분석 결과 사용자 InputBuffer에 지정된 임의 파일에 대해 파일 스캔 컨텍스트를 생성할 수 있는 것으로 나타났다. 스캔 컨텍스트가 생성되면 스캔 컨텍스트 ID가 출력 버퍼를 통해 사용자에게 반환된다.

그림 5: 스캔 컨텍스트 데이터를 사용자에게 반환하는 Create Scan Context 루틴

그림 6: 보호된 SAM 레지스트리 파일(\??\C:\Windows\System32\config\SAM)에 대한 액세스를 요청하며 미니필터 드라이버로 전송된 데이터

그림 7: 스캔 컨텍스트 ID(0x3aaf)를 포함한 미니필터 드라이버의 응답

스캔 컨텍스트가 생성되고 ID를 검색한 후에는 통신 포트에 다시 메시지를 보내 요청 애플리케이션에서 스캔 컨텍스트가 생성된 파일에 대한 핸들을 열 수 있다.

그림 8: 생성된 스캔 컨텍스트 파일 핸들 검색

CreateFileReturnHandle0로 지정된 함수는 이전 함수 SearchScanContextsByID가 유효한 스캔 컨텍스트를 반환한 경우에만 호출되었다. 예를 들어, 요청 프로세스가 앞서 언급한 스캔 생성 함수를 호출하여 이전에 생성된 유효한 컨텍스트 ID를 제공한 경우에만 호출된다. 요청 프로그램은 그림 8(그림 4, 233행)에 지정된 함수에 스캔 컨텍스트 ID를 제공하여 권한 있는 파일에 대한 핸들을 성공적으로 열었다.

그림 9: SAM 파일에 대한 파일 핸들 검색 성공

processhacker를 사용하여 요청 프로세스의 핸들을 확인함으로써 파일 핸들에 대한 액세스를 확인했다:

그림 10: SAM 파일에 대한 핸들을 보유한 프로세스

그림 11: 획득한 핸들에 부여된 읽기 액세스

잠재적 코드 주입

지원되는 함수를 추가로 탐색한 결과, 코드 실행을 달성하는 데 활용될 수 있는 세 개의 레지스트리 키를 제어할 수 있는 것으로 나타났다.

그림 12: 레지스트리 키에 대한 핸들 열기를 지원하는 함수

그림 13: 프로세스에 주입할 hook 모니터 dll을 지정하는 레지스트리 키 열기

그림 14: 사용자 제어 데이터로 레지스트리 키를 수정할 수 있음을 보여주는 OpenKey 함수

Acronis 제품군의 후킹을 위한 dll 주입이 발생하는 상황은 확인되지 않았지만, hook 모니터링이 활성화된 경우 x64HookLib 및 x86HookLib 레지스트리 키에 지정된 dll이 지정된 프로세스에 주입될 것으로 추정된다.

그림 15: 후킹 dll C:\ProgramData\Acronis\NGMP\shared\acr_protect.x64.dll을 지정하는 x64HookLibKey

제한된 임의 파일 읽기를 허용하는 경쟁 조건

임의 파일 읽기 분석에서는 스캔 컨텍스트를 여는 과정이 생략되었다. 프로세스는 스캔 컨텍스트를 생성하는 대신 GetScanContextByID 함수에 요청을 반복적으로 보내 ContextID 값을 반복하면서 하나 이상의 유효한 스캔 컨텍스트를 찾을 때까지 스캔 컨텍스트 ID를 무차별 대입할 수 있다.

도구 다운로드