본문 바로가기
Forensic/분석

(Part 2) cridex 파일에 숨겨진 악성코드를 분석해보자

by y3nny 2022. 10. 18.

Volatility 2.6을 다운받고, 다시 복습 겸 OS운영체제 등 알아보자.

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem imageinfo

볼라틸리티를 실행하고, 파일이름이 cridex.vmem의 OS이미지 정보를 출력해라

운영체제의 파일이 WinXPSPSx86 인것을 확인할 수 있다.
 

volatility2.6을 사용하기위해 나는 디렉토리 이동을 cd가 아닌 pushd를 사용했다.

나는 패러렐즈로 윈도우를 사용하기 때문에, cd로는 파일 이동이 안되었고, pushd로 이동한 volatility 2.6 디렉토리에서 volatility를 실행했다.

pushd : 현재 작업디렉토리를 메모리에 저장하여 언제든지 되돌릴 있도록 하며, pushd부모 디렉토리로 이동 (즉, 맥북 디렉터리로 이동)

그 다음, 파일트리로 cridex.vmem의 PID와 PPID를 확인해보자.

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem --profile WinXPSP2x86 pstree

볼라틸리티를 실행하고, WinXPSP2x86의 운영체제인 파일이름의 cridex.vmem의 프로세스 트리를 출력해라.

volatility3와 같이 의심되는 reader_sl.exe 실행파일을 확인할 수 있다.

1. Network Information

의심되는 reader_sl.exe 실행 파일이 네트워크와 연결된 흔적이 있는지 찾기 위해선, connscan 플러그인을 사용해보자.

connscan : TCP의 활성 연결 외에도 종료된 이전 연결을 확인

TCP (Transmission Control Protocol) : 컴퓨터가 다른 컴퓨터와 데이터 통신을 위한 프로토콜

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem --profile WinXPSP2x86 connscan

볼라틸리티를 실행하고, WinXPSP2x86 운영체제인 파일이름이 cridex.vmem의 TCP 연결 스캐너를 출력해라.

 

Pid 1484의 TCP 스캐너를 확인해보면, Local과 Remote Address 를 확인할 수 있다.

로컬 주소 : 연결이 이루어진 네트워크 인터페이스의 IP주소

원격 주소 : 연결이 연결된 원격 컴퓨터의 IP주소

우리는 이제 cridex.vmem에서 2개의 TCP 연결을 확인했다.

로컬 주소
원격 주소
172.16.122.128/1038
41.168.5.140/8080
172.16.112.128/1037
125.19.103.198/8080

왜 네트워크와 연결했을까? 그리고, 저 원격 주소 또한 무엇일까?

우리는 여기서 소켓을 확인해야한다.

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem --profile WinXPSP2x86 sockets

볼라틸리티를 실행하고, WinXPSP2x86 운영체제인 파일이름이 cridex.vmem의 소켓을 출력해라.

socket : 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환

소켓을 통해 데이터를 교환한 리스트들이 출력되었다.

두번 째 줄에 PID 1484가 1038 포트에 연결한 기록이 남아있다.

아까 connscan으로 포트 1038의 로컬주소는 172.16.112.128 그리고 원격주소는 40.168.5.140/8080 였다.

그 의미는 reader_sl.exe 실행파일이 1038포트를 사용해 원격 주소인 40.168.5.140/8080과 통신하는 것을 알 수 있다.

Whois lookup을 통해 IP주소를 확인할 수 있지만, 뭐 별 거 없었다;

connections 플러그인을 사용하여 한번 더 확인해보자.

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem --profile WinXPSP2x86 connections

 

connections :  활성 상태였던 TCP 연결을 보기위해 사용

그렇다, reader_sl.exe은 확실히 현재 1038포트와 연결중이다. (잡았다, 이놈!)


2. Process Information

cmdline 과 cmdscan 플러그인을 사용하여 마지막으로 실행 된 명령어들을 확인해보자!

cmdline
명령어 실행 이력
cmdscan
공격자가 콘솔 쉘(cmd.exe)을 통해 입력한 명령에 대한 메모리 검색

 

1) cmdline

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem --profile WinXPSP2x86 cmdline

 

2) cmdscane

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem --profile WinXPSP2x86 cmdscan

cmdline 과 cmdscane 플러그인으로 확인했을때, PID 1640과 1484가 서로 연관되어있다는 것을볼 수 있다.

처음에 pstree로 확인했을때, reader_sl.exe의 PID가 1640 이었고, explorer.exe가 1484였다.

원래 Adobe(어도비) reader 실행파일이어야하는데, 어도비 reader파일을 가장한 악성 실행파일로 판단된다.

 

3. Process and Memory Dump

프로세스의 실행파일을 추출하기 위해서 procdump 플러그인을 사용하자.

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem --profile WinXPSP2x86 procdump -p 1640 -D .

볼라틸리티를 실행하고, WinXPSP2x86 운영체제인 파일이름이 cridex.vmem의 PID가 1640인 것에 대한 프로세스 덤프를 뜨는데, 현재 디렉토리에 저장해라.

executable.1640.exe 파일로 저장되었다.

 

메모리에 존재하는 프로세스를 복구하기 위해 memdump을 사용하자.

명령어 : volatility_2.6_win64_standalone.exe -f cridex.vmem --profile WinXPSP2x86 memdump -p 1640 -D .

볼라틸리티를 실행하고, WinXPSP2x86 운영체제인 파일이름이 cridex.vmem의 PID가 1640인 것에 대한 메모리 영역을 덤프를 뜨는데, 현재 디렉토리에 저장해라.

memdump 는 strings을 사용 (=문자열을 뽑아준다고 생각하자)

윈도우 cmd로 메모리 덤프 파일을 분석하기엔 조금 힘들 것 같아서, 유닉스에서 다시한 번 덤프를 해줬다.

명령어 : python3 vol.py -f cridex.vmem -o . windows.memmap.Memmap --pid 1640 --dump

파이썬으로 vol.py를 실행하고, 윈도우 운영체제로 만들어진 crdeix.wmem 파일의 PID가 1640인 것에 대한 메모리 덤프를 뜨는데, 현재 디렉토리에 저장해라.

 

참고로 덤프를 하게되면 파일들이 주루루룩 나열되는데, 당황하지말자.

이제 PID 1640의 프로세스 덤프, 메모리 덤프가 끝났으니, 유닉스에서 strings을 사용하여 메모리덤프 파일을 분석해보자.

1) strings pid.1640.dump | less

 

Chase, Bank Of Americal, Wellsfargo와 같은 은행에 관련된 사이트가 눈에 띄었다.

이거 은행을 이용하는 사용자들을 타켓으로 만든 Malware 인가?

2) strings pid.1640.dmp | grep -Fi "41.168.5.140" -C 5

Fi : 일반 문자열로 해석하며, 대소문자를 구분 안함

C : 일치 항목 위의 5개 행과 일치 항목 아래의 5개 행을 표시

41.168.5.140 에 현재 연결되어있다는 것을 알 수 있다.
 

 


4. VirausTotal

VirousTotal로 넘어가서, 이전에 procdump로 복구한 실행파일을 넣고 바이러스인지 확인해보자!

 

악성코드로 분류가 되었다.
랜섬웨어 종류의 트로이목마 악성코드인 것을 확인했다.

 

윈도우에서 백신을 돌린 결과, 트로이목마가 감지되었다. 

 


부록

 

그렇다면, 어떻게 트로이목마에 감염되었을까?

일단, 우리는 어떤 경로로 악성코드가 전달되는지 알아야 한다!

 

다시 리눅스로 돌아가, strings을 통해 41.168.5.140을 검색해보자!

 

POST를 주의깊게 보자!

 

41.168.5.140는 /zb/v_01_a/in/ 을 통해 악성코드가 전달된 것으로 확인된다. POST를 보니 왠지 php가 생각나는걸?

 

그럼, /zb/v_01_a/in을 검색해보자.

 

역시 php로 만들어졌다.

새로운 IP 188.40.0.138를 발견했다. Mnemonic 이라는 사이트를 통해 188.40.0.138를 조회해보자.

 

 

188.40.0.138과 연관된 URL 리스트들을 확인할 수 있다. 여기서 나는 URL 리스트를 하나씩 검색하여 malware과 관련있는지 찾아보았지만, 의심될 뿐 멀웨어와 관련있다는 증거는 찾지 못했다.

 

혹시, 이메일을 통해 받았는지 분석해보자.

 

email을 검색하니, createmailslot이 눈에 보였다. 이건, Win32에서 사용하는 Mail Slot 생성 함수이다. 

아마, 메일을 통해 악성코드를 전송한 것 같다. 흠, 그럼 어떻게 저 reader_sl.exe가 따라들어온걸까?

너무 깊게 분석하기엔 내 실력은 아직 응애이기때문에 분석을 여기까지 하기로 했다. (포린이라 이해좀 ㅎ)


결론

 

우리는 어도비 reader 파일에 숨겨져있는 reader_sl.exe를 찾았고, 

resder_sl.exe 안에 explore.exe가 있었으며, 

41.168.5.140:8080 그리고 188.40.0.138/zb/v_01_a/in/cp.php 에서 통신하고 있다는 사실을 알았다.

VirausTools과 윈도우 백신에서 트로이목마 악성코드라는 사실을 확인되었고, 이를 방지하려면 백신을 잘 돌리고, 방화벽도 잘 돌리자!

 

그리고, 이상한 메일이나 링크 등을 클릭하지말자!!

 

 

 

 

 

댓글