악성코드 분석 18

패킹과 언패킹

프로그램 코드 크기를 줄이려고 압축하거나 프로그램 분석을 어렵게 만들려고 암호화하는 것을 패킹(Packing)이라고 합니다. 단순 압축하는 것을 컴프 레싱(Compressing), 암호화하는 것을 프로텍팅(Protecting)이라고 구분 컴프 레싱(Compressing) 실행 코드를 압축해서 PE 파일의 특정 섹션에 저장하고 프로그램이 실행될 때 공간에 압축을 풀어 실행하는 구조 프로텍팅(Protecting) 실행 파일을 암호화해서 분석을 어렵게 만드는 기술이다. 실행코드는 암호화된 상태로 배포되고, 실행 시점에 복호화되어 동작을 수행한다. Packer Compressor Protector 파일 소형화 코드 난독화 저용량 실행 파일 생성 내부 실행 로직 보호 프로그램 실행 속도 저하 프로그램 크기 증가 ..

레나 리버싱 17 강 일련번호 생성 로직 분석

XOR ESI, ESI 명령어는 같은 레지스터를 XOR 연산하게 되면은 0으로 초기화하는 과정입니다. 빨간색으로 네모칸 친 부분이 일련번호 생성 부분이고 차례대로 번호를 붙여서 설명하겠습니다. 입력된 값 : lena151 1. 'MOV EDX, DWORD PTR DS : [403038] ' EDX 레지스터로 DWORD(4바이트) 크기만큼 복사하는 명령어입니다 (WORD는 2바이트) '403038'에 있는 데이터 4바이트만큼 EDX에 복사한다. 주소에는 '6C 65 6E 61'이 저장되어 있으며, ASCII 코드로 'lena'라고 확인할 수 있습니다. 2. 'MOV DL, BYTE PTR DS : [EAX + 403037] EAX 레지스터에는 1이 저장되어 있으며, 1 + 403037 = 403038이라고..

실전 악성코드와 멀웨어 분석 실습 - 11-01

실습 환경 운영체제 : Windows XP 가상화 : Vmware Workstation 12 도구 : PEView , ProcMon , IDA Pro , Strings 먼저 기초 정적 분석으로 PEView 도구를 사용하여 GINADLL과 SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 문자를 찾을 수 있었습니다. 그러하여 GINA 가로채기 악성코드라 짐작할 수 있었습니다. 그림 2-1 과 2-2를 보고 임포트 함수에는 Register를 변경하는 임포트 함수와 악성코드를 실행시킨 후에 ProcMon으로 본 결과 GinaDLL에 msgina32.dll 경로를 삽입하는 것을 볼 수 있습니다. IDA pro를 사용하여 Lab11-01 파일을 확인하면 서브루틴이 0..

악성코드의 종류

다운로드와 실행기 흔히 만날 수 있는 악성코드의 두 가지 유형은 다운로더와 실행기다. 다운로더는 단순히 인터넷에서 악성코드의 다른 일부를 다운로드한 후 로컬 시스템에서 실행한다.(다운로드는 종종 익스플로잇과 함께 세트를 이룬다) 다운로더(Downloader)는 일반적으로 새로운 악성코드를 다운로드하고 실행하기 위해서 WinExec호출에 이어 윈도 API인 URLDownLoadtoFileA를 사용함 실행기(loader : 로더)는 현재 실행이나 추후 실행을 은닉하기 위해 악성코드를 설치하는 특정 실행 파일이다. 백도어 백도어(Backdoor)는 공격자가 감염된 사용자 머신에 원격 접속할 수 있게 도와주는 악성코드의 한 종류이다. 악성코드 중에서 가장 흔하게 발견되는 유형이며, 다양한 기능을 이용한 온갖 종..

실전 악성코드와 멀웨어 분석 실습 - 6 -2

1. main 함수가 첫 번째 서브루틴은 무슨 오퍼레이션을 수행하는가? 아래와 같이 첫 번째 서브루틴 함수는 0x401000 인 것을 알 수 있었고, 401000 함수에 들어가 보면 2번째 사진과 같은 기능을 수행하는 것을 알 수 있었다. 인터넷 활성화 여부를 확인하는 InternetGetConnectedState 함수를 확인 가능하며, if구문으로 인터넷 상태를 확인하는 것으로 보인다. 2. 0x40117F에 위치한 서브루틴은 무엇인가? 6 - 1과 똑같은 구조이므로 printf는 0x40117F 위치에 있는 서브루틴이다. 3. main 함수가 호출하는 두 번째 서브루틴은 무엇인가? main이 호출하는 두 번째 함수는 0x401040에 위치해 있다. http://www.practicalmalwarean..

실전 악성코드와 멀웨어 분석 실습 - 6 - 1

기초 동적 분석 Import 함수 정보 KERNEL32 와 WININET 2개가 존재합니다. WININET은 HTTP 프로토콜과 상호작용을 할 수 있게 해주는 것이며, 임포트하고 있는 InternetGetConnectedState는 로컬 시스템에 인터넷 연결 상태를 확인하는 API입니다. (LAN, Modem, proxy 등 무엇을 사용하여 인터넷을 이용하는지 확인할 수도 있다.) 1. main이 호출하는 서브루틴만으로 발견한 주요 코드 구조는 무엇인가? main 함수에서 첫번째 등장하는 서브루틴 0x401000의 위치한 if구문으로 인터넷 상태를 체크하기 위해서 비교하는 구문이 존재 한다. 위 그림을 보면 if구문이 사용되었느지 가독성이 떨어진다. 확실히 확인 하기 위해서 그래프모드로 확인한 결과 if..

실전 악성코드와 멀웨어 분석 실습 - 03-03

질문 1. Process Explorer로 이 악성코드를 모니터링했을 때 무엇을 알아냈는가? Lab03-03.exe를 실행했을 경우 ProcEx로 확인해 보았을 때 svchost.exe 프로세스로 교체되는 것을 확인할 수 있었으며, scvhost.exe. 가 고아 프로그램으로 동작하고 있다. 전형적으로 svchost.exe는 svchost.exe로 안에서 자식 프로세스로 작동되어야 하는데 고아 프로그램으로 작동되고 것을 확인할 수 있었다. 2. 실시간 메모리 변조를 확인 할 수 있는가? 위의 사진은 디스크 이미지 이며 아래 사진은 메모리 이미지 사진이다. svchost.exe 디스크 이미지와 메모리 이미지는 동일하지 않으며, 메모리 이미지의 Practicalmalwareanalysis.log와 [Ente..

실전 악성코드와 멀웨어 분석 실습 - 03-02

기초 동적 분석 도구를 이용해 Lab03-02.exe 파일에서 발견된 악성코드를 분석하라. 질문 1. 악성코드 자체가 어떻게 설치됐는가? A : 먼저 악성코드가 실행파일이 아닌 DLL파일이다. DLL을 설치하려면 rundll32.exe을 사용해서 설치를 진행 해야 하는 것 으로 보인다. 그래서 임포트 함수를 확인하기 위해서 Dependency Walker를 이용하여 Lab03-02.dll를 확인하였다. 익스포트 함수로는 InstallA 와 ServiceMain를 찾을 수 있었다. 악성코드를 서비스로 설치하려면 rundll32.exe 실행 파일을 통해 악성코드의 익스포트 installA 함수를 rundll32.exe Lab03-02.dll, installA 형태로 실행할 수 있다. Strings를 이용하여..

실전 악성코드와 멀웨어 분석 - 실습 03-01

기초 동석 분석 도구를 이용해 Lab03-01.. exe 파일에서 발견된 악성코드를 분석하라 기초 동적 분석 VirusTotal의 Lab03-01에 업로드 결과 70개 안티바이러스 엔진 중 67개 엔진이 발견하였다. 결과를 본 후에 Backdoor임을 짐작할 수 있었다. 컴파일 시간 결과 2008/01/06 14:51:31 UTC를 확인할 수 있었다. 패킹과 난독화 징 후가 있는 PEiD로 확인 결과 PEncryt 3.1 Final -> junkcode로 패킹된 것을 확인할 수 있었다. junkcode라는 말이 나왔으므로 코드 분석을 어렵게 하기 위해서 중간중간 불 필요한 코드를 삽입한 것으로 보인다. 질문 1. 악성코드의 임포트 함수와 문자열은 무엇인가? 패킹이 되어 있기 때문에 ExitProcess에..

실전 악성코드와 멀웨어 분석 - 실습 1-4

Lab01-01.exe 파일을 분석하라 질문 1. http://www.virustotla.com/ 에 Lab01-04.exe 파일을 업로드하자. 기존 안티바이러스에 정의된 것과 일치하는가? A : 70개의 엔진 중 56개 엔진이 탐지하였다. 2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있고 가능하다면 언패킹 해보자. A : PEID로 확인했을 경우 패킹된 흔적을 찾을 수 없었다. 3. 이 프로그램은 언제 컴파일되었는가? A : 2019/08/30 22:26:59 UTC에 컴파일된 것으로 보인다. 4. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 임포트를 보고 알 수 있는가? KERNEL32.DLL 위의 사진에서 lstrcmp\ ls..