Avast Antivirus 샌드박스에 진입하고 탈출하기, 2부

4 hours ago 1

Avast 커널 드라이버의 CVE-2025-13032를 이용해 발견 당시 최신 Windows 11에서 로컬 권한을 SYSTEM으로 높이는 전체 공격 과정을 시연함 사용자 입력의 길이를 여러 번 읽는 더블 페치(double-fetch) 결함으로 페이징 풀 오버플로를 일으키고, I/O Ring의 RegBuffers 포인터를 손상시켜 임의 커널 읽기/쓰기 기능을 확보함 손상된 버퍼 항목에 커널이 기록한 MDL 포인터를 통해 현재 프로세스의 _EPROCESS 주소를 유출하고, 권한 상승에 필요한 커널 주소를 확보함 공격 성공뿐 아니라 객체 해제 시 블루스크린을 피하는 작업도 필요하며, 풀 헤더 복구와 버퍼 등록 및 참조 수 처리가 안정적인 종료의 핵심임 CVE-2025-13032는 패치 완료됐으며 Avast 업데이트가 필요함. 최신 Windows 커널과 드라이버의 사용자 모드 접근자 검증도 이 연구에서 사용한 공격 기법을 차단함 연구 범위와 현재 적용 한계 Avast 연구의 두 번째이자 마지막 편으로, 커널 드라이버의 더블 페치 취약점을 발견 당시 최신 Windows 11에서 실제 로컬 권한 상승으로 연결함 1부는 취약점 발견과 샌드박스 탈출, 전체 공개 일정을 다룸 최신 Windows 커널과 드라이버는 사용자 모드 접근자(user-mode accessors) 를 사용해 사용자 메모리에 접근할 때마다 버퍼가 실제 사용자 공간에 있는지 검증함 이 완화책은 본 연구의 공격 기법을 차단함 관련 자료는 Microsoft 문서와 추가 설명 영상에서 확인할 수 있음 더블 페치에서 페이징 풀 오버플로로 취약한 코드는 사용자 제공 _UNICODE_STRING.Length 를 버퍼 할당 시점과 데이터 복사 시점에 각각 읽음 ExAllocatePoolWithTag는 Length + 16바이트를 할당하지만, 이후 memmove는 다시 읽은 Length만큼 복사함 두 시점 사이에 길이가 커지면 할당 크기를 넘어서는 커널 풀 오버플로가 발생함 별도 스레드가 공유된 길이 값을 작은 값과 큰 값 사이에서 반복 변경하고, 주 스레드는 취약한 IOCTL을 반복 호출해 경쟁 조건을 유발함 경쟁 구간은 좁지만 연구에서는 비교적 적은 반복으로 안정적으로 성공할 수 있었음 할당 크기, 오버플로 크기, 덮어쓸 내용 모두 제어할 수 있고 대상 메모리는 PAGED_POOL임 페이징 풀은 디스크로 내보낼 수 있는 커널 객체와 데이터에 사용되며, 크기별로 할당을 ...

Read Entire Article