PromleeBlog
sitemap
aboutMe

posting thumbnail
정보보안기사 - 1.8 악성코드 분석 [웜, 바이러스, 랜섬웨어 비교]
Malware Analysis Worm Virus Ransomware Comparison - InfoSec Engineer 1.8

📅

들어가기 전에 🔗

지난 1.7편에서는 레이스 컨디션과 포맷 스트링 버그라는 시스템의 논리적 취약점을 다루었습니다.
이러한 취약점을 통해 공격자가 최종적으로 시스템에 심으려고 하는 것이 바로
악성코드
(Malware)입니다.

많은 사람이 "내 컴퓨터에 바이러스가 걸렸다"라고 말하지만, 보안 전문가라면 그것이
바이러스
(Virus)인지,
(Worm)인지, 아니면
트로이목마
(Trojan)인지 정확하게 구분할 수 있어야 합니다.
각 유형에 따라 전파 방식과 대응 전략이 완전히 다르기 때문입니다.
이번 시간에는 악성코드의 종류별 특징과 동작 원리, 그리고 이를 숨겨주는 은폐 기술까지 깊이 있게 분석해 보겠습니다.

악성코드 분류 기준 🔗

악성코드는
복제 능력
감염 대상(숙주)
유무에 따라 크게 세 가지로 분류됩니다.
👨‍💻
바이러스(Virus)는 기생하고, 웜(Worm)은 자생하며, 트로이목마(Trojan)는 위장합니다.

랜섬웨어와 APT 공격 🔗

최근 보안 위협의 주류를 이루는 두 가지 공격 형태입니다.

랜섬웨어 (Ransomware) 🔗

사용자의 데이터를 암호화하여 인질로 잡고 금전을 요구하는 악성코드입니다.
주로
하이브리드 암호화
방식을 사용합니다.
  1. 속도 확보
    파일 내용은 대칭키(AES 등)로 빠르게 암호화합니다.
  2. 키 보호
    파일을 잠근 대칭키는 공격자의 공개키(RSA 등)로 암호화합니다.
  3. 결과
    공격자의 개인키가 없으면 복호화가 불가능합니다.

APT (Advanced Persistent Threat) 🔗

지능형 지속 위협
이라 불리며, 특정한 목표를 정해놓고 장기간에 걸쳐 은밀하게 공격하는 방식입니다.
  1. 침투 (Initial Access)
    이메일, USB 등을 통해 내부에 거점을 마련합니다.
  2. 검색 (Discovery)
    내부망 구조와 중요 자산 위치를 파악합니다.
  3. 이동 (Lateral Movement)
    옆 컴퓨터로 이동하며 권한을 상승시킵니다.
  4. 유출 (Exfiltration)
    중요 데이터를 암호화하여 외부로 빼돌립니다.

설치 방법에 따른 분류 - 드롭퍼와 다운로더 🔗

악성코드가 사용자의 PC에 침투할 때 사용하는 운반책입니다. 백신 탐지를 우회하기 위해 사용됩니다.

드롭퍼 동작 원리 예시 (C언어) 🔗

드롭퍼가 내부의 데이터를 파일로 생성하는 원리를 단순화한 코드입니다.
simple_dropper.c
#include <stdio.h>
 
// 내부에 숨겨진 악성코드 데이터 (바이트 배열)
unsigned char malware_code[] = {
    0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, // MZ 헤더 (실행파일)
    // ... 생략 ...
};
 
int main() {
    // 1. 시스템의 은밀한 경로에 파일 생성
    FILE *fp = fopen("C:\\Windows\\Temp\\malware.exe", "wb");
    
    if (fp) {
        // 2. 메모리에 있는 악성 데이터를 파일로 씀 (Drop)
        fwrite(malware_code, 1, sizeof(malware_code), fp);
        fclose(fp);
        
        // 3. 생성된 악성코드 실행
        // system("C:\\Windows\\Temp\\malware.exe"); 
        printf("Dropped successfully.\n");
    }
    return 0;
}

루트킷 (Rootkit) 🔗

루트킷
(Rootkit)은 자신의 존재를 숨기면서 지속적으로 관리자 권한을 유지하기 위한 도구 모음입니다.
가장 큰 특징은
은폐
(Stealth)입니다.

은폐 기술의 원리 🔗

루트킷은 운영체제의 핵심 부분(커널 또는 라이브러리)을 조작하여 관리자가 악성코드를 볼 수 없게 만듭니다.

시스템 콜 후킹 개념 🔗

관리자가 ls 명령어를 입력했을 때의 흐름입니다.
  1. 정상
    lssys_getdents 호출 → 파일 목록 반환 → 화면 출력.
  2. 감염
    ls
    후킹된 함수
    호출 → 파일 목록에서 malware.exe 제거 → 반환 → 화면 출력.
결과적으로 관리자는 ls를 쳐도 악성 파일을 볼 수 없습니다.

루트킷 탐지 실습 🔗

리눅스에서는 chkrootkit이나 rkhunter 같은 도구를 사용하여 변조된 시스템 파일을 검사할 수 있습니다.
Terminal
 # chkrootkit 설치 및 실행
sudo apt-get install chkrootkit
sudo chkrootkit
 
 # 출력 예시
 # Checking `ls'... INFECTED
 # Checking `ps'... INFECTED
출력 예시
출력 예시

결론 🔗

이번 시간에는 다양한 악성코드의 종류와 특징을 알아보았습니다.
악성코드 분석은 시스템 보안의 마지막 방어선입니다.
다음 시간에는 이러한 공격자들이 시스템에 침투하기 위해 사용하는 가장 기초적인 수단,
1.9 패스워드 크래킹 기법과 솔팅
(Salting)에 대해 알아보겠습니다.
단순한 무차별 대입부터 레인보우 테이블까지, 그리고 이를 막기 위한 해시 기술의 진화를 다룹니다.

참고 🔗