
CUDA API를 통해 GPU 메모리에 리플렉티브 페이로드를 은닉하고, 슬립(sleep) 중 호스트 메모리를 삭제하며, VEH 핸들러를 사용해 실행 가능한 메모리를 복원함으로써 메모리 포렌식을 우회합니다.
1- 먼저 일부 구조체(struct)를 설정하고 초기화한 다음, ve 핸들러를 실행해야 합니다.
2- 둘째, stageless 페이로드를 실행합니다. reflection이 어디에 위치할지 알아야 하므로 반드시 stageless를 사용해야 합니다. (저는 cobalt strike를 사용하며, 이는 dll reflective loader를 사용합니다.) 우리는 2nd stage만 신경 씁니다. 왜냐하면 그것이 실제 페이로드이기 때문입니다. 이 단계에서는 어떤 트릭도 추가하지 않았습니다. 단지 virtualalloc과 rwx 섹션뿐입니다.
3- 이제 페이로드가 sleep 상태에 들어가면, 페이로드를 gpu 메모리로 복사하고 실제 메모리에서 페이로드를 정리합니다.
4- sleep이 완료되면, veh가 예외(EXCEPTION_ACCESS_VIOLATION)를 처리하여 메모리 권한을 PAGE_EXECUTE_READWRITE로 다시 설정하고, gpu에서 페이로드를 다시 가져와 제자리에 배치합니다.
