APT: OSX/Dockster analysis (Part III)

 

연재:

APT: OSX/Dockster analysis (Part I)

APT: OSX/Dockster analysis (Part II)

 

오늘 알아볼 기능은 Dockster의 마지막 기능으로 C2(Command and Control)에 대해 알아보겠다.

C2 기능은 메인함수(main)에서 맨 마지막에 호출하는 mainD() 함수를 스레드로 실행하며, Part I에서 설정한 시간 값까지만 소켓 통신을 수행하도록 구성되어 있다. 통신을 위한 정보는 Part I에서 복호화된 도메인명(it.eicp.net)과 포트(8088)를 사용하며, 이를 사용자가 정의한 createworkendport 함수의 인자로 전달한다. createworkendport()는 inet_ntoa API로 도메인명을 주소로 변환한다.

createworkendport()

그 다음 사용자가 정의한 CreateSocketAndConnect 함수를 통해 소켓을 생성하고 서버에 접속을 시도한다. 서버 접속에 성공하면, 서버에 g_groupmd5 값을 전달하는데이는 Part I에서 획득한 MAC address를 md5로 해시한 것이다. 마지막으로 사용자가 정의한 WorkThreadEnter를 실행하며 본격적인 C2 기능을 수행한다.

WorkThreadEnter()

감염된 시스템 제어 기능의 핵심 코드를 담고 있는 이 함수는 소켓 통신을 수행하고 VerifyLoop 함수로 공격자와의 인증을 거친다. 이 과정에서 암호화 통신을 위한 RSA 키를 생성하고 모든 인증 과정을 암호화한다. 또한 내부적으로 AccountVerify 함수를 수행하는데 여기에서는 계정 인증에 사용되는 데이터를 AES로 암호화하여 통신한다. 암호화 하는 데이터는 총 2개이며, configuration file에 저장되어 있다. 암호화 키는 RSA로 암호화하여 받는다.

(lldb) x/1xs 0x160a0
0x000160a0: "default" // 첫 번째 암호화 데이터
(lldb) x/1xs 0x160a0
"00:0c:29:5b:4d:1b" // 두 번째 암호화 데이터
(lldb)

VerifyLoop 함수를 통과하면 MainLoopEnter 함수에 진입한다.

MainLoopEnter

위 코드를 보면 쉽게 유추할 수 있겠지만, 사용자에게 명령을 받아서(recv) 받은 숫자에 맞는 명령을 수행한다. 공격자가 볼 수 있는 기본 메뉴에는 '파일 시스템 제어(FileSystemEnter())', '원격 쉘(RShellEnter())', '자기자신 제거(unlink)'가 있다.

파일 시스템 제어

파일 시스템 제어는 시스템 정보를 수집하거나 파일을 업로드/다운로드 하는 등의 기능을 수행한다. 모든 수집 결과는 compress_ex와 aes_encypt_ex로 압축 및 암호화하여 전송한다. 각 함수의 기능('함수 명', '명령 번호'로 표시)은 다음과 같다.

 

원격 쉘

CMD_RShell로 실행되며, newshell에 g_ip, g_rport, “/bin/bash” 를 인자로 전달한다. newshell()은 내부적으로 dup2() API를 이용하여 stdin, stdout, stderr를 소켓으로 입/출력하게 한 후, execlp() API로 bash를 실행한다. 이렇게 함으로 공격자와 bash 간에 소켓 통신을 수행할 수 있다.

RShell()

 

자기 자신 삭제 및 종료

삭제 명령(237)을 받으면, unlink 명령으로 자동 실행 정보와 .Dockset 파일을 제거한다.

unlink and exit

 

결론

Dockster는 APT 공격이라 불리기 딱 좋은 구성을 하고 있다.  첫 번째로 모든 통신을 암호화하고 설정 파일을 인코딩하여 보관하고 있다. 두 번째로 C2 기능을 통해 지속성을 확보했으며, 세 번째로 티벳의 dalai lama를 명확한 공격 대상으로 하였다. 각 기능에는 오류가 발생할 소지를 최소화하기 위해 다양한 검증 함수를 내장하고 있다. Mac OS X를 대상으로 하는 악성코드는 그 개체 수는 적지만 각 개체의 기능이 다양하게 구성되어 있으며, APT 공격에 많이 활용되므로 항상 기업 및 기관의 보안 울타리에서 제외시킴으로 공격의 시발점이 되는 구멍(hole)을 만들지 말아야 할 것이다.