훈훈훈
Mini-100 바이러스 분석 본문
이번 자료는 K-shieldjr 분석대응 과정에서 악성코드 분석파트를 맡아주신 누리랩 최원혁 대표님께 동의를 받고
강의 내용 중 복습을 위해 정리한 내용입니다.
1) 특징
- .com인 파일을 대상으로 감염 시킨다.
- 감염된 파일은 100Byte 크기 증가
- 전위형 바이러스
2) 실습 환경
- 운영체제 : Windows 7 32bit
- 분석도구 : MS-DOS DEBUG
3) 감염 대상
<감염 대상 - 1>
임의의 값을 입력하여 감염 대상인 "waveLab.txt" 란 파일을 생성했다.
<감염 대상 - 2>
"Mini-100" 바이러스는 확장자가 ".com" 대상으로 감염시키기 때문에
감염 대상파일 확장자를 ".txt" => ".com" 으로 변환했다.
<감염 대상 - 3>
감염되기 이전 파일의 크기는 8byte 이다.
4) 분석 과정
<분석 과정 - 1>
감염대상이 있는 폴더에서 CMD 창을 킨 후 "debug" 명령을 실행했다.
그 다음 바이러스 소스코드를 붙여넣기 해서 "g" 키를 눌러 실행시켰다.
<분석 과정 - 2>
실행을 시킨 후 감염대상 파일은 "wavelab"의 속성을 확인해보았다.
파일의 크기가 100byte 증가한것을 확인할 수 있다.
이제 바이러스 코드를 처음부터 살펴보자.
<분석 과정 - 3>
위 그림에 나와있는 부분까지 실행한 결과 시작주소는 100,
그리고 현재 DS = 0B08, ES = 0B08 인것을 알 수 있다.
다음 몇개의 명령어를 더 실행해보자.
<분석 과정 - 4>
위 그림을 보면 REPZ 함수를 통해 Count(CX) 저장된 수 만큼 MOVSB를 반복수행하는 것을 알 수 있다.
이를 통해 바이러스가 감염시킬 파일을 탐색하는 것을 알 수 있다.
그리고 ES=0C08로 바뀐 것을 알 수 있다.
따라서 MOVSB 명령을 통해 DS:SI(0B08:0100) => ES:SI(0C08:0100) 으로 메모리 내용을 옮기는 것을 알 수 있다.
<분석 과정 - 5>
INT 21h, AH=4Eh 일때 ASCIIZ 문자열에 따라 파일을 찾는다
CX는 파일의 속성을 나타낸다.
DS:DX 는 파일이름이 저장되어 있는 세그먼 오프셋이다.
따라서 "D DS:015E" 명령을 입력해서 찾고있는 파일이름을 확인해보자.
<분석 과정 - 6>
위 그림에서 덤프된 문자열을 보면 "*.com"을 확인할 수 있다.
따라서 해당 바이러스는 .com 확장자인 모든 파일을 찾고 있는 것을 알 수 있다.
<분석 과정 - 7>
위 그림을 보았을 때 찾는 파일과 일치하는 파일을 찾았을때 CF = 0(캐리 플래그), AX=에러 번호를 확인 했을때
".com" 확장자를 갖고있는 파일을 찾을 것을 확인할 수 있다.
그리고 그 다음 명령인 JNB를 실행시켰을때 CF = 0 이기 때문에 012D 주소로 점프할 것이다.
<분석 과정 - 8>
위 그림을 보면 INT 21h , AH = 3Dh 이므로 파일을 오픈하는 것을 알 수 있다.
AL은 파일의 엑세스 모드를 의미하고 각 비트마다 의미가 다르다.
1) 000 : 읽기 엑세스
2) 001 : 쓰기 엑세스
3) 010 : 읽기/쓰기 엑세스
AL=02h 이기 때문에 따라서 읽기/쓰기 엑세스 모드인 것을 알 수 있다.
그리고 DS:DX 는 파일이름이 저장되어 있는 세그먼트 오프셋이므로 "D DS:09E" 명령을 입력해서 확인해보자.
<분석 과정 - 9>
"D DS:9E" 명령을 입력하고 덤프된 문자열을 확인했을때 "WAVELAB.COM" 이라는 문자열을 확인할 수 있다.
<분석 과정 - 10>
덤프를 확인했으므로 다음 명령어를 실행하자, 그러면 함수가 성공적으로 실행된 것을 확인할 수 있다.
1) 함수 성공시
- CF = 0, AX = 파일 핸들
2) 함수 실패시
- CF = 1, AX = 에러 번호
이제 그 다음 코드인 "XCHG BX,AX" 부터 분석하기 이전에 바이러스 제작자가 XCHG 명령을 쓴 이유를 알아보자.
해당 바이러스는 100byte 이고 제작자는 최대한 바이트 수를 줄이기 위해 노력했을 것이다.
따라서 XCHG 명령을 사용함으로서 단지 1byte만을 사용함으로서 두 변수를 체인지 하는 효과를 볼 수 있다.
<분석 과정 - 11>
위 그림에서 INT 21을 호출하는 것을 알 수 있다.
AX = 3Fh 이므로 파일의 내용을 읽는 함수인 것을 알 수 있다.
해당 인터럽트에 대해 자세히 살펴보면
- 호출
BX = 파일 핸들
CX = 읽을 바이트 개수
DS:DX = 읽어 들인 파일의 내용을 저장할 버퍼의 세그먼트와 오프셋
- 복귀
1) 함수 성공 시
CF = 0
AX = 읽은 바이트 수
2) 함수 실패 시
CF = 1
AX = 에러 번호
이러한 동작으로 실행되는 것을 확인할 수 있다.
이제 함수가 실행됬는지 확인해보자.
<분석 과정 - 12>
위 그림을 보았을때 해당 함수는 성공적으로 실행된 것을 알 수 있다.
AX = 006Ch(108byte) 이므로 바이러스가 "wavelab.txt" 파일을 감염됬을때의 바이트 수와 같다.
<분석 과정 - 13>
위 그림을 보면 CWD 명령을 실행하는 것을 볼 수 있다.
CWD(Convert Word to Double word)는 부호가 있는 정수 표현에서 AX 워드 정보를
DX:AX이 더블 워드형으로 확장하는 기능을 한다.
따라서 DX = 0000 이 되는 것을 알 수 있다.
그 다음 INT21을 호출하는 것을 볼 수 있다.
AX=42h 이므로 파일 포인터 설정하는 함수인 것을 알 수 있다.
호출 AH = 42h
AL = 00h : 파일 시작에서 부터
01h : 현재 포인터부터
02h : 파일의 끝에서부터
BX = 파일 핸들
CX = 파일 포인터를 옮길 거리의 상위 워드
DX = 파일 포인터를 옮길 거리의 하위 워드
이 과정을 거치면 바이러스가 파일의 모든 내용을 읽어 파일 포인터가 끝으로 이동된 것을 알 수 있다.
<분석 과정 - 14>
위 그림을 보면 함수가 성공한 것을 알 수 있다.
복귀
1) 함수 성공
CF = 0
DX = 옮겨진 파일 포인터의 상위 워드
AX = 옮겨진 파일 포인터의 하위 워드
2) 함수 실패
CF = 1
AX = 에러 번호
이제 그 다음 명령어를 실행시켜 보자.
<분석 과정 - 15>
위 그림을 보면 INT 21을 호출하는 것을 볼 수 있다.
AX = 40h 이므로 파일 또는 장치 쓰기 함수인 것을 알 수 있다.
<분석 과정 - 16>
위 그림을 보면 함수가 성공한 것을 알 수 있다.
AX 에는 감염 된 "wavelab.com"의 바이트 수 만큼 저장되어있는 것을 알 수 있다.
<분석 과정 - 17>
위 그림을 보면 INT 21을 호출하는 것을 알 수 있다.
AX = 3Eh 이므로 오픈되어있는 파일을 닫는 함수인 것을 알 수 있다.
호출 AH = 3Eh
BX = 파일 핸들
복귀
1) 함수 성공
CF = 0
AX = 파일 핸들
2) 함수 실패
CF = 1
AX = 에러 번호
이제 함수가 실행에 성공했는지 알아보기 위해 다음 명령어를 실행시켜보자.
<분석 과정 - 18>
함수가 실행에 성공한 것을 알 수 있다.
'정보보안 > 악성코드' 카테고리의 다른 글
부트 바이러스 : 미켈란젤로 바이러스 정적 분석 (0) | 2018.11.09 |
---|---|
자바스크립트(JavaScript) 난독화 개념 & 실습 (0) | 2018.10.26 |
Keylogger 기초 분석 (0) | 2018.10.08 |