yara의 기초

💫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번 등장함을 의미)

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다