목차
- Yara 란?
- 시그니처 - String 탐지
- 시그니처 - Binary 탐지
- 정규표현식
- Yara Rule 수집
- Python Source Code
- Yara Rule 응용
Yara 란?
- Yara는 악성 파일을 시그니처 기반으로 판별 및 분류 할 수 있게 하는 툴
- Linux, Windows OS에서 모두 사용 가능
- 소스코드 컴파일, Python 모듈, 파일 실행 방식 등 다양한 방법으로 Yara 설치 및 실행 가능
시그니처 - String 탐지

스트링 탐지란?
Value 타이틀에 속해 있는 String들을 탐지하는 방법. 그리고 탐지 문자열을 대소문자 구별을 하고 싶다면 뒤에 "nocase"를 붙여 사용한다.
Condition의 역할은 결과값이 "참"인지 "거짓"인지 판별 해준다.

밑의 hex 정보에서 2바이트씩 사용되는 " U . P . X . 0 " UniCode인 스트링을
탐지할려면 위와 같이 대소문자를 구별하기 위해선 "nocase"를 붙였다면,
UniCode 탐지를 위해선 "WIDE ASCII"를 붙여 주면 된다.
이외의 방법으로는 탐지 문자열(UPX) 주변이 특수 문자일 경우에만 탐지하는
방법인데, 예를들어
123UPX123 , aaUPX1aa2 이와 같이 UPX를 탐지하게 되면 주변 문자열과 상관없이
특정 문자열을 탐지 하게 된다. 하지만 이럴경우 UUUPXXX 이런식으로 쓸모없는
문자열도 탐지가 될 수 있기 때문에 "....UPX....." , "__UPX_" , " UPX !" 이러한
주변 특수문자가 존재하는 경우의 문자열만 탐지하도록 한다

시그니처 - Binary 탐지
Binary 란?
파일 내부의 HEX값 탐지하는 기법으로 문자열 뿐만 아니라 16진수 값을 Rule에 적용 할 수 있으며, WILD CARDS를 사용하여 1바이트를 랜덤으로 대체 할 수 있다.

<일반 16진수 시그니처> 일반 HEX값을 시그니처 RULE 제작 한 경우
<WILD CARDS 사용한 시그니처> 1바이트 HEX값을 ?? (랜덤) 표시로 대체하여
저 공간에 00~FF 랜덤으로 대체하고 주변 HEX값들로 탐지를 하는 방법

WILD CARDS 뿐 아니라 JUMPS라는 기능도 사용 가능
JUMPS란 예를들어 그림에 나와있는 E2 와 8E 사이의 글자수를 임의로 정할 수
있음. [1-5] 란 뜻은 E2 와 8E 사이에 1-5바이트의 길이가 랜덤으로 들어갈 수 있다고
보면 됨

뜻그 외에도 HEX값 (8E|88) 중에서 OR 기능을 사용하여 둘 중 하나라도
해당되어도 탐지되는 방법이 있다.
정규표현식이란?
정규표현식이란 특정한 규칙을 가진 문자열의 집합을 표현할 때 사용하는 '형식 언어' 이다. Yara에서는 특정 문자열이나 바이너리뿐만 아니라 정규표현식도 사용 할 수 있다.

정규 표현식으로 Yara Rule 적용
/HTTPS:\S+\ - HTTPS: 로 시작하는 문자열을 탐지한 후 뒤의 문자열 까지 추출
/(\d{1,3}\.){3}\d{1,3}/ - 숫자를 출력 해주는 방법이지만 " . "을 붙여 IP 형태의
숫자만 출력하도록 정규표현식 작성

Yara Rule 수집
https://github.com/Yara-Rules/rules
github에서 Malware Yara Rule들을 제공하는 사이트가 존재하여 여기서
최신 Rule들이 올라오는지 확인하여 지속적으로 추가해주여야함

Python Source Code
Yara Rule을 좀 더 수월하게 사용하기 위하여 Python을 이용하여 하나의 파일 대상을 여러개의 Yara Rule들과 비교하는 소스코드를 작성


281개의 Rule들이 들어있는 "/root/Samplerules/rules/malware" 폴더

Rule 탐지를 할 때 Rule 이름도 같이 출력이 되기에 어떤 Rule에서 탐지되었는지 확인 가능 또 탐지가 되었다면 어떤 String , Binary 몇 번째 줄에서 탐지 되었는지 확인 가능

<탐지 결과>
Yara Rule 응용 - BackDoor 악성코드 C&C 서버 추출
BackDoor (악성파일) 동적으로 스트링 추출 후 Yara Rule 검사
정규표현식 Yara Rule 제작 - URL , IP 텍스트 출력

<Malware_URL_List>

<Malware_IP_List>

<파일 내부에서 실행되고 있는 스트링 중 IP 의심 출력>
와이어샤크 (WireShark)를 이용하여 TCP 통신 IP와 BackDoor(악성파일)에 속해 있는 IP 대조 C&C 서버 통신 확인 후 상세 분석

Yara Rule 응용 - HTTP : URL List들이 모여있는 .txt 파일 .csv 파일등을 URL 한줄 씩 불러와 해당 URL의 웹페이지 소스 또는 http://dd.com/aa.exe 실행파일 등의 PE 소스를 출력하여 수 많은 Yara Rule 시그니처를 비교하는 자동화 소스코드 제작

1. 실행파일.py 실행
2. .csv 또는 .txt 형태 안의 URL 한줄 출력
3. Yara Rule 폴더 안의 (개수 상관x) 모든 시그니처 검사
4. 결과 출력 - 탐지된 스트링 , Yara Rule 이름 출력 or 결과 .txt 형태로 저장

mws_mal_url_private_20170928_00.csv - 검사 대상 URL 리스트 파일

CMP_URL_CSV.py - 시작 실행 파일.py
Malware_URL_list.yar - 위의 csv 랑 비교하여 정규표현식으로 http~ URL 주소만
추출

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