목차
- Yara 란?
- 시그니처 - String 탐지
- 시그니처 - Binary 탐지
- 정규표현식
- Yara Rule 수집
- Python Source Code
- Yara Rule 응용
Yara 란?
- Yara는 악성 파일을 시그니처 기반으로 판별 및 분류 할 수 있게 하는 툴
- Linux, Windows OS에서 모두 사용 가능
- 소스코드 컴파일, Python 모듈, 파일 실행 방식 등 다양한 방법으로 Yara 설치 및 실행 가능
시그니처 - String 탐지
![](https://t1.daumcdn.net/cfile/tistory/99379D335A2DD2B40B)
스트링 탐지란?
Value 타이틀에 속해 있는 String들을 탐지하는 방법. 그리고 탐지 문자열을 대소문자 구별을 하고 싶다면 뒤에 "nocase"를 붙여 사용한다.
Condition의 역할은 결과값이 "참"인지 "거짓"인지 판별 해준다.
![](https://t1.daumcdn.net/cfile/tistory/9946FC335A2DDF1231)
밑의 hex 정보에서 2바이트씩 사용되는 " U . P . X . 0 " UniCode인 스트링을
탐지할려면 위와 같이 대소문자를 구별하기 위해선 "nocase"를 붙였다면,
UniCode 탐지를 위해선 "WIDE ASCII"를 붙여 주면 된다.
이외의 방법으로는 탐지 문자열(UPX) 주변이 특수 문자일 경우에만 탐지하는
방법인데, 예를들어
123UPX123 , aaUPX1aa2 이와 같이 UPX를 탐지하게 되면 주변 문자열과 상관없이
특정 문자열을 탐지 하게 된다. 하지만 이럴경우 UUUPXXX 이런식으로 쓸모없는
문자열도 탐지가 될 수 있기 때문에 "....UPX....." , "__UPX_" , " UPX !" 이러한
주변 특수문자가 존재하는 경우의 문자열만 탐지하도록 한다
![](https://t1.daumcdn.net/cfile/tistory/99E54F335A2DE0F731)
시그니처 - Binary 탐지
Binary 란?
파일 내부의 HEX값 탐지하는 기법으로 문자열 뿐만 아니라 16진수 값을 Rule에 적용 할 수 있으며, WILD CARDS를 사용하여 1바이트를 랜덤으로 대체 할 수 있다.
![](https://t1.daumcdn.net/cfile/tistory/998FCC335A2DE56612)
<일반 16진수 시그니처> 일반 HEX값을 시그니처 RULE 제작 한 경우
<WILD CARDS 사용한 시그니처> 1바이트 HEX값을 ?? (랜덤) 표시로 대체하여
저 공간에 00~FF 랜덤으로 대체하고 주변 HEX값들로 탐지를 하는 방법
![](https://t1.daumcdn.net/cfile/tistory/992D19335A2DE6C609)
WILD CARDS 뿐 아니라 JUMPS라는 기능도 사용 가능
JUMPS란 예를들어 그림에 나와있는 E2 와 8E 사이의 글자수를 임의로 정할 수
있음. [1-5] 란 뜻은 E2 와 8E 사이에 1-5바이트의 길이가 랜덤으로 들어갈 수 있다고
보면 됨
![](https://t1.daumcdn.net/cfile/tistory/9983B7335A2DE7CD24)
뜻그 외에도 HEX값 (8E|88) 중에서 OR 기능을 사용하여 둘 중 하나라도
해당되어도 탐지되는 방법이 있다.
정규표현식이란?
정규표현식이란 특정한 규칙을 가진 문자열의 집합을 표현할 때 사용하는 '형식 언어' 이다. Yara에서는 특정 문자열이나 바이너리뿐만 아니라 정규표현식도 사용 할 수 있다.
![](https://t1.daumcdn.net/cfile/tistory/99CE14335A2DE93B1E)
정규 표현식으로 Yara Rule 적용
/HTTPS:\S+\ - HTTPS: 로 시작하는 문자열을 탐지한 후 뒤의 문자열 까지 추출
/(\d{1,3}\.){3}\d{1,3}/ - 숫자를 출력 해주는 방법이지만 " . "을 붙여 IP 형태의
숫자만 출력하도록 정규표현식 작성
![](https://t1.daumcdn.net/cfile/tistory/994FE1335A2DEC932E)
Yara Rule 수집
https://github.com/Yara-Rules/rules
github에서 Malware Yara Rule들을 제공하는 사이트가 존재하여 여기서
최신 Rule들이 올라오는지 확인하여 지속적으로 추가해주여야함
![](https://t1.daumcdn.net/cfile/tistory/99917F335A2DEEDB39)
Python Source Code
Yara Rule을 좀 더 수월하게 사용하기 위하여 Python을 이용하여 하나의 파일 대상을 여러개의 Yara Rule들과 비교하는 소스코드를 작성
![](https://t1.daumcdn.net/cfile/tistory/99DBA6335A2DF0F305)
![](https://t1.daumcdn.net/cfile/tistory/99D73C335A2DF15312)
281개의 Rule들이 들어있는 "/root/Samplerules/rules/malware" 폴더
![](https://t1.daumcdn.net/cfile/tistory/99151B335A2DF1D10F)
Rule 탐지를 할 때 Rule 이름도 같이 출력이 되기에 어떤 Rule에서 탐지되었는지 확인 가능 또 탐지가 되었다면 어떤 String , Binary 몇 번째 줄에서 탐지 되었는지 확인 가능
![](https://t1.daumcdn.net/cfile/tistory/993941335A2DF2D21F)
<탐지 결과>
Yara Rule 응용 - BackDoor 악성코드 C&C 서버 추출
BackDoor (악성파일) 동적으로 스트링 추출 후 Yara Rule 검사
정규표현식 Yara Rule 제작 - URL , IP 텍스트 출력
![](https://t1.daumcdn.net/cfile/tistory/99948B335A2DF39814)
<Malware_URL_List>
![](https://t1.daumcdn.net/cfile/tistory/996DE8335A2DF39816)
<Malware_IP_List>
![](https://t1.daumcdn.net/cfile/tistory/997FCD335A2E07090F)
<파일 내부에서 실행되고 있는 스트링 중 IP 의심 출력>
와이어샤크 (WireShark)를 이용하여 TCP 통신 IP와 BackDoor(악성파일)에 속해 있는 IP 대조 C&C 서버 통신 확인 후 상세 분석
![](https://t1.daumcdn.net/cfile/tistory/99D8D0335A2E076A25)
Yara Rule 응용 - HTTP : URL List들이 모여있는 .txt 파일 .csv 파일등을 URL 한줄 씩 불러와 해당 URL의 웹페이지 소스 또는 http://dd.com/aa.exe 실행파일 등의 PE 소스를 출력하여 수 많은 Yara Rule 시그니처를 비교하는 자동화 소스코드 제작
![](https://t1.daumcdn.net/cfile/tistory/994F23335A1BCBE101)
1. 실행파일.py 실행
2. .csv 또는 .txt 형태 안의 URL 한줄 출력
3. Yara Rule 폴더 안의 (개수 상관x) 모든 시그니처 검사
4. 결과 출력 - 탐지된 스트링 , Yara Rule 이름 출력 or 결과 .txt 형태로 저장
![](https://t1.daumcdn.net/cfile/tistory/99240F335A1BD1621C)
mws_mal_url_private_20170928_00.csv - 검사 대상 URL 리스트 파일
![](https://t1.daumcdn.net/cfile/tistory/991857335A1BD1F311)
CMP_URL_CSV.py - 시작 실행 파일.py
Malware_URL_list.yar - 위의 csv 랑 비교하여 정규표현식으로 http~ URL 주소만
추출
![](https://t1.daumcdn.net/cfile/tistory/99E5DC335A1BD28121)
DetectionResult - 결과값을 .txt 형태로 저장
MalwareCMP_txt - 위의 URL주소의 소스를 txt형태로 저장
rules - 시그니처 룰
MalwareURL_YaraGoGo.py - MalwareCMP_txt 와 rules 비교하여
DetectionResult 결과값 저장
파이썬 2.7 & Yara Rule 소스
다운로드 : 네이버 클라우드 - (Python 기반)Yara 시그니처 탐지 폴더 - Yara_Malware_URL.tar.gz