기초 정적 분석 → 기초 동적 분석 → 고급 정적 분석 → 고급 동적 분석
기초 정적 분석
프로그램 기능 파악 (코드나 프로그램의 구조 분석)
① 악성 여부 판단 by VirusTotal
② 악성코드 판별 해시 사용 (악성코드 ID) by MD5 & SHA1
: 해시를 이름으로 사용, 악성코드 식별을 위해 해시 공유, 식별 여부를 위해 해시 검색
③ 파일의 문자열, 함수, 헤더에서 개략적 판단 by strings
: 프로그램 메세지 출력, URL 접속, 특정 위치로 파일 복사 등을 확인
④ 패킹 여부 확인 by PEiD
: 패킹 여부 확인하고 언패킹하여 리버싱을 보다 쉽게 하기 위한 단계
⑤ PE 세부 구조 확인 by PEview
: Size of Raw Data(원래 데이터 크기)보다 Virtual Size(가상 크기)가 월등히 크다면 다른 파일을 올리기 위함으로 의심해 볼 수 있음, 섹션의 이름 변경 여부를 확인
⑥ DLL 의존성 조사 by Dependency Walker
- Kernel32.dll : 메모리, 파일 ,하드웨어 접근과 조작
- Ntdll.dll : 윈도우 커널 인터페이스
- Advapi32.dll : 서비스 관리자, 레지스트리 같은 추가 윈도우 핵심 컴포넌트
- User32.dll : 유저 인터페이스(버튼, 스크롤바, 사용자 행위 제어, 반응 컴포넌트)
- Gdi32.dll : 그래픽 보기 및 조작
- WS2_32.dll : 윈도우 소켓 네트워크 (네트워크 통신)
- Wininet.dll : FTP, HTTP, NTP와 같은 상위 수준 프로토콜 구현 (네트워크 통신)
⑦ 리소스 확인 by Resource Hacker
: 아이콘/메뉴/대화상자/버전정보 섹션, 문자열 테이블
+) Dropper : 리소스에 실행 파일이 들어가 있음(프로그램이 이를 같이 실행하게 됨)
<Lab01-01.exe, Lab01-01.dll 기초정적분석>
1. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?
- Yes
2. 이 파일은 언제 컴파일 되었는가?
- Lab01-01.exe의 컴파일 시점은 2010/12/19 16:16:19 이다. 같은 방법으로 Lab01-01.dll을 확인한 결과, 컴파일 시점은 2010/12/19 16:16:38 이었다.
둘의 컴파일 시간차이가 별로 안나는 것으로 보아 같이 동작하는 것으로 예상된다. (exe가 dll 파일을 동적으로 호출하는 방식일 것이다.)
3. 이 파일이 패킹되거나 난독화 징후가 있는가? 무엇으로 판단했는가?
- VirusTotal과 PEiD에서 확인한 결과, 두 파일 모두 Microsoft Visual C++ 6.0 버전에서 정상적으로 컴파일된 것을 확인할 수 있고, EP Section 정보도 .text로, 따로 파일이 패킹되거나 암호화되지 않았음을 알 수 있다.
4. 임포트를 보고 악성코드 행위를 알아낼 수 있는가? 그렇다면 어떤 임포트인가?
- ① Lab01-01.exe
CopyFile, FindFirstFile, FindNextFile, FindClose, CreateFile, CreateFileMapping, MapViewOfFile 등의 함수가 쓰인 것으로 보아...
(예측) 파일을 복사한 후, 해당 파일이 존재하는지 찾은 뒤 찾는 행위를 그만두고, 복사한 파일을 복제하기 위한 파일을 하나 생성하는 행위를 하는 것 같다. (정상적 파일을 복사한 후, 악성코드를 심은 다음 다시 배포하는 게 아닐지 예상)
② Lab01-01.dll
Sleep, CreateProcess, CreateMutex, OpenMutex, CloseHandle 등의 함수가 쓰인 것으로 보아...
(예측) 잠시 프로세스를 멈춘 후, 새로운 프로세스를 만들고, 동일 프로그램의 중복실행을 막기위해 Mutex를 생성하고 실행하는 것 같다. (백도어로 작용할 것 같다)
그리고 PEview에서는 보이지 않던 WS2_32.dll(네트워크 통신을 하는 윈도우 소켓 네트워크)에 쓰인 Import 함수의 내용을 VirusTotal 사이트에서 볼 수 있었다.
socket, closesocket, inet_addr, send, connect 등의 함수가 쓰인 것으로 보아...
(예측) 호스트에서 외부 네트워크와 소켓으로 연결한 후 백도어로 작용하여 외부 네트워크에 정보를 전송할 것이다.
5. 감염된 시스템에서 검색할 수 있는 다른 파일이나 호스트 기반의 증거가 존재하는가?
- Lab01-01.exe를 자세히 보면 kernel32.dll이 아닌 kerne132.dll 파일이 사용된 것이 보인다. Import 함수를 통해 예측한 것을 바탕으로 생각해보면 kernel32.dll의 내용을 복사하여 kerne132.dll이라는 악성코드가 담긴 파일을 생성할 것으로 예상된다. 또한 Lab01-01.dll에서 발견된 127.26.152.13 문자열이 쓰였기 때문에 호스트와 연관된 것으로 보인다.
6. 감염된 장비에서 이 악성코드를 발견하기 위해 사용한 네트워크 기반의 증거는 무엇인가?
- WS2_32.dll을 사용
7. 이 파일의 목적은 무엇이라고 판단했는가?
- Lab01-01.exe 는 C:/windows/system32/kerne132.dll 생성하며, kernel132.dll가 Lab01-01.dll파일로 보이며, 이 dll파일은 백도어로 작용해 외부와 통신하며 시스템 정보등을 전송할 것이다.
+) <Lab01-04.exe 기초정적분석>
이 파일은 리소스 섹션에 하나의 리소스가 있다. Resource Hacker를 이용해 리소스파일을 점검하고 리소스를 추출해보자. 리소스로부터 무엇을 알 수 있는가?
리소스인데 실행 파일(exe)의 패턴(4D 5A, MZ)을 발견할 수 있었다.
이는 리소스에 실행 파일을 숨긴 후 실행 시 숨겨진 exe를 함께 배포하는 것으로 보인다. Dropper의 전형적인 예시같다.
기초 동적 분석
- 프로그램을 직접 실행하며 분석
- 프로그램의 영향 쉽게 파악
- 악성코드 실행 전후 상태를 조사 및 분석
1. 악성코드 실습 시 발생하는 호스트/네트워크 환경 구성
2. 파일, 프로그램 실행, 레지스트리, 서비스 등 관련 항목 변경 사항 확인
3. 실행 시 발생하는 네트워크 트래픽 분석
동적 분석에 사용하는 도구?
1. 프로세스 모니터(procmon.exe)
: 특정 레지스트리, 파일 시스템, 네트워크, 프로세스, 스레드 행위를 모니터링
+) 한계 : 특정 GUI와 I/O 제어를 통한 루트킷 탐지 불가, 네트워크 행위에 대해 일관성 있는 탐지 불가
2. 프로세스 익스플로러(procexp.exe)
: 프로세스(EPROCESS 구조체)에 관련된 많은 내용을 확인 가능
: 분석에 아주 유용한 도구
: 다양, 정확
3. RegShot
: 두 레지스트리의 스냅샷을 찍고 비교
: 악성코드는 자동실행을 위해 레지스트리를 자주 건드림
4. INetSim
: 맬웨어에게 가짜 서비스를 제공하기에 최고의 도구!
: 알려지지 않은 맬웨어 샘플의 네트워크 동작에 대한 런타임 분석을 수행하기 위한 도구
: 실험실 환경에서 맬웨어가 일반적으로 사용하는 인터넷 서비스를 시뮬레이트
: HTTP, HTTPS, FTP, IRC, DNS, SMTP 등 서비스를 실행
5. WireShark
: 네트워크 분석 프로그램
: 네트워크상 캡처한 데이터에 대한 네트워크/상위 레이어 프로토콜의 정보를 제공
: 패킷 캡처를 위해 pcap 네트워크 라이브러리를 사용
<Lab03-01.exe 기초동적분석>
VirusTotal 올렸을 시 Import 함수도 제대로 안 보이고, Packer가 쓰인 듯 하여 PEiD로 확인하였다
역시나 PEncrypt 라는 패킹 툴로 패킹이 되어 있다.
1. 악성코드의 임포트 함수의 문자열은 무엇인가?
- 패킹되어 ExitProcess 밖에 확인할 수 없다.
strings로 확인 시 여러 레지스트리가 보이지만, 특히 Run 레지스트리에 들어가는 것들은 부팅시에 실행되는 것들이기 때문에 의심할 필요가 있으며, 중간에 보이는 url 주소는 악성코드가 실행되면서 이에 접근할 것이라고 예측할 수 있다.
2. 악성코드임을 의미하는 호스트 기반 표시자는 무엇인가?
RegShot, Procmon, Procexp, Wireshark 준비!
결과를 보면 레지스트리에 5개의 값이 추가되었고, 2개의 값이 수정이 되었다.
특히, HKLM\SOFTWARE\Microsoft\CurrentVersion\Run에 해당하는 레지스트리 키 값은 부팅 시 자동으로 시작하게 하는 역할을 한다. 따라서 사용자가 부팅할 때마다 이 악성코드가 실행되게 하는 목적이 있는 것 같다.
(strings에서 봤던 VideoDriver는 Run 레지스트리에 자기 자신을 등록하기 위한 키 이름이라는 것을 이제서야 알게 됨)
ProcMon에서 확인한 결과, strings에서 봤던 vmx32to64.exe는 C:\Windows\system32\아래에 생성하기 위한 파일 이름이라는 것을 알게 되었다.
WinMD5로 확인한 결과, 두 파일은 정확히 일치했다
따라서 Lab03-01.exe파일이 자기 자신을 복사해서 C:\Windows\system32\아래에 vmx32to64.exe라는 이름으로 파일을 생성함을 알 수 있다.
3. 악성코드를 인식할 수 있는 유용한 네트워크 기반의 시그니처가 존재하는가? 있다면 무엇인가?
- strings에서 봤던 www.practicalmalwareanalysis.com 를 통해 네트워크를 사용한다는 것을 예상할 수 있지만 더 분석해보겠다.
strings에서 본 url로 접속을 하고 이후에는 443포트를 통해 어떤 행동을 하는 것을 확인했다
아래에도 계속 사이트에 접속 후 이러한 데이터를 보내는 것을 알 수 있었다.
'Study > Reversing' 카테고리의 다른 글
고급 정적 분석 by IDA (0) | 2021.11.10 |
---|---|
Lena 3번 풀이/Rena's Reversing Tutorial 03 (0) | 2021.11.03 |
Lena 2번 풀이/Rena's Reversing Tutorial 02 (0) | 2021.10.27 |
윈도우 실행 파일과 패커 (0) | 2021.10.06 |
리버싱 기초 & reverseMe.exe 분석 (0) | 2021.09.28 |