일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- error
- ida pro
- malware
- 포인터 매핑
- h5py.File
- why error
- idapython
- pytest
- commandline
- Ransomware
- ecma
- open office xml
- NumPy Unicode Error
- ida
- hex-rays
- idb2pat
- Analysis
- Python
- error fix
- TensorFlow
- Injection
- data distribution
- javascript
- svn update
- mock.patch
- MySQL
- debugging
- idapro
- x64
- Rat
- Today
- Total
13 Security Lab
Control Pannel format (.cpl) [2] 본문
Control Pannel format
cpl 파일은 다른 방법으로도 실행시킬 수 있는데 예를 들면,
control.exe main.cpl, @0, 1
Rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,0 등의 방법이 있습니다.
(참고1 http://nyangrr.blogspot.kr/2010/05/windows-rundll32exe.html)
(참고2 http://mrpeoh.tistory.com/62)
또한, VNScript에서
Dim obj
Set obj = CreateObject("Shell.Application")
obj.ControlPanelItem("joy.cpl")
과 같은 형태로 Import 되어 쓰일 수있습니다.
위와 같은 방법들(cpl을 로드하는 방법들..)은 악성코드 제작자들에게 사용 되어 질 수 있는데
크리티컬 한 것은 아시다시피 대부분의 .cpl은 더블클릭으로 쉽게 실행을 유도할 수 있기 때문이죠
또한, undocumented function들 그중에 Shell32.dll의 "Control_RunDLL"이나 "Control_RunDLLAsUser" 은 cpl 파일들을 로드시킬 수 있습니다.
(트렌드마이크로 리서치 페이퍼 : CPL Malware(malicious control panel Items) 6p)
위 도식을 보면 쉽게 이해 할 수있는데, 위와 같이 rundll32.exe 를 통해 shell32.dll를 로드하고
shell32.dll은 악성 cpl을 로드하는 형태로 사용되어 질 수 있게 됩니다.
위 방법은 다음과 같은 커맨드로 테스트 해볼 수 있는데요~
rundll32.exe shell32.dll, Control_RunDLL file.cpl
또한, Control_RunDLL 함수는 다음과 같은 파라미터를 갖습니다.
- .CPL file name
- Applet index
- Applet tab index
위 구조 (CPL 및 CPLapplet)는 악의적이지 않은 컨셉으로 만들어진걸 알 수 있는데, 왜냐하면 악성코드는 실행하기 위해 한개 이상의 applet 이 필요 하지 않기 때문이죠. 한번의 호출로 악의적인 코드를 실행할 수 있으니까요
CPL applet index가 개시되기 전에 CPIApplet 함수가 호출됩니다.
다음은 그 프로토타입 구조체를 나타냅니다
uMsg 파라미터는 유효한 메시지(Valid Message)를 보내는데 사용되는데, 다음과 같은 CPIApplet 함수가 나중에 이 것을 다루게(handle) 됩니다.
첫번째로 보내는 CPIApplet 함수 메시지는 CPL_INIT 입니다. (CPL관련 초기화 작업을 하는듯...)
이 것이 보내진 이 후 .cpl안의 코드들이 실행되고, Callee(실행된 .cpl)이 성공했음을 나타내기 위해 꼭 0이 아닌 값이 리턴되어야 합니다.
악성코드의 경우 모든 악의적인 코드는 CPIApplet 함수 안에서 찾을 수 있을 겁니다. 따라서, 이 후 그 어플리케이션은 프로세스를 유지하거나 또 다른 메시지를 기다리기위해 더이상 계속 진행 할 필요가 없어지겠죠?
정상적인 CPI Applet 은 다음과 같은 형태를 갖습니다.
악성인 경우 다음과 같은 형태를 가질 수 있습니다.
위 코드는 프로그램적으로 문제가 없는데요~
이 것은 모든 파라미터들이 무시되고, 악성행위를 하는 코드가 실행될 수 있음을 나타냅니다
위와 같은 형태는 다른 악성dll에서 흔히 볼 수 있는 것으로 분석을 위한 포인트가 될 수 있을 것이라고 하네요
다음에서 흔히 볼 수 있는 악성 dll의 형태
(일부 패킹된 CPL악성코드도 DllMain 부분에 코드를 삽입 하여 사용할 수 있습니다. 예를 들면 해당 부분에서 언팩이 이루어지는 것도 그 예라고 할 수 있죠)
이상입니다...
자 이제 분석관점에서 보면
정적분석
CPL 파일은 DLL파일이므로 PE32/PE32+ 포맷스펙도 동작합니다.
CPL로 동작하려면 확장자가 CPL이어야하고, 앞에서 언급한대로 CPL이 아닐경우에는 더블클릭으로 실행되지 않습니다.
일반적으로 PE파일분석뷰어나 에디터가 이 파일들이 패킹 또는 암호화 또는 안티리버싱이 적용되지 않을수록 이 포맷에 대해서 분석(파싱)됩니다.
패킹된 일부 CPL파일들의 CPI Applet 함수들을 예를 들어보면, 프로그램이 로드되어 메모리에 언팩 될 때까지는 Export되지 않습니다.
정적분석방법은 일반적인 분석방법과 유사한데, PE섹션들이 이상한 characterics를 가지는 것을 체크하거나, 파일의 엔트로피를 계산해볼 수 있습니다. 왜냐하면 패킹되거나 암호화된 정상 CPL은 일반적이지 않기 때문이죠…ㅎㅎ
동적분석
동적분석의 경우에는 Rundll32.exe가 shell32.dll, Control_RunDLL을 로드할 때 CPL 내부의 코드를 분석해볼 수 있습니다.
수고를 덜기 위해, 우리는 CPL로더를 생성할 때, 다음과 같은 옵션을 함께 쓸 수 있습니다.
위 모든것의 필수적인 것은 메시지를 전달하기 위해 CPIApplet을 호출하는 것입니다.
디버깅하기 위한 다른 방법으로는 control.exe를 다음과 같이 쓰는 방법이 있습니다.
Ex) Control.exe myfile.cpl
Cpload.exe는 LoadLibrary와 CPIApplet()을 호출 합니다.
디버깅을 BP를 LoadLibraryA와 LoadLibraryW에 걸고나서 LoadLibrary의 인자를 .cpl파일의 파일경로로 주고 호출합니다.
레지스트리 정보
HKCR/cplfile/shell/cplopen/command
HKCR/cplfile/shell/runas/command
XP
WTF... 뭐지 리소스해커가 왜 cplfile아래 들어가있지..
끝..
내용의 대부분이 trendMicro 의 "CPL malware" 리서치페이퍼를 참고했습니다. 번역하는데 초점을 맞추었고, 부자연스럽지 않도록 의역하는데 초점을 맞추었습니다~