본문 바로가기

4-2. 2024-1 심화 스터디/윈도우 악성코드분석

[악성코드 정적 및 동적 분석]

애드웨어 동적 분석

  • process explorer

현재 동작 중인 모든 프로세스를 실시간으로 보여주고, 새로 실행되거나 종료되는 프로세스도 보여준다.

시스템에서 File의 변화(추가, 삭제)를 실시간으로 모니터링하는 도구이다. Registry의 변화 역시 실시간으로 모니터해주며, 시간별로 로그가 계속해서 기록된다.

 

LOCKBIT 2.0 동적 분석

처음 실행시킨 LockBitRansomware.exe 파일의 프로세스를 확인할 수 있고, 실행 후에 금방 종료됩니다.

이후 DLLHost 파일로 LockBitRansomware.exe 파일을 다시 실행시킵니다. DLLHost.exe 파일은 Microsoft Windows 운영 체제에서 COM 객체의 호스트 프로세스로 사용되는 파일입니다. Dllhost.exe는 COM 객체를 호스팅하는 프로세스로, 해당 COM 객체가 DLL 형태로 제공될 때 InprocServer32 레지스트리 항목에 지정된 DLL 파일을 로드하여 실행합니다. ⇒ COM Hijacking으로 추측하였습니다.

 

위 CLSID 중 COM Hijacking에 사용되는 CLSID 값이 있습니다.

 

이외에도 두번째 실행되는 LockBitRansomware.exe 에서 랜섬웨어 암호화 및 랜섬노트를 드랍합니다.

 

Run 레지스트리 키를 설정하는 것을 확인할 수 있었습니다.

 

 

실제 감염 화면과 랜섬노트

 

CONTI 정적 분석

처음 접속 화면

시작 지점

DOS Stub code

This is program cannot be run in DOS mode → 윈도우에서 실행되는 파일(윈도우에서 실행되는 것을 알 수 있음)

NT_Header

file_header

014c: intel CPU

Number of Sections: 섹션의 개수

Time Date Stamp: 5F92A8DE를 10진수로 계산하고 초를 기준으로 저장하기에 pc의 기준이 되는 날인 1970년 1월 1일 0시에 더해주면 지금의 타임 데이터가 나옴

Characteristics: 파일 형식 정보, OR연산을 이용해서 각 필드의 정보를 보고 어떤 속성인지 알 수 있음. 여기선 executable형식과 32bit임을 알 수 있음.

 

OPTIONAL_HEADER

magic, address of entry point, sub system을 주의깊게 관찰

Magic

010B는 32bit에 해당하는 값이므로 32구조체임을 알 수 있다

Size of Code

코드영역 크기, 0004E200이 내 코드영역의 크기

★Address of Entry Point

프로그램의 실제 시작주소로 악성코드에서 악용가능. 악성코드를 특정 번지에 심어놓고 그곳을 실행주소로 지정→악성코드 시작 지점으로 지정 가능

00018F55이므로 파일 실행시 Image Base(400000)+01F855부터 시작한다

Best of code

코드영역이 시작되는 상대주소로 00001000. 코드영역이 Image Base(400000)+0100부터 시작한다.

Image Base

PE파일이 메모리에 로드되는 시작주소. 보통 exe, DDL번지로 설정한다.

Section Alignment

메모리에서 섹션의 최소 단위로 시작주소는 이 값의 배수

1000이므로 섹션의 크기는 1000의 배수가 되고 빈공간은 0으로 채우게 된다

File Alignment

파일에서 섹션의 최소 단위, 시작주소는 이 값의 배수로 0200이다

Size of Image

PE파일이 메모리에 로딩될 때 전체 크기. 0007D000, 파일이 로딩 시 전체크기 0x7D000, file alignment의 배수

Size of header

모든 헤더의 크기. 0400

Sub System

1은 system driver, 2는 GUI, 3은 CUI인데 2니까 GUI

Number of RvaAndSizes[visual studio에서 #include<winnt.h>입력하고 우클릭→문서보기 하면 해당 파일 열람 가능.

Data Directory의 구조체 멤버 개수 0x10(16)

 

.text 부분

Name: 섹션 이름. 2E 74 65 78→ test 섹션임을 의미한다

Virtual size: 메모리 섹션 크기. 4E1E8

Virtual Address

: 메모리 섹션의 시작 주소, RVA. optional header의 base of code값과 동일하다

Size of Raw Data: 파일에서의 섹션 크기, 0400

Characteristics: 섹션의 정보 표시, OR연산으로 표시로 60000020은 읽고 쓰기가 가능한 코드 섹션임을 의미한다.

 

💡

20000000→실행

40000000→읽기

20→코드