관리 메뉴

HeeJ's

[05]악성코드분석_6주차 본문

<Information Security>/<Malware>

[05]악성코드분석_6주차

meow00 2021. 11. 10. 10:51

악성코드 고급 정적 분석 : 아이다 활용

- PE, COFF, ELF 지원

- x86/ x64 지원

- 함수 발견, 스택 분석, 지역 변수 확인 등 수 많은 기능 제공

- 과정의 모든 부분을 수정, 조 작, 재배피, 재정의

- 분석 진행 상황 저장 기능(주석 작성, 라벨링, 함수 이름 붙이기)

- 막강한 플러그인 지원(C Decompiler)

 

그래프 모드

- 그래프 형태로 출력

- 화살표 색깔과 방향 이용

( 빨강 : 조건 점프 거짓

초록 : 조건 점프 참

파랑 : 무조건 점프 )

 

텍스트 모드

- 기존의 보기 방식

- 메모리 주소, 옵코드, 섹션명 등 출력

( 실선 : 무조건 점프

점선 : 조건 점프 )

 

분석에 유용한 윈도우

- 함수 윈도우 : 실행 파일 내의 모든 함수를 목록화

- 이름 윈도우 : 함수, 명명된 코드, 명명된 데이터와 문자열을 포함해 이름 관련 모든 주소를 목록화

- 문자열 윈도우 : 5자 이상의 ASCII 무낮열 출력

- 임포트 윈도우 : 임포트되는 모든 함수 목록

- 익스포트 윈도우 : 익스포트 되는 모든 함수 목록 (DLL 분석 시 용이)

- 구조체 윈도우 : 데이터 구조 레이아웃 목록

 

address 관련

sub_xxxxxxxx : 함수 시작 링크

Loc_xxxxxxxx : 목적지로 점프하는 링크

Offset_xxxxxxxx : 메모리 내의 오프셋 링크

 

상호 참조

1. xref로 표기

2. 함수롤 호출한 위치나 사용한 문자열 위치를 알림

3. 함수의 호출된 파라미터로 이동

 

- 함수를 인식하고 이름을 기입하여 지역 변수와 파라미터로 분리하는 기능

( 스텍에서 ebp, ret 등을 기준으로 지역 변수와 파라미터 구분 )

-> 전역변수는 stack에 저장되지 않고, 따로 메모리에 적재된다.

 

함수 이름 변경

가상 주소와 스택 변수에 자동으로 이름을 정하지만,

임의대로 더 좋은 이름으로 수정할 수 있음

 

 

악성코드 주요 행위 분석

주로

1. 백도어

2. 백신을 죽임

3. 레지스트리/서비스 자동 실행

4. 권한 상승

5. DLL Injection

 

1. 윈도우 API (Application Programming Interface)

- 대부분의 악성코드는 윈도우 플랫폼에서 동작

- 운영체제와 밀접하게 상호작용

 

핸들(Handle)

- 윈도우, 프로세스, 모듈, 메뉴, 파일 등과 같이 운영체제에서 오픈되거나 생성

- 객체나 메모리 위치를 참조한다는 점에서 포인터와 같다

 

파일 시스템 함수

- 악성코드가 시스템과 상호작용하는 일반적인 방식은 파일을 생성, 수정해 파일명을 구별하거나 기존 파일 명 변경

- 식별자로 사용 가능

- 파일을 생성해 그 파일에 웹 브라우징 내용을 저장한다면 해당 스파이웨어 형태일 가능성 높음

1. CreateFile() : 파일을 생성하고 열 때 사용

기존 파일, 파이프, 스트림, I/O 장치를 열고 새로운 파일을 생성

dwCreationDiposition 인자 - 함수가 새로운 파일을 생성하는지, 기존 파일을 오픈하는지 여부 제어

2. ReadFile()/WriteFile() : 파일을 읽고 쓰는데 사용

두 함수 모두 파일을 스트림 형태로 운영

ReadFile은 파일을 몇 바이트씩 끊어 읽는다.

3. CreateFileMapping()/MapViewOfFile() : 파일 매핑은 파일을 메모리로 로드해 쉽게 조작할 수 있게 함

CreateFileMapping : 파일을 디스크에서 메모리로 로드

MapViewOfFile : 매핑된 베이스 주소 포인터를 변환, 메모리 내 파일에 접근, 파일 포맷 파싱에 용이

 

특수 파일 : 드라이브 문자와 폴더명으로 접근할 수 없는 파일도 존재

공유 파일 : 네트워크 상에 저장된 공유 폴더에서 디렉터리나 파일에 접근

네임 스페이스를 통해 접근 가능한 파일 : 운영체제 내에서 네임스페이스를 통해 접근

- 네임 스페이스 : 고정된 숫자의 폴더와 각각 저장하는 다른 유형의 객체

물리적 장치 접근하여 파일처럼 읽음

 

윈도우 레지스트리

- 운영체제와 설정이나 옵션 같은 프로그램 구성 정보 저장

- 수직 구조의 정보 데이터베이스 -> 성능 향상

- 네트워킹, 드라이버, 시작, 사용자 계정, 다른 정보 등 거의 모든 윈도우 구성 정보 저장

- 레지스트리를 활용하는 악성코드

ㄴ 영구 데이터나 설정 데이터 저장

ㄴ 컴퓨터 부팅시마다 자동으로 동작할 수 있게 수정

 

서비스

- 악성코드가 새로운 코드를 실행하는 또 다른 방식은 서비스로 설치하는 방법

- 백그라운드 애플리케이션으로 실행하는 서비스를 사용, 프로세스나 스레드 없이 실행

(코드가 스케쥴링돼 사용자 입력 없이 윈도우 서비스 관리자가 실행)

- 서비스 이용의 이점

ㄴ SYSTEM 권한으로 실행 (admin보다 상위)

ㄴ 운영체제 시작 시 자동으로 실행

- 서비스 API

ㄴ OpenSCManager, CreateService, StartService

 

버클리 호환 소켓

- Winsock 라이브러리에서 주로 구현

- socket, bind, listen, accept, connect, recv, send 의  API 함수를 사용하고 있다면 socket을 이용한 네트워크 작업을 하고 있을 수도 있다.

 

WinINet API

- Winsock API 보다 상위 수준

- WIninet.dll에 저장

- HTTP, FTP와 같은 프로토콜을 구현

- InternetOpen, InternetOpenUrl, InternetReadFile

 

DLL

 - 현재 윈도우에서 다양한 애플리케이션끼리 코드를 공유하는 라이브러리를 사용

- 다른 애플리케이션에 의해 실행할 수 있는 export 함수 포함

- 정적 라이브러리는 dll 이전에 사용하던 표준 라이브러리로 프로세스를 별도로 메모리에 로드

 

 

'<Information Security> > <Malware>' 카테고리의 다른 글

[06]악성코드분석_7주차  (0) 2021.11.16
[04]악성코드분석_5주차  (0) 2021.11.03
[03]악성코드분석_4주차  (0) 2021.10.06
[02] 악성코드 분석_3주차  (0) 2021.09.29
[01] 악성코드 분석_2주차  (0) 2021.09.21