본문 바로가기

Reversing/IT & Security

악성코드 분석

악성 코드란?

 

악성코드는 컴퓨터 시스템을 손상시키고 데이터에 해를 끼치거나 사용자의 정보를 훔치거나 파괴하는

악의적인 목적을 가진 소프트웨어를 말한다.

 

악성코드는 주로 이메일 첨부 파일, 웹 사이트로 경로로부터 다운로드, 네트워크,

USB 드라이브와 같은 이동식 미디어를 통해 시스템으로 확산된다.

이는 바이러스, 웜, 트로이 목마, 스파이웨어, 랜섬웨어, 애드웨어 등 다양한 형태의 악성 소프트웨어를 포함한다.

 

 

 

 

악성 코드의 역사

악성코드는 컴퓨터 보안 분야의 중요한 부분이며 컴퓨터와 인터넷이 발전함에 따라 다양하고 고급화된

형태로 발전해오고 있다.

 

컴퓨팅 초창기에는 주로 플로피 디스크나 기타 저장 매체를 통하여 바이러스가 유포되었다.

이후 1990년대 윈도우 운영체제의 보급으로 악성코드가 더욱 증가하였다.

일명 "스크립트 키디" 들이 쉽게 사용할 수 있는 도구들을 개발하여 대량의 바이러스 및 웜이 등장하게 되었고

인터넷이 널리 보급되면서 이메일이 대표적인 공격 벡터로 자리 잡았다.

 

2000년대부터 금전적 이익을 목적으로 하는 악성코드가 유행으로 확산되었다.

인터넷 보안 위협이 금전적인 이익을 목적으로 하는 것으로 전환되어 랜섬웨어와 스파이웨어의

등장이 두드러지게 나타났다.

 

2010년대부터는 정교한 트로이 목마와 지능적인 공격을 수행하는 악성코드가 확산되었다.

악성코드가 점점 더 정교하고 지능적인 방식으로 공격 및 사회공학기술의 발전과 함께

피싱 공격과 결합된 악성코드 등이 나타났다.

 

아울러 현재까지 지능적이고 고급화된 공격을 가진 악성코드의 확산은 계속되고 있다.

현재에 이르러서는 인공 지능(AI)과 머신 러닝(ML) 기술을 활용하여 보안 시스템을 피해 가는 악성코드가 등장하고 있다.

 

https://www.youtube.com/watch?v=sH4WXd1AE78

ChatGPT를 이용하여 악성코드를 제작하여 확산

 

악성 코드의 유형

악성코드는 다양한 형태의 악성 소프트웨어를 포함한다.

각각의 악성코드 유형에대해 설명하면 다음과 같다.

 

Backdoor (백도어)

시스템에서 실행/설치하면 공격자가 원격에서 접근이 가능하도록 제작된 악성코드이며

공격자는 백도어를 통하여 시스템을 접근하여 정보 탈취, 데이터 삭제, 명령어 실행, 2차 악성코드를 실행할 수 있다.

 

Downloader (다운로더)

공격자의 목적에 따른 악성 행위를 수행할 파일을  외부 사이트나 C&C 다운로드 서버로부터 악성코드를 다운로드하여

실행하는 유형의 악성코드를 말한다.

대부분 자신의 역할을 수행한 후 스스로 삭제하는(자가 삭제) 기능을 가지고 있다.

 

Adware (애드웨어)

사용자 동의 없이 설치되어 광고를 표시하거나 사용자의 브라우징 활동을 추적하여 타겟팅된 광고를 제공하는

악성코드이다.

Adware는 악성코드(Malware)로 분류하지 않고 unwanted software에 속하는 것으로 분류하기도 한다.

 

Dropper (드롭퍼)

파일 리소스 영역에 저장된 데이터를 이용하여 새로운 파일(악성 코드)을 생성하는 악성코드를 말한다.

즉 파일 안에 또 다른 파일이 있는 악성코드라 볼 수 있다.

주요 동작인 악성행위를 수행할 파일을 자신 속에 숨겨놓고 실행될 시 2차 악성코드 파일을 시스템에 설치하고 

실행시킨다.

 

KeyLogger (키로거)

사용자가 키보드를 통해 입력하는 내용인 Key Message를 탈취 및 Capture 하여 키 입력을 가로채는 악성코드이다.

 

Virus (바이러스)

악성행위를 수행하는 프로그램의 한 종류로 실행되었을 때 사용자 모르게 다른 프로그램을 수정하고

(PE 구조 변경, 타 프로세스에 코드를 삽입하거나 조작)과 같은 악의적인 동작을 수행하는 악성코드이다.

대표적으로 디스크 MBR, VBR 영역을 손상시켜 감염된 시스템이 부팅을 하지 못하도록 하는 악성코드가 있다.

 

Worm (웜)

자신을 복제하면서 연결된 Network를 통해 다른 시스템으로 전파하여

다른 Device를 감염시키는 기능을 가진 악성코드이다.

주로 System/Service 취약점을 이용하여 Network를 통해 다운로드시키고 실행시킨다.

특이사항으로는 주로 웜 형태 악성코드는 호스트 프로그램에 의존하지 않는다.

 

Trojan Horse (트로이 목마)

정상적인 프로그램이나 파일로 위장하여 사용자를 속이고

공격자가 의도하는 것을 숨긴 다음 해당 파일이 실행되면 숨겨져 있던 악의적인 동작을 수행하는 악성코드이다.

주로 사용자의 개인 정보를 탈취하거나 백도어를 열어주는 역할을 수행한다.

 

Botnet (봇넷)

C&C 서버로부터 명령어를 수신하여 동작하는 시스템을 말한다.

DOS/DDOS 공격 시에 사용된다.

 

Fileless (파일리스)

실행 파일이 없는 악성코드, 즉 PE 파일이 아닌 악성코드를 말한다.

악의적인 동작을 실시하는 코드 및 스크립트를 문서 파일에 삽입하여 유포한다.

(Powershell, HWP, PDF, doc, VBA, ShellCode) 

또한 악의적인 코드를 게시판에 올려놓고 다운로더에 의해서 실행하는 동작을 수행한다.

 

Rootkit (루트킷)

악성코드 탐지를 방해하기 위해서 악성코드의 존재를 숨기는 악성코드를 말하며

시스템에 접근할 수 있도록 Root 권한을 획득 할 수 있도록 해주는 킷(kit)이라고 불리기도 한다.

 

SpyWare (스파이웨어)

사용자의 정보를 수집하거나 모니터링하기 위해 설치된 소프트웨어로 사용자의 행동을 추적하거나

중요 정보를 수집하는 데 사용된다.

 

Scareware , Rogueware (스케어웨어)

사용자를 겁주거나 속여서 공격자가 원하는 Action을 하도록 유도하여 다른 software를 설치하게 끔

유도하는 기능을 가진 악성코드를 말한다.

주로 바이러스에 감염되었다고 경고창을 띄우는 행위를 하여

광고성이 있는 Anti-Virus Software를 설치하게 끔 유도한다.

 

Ransomware (랜섬웨어)

사용자 시스템의 저장 장치에 저장된 중요 파일들을 암호화시킨 후

해독키를 제공하는 조건으로 금전을 요구하는 악성코드를 말한다.

 

 

 

 

 

자주 사용되는 용어

APT (Advanced Persistent Threat)

지능형 지속 공격을 뜻하며 지능적인 방법을 사용해서 지속적으로 특정 대상을 공격하는 행위를 말한다.

 

Payload (페이로드)

시스템에 설치되어 악성행위나 exploit을 수행하는 부분을 말한다.

 

RAT (Remote Access Tool)

원격에서 Network을 통하여 관리자 권한으로 접속을 허용하게 하는 도구 (프로그램)을 말한다.

사용자 모르게 설치되며 백도어의 기능을 가지고 있다.

흔히 스크립트 키디들이 애용하는 좀비 PC를 관리하는 툴(njRat)이 RAT의 일종이다.

 

InfoStealer (인포스틸러)

정보유출형 악성코드를 말한다.

사용자의 디바이스에서 민감한 정보 (Authentication , 신용카드 데이터 , 가상화폐 지갑주소 등등)

정보를 탈취한다.

 

C2 , C&C(Command & Control)

백도어가 감염된 사용자 PC를 제어하고 다양한 공격 명령을 수행하기 위해 구축하는 서버

 

스피어피싱(Spear-Phishing)

사회공학 공격의 일종으로 신뢰할 수있는 출처에서 보낸 것처럼 위장하여 정보를 탈취하는

표적화된 이메일 공격

 

블루셸(BlueShell)

고(Go) 언어로 개발된 백도어 악성코드이며 소스코드가 깃허브에 공개되어 있는 악성코드이다.

 

쉘봇(ShellBot)

펄(Perl)언어로 개발된 디도스봇(DDos) 악성코드로서

C&C 서버로부터 명령을 받아 공격을 수행하는 봇넷(BotNet)형 악성코드이다. 

 

이모텟

정보탈취형 악성코드로 개인으로부터 신용카드 정보 등을 훔치는 뱅킹 트로이(Trojan) 목마 바이러스이다.

 

위협 인텔리전스 CTI(Cyberthreat Intelligence) , threat intel

기업을 대상으로 하는 사이버보안 위협에 관한 상세 지식으로 이루어진 데이터를 말한다.

https://www.ibm.com/kr-ko/topics/threat-intelligence

 

 

악성코드 분석 단계

악성코드를 대응하고 침해방지를 위해 악성 행위를 분석하여

해당 악성코드를 이해하고 대응하는 작업이 필요하다.

이에 컴퓨터 보안분야의 지식을 가진 전문가들이 사용자 PC에 악성코드가 설치, 감염되지 않도록

백신(Anti-Virus)을 개발하여 배포한다.

 

백신 사에서는 이러한 악성코드의 작동 원리를 이해하고 악성 활동을 차단하고 대응하는 방법을 개발하고

악성코드의 패턴과 시그니처를 식별하여 이후에 발생할 수 있는 유사한 공격을 탐지하는 데 사용되는

소프트웨어를 개발한다.

악성코드 분석은 Reverse Engineering(역공학)과 Digital Forensic Science(디지털 포렌식) 기술이 요구된다.

악성코드를 분석하는데 활용되는 방법은 다음과 같은 순서로 설명할 수 있다.

(오로지 무조건 이런 식으로 한다란 규정은 없으므로 단순하게 이해하면 좋을듯하다.) 

 

 

1. 샘플 수집 (Sample Collection)

 

우선 해당 악성코드를 분석하기 위해선

실제 악성코드 파일을 확보하거나 네트워크 트래픽 캡처를 통한 샘플 획득을 하는 작업이 이루어진다.

 

 

2. 정적 분석 (Static analysis)

 

 

파일을 실행하지 않고 내부 구조, 코드, 리소스, 문자열 등을 분석하여 악성코드의 특징을 식별한다.

실행 파일이 패커에 의해서 압축되어 있는지 프로텍터에 의해서 보호되어 있는지 확인하고

PE 파일 관련 내용, 문자열, IAT(Import Address Table) 정보를 확인한다.

또한 다양한 엔진을 사용하여 파일이나 URL을 분석하는 데 사용되는 바이러스토탈

(https://www.virustotal.com/gui/home/upload) 같은 사이트에서 분석결과를 확인한다.

 

예) PEiD, DetectItEasy

 

3. 동적 분석 (Dynamic analysis)

 

Procmon

 

악성코드 파일을 실행하고 간략하는 분석하는 단계이다.

악성코드 파일을 분석하기 위한 가상 환경(Virtual Machines)을 구축하고 실행하기 이전과 이후 상태를 비교하며 관찰한다.

 

예) Procexp, Procmon, Regshot, SysAnalyzer, WireShark

 

 

4. 고급 정적 분석 (Advanced Static analysis)

 

IDA

 

기초 분석 내용을 기반으로 실시하는 상세 정적 분석 단계이며

어셈블리와 Windows API를 기반으로 파일을 분석하는 행위를 말한다.

 

예) IDA, Ghidra

 

5. 고급 동적 분석 (Advanced Dynamic analysis )

 

Ollydbg

기초 분석 내용과 고급 정적 분석 내용을 기반으로 실시하는 상세 동적 분석 단계이며

주로 디버거를 사용하여 트레이싱하거나 악성 행위에 대한 코드에 breakpoint를 걸면서

악성코드의 행위를 분석한다.

 

예) Ollydbg, x64 dbg

 

6. 자동화 분석 (Automated analysis)

 

Cuckoo Sandbox

사람이 분석하는 것이 아닌 자동화 분석 도구를 이용하여 분석하는 행위를 말한다.

 

주로 악성코드 분석을 자동화 분석 도구 사용에만 의존하려는 경우가 있는데

이는 잘못된 생각이다. 물론 자동화 및 AI를 기반으로 한 기술과 도구들은 계속되어 발전되고 있다.

 

하지만 모든 행위를 자동화 분석도구가 완벽하게 분석할 수 있는 건 아니고 놓치는 것이 존재할 수도 있기 때문에

위와 같이 사람이 리버스엔지니어링을 통하여 직접 분석하는 행위와 자동화 분석을 더불어

악성코드를 분석하는 것이 가장 바람직한 방법이다.

 

자동화 분석 도구가 놓친 내용을 사람이 분석할 수도 있고

사람이 분석을 하면서 놓치는 내용을 자동화 분석 도구가 catch 할 수 있다면 

이 얼마나 좋은 상호작용인가?

 

예) Cuckoo, Hybrid Analysis, any-run

 

 

 

 

Windows Internal

윈도우 바이너리 분석을 하기 위해선 해당 운영체제가 동작하는 방식과 시스템 구조에 대한 이해가 필요하다.

윈도우 프로그램 특성상 Windows API에 종속적이라는 점을 이용하여 악성코드에서 사용하는

특정 패턴과 Windows API를 조합하여 해당 악성코드의 행위를 파악한다.

 

이때 주로 사용되는 라이브러리에 대한 간단한 설명은 다음과 같다.

 

kernel32.dll
메모리, 파일, 디렉터리, 하드웨어 접근 및 조작과 관련된 기능을 제공한다.

 

ADVAPI32.dll
윈도 서비스 관리자(services.msc), 레지스트리 키(refedit) 값 설정과 관련된 기능 제공한다.
서비스 등록, 실행, 중지

 

USER32.dll
버튼, 스크롤바, 사용자 행위/동작 제어와 같은 인터페이스 기능을 제공한다.

 

GDI32.dll
그래픽 관련 기능을 제공한다.

 

WSOCK32.dll, WS2_32.dll
네트워크 연결 및 소켓 통신과 관련된 기능을 제공한다.

 

WININET.dll
FTP, HTTP 연결 관련 기능을 제공한다.

 

NTDLL.dll
윈도우 커널 인터페이스를 제공한다.
kernel32.dll을 통해서 간접적으로 Import 되며 실행 파일은 직접 Import 할 수없다.

 

 

 

 

악성코드 주요 API

1. 파일
1) MoveFile
2) GetFileSize
3) SetFileAttributes
4) GetSystemDirectory
5) FindNextFile
6) FindClose
7) GetTempPath
8) CreateFile
9) WriteFile
10) CreateFileMapping
11) MapViewOfFile
12) UnmapViewOfFile
13) CopyFile
14) ReadFile

2. 리소스
1) FindResource
2) SizeofResource
3) LoadResource
4) LockResource

3. 패킹
1) LoadLibrary
2) GetProcAddress

4. DLL 인젝션 관련
1) CreateRemoteThread
2) GetProcAddress
3) LoadLibrary
4) OpenProcess
5) VirtualAlloc
6) WriteProcessMemory

5. 디바이스 관련
1) DeviceIoControl
2) GetLogicalDriveStrings
3) GetDriveType

6. 레지스트리 관련
1) RegDeleteKey
2) RegCloseKey
3) RegQueryValue
4) RegSetValue
5) RegDeleteValue
6) RegDeleteKey
7) RegCreateKey
8) RegOpenKey
9) RegGetValue

7. 서비스 관련
1) CreateService
2) OpenService
3) QueyServiceConfig
4) CloseServiceHandle
5) ChangeServiceConfig
6) ControlService
7) StartService
8) OpenSCManager

8. 네트워크 및 인터넷 관련
1) InternetGetConnectedState
2) InternetOpen
3) InternetOpenUrl
4) InternetReadFile
5) socket
6) send
7) recv
8) connect
9) WSAStartup
10) WSACleanup
11) WS2_32.WSASend
12) WS2_32.WSARecv 

9. 뮤텍스 관련
1) CreateMutex
2) OpenMutex
3) ReleaseMutex

10. 메모리 관련
1) VirtualAlloc
2) VirtualFree
3) VirtualProtect
4) HeapAlloc
5) HeapFree

11. 프로세스 관련
1) CreateProcess
2) CreateThread
3) ExitProcess
5) TerminateProcess

12. 쓰레드 관련
1) LoadLibrary
2) CreateThread
3) ResumeThread
4) CreateRemoteThread