
CVE-2020-27949에 대한 개념 증명 익스플로잇으로, 상승된 권한 없이 DTrace fasttrap ioctl을 통해 macOS 프로세스에서 임의 메모리 읽기/쓰기를 시연합니다.
/dev/fasttrap 장치는 사용자 공간 프로세스에서 pid 및 objc 프로바이더를 위한 트랩 노드를 생성하는 데 사용되며 권한이 666입니다. 또한 666 권한을 가진 /dev/dtrace와 달리 fasttrap에는 권한 확인이 없습니다. 이를 통해 모든 프로세스가 FASTTRAPIOC_MAKEPROBE 또는 FASTTRAPIOC_GETINSTR ioctl을 실행할 수 있습니다.
공격자는 FASTTRAPIOC_MAKEPROBE를 사용하여 다른 프로세스의 모든 메모리 위치에 프로브를 생성할 수 있습니다. 이 프로브가 활성화되면 지정된 메모리 위치의 값이 트랩 명령(x86의 경우 0xCC)으로 대체되고 원래 값은 섀도 메모리에 저장됩니다. FASTTRAPIOC_GETINSTR ioctl을 사용하여 원래 값을 검색할 수 있습니다. 이를 통해 공격자는 여러 트랩을 배치하여 다른 프로세스의 임의 메모리를 읽을 수 있습니다.
이 취약점은 CVE-2020-27949로 추적되며, macOS Big Sur 11.1, Security Update 2020-001 Catalina, Security Update 2020-007 Mojave에서 수정되었습니다.
0xCC)을 쓸 수 있습니다. 루트로 실행되는 프로세스의 메모리에도 쓸 수 있습니다. 다른 명령어나 점프 주소의 일부로서 피해자의 제어 흐름이 변경되어 권한 상승이 가능합니다.사용자로서, DTrace를 활성화하면 루트 권한이 있는 프로세스만 다른 프로세스를 추적, 계측 또는 수정할 수 있기를 기대합니다. DTrace는 dtruss, iotop 등의 도구를 제공하는 관리 작업에 유용한 도구입니다.
피해자(target)는 루트로 실행되는 실행 파일입니다. 공격자(memaccess)는 일반 사용자 권한으로 실행되는 실행 파일입니다. 추적 스크립트 libc_monitor.d는 libsystem_c.dylib 공유 객체의 함수 호출 횟수를 기록합니다(이는 기기 소유자가 실행할 수 있는 관리 스크립트의 간단한 예일 뿐입니다).
libc_monitor.d)의 일부로 발생할 수 있습니다.FASTTRAPIOC_GETINSTR을 사용하여 생성된 프로브의 메모리 값을 읽습니다.4단계는 피해자 프로세스의 메모리를 트랩 명령 값으로 대체합니다. 애플리케이션에 따라 공격자는 이를 사용하여 중요한 메모리 위치에 미리 알려진 값을 쓸 수 있습니다. 예를 들어, 공격자는 RNG의 시드를 제어하거나 프로세스의 암호화 키를 교체할 수 있습니다.
참고: 공격자는 상승된 권한이나 루트 권한이 필요하지 않습니다.
참고 2: 자체 작성 DTrace 스크립트가 필요하지 않습니다. 예를 들어, dapptrace도 pid 프로바이더를 사용하여 모든 함수를 추적합니다.
/dev/dtrace와 같이 /dev/fasttrap에 권한 검사를 구현하거나 전역 쓰기 가능 권한을 제거합니다.
참고: 출시된 수정 사항을 확인하지 않았습니다.
target을 실행하고 화면의 지침을 따릅니다.