yon11b

[SK 쉴더스 루키즈] AutoIt 스크립트 분석(Citadel 변종 증명) 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] AutoIt 스크립트 분석(Citadel 변종 증명)

yon11b 2026. 6. 6. 04:01
반응형

AutoIt이란?

윈도우 자동화용 스크립트 언어

사람이 하는 마우스 클릭, 키보드 입력, 프로그램 실행 같은 작업을 자동으로 수행하게 만드는 도구

 

그냥 notepad로 실행시키면 깨져서 보인다.

 

Exe2Aut 로 열면 잘 보인다.

 

Exe2Aut

AutoIt으로 만든 EXE 파일에서 원본 AutoIt 스크립트(.au3)를 추출하는 도구

얘는 autoit전용 문법으로 써졌기 때문에 edge 개발자 콘솔에서 실행시킬 수가 없다.

SciTE 툴을 사용해서 Execute를 ConsoleWrite로 바꿔 출력해보자.

 

실행하기

 

출력 결과(난독화를 푼 코드)는 다음과 같다.

DllStructSetData($_Z0xE6C628F79E4A55F8D964A62E37593AB7, 1, $_Z0x2DABBED9FCC257FC9CFC2AE9BA8C2533)
DllStructSetData($_Z0x380B843FB1C4BEEA56A35D1489FD90B2, 1, $_Z0xA8D9A0F1757B961E2895EEC2F56BB460)
DllCall("user32.dll", "int", "CallWindowProcW", "ptr", DllStructGetPtr($_Z0xE6C628F79E4A55F8D964A62E37593AB7), "wstr",(@AutoItExe), "ptr", DllStructGetPtr($_Z0x380B843FB1C4BEEA56A35D1489FD90B2), "int", 0, "int", 0)>Exit code: 0

 

CallWindowProcW함수로 실행을 시키고 있는 것을 확인했으니, 저 때 무슨 일이 일어나는지 보기 위해 x32dbg로 열어서CallWindowProcW에 BP를 걸고 F9를 눌러 실행을 해보자.
숨겨진 PE 구조 확인

에러가 뜬다. 디버그 모드에서 실행할 때 일부러 메시지가 나오도록 코드가 짜여져 있나보다.

Options - Preferences - Events (Entry BreakPoint를 제외한 나머지는 모두 제거한다)

isDebuggerPresent 함수가 있다. 여기에서 막고 있는 것 같다.

Ctrl + G를 누르고 isDebuggerPresent 을 검색해준다.

두 번 클릭해서 함수 안으로 들어간다.

fs:[30h] = PEB 주소

PEB+2 = BeingDebugged

디버거가 붙어있으면, BeingDebugged = 1이다.

 

PEB란?

윈도우가 프로세스를 실행할 때 몰래 만들어주는 프로세스 정보 저장소이다.

디버거 발견
↓
분석당하는 중
↓
종료

 

PEB주소로 가서 debug=1로 되어있는 것을 0으로 바꿔주자.

dump창에서 ctrl+g > f2:[30]

PEB+2 = BeingDebugged이므로, 두번째 바이트 시작 부분을 01 > 00으로 바꿔주자.

쟤를 00으로 바꿔준다.

 

그리고 다시 CallWindowProcW에 BP를 걸고 F9를 눌러 실행을 해보자.

스택을 보면 세번째 파라미터에 MZ가 있다. ⇒ PE구조임을 확인

주소를 따라가서 확인해보면, 뭔가 이상한 PE구조가 들어있음을 확인할 수 있다.

 

계속 밑으로 내려 확인을 해봤더니 4X4X~~의 문자열이 확인되었다.

미리 한 줄 정리: citaldel 을 안에 숨겨서 실행하는 변종 파일이다.

 

저 영역만큼을 덤프떠서 파일로 저장해주었다.

citaldel 파일과 내 덤프 파일이랑 비교해서 진짜 똑같은지를 확인해보자.

 

Citadel 변종 증명

삽질-해결

Citadel.exe랑 내가 덤프 뜬 파일이랑 hash값을 비교했다.

-> Citadel.exe는 섹션이 4개, 내 덤프 파일은 섹션이 3개였다.

-> hash값도 달랐다.

 

Citadel

PEStudio로 열어서 sections를 봤는데 UPX0이 보였다. 패킹된 것이므로, upx -d citadel.exe 명령어를 통해 언패킹을 해준뒤 다시 봤다.

 

알고보니 Citadel.exe랑 비교하는게 아니라 Citadel bot이랑 비교하는 것이었다..!

 

Citadel bot.exe

 

dump뜬 내 파일

 

 

.data와 .reloc의 hash값이 완전히 동일한 것을 확인할 수 있다.

.text 영역도 파일 크기가 똑같은 것으로 보아, 안에서 데이터만 수정되고, 따로 추가나 제거를 한 것은 아닌 것 같다고 추측을 할 수 있다.

 

 

0x0x0x문자열이 Citadel의 특징이라고 해서 구글에 검색했는데 나는 아무것도 나오지 않는다..

string 비교 방법으로도 확인 가능

strings에서 citadel bot 특징을 찾아보았다.

 

첫번째 근거: %BOTID%, %BOTNET% 문자열

샘플에서 %BOTID%, %BOTNET% 문자열이 확인됐다.

 

두번째 근거: video module 문자열

config.txt 파일 일부
내 샘플 덤프에서 찾은 cit_video.module 문자열

 

citadel에서 video module은 피해자 화면을 녹화하기 위해서 사용한다고 한다. (정보 수집 목적)

 

 

세번째 근거: 로그인 키 문자열

찾아보니 login 관련 키 값인 것 같다.

https://github.com/tildedennis/zeusmuseum/blob/master/jupyter_notebooks/citadel/1.3.5.1/Citadel%20version%201.3.5.1.ipynb

 

 

네번째 근거: web 통신 (socks, vnc)

 

 

 

citadel manual 파일 일부

 

https://www.virusbulletin.com/virusbulletin/2014/09/prosecting-citadel-botnet-revealing-dominance-zeus-descendent-part-one

 

해석

Citadel은 NAT 환경 내부에 있거나 네트워크가 필터링되어 직접 통신이 어려운 경우를 위해 두 가지 역방향 연결(back-connect) 서버 기능을 지원한다.

SOCKS(Secure Sockets)는 보안 프록시를 이용하여 네트워크의 제한된 영역에 접근하도록 설계되었다. 이 기능은 감염된 PC에 로컬 SOCKS 프록시를 생성한 뒤, 해당 프록시를 통해 트래픽을 전달하여 C&C 서버와 연결하는 방식으로 구현된다. 봇이 빌드될 때 SOCKS 기능이 활성화되어 있으면 자동으로 SOCKS 프록시를 시작한다.

Citadel은 C&C 통신 시 SOCKS와 VNC 모드를 함께 사용한다. 또한 C&C와의 통신을 원활하게 하기 위해 UAC(User Account Control)와 방화벽을 비활성화하여 필요한 포트를 개방할 수 있다. SOCKS 기능을 설정하려면 Gate URL과 Admin Panel URL이 필요하다.

VNC 컨트롤러는 VNC 프로토콜을 사용하여 감염된 시스템과 통신하는 기능이 풍부한 구성 요소이다. C&C는 두 가지 방식으로 동작한다. connect 모드는 필요할 때만 연결을 생성하는 방식이며, auto-connect 모드는 활성화되면 즉시 C&C 패널과 역방향 연결을 생성한다.

또한 Citadel은 URL 마스크(URL mask)를 이용한 필터링 기능을 제공한다. 이를 통해 VNC 사용 시 특정 웹사이트만 선택적으로 감시하거나 제어할 수 있다. 표 5에는 Citadel 봇넷이 SOCKS 및 VNC 통신에 사용하는 API 패턴이 정리되어 있다.

 

 

socks: 감염 pc를 프록시 서버로 사용하기 위함

vnc: 감염 pc 화면 원격 제어하기 위함

 

결론

따라서 이런 증거들을 종합해 볼 때, 해당 AutoIt 샘플 내부에 Citadel 계열 코드가 포함되어 있을 가능성이 높은 것으로 판단된다.

728x90