💫Yara의 정의
간단하게 말해서 악성코드의 시그니처를 이용하여 악성 파일을 분류하는 툴.
- 악성코드의 시그니처(Signature)란?
악성코드 샘플 파일, 프로세스에 포함된 string 또는 binary 패턴.
따라서 탐지하고자 할 때, string 탐지와 binary 탐지로 분류.
시그니처 외에도 특정 Entry Point 값을 지정하거나, 파일 오프셋(File Offset), 가상메모리 주소(Virtual Memory Address)를 제시하고 정규표현식(Regular Expression)을 이용해 효율적인 패턴 매칭 가능.
💫시그니처 기반 탐지
1) String 탐지
Value의 String들을 탐지하는 방법.
2) Binary 탐지
파일 내부의 Hex값을 탐지하는 방법.
💫Yara 사용
yara는 Linux, Mac, Windows OS에서 모두 사용 가능.
소스코드를 직접 컴파일 하거나 yara 실행파일을 직접 실행, 또는 python 확장을 통해 yara 사용 가능.
- Yara Rule 작성
C, Python으로 작성. yara rule을 작성할 때 갖춰야 하는 최소한의 형태는 다음과 같다.
- 최소한의 Yara rule 작성
rule 룰_이름
{
    condition:
        Boolean 값
}악성을 판별할 파일이 rule의 condition 조건에 true가 될 경우, yara 명령 실행시 규칙에 맞음을 출력.
false가 되면 출력하지 않는다.
- 기본적인 Yara rule 작성
rule 룰_이름
{
    strings:
        $str = " "
        $hex = { 00 00 00 00 }
        $re = /   /
    condition:
        Boolean 값
}1) 룰_이름
영문자와 숫자, 밑줄 문자 포함 가능, 첫번째 문자는 숫자를 사용할 수 없다.
(예약어 키워드도 사용할 수 x)
2) strings:
텍스트 스트링 형태, hex 스트링 형태, 정규 표현식 형태로 작성 가능.
식별자 $를 앞에 붙여 구문을 작성한다.
(1) 텍스트 스트링 형태
” ” 사이에 ASCII 인코딩, 대소문자를 구분하는 문자열을 표현.
대소문자 구별하지 않을 시 ” ” 뒤에 nocase 키워드 작성.
(2) hex 스트링 형태
{ } 사이에 16진수 문자열 hex 값 입력.
Wild-cards, Jumps, Alternatives 등 3가지를 이용하여 대체 가능.
① Wild-Cards
hex값을 알지 못하거나 어떠한 바이트가 있더라도 상관이 없을 때는 Wild-Cards를 사용.
물음표(?)를 이용하여 바이트를 대체 가능.
ex) ?? or ?4 등.
② Jumps
물음표(?)로 나타낼 수 있는 정확한 길이를 모르는 경우는 Jumps를 사용.
최대 [0-255]까지 허용하지만 너무 범위가 크게 설정되어 있으면 패턴 매칭 성능 저하가 우려되므로 적절한 범위 설정 필요
ex) { … E4 [ 2-5 ] AE … } -> E4와 AE 사이에 2~5바이트의 길이가 랜덤으로 들어갈 수 있다는 의미.
③ Alternatives
OR( | )를 사용하여 하나의 글자 또는 여러 글자를 조건에 부합시킬 수 있음.
ex) { AE (00|22) FF } : { AE 00 FF } 와 { AE 22 FF }
(3) Regex(정규표현식, Regular expression)
특정한 규칙을 가진 문자열의 집합을 표현할 때 사용하는 형식 언어, 즉 정규표현식을 사용.
/ /(두 개의 슬래시) 사이에 나타냄. 정규표현식에 ‘nocase’, ‘wide’, ‘ascii’, ‘fullword’의 기능 사용가능.
3) Conditions:
결과값이 참인지 거짓인지 (True or False) 판별, 즉 Boolean 값으로 결과가 나타난다.
C 연산자 모두 사용 가능(AND, OR, NOT, != …)
- 연산자 # : 해당 식별자가 등장하는 횟수
ex) #a == 10 (a라는 식별자가 파일에서 10번 등장함을 의미)
 

답글 남기기