보안/악성코드

[1장]악성코드 분석 소개

haerim9.9 2025. 3. 25. 14:42

이 글은 아래의 책을 읽고 공부 목적으로 작성됨.

몬나파 K A, 「악성코드 분석 시작하기」


 

악성코드 : 악의정인 행위를 하는 코드로, 실행 파일/스크립트/코드 또는 다른 유형의 소프트웨어 형태가 될 수 있다.

 

악성코드가 수행하는 악성 행위 예시 :

컴퓨터 연산 방해 / 개인, 비즈니스, 재무 데이터를 포함한 민감 정보 훔치기 / 표적 시스템에 무단으로 접근하기 / 표적을 감시하기 / 스팸 이메일을 보내기 / 분산 서비스 거부(DDoS, Distributed-Denial-of-Service) 공격에 참여하기 / 컴퓨터에 있는 파일을 잠금 후 대가 요구하기

 

 

악성코드의 분류

1) 기능과 공격 벡터를 기준으로 분류한 악성코드

  •  바이러스(Virus) 또는 웜(Worm) : 자가 복제하고 다른 컴퓨터로 확산하는 기능을 가진 악성코드. 바이러스는 유저와의 상호작용이 필요하지만 웜은 상호작용 없이도 퍼져나갈 수 있다.
  • 트로이 목마(Trojan) : 일반 프로그램으로 위장해 유저가 자신의 컴퓨터에 설치하도록 유도하는 악성코드.
  • 백도어/원격 접속 트로이 목마(RAT. Remote Access Trojan) : 공격자가 침해한 컴퓨터에 원격 접속하거나 명령어를 실행할 수 있는 트로이 목마의 한 종류.
  • 에드웨어(Adware) : 유저에게 원치 않는 광고를 노출하는 악성코드.
  • 봇넷(Botnet) : 동일한 악성코드(봇, bot)에 감염된컴퓨터 그룹. 공격자가 통제하는 명령어 통제 서버(command-and-control server)에서 전송하는 지시를 대기.
  • 정보 스틸러(information stealer) : 감염된 시스템에서 타이핑하는 키보드 입력과 같은 민감 정보를 훔치고자 디자인된 악성코드.
  • 랜섬웨어(Ransomeware) : 유저를 컴퓨터 밖으로 쫓아내거나 파일을 암호화한 후 대가를 위해 시스템을 볼모로 잡는 악성코드.
  • 루트킷(Rootkit) : 설치된 시스템에서 공격자에게 관리자 권한을 제공하거나 자신의 존재 여부 또는 다른 소프트웨어의 존재 여부를 숨기는 악성코드.
  • 다운로더(Downloader) 또는 드로퍼(Dropper) : 추가 악성코드 컴포넌트를 다운로드하거나 설치하도록 설계된 악성코드.

2) 공격자의 동기에 따라 분류한 악성코드

  • 크라임웨어(crimeware) 또는 상용 악성코드(commodity malware) : 이익을 위해 개인, 기업 또는 독점정보를 훔친 경우
  • 표적 또는 첩보 악성코드 : 첩보활동을 목적으로 특정 기관 또는 산업을 대상으로 정보를 훔친 경우, 인텔리전스 수집을 위해 사용된 경우

 


 

악성코드 분석 : 악성코드의 행위를 연구하는 것

 

악성코드 분석 목적 : 악성코드의 동작을 이해한 후 탐지하고 삭제하는 방법을 파악, 악성코드 샘플에서 정보를 추출해 악성코드 사고 대응에 도움

 

악성코드 분석의 이유

  • 악성코드 특성과 목적 파악, 어떤 유형인지 파악하는 데 도움
  • 시스템이 어떻게 침해됐는지, 그 영향 파악
  • 네트워크 식별자 파악. 네트워크 식별자는 네트워크 모니터링을 통해 유사 감염을 탐지하는 데 사용할 수 있다.
  • 파일명, 레지스트리 키와 같은 호스트 내부 식별자를 추출. 호스트 모니터링을 통해 동일한 감염 증상에 있는 대상을 찾을 수 있다.
  • 공격자의 의도와 목적 파악

악성코드 분석 기법

  • 정적 분석(static analysis) : 악성코드를 실행하지 않고 바이너리를 분석하는 방법. 의심 바이너리에서 메타데이터를 추출할 수 있다. 어디를 집중적으로 분석해야 할지를 아는데 도움.
  • 동적 분석(dynamic analysis) : 격리된 환경에서 의심 바이너리를 실행한 후 그 행위를 모니터링하는 방법. 수행하기 쉽고, 바이너리의 활동에 관한 통찰력을 줌.
  • 코드 분석(code analysis) : 바이너리 내부 동작을 이해하기 위한 기술. 정적 분석과 동적 분석을 통해 파악이 불가능한 정보를 알아낼 수 있음.
    -정적 코드 분석 : 의심 바이너리를 디스어셈블링(disassembling)한 후 프로그램의 동작을 이해하고자 코드 확인.
    -동적 코드 분석 : 악성코드의 기능을 이해하기 위해 의심 바이너리를 통제된 방법으로 디버깅.
  • 메모리 분석(memory analysis) (=메모리 포렌식(memory forensic)) : 포렌식 아티팩트(사용 흔적)를 위해 컴퓨터 메모리를 분석하는 기법.

 


 

악성코드 분석을 위해서, 분석자의 시스템 또는 운영 시스템이 감염되지 않도록 안전하고 보안이 고려된 랩(lab) 환경이 필요하다. 이를 위해 가상머신(VM, Virtual Machine)을 이용한다.

 

가상 랩 설정 시 기억해야 할 사항

  • 가상화 소프트웨어의 최신 버전 유지.
  • 가상머신에 최신 운영체제 설치.
  • 악성코드가 외부 인터넷에 연결되는 것을 원치 않는다면 호스트 전용 네트워크 모드 사용, 혹은 시뮬레이션 서비스 이용.
  • 이후 사용할 수도 있는 USB 드라이브와 같은 이동식 미디어 연결 금지.
  • 윈도우 악성코드(일반적으로 실행 파일 또는 DLL) 분석 시, 윈도우 대신 리눅스 또는 macOS X을 호스트 머신의 기본 운영 시스템으로 선택.

책에서 주로 사용할 랩 아키텍처

  • 우분투 리눅스 가상머신(Ubuntu Linux VM) : 네트워크 트래픽을 모니터링하고 인터넷 서비스(DNS, HTTP)를 시뮬레이션. 악성코드가 서비스 요청 시 적절한 응답 제공.
  • 윈도우 가상머신(Windows VM)이 설치된 우분투 리눅스 물리 머신 : 악성코드를 실행하는 역할

 

이후 VM 설치 및 설정은 해당 책 38p 참고.