'리눅스 16.04/Ubuntu 16.04 - Yara'에 해당되는 글 6건

import "hash"

rule REALNOTEPAD {

    meta:
        description = "REAL NOTEPAD"

    strings:
        $m0 = { 4D 5A } // wide ascii

    condition:
        $m0 at 0   and
        hash.md5(0, filesize) == "c70771d444be937c354af1e2988d3468"
}

'리눅스 16.04 > Ubuntu 16.04 - Yara' 카테고리의 다른 글

Yara Rule에 대한 전체 설명  (0) 2018.07.17
Yara 설치 과정  (0) 2018.07.17
Yara 란?  (0) 2018.07.17
Yara Rule (자동화 및 Rule 제작)  (0) 2017.11.27
Yara 란? / 정규표현식  (0) 2017.07.21
블로그 이미지

_B_G_

,

목차

 

  • 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

 

'리눅스 16.04 > Ubuntu 16.04 - Yara' 카테고리의 다른 글

Yara Rule 파일 해시값 탐지 방식  (0) 2018.07.17
Yara 설치 과정  (0) 2018.07.17
Yara 란?  (0) 2018.07.17
Yara Rule (자동화 및 Rule 제작)  (0) 2017.11.27
Yara 란? / 정규표현식  (0) 2017.07.21
블로그 이미지

_B_G_

,

다운로드 주소

https://github.com/virustotal/yara/releases/tag

Source code (zip) - 윈도우

Source code (tar.gz) - 리눅스 

 

설치 후 압축파일 해제

root@사용자:/yara-3.6.3# ./bootstrap.sh

에러가 뜰 경우

root@사용자:/yara-3.6.3# apt-get update

 

or

root@사용자:/yara-3.6.3# apt-get install libtool*

다시 시도

root@사용자:/yara-3.6.3# ./bootstrap.sh

./configure&&make&&make install

root@사용자/yara-3.6.3# yara --help  (도움말)

 

 

yara -s target.html yararule.yar

yara -s  -   yararule.yar 이랑 대상 파일 target.html을 서로 비교하여 매칭된

스트링 & 바이너리 출력

 

'리눅스 16.04 > Ubuntu 16.04 - Yara' 카테고리의 다른 글

Yara Rule 파일 해시값 탐지 방식  (0) 2018.07.17
Yara Rule에 대한 전체 설명  (0) 2018.07.17
Yara 란?  (0) 2018.07.17
Yara Rule (자동화 및 Rule 제작)  (0) 2017.11.27
Yara 란? / 정규표현식  (0) 2017.07.21
블로그 이미지

_B_G_

,

Yara

특정 시그니처를 파일 정적분석으로 내부에 시그니처가 존재하는지 확인하는 것

--------------------------------------------------------------------------

 

정규표현식

어떤 텍스트 내에서 특정한 규칙을 가진 문자열을 찾기 위해 그 형태나 규칙을 

나타내는 패턴을 정의하는 것

 

정규식 방법 :

1. 패턴 그대로를 매칭하는 경우 :

편집기에서 "찾기" 기능을 통하여 해당 문자열 그대로 찾는 것을 말하는 것

 

2. 메타문자 및 수량 한정자를 적용하는 경우 :

정규식 패턴에 쓰이는 문자중에는 특별한 의미를 가지는 메타 문자들이 있는데, 이들을 사용하여 보다 폭 넓은 패턴에 매치할 수 있다.

 

메타문자

^ - 문자열의 시작 :

^http 로 검색을 하게 되면 문장의 맨 처음에 "http"가 온 것만 정의되고 두번째에 검색된 "http"는 매치 되지 않는다.

 

$ - 문자열의 끝 :

them$은 문자열이 them으로 끝난 경우에 them에 매치한다.

 

 

3. 선택 패턴

[0-9] - 0~9까지 정의

[a-z] - a~z까지 정의

위 와 같은 정의로 정규 표현식을 사용할 수 있다.

 

'리눅스 16.04 > Ubuntu 16.04 - Yara' 카테고리의 다른 글

Yara Rule 파일 해시값 탐지 방식  (0) 2018.07.17
Yara Rule에 대한 전체 설명  (0) 2018.07.17
Yara 설치 과정  (0) 2018.07.17
Yara Rule (자동화 및 Rule 제작)  (0) 2017.11.27
Yara 란? / 정규표현식  (0) 2017.07.21
블로그 이미지

_B_G_

,

목차

 

  • 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

 

 

 

 

 

 

 

 

'리눅스 16.04 > Ubuntu 16.04 - Yara' 카테고리의 다른 글

Yara Rule 파일 해시값 탐지 방식  (0) 2018.07.17
Yara Rule에 대한 전체 설명  (0) 2018.07.17
Yara 설치 과정  (0) 2018.07.17
Yara 란?  (0) 2018.07.17
Yara 란? / 정규표현식  (0) 2017.07.21
블로그 이미지

_B_G_

,

Yara

 

특정 시그니처를 파일 정적분석으로 내부에 시그니처가 존재하는지 확인하는 것

 

--------------------------------------------------------------------------

 

정규표현식

 

어떤 텍스트 내에서 특정한 규칙을 가진 문자열을 찾기 위해 그 형태나 규칙을 

 

나타내는 패턴을 정의하는 것

 

 

 

정규식 방법 :

 

 

1. 패턴 그대로를 매칭하는 경우 :

 

편집기에서 "찾기" 기능을 통하여 해당 문자열 그대로 찾는 것을 말하는 것

 

 

2. 메타문자 및 수량 한정자를 적용하는 경우 :

 

정규식 패턴에 쓰이는 문자중에는 특별한 의미를 가지는 메타 문자들이 있는데, 이들을 사용하여 보다 폭 넓은 패턴에 매치할 수 있다.

 

메타문자

 

^ - 문자열의 시작 :

^http 로 검색을 하게 되면 문장의 맨 처음에 "http"가 온 것만 정의되고 두번째에 검색된 "http"는 매치 되지 않는다.

 

$ - 문자열의 끝 :

them$은 문자열이 them으로 끝난 경우에 them에 매치한다.

 

 

3. 선택 패턴

 

[0-9] - 0~9까지 정의

[a-z] - a~z까지 정의

위 와 같은 정의로 정규 표현식을 사용할 수 있다.

'리눅스 16.04 > Ubuntu 16.04 - Yara' 카테고리의 다른 글

Yara Rule 파일 해시값 탐지 방식  (0) 2018.07.17
Yara Rule에 대한 전체 설명  (0) 2018.07.17
Yara 설치 과정  (0) 2018.07.17
Yara 란?  (0) 2018.07.17
Yara Rule (자동화 및 Rule 제작)  (0) 2017.11.27
블로그 이미지

_B_G_

,