기초 정적 분석
목표
- 악성코드의 기능을 파악하기 위해 코드나 프로그램의 구조를 분석하는 과정
- 악성코드를실행하지 않고 분석하는 과정인 정적분석의 기본을 수행할 수 있다.
주요 사용 기법 (기초 정적 분석 방법)
- 악성 여부를 판단하는 안티바이러스 도구
- 악성코드를 판별하는 해시 정보 검증
- 파일의 문자열, 함수, 헤더에서 주요 정보 수집
안티바이러스 스캐닝
- 악성코드 탐지(기본)
- 패턴 매칭 분석: file signatures를 검색하여 찾는 방법
- 주로 많이 사용하는 방법
- heuristic : 변조, 신종 등
- 악성코드를 변조시키거나, 신종을 나오게 하는 방법
- 패턴 매칭 분석: file signatures를 검색하여 찾는 방법
- 악성코드 실행 및 탐지 (안티바이러스 도구)
- http://www.virustotal.com
- 패턴 매칭 분석
- 구글이 인수하여 운영 중인 사이트
- VirusTotal
- http://www.virscan.org
- https://virusscan.jotti.org/
- http://www.virustotal.com
VirusTotal 실습
VirusTotal 사이트에 접속해서 간단한 프로그램(노트 패드나 강의 자료 악성코드) 프로그램을 검증해보자!
https://www.virustotal.com/gui/home/upload
- VirusTotal 사이트에 Lab01-01.exe를 업로드 하고 확인
- 72개 중 52개가 악성코드로 탐지됨
- 즉 이 파일은 그냥 악성코드라는 것을 알 수 있음
- 악성코드 이름들을 확인
- 안랩에서는 Trojan/Win32.Agent.C957604라고 판단
- 대체적으로는 Trojan이 많고 그 외에는 Backdoor 등도 있음
- 바이러스 회사가 명명한 악성코드 이름은 중요한 정보가 될 수 있음
- 바이러스 포털 이용 시 장점: 백신을 여러 개를 돌릴 수 있다!
- 기본적으로 여기서 악성 유무를 판단하고 그 후에 분석 작업 진행
해시
- 해시: 악성/정상 코드의 고유 값
- 주로 악성코드를 보고 악성인지를 판단
- 해시 값을 검증하면 코드가 변조 유무를 알 수 있음
- type
- SHA-1(Secure Hash Algorithm 1), MD5(Message-Digest Algorithm 5)
- tool
- Md5deep(CUI), WinMD5(GUI)
- 해시 검증
- 해시를 이름으로 사용
- 악성코드 식별을 위해 해시 공유
- 식별 여부를 온라인에서 검색
WinMD5 실습
WinMD5Free SW를 다운받아 설치하고 검증해보자!
- 다운로드 후 프로그램 실행 시 이런 화면이 뜸
- 사이트에 올라와 있는 파일의 해시 값을 아래 부분에 넣고 Verify 버튼 클릭
- → 해당 파일을 WinMD5 프로그램에 넣은 해시 값과 동일함을 알 수 있음
- 태생부터 악성 파일은 판단 불가능, 정상 파일이 변조된 경우에만 판단 가능
- 해시 정보로는 악성 유무만 판단 가능!
문자열 검색
- 문자열 검색: 코드 내의 문자열 검색 및 추출
- 악성 행위 시 대부분 값, 변수, 파일 명 등의 고유의 값들이 포함됨
- 이런 문자열들은 그대로 저장되는 경우가 많음
- 그래서 실행 파일을 역으로 실행해서 문자열을 추출하면 알아보기가 쉬움
- 실질적인 정보들을 통해 악성코드인지 파악할 수 있음
- 악성 행위 시 대부분 값, 변수, 파일 명 등의 고유의 값들이 포함됨
- 문자 표현(문자열을 저장하는 방식)
- ASCII(8bit, 1byte)
- Unicode(16bit, 2byte)
- tool
- Strings
- https://learn.microsoft.com/ko-kr/sysinternals/downloads/strings
- 함수명 접미사: Ex(동일 함수 업데이트), A(ASCII), W(wide character strings)
- API 함수도 포함
- Strings
Strings 실습
Strings를 다운받아 설치하고 악성코드가 어떤 결과로 나타나는지 실습해보자!
- Strings는 cmd 창에서만 실행 가능
- exe 파일은 확장자 안 붙여도 실행 가능
- 명령어: strings 파일명.확장자
- 같은 폴더로 이동 후 검색
- 바이너리 검색일 땐 확장자 붙여줘야 됨
- 대소문자는 구분 X
- Strings는 바이너리 이미지에서 ASCII나 Unicode로 되어 있는 문자열을 추출하는 거임
- 지금 화면에 출력된 게 PEview에서 DOS STUB 영역에 있는 거랑 같은 거임!
- 앞 부분은 일부분을 제외하고는 이해할 수 없는 문자들로 구성
- 계속 내려보면 Lab01-01.exe에서 사용하는 API 함수와 dll을 확인할 수 있음
- 이게 바로 Strings를 통해서 알고 싶은 것임! 의미가 있는 것들!
- 자세히 보면 kernel132.dll 바로 위에 kernel132.dll이라고 되어 있음
- l이라고 되어 있어야 하는 부분이 1로 되어 있는 거임
- 마지막에 warning_this_will_destroy_your_machine을 통해 악성코드임을 표현하기도 함
패킹/난독화
- 패킹/난독화: 악성코드 은폐 목적, 문자열 검색이 안 됨
- LoadLibrary, GetProcAddress 함수 포함
- 두 함수들은 정삭적인 프로그램에서는 사용 X
- 파일의 시그니처 등으로 사용자들이 악성코드임을 알 수 있기 있음
- 이를 방지하기 위해 공격자들이 수행하는 것이 바로 패킹/난독화
- LoadLibrary, GetProcAddress 함수 포함
- 패킹 파일
- 패킹 파일 = 판독할 수 없는 파일
- 패킹을 하게 되면 압축 파일처럼 사이즈가 작아짐
- 실제 실행이 되려면 다시 원본으로 돌아가야 함
- 이를 위해 패킹 파일을 다시 복구할 수 있는 래퍼 프로그램이 있음
- 원본 실행파일 → 래퍼 프로그램 + 패킹된 실행 파일
- 패커 탐지: PEiD
- 패킹 프로그램
- UPX(https://upx.github.io) : Upx–d PackedProgram.exe
- FSG paker
UPX, PEiD 실습
1. PEiD를 다운받아 설치하고 패킹 전후의 프로그램의 검증 과정에서 변화가 있는지 확인
https://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/PEiD-updated.shtml
- EP Section: Entry Point를 알려주는 것
- .text로 나오는 게 정상
- EP Section이 비어 있거나 Linker Info가 0.0이면 의심해봐야 함
- 이건 지금 패커여서 그럼
2. UPX를 다운 받아 정상 프로그램을 패킹해서 PEiD로 확인
https://github.com/upx/upx/releases/tag/v4.2.3
- Lab01-01.exe 원본 파일일 때, PEiD 실행 결과
- upx로 패킹
- 명령어: upx 파일명.exe
- 패킹을 하면 exe가 똑같이 실행됨
- 패킹 후 PEiD 실행 결과
- EP Section이 UPX1로 변경된 것을 확인할 수 있꼬, 컴파일 버전도 찾을 수 없다고 나옴
PE 파일 포맷
- 윈도우 실행 파일 포맷: DLL, PE(Portable Executable)
- PE file header
- PE file header에서 대부분의 정보를 수집할 수 있음
- 코드에 관한 정보
- 애플리케이션 유형
- 필요한 라이브러리 함수
- 메모리 공간요구 사항
- 주로 보는 내용은 링크 라이브러리와 함수
링크 라이브러리와 함수
- 임포트 함수 목록 확보: 다른 프로그램에 저장된 라이브러리
- 링크하는 시점: 정적/런타임/동적링크
- static link: 실행 시 라이브러리 코드를 모두 복사, PE 파일 헤더에 파일 링크 코드 정보 없음
- runtime link: 악성코드 패킹이나 난독화에 자주 사용, 함수가 필요할 때마다 동적 링크
- LoadLibrary/GetProcAddress, LdrGetProcAddress/LdrLoadDll
- dynamic link: 프로그램이 링크된 라이브러리 함수를 호출하면 라이브러리 내의 함수를 실행
- PE파일 헤더에 로드 되는 모든 함수에 대한 정보를 저장함
- 그래서 헤더 부분을 잘 보면 악성코드를 더욱 쉽게 유추할 수 있음
- ex) URLDownloadToFile : 인터넷에 연결해 다운로드 후 저장
- Dependency Walker: 동적 링크 함수 탐색 프로그램
Dependency Walker로 파일을 열었을 때, 주로 많이 나오는 DLL
DLL | 설명 |
Kernel32 | 메모리, 파일, 하드웨어 접근 및 조작 |
Adwapi32 | 서비스 관리자, 레지스트리 같은 윈도우 핵심 컴포넌트 접근 |
User32 | 버튼, 스크롤바, 사용자 행위 에저와 반응 등 사용자 ui |
Gdi32 | 그래픽 보기와 조작 관련 |
Ntdll | 윈도우 커널 인터페이스, kernel32.dll로 import, 사용하는 경우는 기능 숨기거나 프로세스 조작 등 특정 작업 |
WSock32/Ws2_32 | 네트워크 연결 및 관련 작업 수행 |
Wininet | FTP, HTTP, NTP등 프로토콜을 구현한 상위 수준 네트워크 함수 |
'Study > 악성코드' 카테고리의 다른 글
[윈도우즈 보안과 악성코드 기초] 기초 정적 분석 - Practical Malware Analysis Lab01-01.exe & Lab01-01.dll (0) | 2024.04.10 |
---|---|
[윈도우즈 보안과 악성코드 기초] PE 파일 헤더와 섹션 (0) | 2024.04.06 |
[윈도우즈 보안과 악성코드 기초] PE 파일 구조 (0) | 2024.03.30 |
[윈도우즈 보안과 악성코드 기초] 리버싱 이론 실습_crackme#1, #3 (0) | 2024.03.30 |
[윈도우즈 보안과 악성코드 기초] 문자열 패치 실습 (0) | 2024.03.23 |