기초 악성 코드 분석 1

1. 악성 코드

1.1 악성 코드란

  • 악성코드(Malware)는 "악의적인 소프트웨어"의 줄임말로, 사용자나 시스템에 피해를 주기 위해 만들어진 프로그램 또는 코드

1.2 악성 코드 종류별 특징

종류설명특징예시
바이러스다른 파일에 붙어서 감염실행 파일에 숨겨짐, 사용자 실행 필요매크로 바이러스, File Infector
웜 (Worm)네트워크를 통해 스스로 복제사용자 개입 없이 전파, 네트워크 과부하 유발이메일 웜, Conficker
트로이 목마정상 프로그램으로 위장백도어 설치, 시스템 제어 탈취게임 핵, 가짜 백신 프로그램
랜섬웨어파일을 암호화해 금전 요구데이터 인질화, 암호화폐로 몸값 요구WannaCry, LockBit
스파이웨어사용자 정보 몰래 수집키로깅, 웹 히스토리 수집, 계정 정보 탈취키로거, 트래커
애드웨어광고를 과도하게 표시팝업 광고, 브라우저 리디렉션, 성능 저하무료 앱에 포함된 광고 코드
루트킷시스템에 깊숙이 숨음관리자 권한 획득, 보안 탐지 회피운영체제 커널에 숨겨짐
봇넷감염된 다수의 PC 원격 제어DDoS 공격, 스팸 발송, 불법 채굴 등에 사용Mirai, Zeus

1.3 악성 코드 별 대응 방식

종류유포 방식탐지 방법대응 전략
바이러스감염된 파일 첨부, USB 등 저장매체백신 프로그램 정기 검사, 파일 무결성 검사백신 최신 유지, 출처 불분명한 파일 실행 금지
웜 (Worm)이메일, 네트워크 공유, 취약한 포트네트워크 트래픽 모니터링, IDS/IPS(침입 탐지/방지 시스템)OS/소프트웨어 최신 패치 적용, 방화벽 설정
트로이 목마정식 프로그램 위장, 피싱 사이트, 다운로드 유도동작 이상 징후 감지, 행동 기반 탐지(HIPS), 샌드박스 분석신뢰된 출처에서만 설치, 의심 파일 격리 실행
랜섬웨어이메일 첨부파일, 취약한 RDP, 크랙툴, 악성 웹사이트파일 암호화 시도 탐지, 행위 기반 탐지, 의심스러운 파일 모니터링정기 백업, RDP 차단, 메일 첨부파일 주의
스파이웨어무료 소프트웨어, 악성 광고, 피싱 링크키로깅 탐지, 네트워크 이상 트래픽 탐지, 스파이웨어 전용 스캐너스파이웨어 차단 툴 사용, 브라우저 보안 설정 강화
애드웨어프리웨어 번들 설치, 악성 웹사이트 광고팝업 감지, 광고 생성 프로세스 분석광고 차단 프로그램 사용, 프리웨어 설치 시 커스텀 옵션 선택
루트킷시스템 커널 악용, 드라이버 위장, 트로이 목마에 포함루트킷 탐지 전용 도구, 커널 무결성 검사안전모드 검사, 클린 설치, 관리자 권한 보호
봇넷웜·트로이 목마 등으로 감염 후 C&C 서버와 연결비정상 포트 사용 감시, DNS 요청 분석, 통신 패턴 탐지포트 차단, C&C 서버 차단, 감염 시스템 격리 및 복구


2. 컴퓨터 구조

2.1 레지스터 (Registers)

종류설명예시
범용 레지스터데이터 처리용. 산술/논리 연산에 사용됨EAX, EBX, ECX, EDX (x86), RAX (x64)
포인터 레지스터메모리 주소 처리ESI/EDI (source/destination), ESP (stack pointer), EBP (base pointer)
명령 포인터 (IP/RIP)현재 실행 중인 명령어 주소EIP (x86), RIP (x64)
플래그 레지스터연산 결과 상태 저장 (carry, zero 등)EFLAGS
레지스터 변경 여부 추적은 코드 흐름 분석, 악성코드 행위 추정에 중요함.

2.2 메모리 구조 (Memory Layout)

영역설명
Text (Code)실행할 명령어 저장. 읽기 전용.
Data초기화된 전역/정적 변수
BSS초기화되지 않은 전역/정적 변수
Heap동적 메모리 할당 영역 (malloc, new 등)
Stack함수 호출 시 지역 변수, 리턴 주소 저장
악성코드는 종종 Stack을 오염시키거나, Heap에 셸코드를 적재해서 공격함.

2.3 스택 구조 (Call Stack)

  • 후입선출(LIFO) 구조
  • 함수 호출 시:
    • 리턴 주소
    • 이전 EBP
    • 함수 인자
    • 지역 변수 순서로 쌓임
  • 함수가 끝나면 ret 명령어로 스택에서 리턴 주소 복원
악성코드는 스택을 조작해서 리턴 주소를 바꾸는 ROP/JOP 기법을 사용할 수 있음.

2.4 명령어 실행 흐름

  • 명령어 페치 → 디코드 → 실행
  • EIP/RIP은 현재 실행 중인 명령어 주소를 가리킴
  • 흐름 변경 명령: jmp, call, ret, je, jne, loop
코드 흐름을 분석하면 악성코드의 "조건부 실행"이나 "우회 로직"을 파악할 수 있음

2.5 인터럽트 & 시스템 콜

  • 인터럽트 (int): 하드웨어/소프트웨어 요청으로 CPU가 처리 루틴 전환
  • 시스템 콜: OS 기능 요청 (int 0x80, syscall 등)
악성코드는 시스템 호출을 통해 파일 열기, 네트워크 연결, 프로세스 생성 등 행위를 함

2.6 명령어 세트 (ISA)

  • x86, x64 구조가 주로 사용됨
  • 각 명령어는 opcode + 피연산자 구조
mov eax, 0x1 ; EAX에 값 1 저장 add eax, ebx ; EAX = EAX + EBX push eax ; 스택에 EAX 저장 call 0x401000 ; 0x401000 위치 함수 호출
명령어 해석 능력은 IDA, Ghidra, x64dbg에서 필수

2.7 엔디안 (Endian)

방식설명
Little EndianLSB (하위 바이트)를 먼저 저장 (x86/x64 대부분)
Big EndianMSB (상위 바이트)를 먼저 저장

예시: 0x12345678

  • Little Endian: 78 56 34 12
  • Big Endian: 12 34 56 78
파일 분석 시 바이트 순서에 따라 결과가 달라질 수 있으니 주의!

2.8 메모리 주소 체계

주소 방식설명
가상 주소프로그램이 보는 주소. OS에 의해 매핑됨
물리 주소실제 하드웨어 메모리 위치
상대 주소 (RVA)베이스 주소 + 오프셋 (파일 분석 시 자주 사용)
악성 PE 파일 분석 시 RVA → 실제 위치 매핑이 필요