악성코드분석/실전 악성코드와 멀웨어 분석 24

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

이 실습에서는 파일 Lab06-04.exe에서 발견된 악성코드를 분석한다. 1. 실습 6-3과 6-4의 main 함수에서 호출한 함수 간의 차이점은 무엇인가? Switch문의 위치가 6-3에서는 401130이었는데, 6-4에서는 401150에 위치해있다. printf문의 위치는 6-3에서는 401271이었고, 6-4에서는 4012B5이다. 2. 어떤 새로운 코드 구조가 main 함수에 추가됐는가? main 함수에 for문이 추가되었다. 위쪽으로 향하는 파란색 화살표가 반복문을 나타낸다. var_C는 반복문에 사용하는 카운터 변수이다. 0으로 초기화 하여 사용한다. var_8에 파싱해온 문자를 넣는다. 그리고 그 값을 edx에 넣는다. edx가 0이 아닐 경우에 eax에 파싱한 값을 넣고 성공했다는 메시지..

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

이 실습에서는 파일 Lab06-03.exe에서 발견한 악성코드를 분석한다. 1. main 함수 호출과 실습 6-2의 main 함수와 비교하라. main이 호출한 새로운 함수는 무엇인가? 6-2에서는 호출하지 않던 sub_401130 함수가 호출된다. 2. 새로운 함수는 어떤 인자를 갖는가? char 인자와, lpExistingFileName이라는 인자를 받는다. char는 html 주소에서 파싱한 문자이고, lpExistingFileName은 argv[0]에 해당하는 현재 프로그램 이름이다. sub_401040 함수에서 파싱해온 문자를 [ebp+var_8]에 저장하는데 이를 ecx에 받아 스택에 넣어주었다. edx에 argv[0]을 넣어주고, 다시 그 주소 값을 eax에 넣어준 후, 스택에 넣어준다. 이..

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

파일 Lab06-02.exe에서 발견한 악성코드를 분석하라. 1. main 함수가 호출하는 첫 번째 서브루틴은 무슨 오퍼레이션을 수행하는가? InternetGetConnectedState 함수의 리턴 값을 통해 if문으로 분기하여 문자열을 출력하는 명령을 수행한다. 2. 0x40117F에 위치한 서브루틴은 무엇인가? sub_40117F에 들어오는 인자를 보니 이스케이프 시퀀스가 포함된 문자열인 것을 알 수 있다. 따라서 해당 함수는 printf 함수라고 추측할 수 있고, 알아보기 편하게 이름을 printf로 변경해준다. 3. main 함수가 호출하는 두 번째 서브루틴은 무엇인가? main함수가 호출하는 두 번째 서브루틴 sub_401040이다. Internet Explorer 7.5/pma라는 User-..

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

이 실습에서는 파일 Lab06-01.exe에서 발견된 악성코드를 분석한다. 1. main이 호출하는 서브루틴만으로 발견한 주요 코드 구조는 무엇인가? main이 호출하는 서브루틴은 sub_401000이다. sub_401000의 그래프 뷰이다. InternetGetConnectedState의 반환 값에 따라서 if문으로 분기한다. 2. 0x40105F에 위치한 서브루틴은 무엇인가? 40105F 함수는 IDA에서 인식하지 못하여 명명되지 않았는데, 무슨 함수인지 알아보기 위해서 인자로 어떤 것이 들어가는지 확인하면 된다. 위에서 보았던 그래프 뷰의 일부이다. 양 쪽 분기 모두 sub_40105F를 호출하고 있는데, 인자로 문자들과 이스케이프 시퀀스 \n로 구성된 문자열이 들어가고 있다. 따라서 printf문..

실전 악성코드와 멀웨어 분석 실습 5-1 (11~21)

11. PSLIST 익스포트는 무슨 역할을 하는가? PSLIST 함수이다. 어떤 역할을 하는지 쉽게 알아보기 위해 상호 참조 그래프를 그려보았다. Process32First, EnumProcessNameExA, Process32Next, CreatToolhelp32Snapshot 함수를 호출하는 것으로 보아 현재 실행중인 프로세스 리스트를 얻는 기능을 한다고 추측할 수 있다. 이러한 루틴을 하는 함수가 두 개 이므로 분기점에서 갈리는 것으로 예상할 수 있다. PSLIST 함수에서 sub_100036C3의 결과에 따라 루틴이 분기되는 것을 알 수 있다. sub_100036C3 함수는 OS 버전을 반환하는 함수이다. 이렇게 얻어온 OS 버전을 통해 각각 분기되고나면, CreateToolhelp32Snapsh..

실전 악성코드와 멀웨어 분석 실습 5-1 (1~10)

IDA Pro만을 이용해 Lab05-01.dll 내의 악성코드를 분석하라. 이 실습의 목적은 IDA Pro를 직접 다루는 데 있다. 이미 IDA Pro를 사용해 본 적이 있으면 다음 문제를 무시하고 악성코드 리버싱에 초점을 맞춰도 좋다. 1. DllMain의 주소는 무엇인가? 1000D02E이다. Function 윈도우에서 찾고싶은 함수 이름을 타이핑하면 위와 같이 검색이 된다. 2. Imports 윈도우를 이용해 gethostbyname을 탐색해보자. 임포트 위치는 어디인가? 문제 1번에서 했던 방식과 같이 Imports 윈도우에서 검색하여 100163CC라는 것을 알아냈다. 3. gethostbyname에 함수는 몇 개인가? gethostbyname 함수의 xrefs 윈도우를 통해 9번의 호출이 있다..

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

안전한 환경에서 기초 동적 분석 도구를 이용해 모니터링하는 동안 Lab03-03.exe 파일에서 발견된 악성코드를 실행하라. 1. Process Explorer로 이 악성코드를 모니터링했을 때 무엇을 알아냈는가? Lab03-03.exe는 PID 224의 svchost.exe를 자식 프로세스로 실행시키고 종료된다. 생성된 프로세스는 정상적인 프로세스처럼 보이지만, 2. 실시간 메모리 변조를 확인할 수 있는가? Strings를 확인해 보았을 때, 파일에서와 메모리에서의 문자열이 다르게 존재하는 것을 확인 할 수 있다. 3. 악성코드임을 의미하는 호스트기반 표시자는 무엇인가? 악성코드는 prcaticemalwareanalysis.log라는 파일을 남긴다. 4. 이 프로그램의 목적은 무엇인가? 생성된 로그 파일..

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

기초 동적 분석 도구를 이용해 Lab03-02.dll 파일에서 발견된 악성코드를 분석하라. 1. 악성코드 자체가 어떻게 설치됐는가? 이 파일은 dll이기 때문에 rundll32.exe를 통해 export하는 함수 중에서 실행과 관련된 함수를 찾아서 실행시켜야 한다. 따라서 export 목록을 찾아야 한다. 서비스와 관련된 것으로 추정된 함수들도 보이고, 설치에 관련된 함수들도 보인다. 이 파일의 Import 내용이다. 위의 dll 외에도 WS2_32.dll도 임포트하고 있다. ADVAPI32.dll에서는 서비스와, 레지스트리에 관련된 함수를 임포트하였고, KERNEL32.dll에서는 파일과, 디렉터리 경로, 시간과 관련된 함수들을 임포트하였다. WININET.dll에서는 인터넷과 http통신과 관련된 함..

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

1. 악성코드의 임포트 함수와 문자열은 무엇인가? 파일에 포함된 문자열 중 WinVMX32, VideoDriver vmx32to64.exe와 같은 문자열도 보이고, 레지스트리 위치, 도메인명으로 추정되는 문자열이 존재한다. 따라서 이 문자열들의 쓰임새에 대해 알아볼 필요가 있다. 임포트 함수가 ExitProcess밖에 없으므로 패킹된 파일임을 의심해볼 수 있다. PEncrypt 3.1 Final로 패킹된 것을 확인할 수 있다. 2. 악성코드임을 의미하는 호스트 기반 표시자는 무엇인가? 패킹된 상태에서 정적 분석을 통해 임포트 하는 함수가 ExitProcess 뿐임을 확인했다. 하지만 실행중인 파일에서는 동적으로 ws2_32.dll과 같은 dll을 로드하는 것으로 보아 네트워크 기능을 한다. WinVMX3..

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

1. www.VirusTotal.com 에 파일을 업로드하자. 기존의 안티바이러스에 정의된 것과 일치하는가? 69개의 엔진에서 59개의 엔진이 탐지하였다. 2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있고 가능하다면 언패킹해보자. PEiD의 컴파일 정보를 보면 패킹되지 않았음을 알 수 있다. 섹션의 이름이 전형적이고, RAW Size와 Virtual Size가 적절하게 되어있다. 또한 IAT 정보도 정상적인 것으로 보아 이 파일은 패킹되지 않았음을 알 수 있다. 3. 이 프로그램은 언제 컴파일됐는가? Time Data Stamp 정보를 통해 2019/08/30 22:26:59 UTC에 컴파일 된 것을 알 수 있는데, 이 책이 출간 된 때가 2013년이므..