본문 바로가기
  • True knowledge exists in knowing that you know nothing. -Socrates-
Study/백신(Anti Malware)

전용 백신 개발 (Dedicated Vaccine) [md5] _0

by intadd 2018. 11. 3.


안녕하세요

백신 공부를 시작하게 되었습니다.

책도 사고 오픈소스 분석도 하고 그러고 있습니다. 

지금은 공부 중인데 국가? 회사? 마다 Malware 명명법이 달라서 해당 패턴에 탐지된는 sample file을 찾는게 더 힘듭니다..

공부 했던걸 끄적여 보겠습니다.




- 전용 백신이란? 

특정 Malware를 치료/진단하기 위한 백신이라고 보면 될 것 같습니다.

전용 백신의 예는 아래와 같습니다. [KISA]

https://www.krcert.or.kr/download/dedicatedVaccine/download.do?page=11


 


서버 환경

ssh로 접속 가능한 리눅스 서버 (Ubuntu 16). 


최종 완성하고 싶었던 백신은 윈도우이므로 일단 아쉽지만 우분투에서 wine을 사용했습니다. 

(뭔가 시작은 PE가 편할것 같기도 해서.. 윈도우 환경이 없기도 하고..)




일단 우선적으로 공부 했던 내용은 백신이 악성코드를 탐지하는 기법들입니다.


1. 대표적으로 파일의 해시값을 비교하여 특정 Malware와 동일한 파일이 있는지 확인하는 방법입니다.

--> 해시값으로 비교를 한다면 변형된 Malware를 탐지를 잘 하지 못한다는 단점이 있다.

Ex) PE파일 이라고 가정 했을 때 특정 Section 해시값으로 비교를 하거나 한다고 합니다. 파일 전체 해시 보다는 더 정확 한 것 같습니다. text section 등



1-1. 특정 파일이 Malware로 판단 되었을 때,  해시값으로 다른 파일 검사하기


파일 에서 해시값 추출하기

예제 PrintHello.exe 파일 - wget을 통해 돌아다니는 파일을 구했습니다. 

(github에서 구한거 같은데.. "SecurityFactory!!" 문자열을 출력하는 PE 파일입니다.)


동작은 정상적으로 잘 되는 것 같습니다.


PringHello.exe 파일의 해시값(md5) 구하기 (hash.py -v2.7)


결과 값


5977~ 값이 PrintHello.exe 파일의 해시값(md5) 입니다.


1-2. Print_Hello.exe 가 Malware로 판단 되었을 때  해시값으로 다른 파일들 검사하기  



여기서 PH_HASH 변수 값 - PrintHello.exe 파일 해시값입니다.



결과값



이렇게 파일 해시값(전체)으로 특정 파일을 탐지하는 전용 백신을 간략하게 테스트 해봤습니다.


이제 간단하게 파일을 수정하여 파일 해시값(전체)을 기반으로 탐지되는 백신을 우회 해보겠습니다.

(너무 간단해서 우회라는 단어를 사용해도 괜찮을까라는 의문입니다. 우회인가..)


일단 파일에 실행에 영향을 주지 않아야 하기 때문에 방법은 크게 2가지가 있다.

1- 실행 압축 (많이 사용하는 UPX 패커 등)

2- 더미 값 넣기 or byte 수정

위 두 방법은 그냥 내 개인적인 생각이므로 아마 방법이 더 있을 것이라고 생각한다.

이미 대부분의 백신들은 실행 압축을 처리하는 알고리즘도 있을 테니 (사실 더 쉬운 방법이 2번이라) 2번으로 선택 했다.



그럼 PE 구조를 공부해야한다. 나도 아직 공부중이기 때문에 자세한 설명은 다음에 ;

PrintHello.exe 파일을 hexdump하여 들여다보기로 한다


$hexdump -C PrintHello.exe > PrintHello.txt


덤프 파일을 보면 시작이 MZ (4d 5a) PE를 확인할 수 있다.


여기는 파일 끝 부분이다.


내가 생각했던 방법은 파일의 끝부분에 값을 추가하는 방법이다.

파일에 첨부파일들을 원래 파일 뒤에 저장한다고 했던 걸 어디선가 본 기억이 있다.


그래서 파일 뒷부분에 00을 추가할려고 한다.



데이터는 동일하게 작성하고 뒤에 b(바이트)로 00을 넣었다.

(몇개를 넣든 상관 x)

파일 크기도 2byte 늘었고, 기능도 기존 exe 와 동일하게 잘 작동한다.


이전에 만들었던 detected.py 가 있던 sample 폴더에 printHello.exe 대신 output.exe 를 옮겼다.



파일 해시값이 달라지므로 당연히 탐지 되지 않는다.


사실 00바이트를 주입하는 것 외에도 기존에 있던 데이터에서 1byte라도 수정하면 해시값이 달라지기 때문에 바이트를 수정해도 무방하다. (단 프로그램 실행에 영향을 미치지 않는 값들)




다음에는 특정 섹션을 해시값으로 탐색하는 전용 백신을 작성하겠습니다.




-끝-




댓글