다형성 바이러스에 대한 개념 및 분류가 너무 헷갈리는것 같아 정리하기로 했다. 물론 이 내용이 모든 것을 포함하지도 않고 틀린 부분도 있을 수 있다. 각 개념에 대한 검색용으로 참고하길.


  기본적으로 바이러스이기 때문에 파일을 감염시키는 개념이고 이것은 File Infection과 관련있다. 특정 행위를 수행하는 루틴이 삽입되는 방식은 다음과 같다.


1. 기존 섹션의 빈 공간에 삽입

2. 기존 섹션의 크기를 늘려서 삽입

3. 새로운 섹션을 추가하여 그곳에 삽입


  AV는 검사 과정에서 감염된 부분이 있는지 여부를 판단하기 위해 파일을 검사할 것이다. 감염된 파일은 정상 파일과 비교해 보자면 먼저 하나 이상의 바이러스 루틴이 삽입되어 있을 것이며 그 루틴으로 이동하는 분기문이 존재할 것이다. 일반적으로 File Infector는 PE 헤더의 EP를 수정하여 감염된 루틴이 있는 주소로 바꾸어 시작할 때부터 감염 루틴에서 시작하게 하거나 EP 부분에 위치한 분기문의 이동 주소(api를 호출하는 call이나 jmp 등)를 감염된 루틴이 존재하는 주소로 변경할 것이다. 바이러스 루틴은 적합하다고 판단된 영역에 삽입되어 있을 것이다.


  시그니처 기반 AV의 경우 바이러스로 인해 감염된 부분의 패턴을 검사할 것이며 일반적인 바이러스의 경우 이 패턴은 항상 같기 때문에 AV에 의해 발견될 수 있다. 이에 따라 다형성 바이러스가 나오게 되었는데 이것은 이러한 시그니처에 잡히지 않게 하기 위한 방식으로 감염 시마다 매번 동일하지 않은 패턴을 생성해낸다.


1. 사용 명령어 변경 : 하는 행위는 동일하지만 어셈블리 루틴은 차이가 난다.

2. Garbage 명령 삽입

3. 사용 레지스터 변경

4. 감염 루틴들의 위치나 순서 바꾸기

5. EPO (EntryPoint Obscuring) : 위에서 언급하였듯이 바이러스 루틴으로 분기하도록 분기문을 수정하는데 이 분기문을 랜덤으로 선택한다. 즉 바이너리에 존재하는 call이나 jmp 명령어 중에서 랜덤으로 골라 감염 루틴으로 분기하는 분기문을 생성하는 것이다.


  이 같은 방식들을 통해 매번 바이러스에 감염될 때 마다 생성되는 감염 루틴은 동일하지 않게 되지만 행위는 같게 유지될 수 있다.


'악성코드 분석' 카테고리의 다른 글

Windbg, Gdb 명령어 정리  (0) 2017.06.27
VC++ 옵션 정리  (0) 2017.06.03
API Sets  (0) 2017.05.12
윈도우의 예외 처리  (0) 2017.05.09
링크 및 책 정리  (0) 2017.04.23
Posted by SanseoLab

블로그 이미지
Malware Analyst
SanseoLab

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함