대부분의 백신과 샌드박스를 우회할 수 있는 트로이 목마 샘플
아래에서는 이 트로이 목마에 사용된 기술에 대해 설명하겠습니다. shellcode와 로더 두 가지 측면에서 설명드리겠습니다.
로더 부분
1.안티 샌드박스
잘 알려져 있듯이 안티 샌드박스 탐지의 일반적인 방식은 호스트의 CPU, 메모리, 하드디스크 등을 대상으로 하는 것입니다. 하지만 일부 백신이나 클라우드 샌드박스가 안티 샌드박스 기능을 탐지하고 민감한 API를 모니터링하여 적발될 수 있기 때문에, 개인적으로 이 방식은 적절하지 않다고 생각합니다. 그래서 제 접근 방식은 QQ, WeChat, DingTalk처럼 일상적으로 사용하는 소프트웨어의 바탕화면 바로가기를 탐지하여 클라우드 샌드박스를 회피하는 것입니다.
2.ntdll 오버로딩과 API 동적 호출
일반적인 백신의 탐지 메커니즘은 일부 민감한 API에 후크를 거는 것입니다. 따라서 ntdll 오버로딩과 API 동적 호출 기술을 사용하면 후크를 우회하여 기능을 구현할 수 있습니다. ntdll 오버로딩은 시스템 디렉터리에서 원본 ntdll.dll을 로드하여 현재 프로세스에서 후크가 걸린 ntdll 코드 섹션(.text 섹션)을 원본 코드로 교체하는 것입니다. API 동적 호출은 대상 DLL의 익스포트 테이블을 순회하면서 해시로 함수 이름을 매칭하고 대상 함수의 주소를 얻은 다음 포인터로 실행하는 것입니다.
3.shellcode와 로더 분리
shellcode는 인코딩으로 백신을 우회하는 것 외에도 로더와 분리할 수 있습니다. 즉, shellcode가 exe 안에 없다면 백신이 문제를 탐지하기가 상당히 어렵습니다.
shellcode 부분
shellcode 부분은 주로 다층 난독화 처리를 사용하며, XOR+RC4+base64+MAC 다층 처리를 적용합니다. 최종적으로 MAC 주소 형식으로 저장되는데, 이는 Windows가 MAC 형식 문자열에 대해 어느 정도 관대함을 갖고 있기 때문입니다.
사용 방법
먼저 encode.cpp를 사용하여 shellcode를 암호화합니다. shellcode를 exe에 작성하려면 Unseparation_shellcode.cpp의 mac_shellcode 배열에 넣으십시오. 매개변수 분리를 구현하려면 제가 컴파일한 exe + shellcode를 그대로 실행하면 됩니다.
읽어주셔서 감사합니다.
영문 버전
다음은 대부분의 백신과 샌드박스를 우회할 수 있는 트로이 목마 샘플입니다. 아래에서는 이 트로이 목마에 사용된 기술을 shellcode와 로더 두 측면에 중점을 두고 설명하겠습니다.
로더 섹션
1. 안티 샌드박스
안티 샌드박스 기능의 일반적인 탐지가 호스트의 CPU, 메모리, 하드 디스크 등에 대한 작업을 기반으로 한다는 것은 잘 알려져 있습니다. 그러나 일부 백신이나 클라우드 샌드박스가 안티 샌드박스 기능을 모니터링하고 민감한 API를 감시하여 탐지로 이어질 수 있기 때문에 개인적으로 이 방식은 이상적이지 않다고 생각합니다. 따라서 QQ, WeChat, DingTalk와 같이 일반적으로 사용되는 소프트웨어의 바탕화면 바로가기를 탐지하여 클라우드 샌드박스를 회피하는 것이 제 아이디어입니다. 
2. ntdll 오버로딩 및 API 동적 호출
일반 백신의 탐지 메커니즘은 일부 민감한 API에 후크를 설치하는 것입니다. 따라서 ntdll 오버로딩과 API 동적 호출 기술을 사용하면 후크를 우회하고 기능을 구현할 수 있습니다. ntdll 오버로딩 부분은 시스템 디렉터리에서 원본 ntdll.dll을 로드하고 현재 프로세스에서 후크된 ntdll 코드 세그먼트(.text 세그먼트)를 원본 코드로 교체하는 것입니다. API 동적 호출은 대상 DLL의 익스포트 테이블을 순회하고 해시를 사용하여 함수 이름을 매칭한 다음 대상 함수의 주소를 얻어 포인터로 실행하는 것입니다.
3. shellcode와 로더 분리
인코딩으로 백신을 우회하는 것 외에도 shellcode는 로더와 분리할 수 있습니다. shellcode가 exe 파일에 포함되어 있지 않으면 백신이 문제를 탐지하기가 상당히 어려워집니다.
shellcode 섹션은 주로 다층 난독화 처리를 거치며, 여기에는 XOR, RC4, base64 및 MAC이 사용됩니다. 최종 출력은 MAC 주소 형식으로 저장되는데, 이는 Windows가 MAC 형식 문자열에 대해 관대하다는 특성을 활용한 것입니다.
사용 방법
먼저 encode.cpp를 사용하여 shellcode를 암호화합니다. shellcode를 exe 파일에 작성하려면 Unseparation_shellcode.cpp의 mac_shellcode 배열에 배치하십시오. 매개변수 분리를 구현하려면 컴파일된 exe + shellcode를 직접 실행하면 됩니다.
읽어주셔서 감사합니다.