전체 글 74

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

파일 LAB12-01.exe와 LAB12-01.dll에서 발견되는 악성코드를 분석하자. 분석을 할 때 이 파일들은 동일한 디렉터리에 존재해야 함을 주의하자. Lab12-01.exe 분석 EnumProcesses를 통해 현재 프로세스들의 PID를 받아오고 각 PID를 인자로 서브루틴 401000에 전달하여 실행시킨다. 인자로 전달된 PID를 OpenProcess에 전달하여 핸들 값을 얻어오고, 그 핸들 값을 GetModuleBaseNameA에 전달하여 해당 핸들 값을 가진 모듈의 이름을 String1 배열에 저장한다. 그 후, strnicmp 함수를 통해 String1 배열의 내용과 explorer.exe 문자열의 내용을 비교하여 같으면 1을 반환한다. 다시 main 함수로 돌아가자. 서브루틴 401000..

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

Lab11-03.exe와 Lab11-03.dll에서 발견되는 악성코드를 분석하자. 분석하는 동안 2개의 파일이 동일한 디렉터리에 있어야 함을 명심하자. 1. 기본 정적 분석을 통해 발견할 수 있는 재미있는 분석 단서는 무엇인가? Lab11-03.exe는 cisvc.exe(Content Index service)라는 문자열을 포함하고 있는 것으로 보아, 서비스 관련된 작업을 하는 것으로 추측할 수 있다. Lab11-03.dll은 GetForegroundWindow와 GetAsynKeyState 함수를 Import하고 있는 것으로 보아, 폴링 키로거로 의심해볼 수 있다. 키로깅에서 GetAsynKeyState 함수는 키가 눌렸는지 여부를 인식한 후 가장 최근의 GetAsynKeyState 호출 이후 해당 키..

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

Lab11-02.dll에 있는 악성코드를 분석하자. Lab11-02.ini라는 의심 파일 역시 이 악성코드와 함께 발견됐다고 가정한다. 1. 이 DLL 악성코드에서는 무엇을 익스포트하는가? installer라는 함수를 익스포트하고있다. 2. rundll32.exe를 이용해 이 악성코드를 설치한 이후 어떤 일이 발생하는가? 아래는 installer 함수를 분석한 것이다. SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs 키에 spoolvxx32.dll 이라는 이름으로 자기 자신을 등록하여 영구적으로 설치한다. 또한 spoolvxx32.dll이라는 이름으로 시스템 디렉터리에 자신을 설치한다. 3. 악성코드를 올바르게 설치하기 위해서는 Lab..

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

Lab11-01.exe에 있는 악성코드를 분석하자. 1. 악성코드는 무엇을 디스크에 다운로드 하는가? ResourceHacker로 Lab11-01.exe를 확인한 결과이다. TGAD라는 이름의 Resource 영역이 존재하는 것을 알 수 있고, 해당 영역은 MZ 헤더로 시작하는 PE파일임을 알 수 있다. 파일 내에 DisableThreadLibraryCalls라는 문자열이 존재하는 것으로 미루어 보아 해당 파일은 dll임을 추측할 수 있다. Lab11-01.exe를 IDA로 확인해보았다. Lab11-01.exe의 서브루틴 401080에서는 위에서 확인한 리소스를 msgina32.dll 라는 파일명으로 추출한다. 2. 악성코드는 어떻게 지속성(persistence)을 유지하는가? HKML\SOFTWARE\..

커널 디버깅 설정

해당 설정은 가상머신 VirtualBox, 게스트 OS Windows XP, 호스트 OS Windows 10 환경에서 이루어졌습니다. 우선 게스트 OS의 boot.ini 파일을 아래와 같이 수정해준다. 이 파일은 C드라이브 내에 있다. 보이지 않을 경우에는 폴더 옵션을 재설정하면 된다. /debug 플래그는 커널 디버깅을 활성화 하고, /debugport=COM1은 운영체제가 어떤 포트를 사용해 디버깅되는 머신이 디버깅 하는 머신으로 접속하는지 지정한다. baudrate는 접속 속도를 정의한다. 나중에 옵션을 구분하기 쉽게 두 엔트리의 이름을 다르게 지정해주었다. 다음에 이 게스트 OS를 부팅할 때 두 가지 버전의 엔트리를 선택하는 시간이 주어진다. 커널 디버깅을 위해서는 커널 디버깅 설정이 된 운영체제..

카테고리 없음 2022.01.12

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

OllyDbd와 IDA Pro를 이용해 파일 Lab09-03.exe에서 발견할 수 있는 악성코드를 분석하자. 이 악성코드는 모두 동일한 메모리 로드 위치를 요청하게 설계된 3개의 DLL(DLL1.dll, DLL2.dll, DLL3.dll)을 로드한다. 그러므로 IDA Pro와 OllyDbg를 통해 3개의 DLL을 살펴볼 때 각 프로그램에 따라 코드는 다른 메모리 위치에서 나타날 수 있다. 이 실습의 목적은 OllyDbg에서 코드를 볼 때 IDA Pro에서도 코드의 정확한 위치를 찾을 수 있게 편안하게 만드는 것이다. 1. Lab09-03.exe을 통해 어떤 DLL이 임포트되는가? Lab09-03.exe의 임포트되는 DLL 목록이다. strings 실행 결과 user32.dll과 DLL3.dll이라는 문자..

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

OllyDbg를 사용해 파일 Lab09-02.exe에서 찾을 수 있는 악성코드를 분석해서 다음 질문에 답해보자. 1. 바이너리에서 정적으로 어떤 문자열을 볼 수 있는가? strings 실행 결과를 통해 임포트 함수 목록과 cmd라는 문자열을 발견했다. 2. 이 바이너리를 실행했을 때 어떤 일이 발생하는가? 실행했을 때 별 다른 행위 없이 종료되는 것처럼 보인다. 따라서 IDA와 OllyDbg를 통해 확인할 필요가 있다. 3. 이 샘플이 악의적인 페이로드를 실행하게 하기 위해서는 어떻게 해야 하는가? IDA로 메인함수의 시작부분에 선언되어있는 변수들의 내용을 올리디버거로 확인해보았다. 1qaz2wsx3edc라는 문자열과 ocl.exe라는 문자열을 생성하였다. 그 다음으로 GetModuleFileNameA ..

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

OllyDbg와 IDA Pro를 사용해 파일 Lab09-01.exe에서 찾을 수 있는 악성코드를 분석해서 다음 질문에 답해보자. 이 악성코드는 3장에서 기본 정적과 동적 분석 기술을 사용해 기본적으로 분석됐다. 인자를 주지 않고 올리디버거로 디버깅 하였을 때 악성코드는 ShellExecuteA 함수를 통해 cmd로 자기 자신을 삭제하는 행위를 한다. -in 인자를 주고 실행하였을 경우에도 역시 스스로 삭제하는 행위를 한다. argc, argv는 메인함수의 각각 첫 번째 인자, 두 번째 인자이므로, EBP+8은 argc, EBP+C는 argv이다. EAX는 argc를 가지고 있고, ECX는 argv를 가지고 있다. 그리고 EDX가 커맨드라인 인자로 들어온 요소들 중 마지막 요소를 가리키게 한다. 이 마지막..

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

이 실습에서 실행 전에 악성코드 실행 파일인 Lab07-03.exe과 DLL인 Lab07-03.dll을 입수했다. 이는 실행할 때마다 악성코드가 변경될 수 있기 때문에 중요하다. 두 파일 모두 피해자 시스템의 동일한 디렉토리에서 발견됐다. 프로그램을 실행한다면 두 파일이 분석 장비의 동일한 디렉토리에 위치하게 해야 한다. 127로 시작하는(루프백 주소) IP 문자열이 로컬 장비로 접속한다(실제 악성코드 버전은 이 주소가 외부 장비로 연결되겠지만 여기서는 안전하게 localhost로 접속하게 설정했다.) Lab07-03.exe의 문자열을 확인하였다. kernel32.dll과 비슷해보이는 이름인 kerne132.dll 문자열이 존재한다. 또한 Lab07-03.dll라는 문자열도 존재한다. 따라서 이러한 dl..

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

파일 Lab07-02.exe에서 발견한 악성코드를 분석해보자. 1. 이 프로그램은 어떤 방식으로 지속 메커니즘을 보장하는가? 이 프로그램은 실행시키면 광고 웹 페이지를 출력하고 종료된다. 2. 이 프로그램의 목적은 무엇인가? 광고 웹 페이지를 출력시키는 것이 목적이다. OleInitialize와 CoCreateInstance로 COM 객체를 초기화하고 생성한다. 어떤 COM 기능이 사용되었는지 확인하기 위해서는 rclsid와 riid 인자의 값을 확인해야 한다. 각각 0002DF01-0000-0000-C000-000000000046과 D30C1661-CDAF-11D0-8A3E-00C04FC9E26E이다. 레지스트리의 CLSID를 확인하면 어떤 프로그램이 호출되는지 알 수 있다. 인터넷 익스플로러와 IWe..