
EDR 우회 기능을 갖춘 자동화된 DLL 사이드로딩 도구

DLL 사이드로딩은 프로그램이 정상적으로 작동하는 데 필요한 라이브러리를 로드하는 등 합법적인 목적으로 사용될 수 있지만, 악의적인 목적으로도 사용될 수 있습니다. 공격자는 DLL 사이드로딩을 이용해 대상 시스템에서 임의 코드를 실행할 수 있으며, 이는 주로 DLL을 로드하는 데 사용되는 합법적인 애플리케이션의 취약점을 악용하여 이루어집니다.
DLL 사이드로딩 프로세스를 자동화하고 더 효과적으로 만들기 위해 Chimera가 개발되었습니다. 이 도구는 EDR/AV 제품을 우회하기 위한 회피 방법론을 포함하고 있으며, XOR을 통해 셸코드를 임의의 키로 자동 암호화하고 Visual Studio로 가져와 악성 DLL을 생성할 수 있는 템플릿 이미지를 생성합니다.
또한, SysWhispers3의 동적 시스템 콜(Dynamic Syscalls)과 수정된 어셈블리 버전을 사용하여 EDR이 탐지하는 패턴을 회피합니다. 임의의 NOP 슬레드(Nop sled)가 추가되고 레지스터가 이동됩니다. 또한, 사용자가 지정할 수 있는 다른 프로세스에 셸코드를 주입하기 위해 얼리 버드 인젝션(Early Bird Injection)이 사용되며, 하드디스크 확인 및 디버깅 여부 확인과 같은 샌드박스 회피 메커니즘이 포함됩니다. 마지막으로 로더에는 웨이티블 타이머(Waitable Timer)를 사용하여 셸코드 실행을 지연시키는 타이밍 공격(Timing attack)이 적용됩니다.
이 도구는 EDR/AV 제품을 우회하고 대상 시스템에서 임의 코드를 실행하는 데 효과적인 것으로 테스트되었습니다.
업데이트된 버전의 Chimera Unleashed는 정적 분석 및 동적 분석 모두를 회피하는 데 있어 상당한 발전을 보여주었으며, 특히 Microsoft 365의 EDR(Endpoint Detection and Response) 시스템과 관련하여 두드러집니다. 이 도구의 사이드로딩 기술은 OneDrive와 같은 잘 알려진 바이너리에 적용되었을 때도 탐지를 성공적으로 회피했습니다. 그러나 사이드로딩 측면은 탐지되지 않았지만, 도구에서 사용된 얼리 버드 인젝션 프로세스는 EDR 시스템에 의해 식별되었습니다. 이는 도구의 전반적인 은밀성 능력을 향상시키기 위한 추가 개선 영역을 강조합니다.
주요 업데이트 및 기능:
Chimera는 Python3로 작성되었으며 추가적인 종속성을 설치할 필요가 없습니다.
Chimera는 현재 Microsoft Teams 또는 Microsoft OneDrive의 두 가지 DLL 옵션을 지원합니다.
사용자는 Microsoft Teams에서 누락된 DLL인 userenv.dll을 생성하여 다음 폴더에 삽입할 수 있습니다:
%USERPROFILE%/Appdata/local/Microsoft/Teams/current
Microsoft OneDrive의 경우, 스크립트는 버전 DLL(version DLL)을 사용합니다. 이는 예를 들어 onedriveupdater.exe 바이너리에서 누락된 DLL이기 때문에 일반적입니다.
Chimera Unleashed는 명령줄 인수 파싱을 위해 argparser를 사용합니다. 사용 가능한 인수는 다음과 같습니다:
--raw 또는 -r: 셸코드가 포함된 파일 경로. 필수.--path 또는 -p: C 템플릿 파일을 출력할 경로. 필수.--pname 또는 -n: 셸코드를 주입할 프로세스 이름. 필수.--dexports 또는 -d: 사용할 DLL 내보내기(Exports) 지정 ('teams' 또는 'onedrive'). 필수.--enc 또는 -e: 선호하는 암호화 방식 지정 (XOR / AES). 필수.--inj 또는 -i: 선호하는 인젝션 기술 지정 (EB / MS). 필수.--rshell 또는 -s: [선택 사항] 셸코드 변수 이름을 고유한 이름으로 변경. 기본값은 'encoded_shell'.--rxor 또는 : [선택 사항] XOR 암호화 이름을 고유한 이름으로 변경. 기본값은 'do_xor'.사용 예시: python Chimera.py --raw <셸코드_경로> --path <출력_경로> --pname <프로세스_이름> --dexports <내보내기_파일> --enc AES --inj EB --rshell my_shellcode
컴파일 프로세스가 완료되면 OneDrive용 version.dll 또는 Microsoft Teams용 userenv.dll 중 하나가 포함된 DLL이 생성됩니다. 그런 다음 원래 DLL의 이름을 변경해야 합니다.
예를 들어, 원래 userenv.dll은 tmpB0F7.dll로, 원래 version.dll은 tmp44BC.dll로 이름을 변경해야 합니다. 또한, 프록시 DLL의 이름을 기본 스크립트 이름 대신 DLL 내보내기 소스 코드를 수정하여 원하는 대로 변경할 수도 있습니다.
code.h 파일에는 셸코드가 포함되어 있습니다.
1단계: DLL 템플릿으로 새 Visual Studio 프로젝트 만들기


2단계: Visual Studio 프로젝트에 파일 가져오기
3단계: 빌드 사용자 지정
4단계: MASM 활성화

5단계:


1단계: 최적화 변경

2단계: 디버그 정보 제거

원래 기여자:
기여자:
적용 가능한 법률이 허용하는 최대 범위 내에서, 본인(George Sotiriadis) 및/또는 내 저장소에 콘텐츠를 제출한 관련자는 어떠한 간접적, 부수적, 특별, 결과적 또는 징벌적 손해, 또는 직접적 또는 간접적으로 발생한 이익 또는 수익 손실, 또는 데이터, 사용, 평판, 기타 무형 자산의 손실에 대해 책임을 지지 않습니다. 이는 (i) 본 리소스에 대한 액세스 및/또는 액세스 불능; (ii) 본 리소스에서 참조된 제3자의 모든 행위 또는 콘텐츠(비방, 공격적 또는 불법적인 행위 또는 다른 사용자 또는 제3자의 행위 포함); (iii) 본 리소스에서 획득한 모든 콘텐츠로 인해 발생합니다.
https://evasions.checkpoint.com/
https://github.com/Flangvik/SharpDllProxy
-x--rkey 또는 -k: [선택 사항] 키 변수 이름을 고유한 이름으로 변경. 기본값은 'key'.--rsleep 또는 -z: [선택 사항] 실행 중 포함될 총 슬립 시간(초). 기본값은 4000.--size 또는 -f: [선택 사항] 정크 데이터의 파일 크기(KB). 0은 비활성화, 1은 임의 파일 크기. 기본값은 0.