악성코드(Malware) 분석 기초
악성코드 정의 및 유형
-
악성코드란?
- 악성 소프트웨어 (Malicious Software)의 줄임말
- 악성프로그램이라 불리기도 함(정보통신망법 제 48조)
- 악의적인 목적으로 프로그램 및 스크립트 제작 등 모든 코드의 총칭
- 소프트웨어가 실행될 수 있는 모든 기기에서 실행 가능
-
악성코드 개발 및 목적
- 국가 안보 및 사회혼란 야기
- 산업기밀 탈취
- 금전적 이득
- 자기 과시욕이 강한 해커의 관심 끌기 유도 등
-
악성코드 유형
-
2010년 이전에는 주로 바이러스(Virus) 또는 웜(Worm)으로 통칭
-
악성코드 발생 행위에 따라 명칭 지정
-
-
사이버 킬체인(Cyber Kill Chain)이란?
-
사이버 공격을 각 단계 별 위협 요소 파악 및 공격 방법 정의 분석 모델
-
공격 단계를 미리 예측하여 공격 효율성을 낮추고 피해 최소화 목적
-
악성코드 분석 방법론
- 평판 조회 사이트 활용
- 전세계 백신 업체 엔진을 한 곳에 모아 확인 가능
- 악성코드 및 악성 URL 업로드 시 스캔 엔진으로 결과 도출
- Virustotal.com, Hybrid-Analysis.com 등
- 악성코드 자동 분석 사이트 활용
- 악성코드 및 악성 URL을 온라인 환경에서 안전하게 실행
- 영역별로 상세한 스냅샷으로 구간별 악성코드 행위 확인 가능
- JoeSandbox, Any.Run 등
- 정적 분석 정의
- 악성코드를 실행하지 않은 상태에서 분석
- 헤더 정보와 내부 문자열, 실행 압축 여부, 등록 정보 등을 통하여 동작을 파악
- 디스어셈블러를 이용하여 내부 코드와 구조를 확인 후 연관성 파악
- 동적 분석 정의
- 악성코드를 직접 실행하여 행위를 관찰
- 파일, 레지스트리, 네트워크 등을 확인하며 동작 행위를 분석
- 디버깅을 통해 코드 흐름과 메모리 상태를 직접 확인
- 정적 분석
- 컴파일 정보 확인
- 악성코드 개발 언어 확인 필수
- 컴파일러 정보 확인해야 다음 스텝으로 이동 가능
- 다양한 OS 환경에 맞춤형 실행파일로 악성코드 제작
- 모든 파일에는 시그니처(Magic Number) 존재
- 실행압축(Packing) 여부 확인
- 개발자 코드를 역으로 분석하지 못하게 하기 위한 목적
- 악성코드 제작자가 악성코드 분석을 방해하기 위해 자신만의 알고리즘으로 압축
- 분석가는 실행압축 확인 후 오픈 소스 등을 활용하여 압축 해제 후 분석
- 문자열(String) 확인
- 악성코드 Binary -> ASCII 변환 시 가독성 있는 문자열 확인
- 어떤 행위를 할 것인가에 대한 사전 예측 시 중요 단서가 될 수 있음
- 최근 실행 압축, 프로텍트 등을 통해 문자열 마저 보호되어 분석 방해
- 파일 무결성 확인
- 정상 파일을 위장한 악성코드인지 확인 필요
- 암호화 알고리즘을 통해 파일 고유 식별 정보 확인
- 전세계적으로 악성코드 Database 내 공통 식별하기 위해 사용
- 지속성 유지 확인
- 악성코드가 일회성인지 지속적으로 동작하는지 확인 필요
- 일반적인 악성코드는 지속성 유지하기 위한 행위를 내제하고 있음
- Autoruns를 통해 시작프로그램, 작업스케줄러, 서비스 등 지속성 유지 행위 확인 가능
- 컴파일 정보 확인
- 동적 분석
- 프로세스 변화 관찰
- 모든 악성 코드 행위에는 프로세스가 동작
- 시스템 내 발생하는 실시간 프로세스 변화에 대해 분석 필요
- 부모와 자식 프로세스 연결 고리, 코드 인젝션, 명령어 실행 등
- 파일시스템 변화 관찰
- OS 내 현재 동작 중인 파일 상태 실시간 확인
- 기존 파일 수정, 삭제 또는 새로 파일 생성 등
- 악성코드 실행 후 파일시스템 내 변화 체크 매우 중요
- 레지스트리 변화 관찰
- 시스템 레지스트리 조작하여 원하는 정보 입력 가능
- 중요 레지스트리 삭제 후 보안 설정 우회 등 다양하게 활용
- 악성코드 주요 레지스트리 변경 여부 확인 중요
- 네트워크 변화 관찰
- 최근 악성코드는 정보 수집 및 추가 파일 업로드 위해 네트워크 이용
- 공격자 서버(C&C서버) 통신 실시간 확인 필요
- 피해자 정보 외부 유출, 악성파일 추가 다운로드 등 네트워크 행위 확인
- API 실행 변화 관찰
- 악성코드 실행될 때 사용되는 API 함수 확인 가능
- 수많은 API 함수 존재, 기능 확인 필요 시 MSDN에서 API 함수 이름으로 조회
- 도구
- DIE(Detect It Easy) - 컴파일 정보, 패킹, 등
- Autoruns - 지속성 유지 파악
- PEStudio - 평판 사이트 결과, 문자열, Hash 값, PE 구조 등
- Thunderbird - 메일 분석
- ProcessExplorer - 실행 중인 프로세스 변화 관찰
- ProcessMonitor - 프로세스 레지스트리,파일,프로세스,네트워크 동작 분석
- hashmyfiles - 해쉬값 분석
- x96dbg - 역공학 분석
- 프로세스 변화 관찰
이메일 헤더 필드
- To
- 수신인 또는 받는 사람
- Cc(Carbon Copy)
- 다른 사람이 메시지를 참조해서 읽으라고 보내는 경우 사용
- Bcc(Blind Carbon Copy)
- 숨은 참조로 여러 사람에게 보낼 때 참조인 주소를 숨기기 위해 사용
- From
- 보내는 사람 주소 입력, 임의의 주소라도 적지 않을 경우 메시지 작성 불가
- 임의의 주소를 적으면 되기 때문에 해커는 자신의 주소가 아닌 가짜 주소 입력
- Reply-To
- 수신한 메일을 회신할 때 우선적으로 Reply-To에 설정된 주소로 회신
- Received
- 수신한 메일이 어디에서부터 어디를 거쳐 왔는지 표시하는 헤더
- 헤더 부분의 맨 하단에서 거꾸로 하나씩 올라가면서 역추적
- 발신지서버 by 수신지서버 with 메일프로토콜 id 문자열 for 수신자메일주소
- Message-ID
- 메일서버에서 메시지를 외부로 보낼 때 붙이는 고유 일련번호
- Date
- 실제 메일을 보낸 날짜
- Return-Path
- 메일 전송 실패 시 반송되는 주소, 주로 송신자(해커)의 메일 주소를 입력
- ‘X- ‘헤더
- MIME 규칙을 따르지 않은 비표준 헤더, 임의로 붙여지는 헤더
- 실제 발송IP, 실제 발송 계정, 발송 응용프로그램명 등 중요한 단서 포함
- Content-Type
- 메일 본문이 어떤 형식인지 알 수 있음
이메일 헤더 추적
- Received 추적
- Received 헤더는 아래에서부터 역순으로 메일 서버들을 거쳐 오기 때문에 이를 분석하면 역추적 가능
- X-헤더 추적
- 비표준형 헤더 내 X-Originating-IP는 실제 발송자 IP 정보를 나타냄
- 최근 공격자들은 정보 노출 방지를 위해 X-Originating-IP를 표시하지 않고 발송
악성코드 전파 과정
- 전자메일 통한 공격 과정
- 메일 서비스를 통해 메일 수신자 직,간접적인 피해 유발
- 최근 사이버 공격 방식 중 가장 높은 비중을 차지
- 사회공학적 기법을 이용한 APT 공격
- 홈페이지 통한 공격 과정
- 사용자들이 자주 접속하는 웹페이지 내 악성코드를 삽입하여 공격(= 워터링홀 공격)
- 공급망 통한 공격 과정
- 공급망 침투 후 공격 대상자들에게 패치 위장 파일 유포
- 소프트웨어 개발 과정 오염, 코드 서명 인증서 탈취 등
최근 악성코드 동향
- 드롭퍼(Dropper) 공격 방식
- 실행 파일 내 악성코드가 포함되어 있는 공격 방식
- 내부에 악성코드가 압축된 형태로 안티 바이러스 탐지 어려움
- 주로 동적 분석 과정에서 샘플링 후 분석 가능
- 파일리스(Fileless) 공격 방식
- 안티 바이러스(AV)와 같은 보안 장비를 우회하기 위한 공격 방식
- 파일이나 흔적이 남아있지 않아 분석 어려움
- 악성코드 주로 메모리에 존재하여 휘발성 데이터 수집 후 분석
- VB 스크립트 및 파워쉘 스크립트를 이용하여 주로 공격
- 시작프로그램, 작업스케줄러, 서비스 등록으로 지속성 유지 가능
- 문서형 APT 공격 방식
- 악성코드가 실행파일(.exe)가 아닌 문서 파일(.hwp, .doc, .xlsx등)로 유포
- 문서 내부 동작 메커니즘으로 악성코드가 동작하는 방식
- MS Office Macro, Hwp OLE, PDF Script 등
- 주로 악성코드를 불러오는 Loader 역할로 활용
- 최근 빠른 보안 패치로 문서형 악성코드 비중 과거 대비 감소
- OLE 개체를 이용한 APT 공격 여전히 활발하게 시도
댓글남기기