#WI-13-024 2013-07-12
1 내용요약 - YARA 는악성파일또는프로세스를시그니처기반으로판별및분류할수 있게하는툴로현재 VirusTotal, FireEye 등에서사용 - Linux, Mac OS X, Windows 시스템에서모두사용가능 - 소스코드컴파일, Python 모듈, 실행파일실행방식등다양한방법으로 YARA 설치및실행가능 - 소스코드컴파일방식의경우, YARA 의실행은작성된 Rule (*.yar 파일 ) 에 확인하고자하는파일또는프로세스, 디렉터리를커맨드라인에서 입력하는것으로가능 - YARA Rule 에확인하고자하는텍스트스트링, hex 스트링, 정규표현식 (RE) 을작성하여악성코드의패턴및시그니처확인가능
2 1. 개요 YARA 는악성코드샘플에포함된패턴을이용하여특성과행위를기준으로악성파일을 분류하는데사용되는툴임 비교적간단한문법의 YARA Rule 을작성하는것만으로악성코드샘플 ( 파일또는 프로세스 ) 이특정기능을하는지, 명시된조건이포함되어있는지여부를확인할수있어 악성코드연구자들사이에서널리쓰이고있음 본문서는악성코드샘플의기능분석을좀더쉽고빠르게하기위한 YARA 툴을소개하고, 이를사용하는방법과실제사용예시를설명하고있음 2. YARA 란? YARA 는악성코드의시그니처를이용하여악성여부를확인하고, 그특징에따라분류하기 위한목적으로사용되는툴임 여기서악성코드의시그니처라는것은샘플파일, 프로세스에포함되어있는텍스트스트링또는바이너리패턴으로, 분석가가텍스트스트링또는바이너리패턴을이용한로직을구현하여알고자하는샘플파일에 YARA 명령을넣을경우, YARA는해당시그니처가포함되어있는지여부를판단해줌 또한단순히텍스트스트링과바이너리패턴만를이용해악성파일의시그니처를찾는것이 아닌, 특정엔트리포인트값을지정하거나파일오프셋, 가상메모리주소를제시하고정규 표현식 (Regular Expression) 을이용하는등효율적인패턴매칭작업이가능하도록함 복합적인 rule 적용및태그기능지원으로여러악성파일을검사할때각 rule 에적용된 시그니처를기준으로악성파일을분류를할수있게함 YARA 는 2008 년최초 1.0 버전이등장하여오픈소스로관리되고있으며 2013 년 7 월기준 버전 1.7 까지업데이트되었음 1 최초제작은 VirusTotal 2 에서하였고현재소스관리는 Google 에서하고있음 현재 YARA 를제품에적용해사용하고있는업체로는 VirusTotal 과 FireEye 가있음 1 https://code.google.com/p/yara-project 2 Victor Manuel Alvarez http://www.linkedin.com/in/vmalvarez
3 3. YARA 설치와시작 YARA 는멀티플랫폼으로 Linux, Mac OS X, Windows 시스템에서모두사용할수있음 설치및사용방법으로는 YARA 소스코드직접컴파일방식, YARA 실행파일실행방식, YARA-python 확장기능을이용한 Python 스크립트방식이있음 Python 외에 Ruby 로도 YARA 를사용할수있는 YARA-ruby 확장기능소스가공개 되어있으나 3 YARA-project 에서공식적으로제공하는방식은위세가지임 다운로드는 YARA-project Downloads 페이지 (https://code.google.com/p/yara-project/downloads/list) 에서받을수있음 ( 아래그림참고 ) 3 https://github.com/spiderlabs/yara-ruby
4 3.1. Linux 또는 Mac OS X 시스템 Linux와 Mac OS X 사용자의경우 YARA 소스코드를직접컴파일하여커맨드라인인터페이스를통해인터프리터형식으로사용하거나, YARA-python을이용한 Python 스크립트방식으로 YARA를설치및사용할수있음 아래는 Linux 계열 Ubuntu 운영체제에서 YARA 소스코드를컴파일및실행하는과정임 (1) YARA-project 다운로드웹페이지에서 yara- 버전.tar.gz 파일다운. 본문서에서는작성일 기준최신버전인 yara-1.7.tar.gz 파일다운 (2) yara-1.7-tar.gz 파일압축해제및 yara-1.7 디렉터리로이동 soojin@ubuntu:~/downloads/yara-1.7$ (3) YARA 소스패키지설치를위해필요한 PCRE 라이브러리와 g++ 설치. 기존에 설치되어있을경우생략가능 soojin@ubuntu:~/downloads/yara-1.7$ sudo apt-get install libpcre3-dev soojin@ubuntu:~/downloads/yara-1.7$ sudo apt-get install g++ (4) 시스템에패키지설치를위한 configure 작업 soojin@ubuntu:~/downloads/yara-1.7$./configure (5) 소스코드패키지컴파일작업 soojin@ubuntu:~/downloads/yara-1.7$ make (6) 설치작업. Permission denied 의경우에는 sudo 권한부여 soojin@ubuntu:~/downloads/yara-1.7$ make install (7) YARA 실행 soojin@ubuntu:~/downloads/yara-1.7$ yara 성공적으로설치를한뒤, YARA 를실행하면다음과같은내용으로 yara 명령어와함께 적절한파라미터가포함된커맨드를입력하라고함 usage: yara [OPTION]... [RULEFILE]... FILE PID options: -t <tag> print rules tagged as <tag> and ignore the rest. Can be used more than once. -i <identifier> print rules named <identifier> and ignore the rest. Can be used more than once. -n print only not satisfied rules (negate). -g print tags. -m print metadata. -s print matching strings. -l <number> abort scanning after a <number> of rules matched. -d <identifier>=<value> define external variable. -r recursively search directories.
5 -f fast matching mode. -v show version information. 3.2. Windows 시스템 Windows 사용자의경우 Linux, MAC OS X에서설명한직접컴파일방식이아닌 Windows용 YARA-python 확장기능을이용하거나 Windows용 YARA 실행파일을통해 YARA를실행할수있음 YARA-python 확장기능의경우시스템의 python 버전과아키텍처 (win32 또는 win64) 에맞는 것을다운받아설치한뒤, python 스크립트상에서 yara 를 import 하는방식으로실행할수 있음 Windows 에서 YARA 를실행하는가장쉬운방법은 yara.exe 실행파일을 cmd 창에서직접 실행하는것으로, 현재다운로드페이지에서 yara 1.7 버전실행파일을 yara-1.7-win64.zip 파일과 yara-1.7-win32.zip 파일형태로두가지아키텍처에맞게제공하고있음 YARA 를실행시켰을때나타나는내용은위에서직접컴파일뒤실행한것과동일함 4. YARA Rule 작성 YARA 를실행하기위해서는먼저파일또는프로세스에서확인하고자하는패턴정보가담긴 YARA Rule 을작성하여야하는데, Rule 작성은 vim, notepad 등텍스트편집기를이용함
6 작성된 Rule 파일은분석가가원하는디렉터리에둘수있으며, yara 명령어와작성한 Rule 파일의디렉터리, 악성파일의디렉터리또는프로세스 ID 를함께입력하는것으로 YARA 를 실행할수있음 YARA Rule 의최소한으로갖춰야할형태는다음과같음 rule 룰 _ 이름 Boolean 값 검사하고자하는파일이 rule 의 condition 조건에 TRUE 가될경우, YARA 명령을실행했을때 해당파일이 rule 룰 _ 이름 에맞는파일이라고출력되고 FALSE 가될경우기본적으로 출력되지않음 ( 옵션에서변경가능 ) rule 룰 _ 이름 strings: $str = string here /* 텍스트스트링형태 */ $hex = 00 00 00 00 /* hex 스트링형태 */ $re = /md5: [0-9a-zA-Z]32/ /* 정규표현식형태 */ Boolean 값 /* strings: 에서사용된식별자사용 */ 4.1. Strings: strings 은 (1) 텍스트스트링형태 (2) hex 스트링형태 (3) 정규표현식형태로작성할수있고, 여기에사용된식별자 (identifier) 를이용하여 condition 구문을작성하게됨 식별자는앞에 $ 를붙여나타냄 (1) strings: 텍스트스트링형태 사이에 ASCII 인코딩을기준으로작성할수있으며대소문자를구별함 ( 구별하지않을시 nocase 키워드사용 ) (2) strings: hex 스트링형태 사이에 hex 값을입력하는데이때모든 hex 값을알지못하더라도 wild-card 를사용하여 대체할수있음 $hex_string = E2 34?? C8 A? FB
7 또한? 로나타낼수있는정확한길이를모를땐 jump 를이용하여그바이트길이를 대체할수있음 $hex_string = F4 23 [4-6] 62 B4 위경우 F4 23 00 00 00 00 62 B4 부터 F4 23 A3 04 45 22 7B FF 62 9B 등 4자리에서 6자리에이르는바이트를대체할수있음 최대 [0-255] 까지가능하지만패턴매칭속도를향상시키기위해서는최소한의범위로 줄여줄필요가있음 (3) strings: 정규표현식형태 정규표현식형태는 / / 사이에나타내며이때정규표현식의기준은 Perl 을따름 이과정을위해 YARA 설치과정에서 PCRE 가필요하였음 Perl 정규표현식은 http://www.pcre.org/pcre.txt 에상세설명되어있음 4.2. Conditions: Conditions 는 Boolean 값으로만결과가나타나며아래와같은기본적인 C 연산자가모두 사용가능함 ( 우선순위역시 C 의기준을따름 ) and, or, not >=, <=, <, >, ==!= + - * \ &,, <<, >>, ~ ($a or $b) and ($c or $d) /* True/False 로나타낼수있어야함 */ 이외자주등장하는연산자로 # 가있는데이는식별자의등장횟수로 #str == 6 이라고 한다면 str 이름을가진식별자가파일내 6 번등장하는것을의미함 $a at 100 and $b at 200 $a in (0..100) and $b in (100..filesize)
8 위는각각파일오프셋또는 ( 프로세스의경우 ) 메모리주소의위치와허용범위를나타내는 것으로식별자 a 가오프셋 100, 식별자 b 가오프셋 200 의위치에와있어야하는것을 의미함 filesize 는 YARA 명령어와함께사용되는파일의크기를불러옴 ( 프로세스에는적용안됨 ) 위와유사하게 $a at entrypoint $b in (entrypoint..entrypoint + 10) 는 PE 파일이나 ELF 파일의경우, 이것들이로드되는엔트리포인트 (EP) 위치에접근할수 있게함 여러스트링식별자를한꺼번에 condition 에적용하기위한규칙으로는다음예제가있음 all of them /* 모든스트링에적용 */ any of them /* 스트링중최소하나적용 */ all of ($a*) /* $a로시작되는모든스트링에적용 */ any of ($a,$b,$c) /* $a, $b, $c 중최소하나적용 */ 1 of ($*) /* 스트링중최소하나적용. any of them 과동일 */ 실제로 YARA rule 이길어지고 strings 개수가많아질수록모든 string 에대해 condition 을 적용하기어렵기때문에위와같은단체및일부지정 condition 의사용이빈번함 4.3. 그외규칙 rule TagsExample1 : Foo Bar Baz... rule TagsExample2 : Bar... Rule 에 1 개이상의태그를적용하여출력시특정태그 (-t <tag> 옵션 ) 만나타나게할수 있음 확인하는파일의개수가많을수록태그를사용하면편리함 meta: my_identifier_1 = "Some string data" my_identifier_2 = 24 my_identifier_3 = true
9 meta 는 rule 에영향을미치지않으며, 따라서 strings 나 condition 에사용할수없음 해당 rule 에대한추가정보를입력하는것으로보통 rule 작성자, 작성일, 확인된악성코드등 부가내용을기록하는데쓰임 YARA rule 파일은 include "other.yar" 을포함할수있는데, 이는외부 yara 파일 내용을불러들이는것임 YARA 파일의경로는절대와상대경로모두가능함 5. YARA 를이용한악성코드시그니처확인 5.1. 예제 먼저간단한예제를통한 YARA 의사용방식과결과출력은다음과같음 확인하고자하는악성코드파일은 test.html 이고이를확인하기위한 rule 이작성된 YARA 파일은 rules.yar( 또는 rules.yara) 임 soojin@ubuntu:~/desktop$ ls rules.yar test.html soojin@ubuntu:~/desktop$ cat test.html Hacked page included soojin@ubuntu:~/desktop$ cat rules.yar rule rules_test strings: $a = "hacked" nocase $b = "hacking" nocase 1 of them test.html 웹페이지파일에는 Hacked page included 라는문구가포함되어있음 분석가는확인하고자하는파일내에 hacked 또는 hacking 이라는스트링이포함되어 있으면 True 가되어출력되도록 rule 을작성함 커맨드는 yara + 옵션 + Rule 파일.yara + 파일및프로세스, 또는이를포함하고있는 디렉터리 순서로넣음 soojin@ubuntu:~/desktop$ yara rules.yar test.html rules_test test.html 커맨드결과, test.html 파일에는 rules.yar 에명시된스트링이포함되어있는것으로나타남
10 커맨드결과는 적용된룰이름 + 파일또는프로세스 순서로나타남 구체적으로어떤스트링이매치되었는지확인하기위해옵션 -s 를적용함 soojin@ubuntu:~/desktop$ yara -s rules.yar test.html rules_test test.html 0x0:$a: Hacked 커맨드결과, Hacked 라는스트링이 test.html 에포함되어있음 만약 test.html 에 Hacked 라는스트링이포함되어있지않았다면, 결과는아래와같이 아무것도나타나지않음 soojin@ubuntu:~/desktop$ cat test.html No malicious page included soojin@ubuntu:~/desktop$ yara -s rules.yar test.html soojin@ubuntu:~/desktop$ 5.2. DarkSeoul 악성코드 DarkSeoul 은국내 3.20 사이버테러를일으켰던악성코드로, MBR 영역을파괴하여부팅이 불가능하게하는기능이포함되어있음 DarkSeoul 악성코드샘플은 http://contagiodump.blogspot.kr/2013/03/darkseoul-jokrambr-wiper-samples.html 에서받을수있음 샘플파일은 Dropper 를포함하여총 7 개임 soojin@ubuntu:~/desktop/darkseoul$ ls -R.: DarkSeoul_0A8032CD6B4A710B1771A080FA09FB87 DarkSeoul_50E03200C3A0BECBF33B3788DAC8CD46 DarkSeoul_5FCD6E1DACE6B0599429D913850F0364 DarkSeoul_DB4BBDC36A78A8807AD9B15A562515C4 DarkSeoulDropper DarkSeoul_E4F66C3CD27B97649976F6F0DAAD9032 DarkSeoul_F0E045210E3258DAD91D7B6B4D64E7F3./DarkSeoulDropper: DarkSeoulDropper_9263E40D9823AECF9388B64DE34EAE54 첫번째 YARA rule 파일 apt_win_lin_hastati_jokra_darkseoul.yar 은 FireEye 에서작성한 것 4 으로, 안랩클라이언트프로그램인 pasvc.exe 프로세스를 kill 하고시스템을종료하는 행위 ( 스트링 ) 가포함되어있는파일을탐지함 4 http://www.fireeye.com/blog/botnet-activities-outbreaks/2013/03/more-insights-on-therecent-korean-cyber-attacks-trojan-hastati.html
11 soojin@ubuntu:~/desktop$ cat /home/soojin/desktop/yarasigsmaster/trojans/apt2_win_lin_hastati_jokra-darkseoul.yar rule apt_win_lin_hastati_jokra_darkseoul meta: version = "1" author = "FireEye" description = "Korean campaign" yaraexchange = "No distribution without author's consent" reference = "http://www.fireeye.com/blog/botnet-activitiesoutbreaks/2013/03/more-insights-on-the-recent-korean-cyber-attackstrojan-hastati.html" md5 = "0A8032CD6B4A710B1771A080FA09FB87" strings: $str1 = "taskkill /F /IM clisvc.exe" $str2 = "taskkill /F /IM pasvc.exe" $str3 = "shutdown -r -t 0" $str3 and ($str2 or $str1) /*DarkSeoul_0A8032CD6B4A710B1771A080FA09FB87 DarkSeoul_5FCD6E1DACE6B0599429D913850F0364 DarkSeoul_50E03200C3A0BECBF33B3788DAC8CD46 - not DarkSeoul_DB4BBDC36A78A8807AD9B15A562515C4 DarkSeoul_E4F66C3CD27B97649976F6F0DAAD9032 - not DarkSeoul_F0E045210E3258DAD91D7B6B4D64E7F3 DarkSeoulDropper_9263E40D9823AECF9388B64DE34EAE54 - not */ 위샘플들처럼하위디렉터리가있는경우 -r 옵션 (recursively) 을걸어모든파일에대해 검사를할수있도록함 YARA 명령결과, "taskkill /F /IM clisvc.exe" 이나 "taskkill /F /IM pasvc.exe" 명령을내리고 시스템을종료하는 shutdown -r -t 0 기능이포함된악성코드파일이 4 개탐지됨 soojin@ubuntu:~/desktop$ yara -r /home/soojin/desktop/yarasigsmaster/trojans/apt2_win_lin_hastati_jokra-darkseoul.yar ~/Desktop/DarkSeoul apt_win_lin_hastati_jokra_darkseoul /home/soojin/desktop/darkseoul/darkseoul_db4bbdc36a78a8807ad9b15a5625 15C4 apt_win_lin_hastati_jokra_darkseoul /home/soojin/desktop/darkseoul/darkseoul_f0e045210e3258dad91d7b6b4d64 E7F3 apt_win_lin_hastati_jokra_darkseoul /home/soojin/desktop/darkseoul/darkseoul_0a8032cd6b4a710b1771a080fa09 FB87 apt_win_lin_hastati_jokra_darkseoul /home/soojin/desktop/darkseoul/darkseoul_5fcd6e1dace6b0599429d913850f 0364
12 악성코드파일별로탐지된스트링은 -s 옵션을통해구체적으로확인할수있음 soojin@ubuntu:~/desktop$ yara -r -s /home/soojin/desktop/yarasigsmaster/trojans/apt2_win_lin_hastati_jokra-darkseoul.yar ~/Desktop/DarkSeoul apt_win_lin_hastati_jokra_darkseoul /home/soojin/desktop/darkseoul/darkseoul_db4bbdc36a78a8807ad9b15a5625 15C4 0x2a27:$str3: shutdown -r -t 0 0x2a4c:$str2: taskkill /F /IM pasvc.exe 0x2a66:$str1: taskkill /F /IM clisvc.exe apt_win_lin_hastati_jokra_darkseoul /home/soojin/desktop/darkseoul/darkseoul_f0e045210e3258dad91d7b6b4d64 E7F3 0x2a27:$str3: shutdown -r -t 0 0x2a4c:$str2: taskkill /F /IM pasvc.exe 0x2a66:$str1: taskkill /F /IM clisvc.exe apt_win_lin_hastati_jokra_darkseoul /home/soojin/desktop/darkseoul/darkseoul_0a8032cd6b4a710b1771a080fa09 FB87 0x29ea:$str3: shutdown -r -t 0 0x2a0f:$str2: taskkill /F /IM pasvc.exe 0x2a29:$str1: taskkill /F /IM clisvc.exe apt_win_lin_hastati_jokra_darkseoul /home/soojin/desktop/darkseoul/darkseoul_5fcd6e1dace6b0599429d913850f 0364 0x294a:$str3: shutdown -r -t 0 0x295b:$str2: taskkill /F /IM pasvc.exe 두번째 YARA rule 파일 apt2_win_darkseoul_dev.yar 은이보다좀더기능이확대된것으로, 악성파일로인해변조및생성되는문자열을포함하고있음 soojin@ubuntu:~/desktop$ cat /home/soojin/desktop/yarasigsmaster/new_untested/trojans_dev/apt2_win_darkseoul_dev.yar /*Below is a first cut at a sig for the dropper, windows wiper component, and malicious batch file associated with the recent Korean wiper malware. This may also pick up on future software developed by the same author based on the debug string found in the unpacked dropper. */ rule apt2_win_darkseoul_dev meta: author = "Brian Bartholomew isight Partners (bbartholomew@isightpartners.com)" description = "Detects dropper and components of the DarkSeoul Disk Wiper Trojan" filetype = "exe" date = "2013-03-21" strings: $String_1 = "\\~v3.log" $String_2 = "JO840112-CRAS8468-11150923-PCI8273V" $String_3 = "PRINCPES" $String_4 = "PR!NCPES"
13 $String_5 = "HASTATI." $String_6 = "\\_O_\\_N_\\work\\" $Command_1 = "taskkill /F /IM pasvc.exe" $Command_2 = "taskkill /F /IM clisvc.exe" $Bash_1 = "dd_for_hp" $Bash_2 = "dd_for_aix" $Bash_3 = "dd_for_sun" $Bash_4 = "dd_for_linux" any of ($String*) or all of ($Command*) or all of ($Bash*) 커맨드결과총 5 개파일에대한악성행위가탐지되었음 soojin@ubuntu:~/desktop$ yara -r -s /home/soojin/desktop/yarasigsmaster/new_untested/trojans_dev/apt2_win_darkseoul_dev.yar ~/Desktop/DarkSeoul apt2_win_darkseoul_dev /home/soojin/desktop/darkseoul/darkseoul_db4bbdc36a78a8807ad9b15a5625 15C4 0x2a66:$Command_2: taskkill /F /IM clisvc.exe 0x2a4c:$Command_1: taskkill /F /IM pasvc.exe 0x29be:$String_5: HASTATI. 0x29b5:$String_3: PRINCPES 0x2991:$String_2: JO840112-CRAS8468-11150923-PCI8273V 0x29cc:$String_1: \~v3.log apt2_win_darkseoul_dev /home/soojin/desktop/darkseoul/darkseoul_f0e045210e3258dad91d7b6b4d64 E7F3 0x2a66:$Command_2: taskkill /F /IM clisvc.exe 0x2a4c:$Command_1: taskkill /F /IM pasvc.exe 0x29be:$String_5: HASTATI. 0x29b5:$String_3: PRINCPES 0x2991:$String_2: JO840112-CRAS8468-11150923-PCI8273V 0x29cc:$String_1: \~v3.log apt2_win_darkseoul_dev /home/soojin/desktop/darkseoul/darkseouldropper/darkseouldropper_9263 E40D9823AECF9388B64DE34EAE54 0xaad4:$String_1: \~v3.log apt2_win_darkseoul_dev /home/soojin/desktop/darkseoul/darkseoul_0a8032cd6b4a710b1771a080fa09 FB87 0x2a29:$Command_2: taskkill /F /IM clisvc.exe 0x2a0f:$Command_1: taskkill /F /IM pasvc.exe 0x2981:$String_5: HASTATI. 0x2978:$String_4: PR!NCPES 0x2954:$String_2: JO840112-CRAS8468-11150923-PCI8273V 0x298f:$String_1: \~v3.log apt2_win_darkseoul_dev /home/soojin/desktop/darkseoul/darkseoul_5fcd6e1dace6b0599429d913850f 0364 0x295b:$Command_1: taskkill /F /IM pasvc.exe
14 0x28ef:$String_5: HASTATI. 0x28cb:$String_2: JO840112-CRAS8468-11150923-PCI8273V 5.3. CVE-2013-0640 취약점이용악성 PDF 파일 Adobe Reader 와 Acrobat 에존재하는 CVE-2013-0640 취약점 ( 힙스프레이오버플로우 취약점 ) 을이용한악성 PDF 파일을 YARA 를통해분류할수있음 먼저샘플파일은총 21 개를준비하였으며, http://contagiodump.blogspot.kr/2013/04/cve- 2013-0640-samples-listing.html 에서받을수있음 soojin@ubuntu:~/desktop/cve-2013-0640_pdf_21files$ ls CVE-2013-0640_PDF_0CDF55626E56FFBF1B198BEB4F6ED559_report.pdf2 CVE-2013-0640_PDF_151ADD98EEC006F532C635EA3FC205CE_action_plan.pdf_ CVE-2013-0640_PDF_2A42BF17393C3CAAA663A6D1DADE9C93_Mandiant.pdf_ CVE-2013-0640_PDF_3119ABBA449D16355CEB385FD778B525_mousikomi.pdf_ CVE-2013-0640_PDF_3668B018B4BB080D1875AEE346E3650A_action_plan.pdf_ CVE-2013-0640_PDF_37A9C45B78F4DEE9DA8FD8019F66005A_sample.pdf_ CVE-2013-0640_PDF_3F301758AA3D5D123A9DDBAD1890853B_EUAG_report.pdf_ CVE-2013-0640_PDF_6945E1FBEF586468A6D4F0C4F184AF8B_report.pdf_ CVE-2013-0640_PDF_7005E9EE9F673EDAD5130B3341BF5E5F_2013-Yilliq Noruz Bayram Merikisige Teklip.pdf_ CVE-2013-0640_PDF_701E3F3973E8A8A7FCEC5F8902ECBFD9_701E3F3973E8A8A7FCEC5F8902E CBFD9 CVE-2013-0640_PDF_88292D7181514FDA5390292D73DA28D4_ASEM_Seminar.pdf_ CVE-2013-0640_PDF_8E3B08A46502C5C4C45D3E47CEB38D5A_cc08_v143.pdf_ CVE-2013-0640_PDF_9C572606A22A756A1FCC76924570E92A_pdf.pdf_ CVE-2013-0640_PDF_A7C89D433F737B3FDC45B9FFBC947C4D_A7C89D433F737B3FDC45B9FFBC9 47C4D CVE-2013-0640_PDF_AD668992E15806812DD9A1514CFC065B_arp.pdf_ CVE-2013-0640_PDF_AE52908370DCDF6C150B6E2AD3D8B11B_AE52908370DCDF6C150B6E2AD3D 8B11B CVE-2013-0640_PDF_AF061F8C63CD1D4AD83DC2BF81F36AF8_readme.pdf_ CVE-2013-0640_PDF_C03BCB0CDE62B3F45B4D772AB635E2B0_The 2013 Armenian Economic Association.pdf_ CVE-2013-0640_PDF_D00E4AC94F1E4FF67E0E0DFCF900C1A8_ 联名信.pdf_ CVE-2013-0640_PDF_EF90F2927421D61875751A7FE3C7A131_action_plan.pdf3 CVE-2013-0640_PDF_F3B9663A01A73C5ECA9D6B2A0519049E_Visaform Turkey.pdf_ 탐지를위한 YARA rule 파일은 _all.yar 임 ( 가독성을위해주석을 제거하였음 ) soojin@ubuntu:~/desktop$ cat _all.yar rule meta: description = "detects CVE_2013_0640, types known as of March 17,2013" reference = "http://blog.vulnhunt.com/index.php/2013/02/21/cve-2013-0641- analysis-of-acrobat-reader-sandbox-escape/"
15 consent" strings: author = "Mila DeepEnd Research" cve = "cve-2013-0640" filetype = "pdf" note = "tested on 11K malicious and 10k clean pdfs" yaraexchange = "No distribution without author's $pdf1 = "%PDF" nocase $s1 = 2F 58 46 41 20 //xfa $s2 = 2F 41 63 72 6F 46 6F 72 6D 20 //acroform $s3 = 2F 4F 70 65 6E 41 63 74 69 6F 6E //openaction $s4 = 2F 4E 65 65 64 73 52 65 6E 64 65 72 69 6E 67 20 74 72 75 65 ///NeedsRendering true $pdf1 in (0..1018) and all of ($s*) rule _original0day meta: description = "detects CVE_2013_0640, the original 0day type with the nfunction key" reference = "https://www.securelist.com/en/downloads/vlpdfs/themysteryofthepdf0- dayassemblermicrobackdoor.pdf" author = "Dewan Chowdhury" yaraexchange = "No distribution without author's consent" tag = "Adobe Reader, CVE-2013-0640, CVE-2013-0641" comment = "Detects strings attributed to CVE-2013-0640, CVE-2013-0641" strings: $pdf1 = "%PDF" nocase $s1 = "r+=ue" $s2 = "AcroForm" nocase $s3 = "nfunction" $pdf1 in (0..1018) and all of ($s*) rule _uyghur_tibet meta: description = "detects CVE_2013_0640 variant desribed below" reference = "https://www.securelist.com/en/downloads/vlpdfs/themysteryofthepdf0- dayassemblermicrobackdoor.pdf" author = "Jaime Bblasco Alienvault" cve = "cve-2013-0640" filetype = "pdf" yaraexchange = "No distribution without author's consent" strings: $pdf = "%PDF" nocase $comment = 3C 21 2D 2D 0D 0A 63 57 4B 51 6D 5A 6C 61 56 56 56 56 56 56 56 56 56 56 56 56 56 63 77 53 64 63 6A 4B 7A 38 35 6D 37 4A 56 6D 37 4A 46 78 6B 5A 6D 5A 6D 52 44 63 5A 58 41 73 6D 5A 6D 5A 7A 42 4A 31 79 73 2F 4F 0D 0A
16 $pdf at 0 and $comment in (0..200) _all.yar 파일은총 3 개의 rule 로만들어졌으며, 이와같이하나의 파일이라도각기다른시그니처를탐지할수있는 rule 을여러개작성할수있음 즉, 지속적인 rule 업데이트로악성코드탐지를보다효과적으로할수있음 여기에서는직접적인영향을미치지않는 meta 정보나주석을제외하면특정스트링과 hex 데이터를포함하는것으로악성코드시그니처를판별하고있고, 이때주어지는조건으로특정위치파일오프셋 ( 또는오프셋범위 ) 이나가상메모리주소공간 ( 프로세스일경우 ) 을사용하고있음 YARA 커맨드실행결과다음과같이악성 PDF 파일을걸러내었음 어떤악성 PDF 파일의경우에는 2 개이상의 rule 에적용되기도하였음 soojin@ubuntu:~/desktop$ yara -r _all.yar CVE- 2013-0640_PDF_21files/ 0640_PDF_3668B018B4BB080D1875AEE346E3650A_action_plan.pdf_ 0640_PDF_8E3B08A46502C5C4C45D3E47CEB38D5A_cc08_v143.pdf uyghur_tibet CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_8E3B08A46502C5C4C45D3E47CEB38D5A_cc08_v143.pdf_ 0640_PDF_6945E1FBEF586468A6D4F0C4F184AF8B_report.pdf_ 0640_PDF_88292D7181514FDA5390292D73DA28D4_ASEM_Seminar.pdf_ 0640_PDF_F3B9663A01A73C5ECA9D6B2A0519049E_Visaform Turkey.pdf original0day CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_F3B9663A01A73C5ECA9D6B2A0519049E_Visaform Turkey.pdf_ 0640_PDF_AD668992E15806812DD9A1514CFC065B_arp.pdf uyghur_tibet CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_AD668992E15806812DD9A1514CFC065B_arp.pdf_ 0640_PDF_A7C89D433F737B3FDC45B9FFBC947C4D_A7C89D433F737B3FDC45B9FFBC9 47C4D 0640_PDF_2A42BF17393C3CAAA663A6D1DADE9C93_Mandiant.pdf original0day CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_2A42BF17393C3CAAA663A6D1DADE9C93_Mandiant.pdf_ 0640_PDF_0CDF55626E56FFBF1B198BEB4F6ED559_report.pdf2 0640_PDF_701E3F3973E8A8A7FCEC5F8902ECBFD9_701E3F3973E8A8A7FCEC5F8902E CBFD9 0640_PDF_AF061F8C63CD1D4AD83DC2BF81F36AF8_readme.pdf_
17 _original0day CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_AF061F8C63CD1D4AD83DC2BF81F36AF8_readme.pdf_ 0640_PDF_7005E9EE9F673EDAD5130B3341BF5E5F_2013-Yilliq Noruz Bayram Merikisige Teklip.pdf uyghur_tibet CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_7005E9EE9F673EDAD5130B3341BF5E5F_2013-Yilliq Noruz Bayram Merikisige Teklip.pdf_ 0640_PDF_3F301758AA3D5D123A9DDBAD1890853B_EUAG_report.pdf_ 0640_PDF_EF90F2927421D61875751A7FE3C7A131_action_plan.pdf3 0640_PDF_151ADD98EEC006F532C635EA3FC205CE_action_plan.pdf_ 0640_PDF_9C572606A22A756A1FCC76924570E92A_pdf.pdf_ 0640_PDF_3119ABBA449D16355CEB385FD778B525_mousikomi.pdf original0day CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_3119ABBA449D16355CEB385FD778B525_mousikomi.pdf_ 0640_PDF_D00E4AC94F1E4FF67E0E0DFCF900C1A8_ 联名信.pdf uyghur_tibet CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_D00E4AC94F1E4FF67E0E0DFCF900C1A8_ 联名信.pdf_ 0640_PDF_C03BCB0CDE62B3F45B4D772AB635E2B0_The 2013 Armenian Economic Association.pdf_ 0640_PDF_AE52908370DCDF6C150B6E2AD3D8B11B_AE52908370DCDF6C150B6E2AD3D 8B11B 0640_PDF_37A9C45B78F4DEE9DA8FD8019F66005A_sample.pdf original0day CVE-2013-0640_PDF_21files//CVE- 2013-0640_PDF_37A9C45B78F4DEE9DA8FD8019F66005A_sample.pdf_ 6. 결론 악성코드파일에대한텍스트스트링이나 hex 값등의일부데이터, 또는패턴반복회수등 여러정보를 YARA 에이용하여검사하고자하는파일이악성인지아닌지를파악할수있음 기본적인프로그래밍만가능하다면쉽게작성할수있는 YARA Rule 은비교적간단한 문법이지만정규표현식과여러조건문을지원하여매우효율적으로악성코드의시그니처를 확인할수있음 특히, Linux, Mac OS X, Windows 시스템에서모두사용가능하다는점에서사용이용이함 지속적으로 YARA 시그니처를관리하여 AV 제품에적용할수있음 그러나 YARA 는주어진패턴을기반으로하는판별및분류툴이기때문에검사하고자하는 파일이나프로세스가바로어떤행위를하는지는알기어려우며, 악성여부를판단하기 위해서는 Rule 에포함될최소한의정보가필요함
18 예를들어모바일악성코드의경우, 특정 C&C 서버로접속하는 http 스트링이포함되어 있는지가 rule 의 Strings: 부분에정의되어야하고, 악성 doc 파일의경우에는사전에확인된 쉘코드나악성스트링데이터가필요할것임 7. 참고 (1) YARA의자세한사용방법및 Rule 작성법은 YARA User's Manual 1.6에상세히나와있음 https://code.google.com/p/yaraproject/downloads/detail?name=yara%20user%27s%20manual%201.6.pdf (2) YARA User s Manual 1.6 을한글로번역한것도있으나문맥이다소매끄럽지못한 부분도있음 http://hidka.tistory.com/attachment/cfile5.uf@125c4c4150c90a252fdbef.pdf (3) YARA Signarue Exchange Group 은 Crimeware, APT 등을중심으로한최신악성코드 시그니처를공유하는그룹 http://www.deependresearch.org/2012/08/yara-signature-exchange-google-group.html (4) YARA 외에악성코드시그니처를이용하여분석하는도구 (ClamAV, Vscan) http://blog.zeltser.com/post/4339793582/custom-signatures-for-malware-scan