Shinigami는 프로세스 비우기 또는 일반 패커 루틴을 통해 주입된 악성 코드 임플란트를 탐지하고 압축을 풀기 위해 설계된 실험 도구입니다.
이 도구는 Process Hollowing과 관련된 NT 기능을 연결하고 새로 실행 가능한 메모리 페이지를 페이지 가드 비트로 표시하는 방식으로 작동합니다. 이 기술을 통해 Shinigami는 일반적으로 맬웨어를 나타내는 쉘코드 또는 압축이 풀린 코드로 인해 발생하는 간접적인 흐름 변경을 감지할 수 있습니다. Shinigami는 일시 중지된 상태에서 대상 실행 파일을 생성하고 "Ichigo"라는 DLL 라이브러리를 주입합니다. 이 라이브러리는 임플란트를 감지하고 추출하는 데 필요한 모든 기능을 자동으로 연결합니다. 아티팩트가 완전히 추출되면 도구가 프로세스를 종료합니다.
Shinigami의 효과는 표적이 되는 특정 악성 코드에 따라 달라질 수 있습니다. 그러나 이는 모든 맬웨어 분석 도구 키트에 추가되는 유용한 기능이며 프로세스 비우기 또는 일반 패커 루틴을 사용하는 맬웨어를 탐지하고 분석하는 데 유용할 수 있습니다.
중요: 이는 동적 압축 풀기 도구이므로 개인 컴퓨터나 정적 분석 실험실에서 실행하면 안 됩니다.
프로세스 공동화를 사용하여 주입된 임플란트를 추출하는 Shinigami의 핵심 방법에는 NtResumeThread 및 NtWriteVirtualMemory라는 두 가지 NT 기능을 연결하는 것이 포함됩니다. 작동 방식은 다음과 같습니다.
NtResumeThread
후크
NtWriteVirtualMemory
Hook
--stop-at-write
플래그가 전달된 경우에만 사용됩니다. Shinigami의 일반 언패커 모듈은 새로 할당된 메모리 영역을 PAGE_GUARD 비트로 표시하며, 기존 메모리 영역의 보호 기능이 실행 가능한 항목으로 대체된 경우에도 이 비트를 적용합니다. 가드 페이지를 사용하면 일부 쉘코드나 PE 이미지를 할당하는 데 사용될 메모리 영역을 추적할 수 있습니다.
감지된 각 쉘코드에 대해 Shinigami는 원시 쉘코드 자체를 디스크에 저장합니다. 또한 해당 메모리 영역을 검색하여 PE 파일을 찾아 저장합니다. Shinigami는 모든 다른 쉘코드 실행을 새로운 단계로 처리하므로 결국에는 filename_shellcode_STAGENUM.bin or .exe
라는 파일이 있는 작업 디렉토리를 갖게 됩니다.
이 도구에는 다음과 같은 몇 가지 옵션이 있습니다.
Usage: Shinigami [--help] [--version] [--output VAR] [--stop-at-write] [--verbose] [--only-executables] [--exported VAR] program_name
Positional arguments:
program_name Name of the program to execute
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
-o, --output Directory to dump artefacts
--stop-at-write Unhollow: Stop the execution when the PE file is being to be written
--verbose Display a verbose output
-p, --only-executables Only extract PE artefacts
-e, --exported Exported Function: Choose a exported function to execute if the target is a DLL (rundll will be used)
몇 가지 중요한 옵션은 다음과 같습니다.
-o, --output : 추출된 아티팩트를 덤프할 디렉터리를 지정합니다. 기본적으로 추출된 아티팩트는 현재 작업 디렉터리의 출력이라는 디렉터리에 저장됩니다. 해당 경로를 인수로 전달하여 다른 디렉터리를 지정할 수 있습니다.
--stop-at-write : 이 인수는 속이 빈 프로세스를 언패킹하는 동안 사용됩니다. Shinigami는 PE 파일이 빈 프로세스에 기록되는 것을 감지하면 실행을 중지하고 추출된 PE 파일을 저장합니다. 이 옵션은 전체 비워진 프로세스를 실행하지 않고 압축이 풀린 코드만 추출하려는 경우에 유용할 수 있습니다.
--verbose : 자세한 출력을 표시합니다. 이는 Shinigami의 내부 작동을 디버깅하거나 이해하는 데 유용할 수 있습니다.
Dridex에 대한 테스트 |
추출이 완료되면 프로세스가 종료되고 추출된 PE가 생성됩니다.
버려진 임플란트 |
감지된 임플란트는 감지 방법 섹션에 설명된 형식에 따라 덤프됩니다.
여기에 설명된 랜덤 로더 압축 풀기 |
위의 예에서 Shinigami는 압축 풀기 루틴을 활성화하거나 비활성화하기 위한 특정 스위치를 요구하지 않고도 일반 로더의 동작을 자동으로 감지하고 그 안에 실행된 모든 쉘코드와 이미지를 추출했습니다. 이는 Shinigami가 Gancho 라이브러리에서 제공하는 공유 후크를 사용하여 unhollow 모듈과 일부 기능을 공유하기 때문에 가능했습니다.
Emotet DLL 압축 풀기 |
Shinigami에는 DLL 지원 기능과 분리된 DOS 헤더를 사용하여 주입된 바이너리를 다시 빌드하는 기능도 있습니다. 특히 Emotet과 같은 악성 코드 샘플은 이 기술을 사용하여 메모리 내 PE 스캐너를 회피합니다. Shinigami는 이러한 누락된 부분(DOS 헤더)을 감지하고 경험적 방법을 사용하여 이를 재구성합니다.
릴리스 페이지에서 취향에 맞게 선택하세요.
이 프로젝트를 도와주시면 정말 좋을 것 같습니다. 원하는 경우 종속성과 단계가 여기에 있습니다.
변경하고 싶은 사항이 있으면 이슈를 열거나 풀 요청을 해주세요.
이 멋진 마스코트 이미지는 Bleach에서 영감을 받아 Dall-E에서 생성되었습니다.