보안/악성코드 분석

악성코드 분석 업무 설명

Security Engineer 2024. 7. 2. 00:18

악성코드 분석 업무 이해

악성코드 분석 = 바이너리 분석 = 컴파일된 파일들을 분석

→ 실행할 수 있는 파일(바이너리 파일 - 윈도우: exe파일, 여기에 엮여있는 dll 파일, 리눅스: elf파일)


DLL (동적 링크 라이브러리)
→  MS 윈도우에서 구현된 동적 라이브러리이다. 내부에는 다른 프로그램이 불러서 쓸 수 있는 다양한 함수들을 가지고 있다.
→  자주 사용되는 표준적인 함수를 매번 직접 작성해서 사용하는 것은 지나치게 시간 소모적이므로 표준화할 수 있는 함수를 미리 만들어서 모아 놓은 것.

 

 

 

악성코드(Malware)란?

- 컴퓨터에 악영향을 끼칠 수 있는 모든 소프트웨어의 총칭
- 전통적인 분류: 바이러스, 웜, 트로이 목마, 스파이 웨어, 애드웨어 등 → 혼합적인 형태로 많이 발생
- 단순히 실행 파일 형식에 국한되지 않고 소프트웨어 취약점과 문서를 이용
- 제로데이(0-Day)와 사회 공학 기법은 전통적인 보호 방식으로 탐지가 매우 어려움
- 악성코드는 운영체제 기능을 악용해 악성 행위를 수행
- 다양한 종류의 악성코드 분석의 경험은 침해사고 발생 시 빠른 대처를 가능하도록 함

 

 

악성코드 종류

바이러스 ( Virus )
- 악성 코드의 가장 기본적인 형태로 정상 파일을 감염 시키는 형태의 악성 코드

- 컴퓨터에서 컴퓨터 혹은 전체 네트워크를 통해 전달될 수 있는 소프트웨어
- 실행될 때 다른 프로그램이나 문서도 감염 가능
- 감염 파일 ( 숙주 파일 ) 에서 다른 정상 파일로 자기 복제 능력을 지니고 있다.
- 대표적인 사례:

2000년대 필리핀에서 제작된 러브 바이러스메일을 통해 감염되었으며, 해당 소프트웨어를 실행하는 순간 모든 파일을 ' I Love You ' 라는 내용이 적힌스크립트 파일로 만든 바이러스

 


웜 ( Worm )
- 스스로를 복제 ( 자가 복제 ) 하는 악성 코드

- 빠르게 확산되기 위해 별도 사람의 행동 불필요
- 바이러스의 경우 다른 실행 파일에 기생하는 반면 웜의 경우 독자적으로 실행된다.
- 감염된 호스트 네트워크를 통해 자신의 복사본을 전송해 감염 시킨다.
- 웜을 치료하기 위해서는 숙주 호스트의 웜을 치료해야 한다.

- ex: 60초마다 컴퓨터 무한 재부팅
- 대표적인 사례:

스턱스넷 ( Stuxnet ) : 2010년 발견된 웜, 윈도우를 통해 감염되어 지멘스 산업의 소프트웨어 및 장비를 공격하는 악성코드.2010년 이란 나탄즈 원자력 발전소는 이 스턱스넷으로 인해 원심 분리기 1천여 대가 파괴된 사례가 있다.

 

 

트로이목마 ( Trojan horse )

- 그리스 신화의 트로이 목마에서 유래됨. 트로이 목마와 같이 다른 것으로 위장해 접근한다.
- 정상적인 프로그램으로 위장한 악성 코드
- 바이러스나 웜처럼 컴퓨터에 직접적인 영향을 주지는 않지만, 악의적인 공격자가 침투해 통제할 수 있는 권한을 부여하게 된다.
- 거의 모든 악성 코드에 포함된 경우가 많다.

- 가장 일반적인 방법: 크랙 제품으로 위장하여 블로그나 전자 메일에 첨부해 다운로드 & 실행 유도
- 대표적인 사례:

제우스 ( Zeus ) : 2007~2009 년 금융 서비스 영역에서 큰 피해를 입힌 악성 코드.인증서를 훔치거나 자동 결제 시스템 급여 시스템에 대한 비 인증 온라인 거래 등 범죄에 활용된 사례


백도어 ( Backdoor )
- 사용자의 동의 없이 임의의 포트를 열어 공격자 접속을 대기하는 악성 코드
- 원래는 악성 코드로 분류 되지 않았다.
- 백도어가 실행되면 해커가 시스템의 사용자가 모르게 내부로 진입하여 정보를 빼가는 등의 작업을 할 수 있다

 


랜섬웨어 ( Ransomware )
- Ransom ( 몸값 ) + Ware ( 제품 ) 의 합성어로 컴퓨터에 저장된 파일을 암호화 시키고 몸값을 요구하는 악성코드
- 현재 가장 유행하고 있는 악성코드 중 하나이다.
- 치료, 복구가 모두 쉽지 않아 예방 및 데이터 백업 등 이 중요하다.
- 오래전 제작된 랜섬웨어의 경우 복호화키가 만들어져 복구가 가능한 경우도 있으나 랜섬웨어에 감염되어 암호화 된 순간 해당 파일의 무결성은 깨진 것이다.

- 가장 일반적인 방법: 합법적 전자 메일로 위장해 첨부 파일 다운로드 & 실행 유도
- 대표적인 사례:

워너크라이 ( Wannacry ) : 2017 년 5월 등장한 랜섬웨어,전세계 99개국 23만대 컴퓨터를 감염시켜 피해를 입혔다. 감염창에는 상황 설명, 복구 방법, 금전 지급 방법 등이 표시된다.

- 대응방법:

윈도우의 SMB(Server Message Block)를 이용한 취약점 공격으로 윈도우 보안업데이트가 필요함  
1. PC 시작 전 랜선 뽑고 부팅
2. 네트워크 방화벽 및 Windows 방화벽을 이용하여 SMB 관련 포트 차단(137/udp, 138/udp, 139/tcp, 445/tcp) 
3. SMB 1.0/CIFS 파일 공유 지원 해제(Windows 기능)
4. 랜선 꼽고 OS의 32 or 64비트 선택 후 보안 업데이트 설치

 


스파이웨어 ( Spyware )
- 사용자의 활동을 감시하는 악성 코드이다.

- 스트로크 수집부터 브라우저 히스토리, 데이터 수집에 이르는 사용자 활동 감시

- 트로이목마 등에 포함된 경우가 일반적이다.
- 무료 소프트웨어를 설치할 때 같이 설치되는 경우도 있으며, 뒤에 나올 애드웨어와의 차이는 스파이웨어는 설치 동의를 구하지 않고, 무단으로 설치가 된다는 것이다.

- 합법적인 용도: 자녀 보호 온라인 소프트웨어, 민감 정보 누설 방지를 위한 회사 컴퓨터 모니터링
- 악의적인 용도: 신원 도난을 위한 개인 데이터 수집, 은행 세부 정보로 사용자 금전 액세스
- 대표적인 사례:

페가수스 ( Pegasus ) : 이스라엘 NSO 그룹이 개발한 스파이웨어로 GPS를 활용한 위치, 어플리케이션 사용내역, 사진 컨텐츠 등 휴대기기 내 모든 개인정보를 탈취할 수 있는 악성 코드원래는 범죄조직의 위치를 찾는 등의 범죄나 테러를 막기 위한 수단으로 개발되었으나 의도와 달리 악용된 사례가 있다.

 


애드웨어 ( Adware )
- 사용자의 컴퓨터에 광고를 표시하는 악성 코드
- 일반적으로 무료 소프트웨어 등을 다운로드 할 때 같이 설치되는 경우가 많다.
- 스파이웨어와 다른점은 애드웨어의 경우 사용자의 동의를 받고 설치를 한다는 것이다.

 


루트킷 ( Rootkit )
- 컴퓨터에 접속하거나 제어하도록 설계된 정보를 탈취하는 악성 코드
- 루트(Root)권한을 쉽게 얻게 하는 키트(Kit), 주로 파일이나 레지스트리를 숨김
- 보안 취약점으로 침입하며 제거하기가 매우 어려워 예방이 중요(첨부파일 및 신뢰되지 않은 사이트 접근 금지)
- 얻은 루트 권한을 통해 다른 악성 코드를 추가로 설치해 정상 파일처럼 보이게 할 수도 있다.
- 백신에 의해서는 탐지가 되지않고, 엔드 포인트 보안 솔루션 등에 의해 탐지가 가능하다.

- 포맷이 답

 

 

키로거( KeyLogger ): 키 입력을 추적해 숨김 파일로 저장 후 자동으로 파일 전송, 정보 탈취
- 키 입력 데이터를 사용해 암호 또는 개인, 비즈니스 정보를 해커에게 자동 전송
- 예시로 "Phoenix keylogger"가 실행되면 시스템, 클립보드, 가상환경 정보 등을 C&C 서버로 전송
- C&C, C2서버: 원격지에서 명령을 내리거나, 악성코드를 제어하는 서버(감염PC로 해커가 원하는 공격 수행), Command & Control, 명령 & 제어 서버 
- 주로 PC 방에서 사용됨, ID와 PW 탈취하는 목적으로 사용

 

 

봇( Bot ): 자동화된 컴퓨터 프로그램으로 작동하는 악성 소프트웨어의 일종
- 봇넷은 해커가 여러 봇에 감염된 컴퓨터를 제어하는 웹 사이트를 공격하는데 사용하는 하나 이상 봇
- 봇넷을 사용하여 DDoS 공격을 하는 등 다양한 공격 가능
- 봇 운영자 → 봇넷 거래 → 온라인 범죄자 → 봇넷 추가 감염 → 스팸 메일 과부하, DDoS 등 악용

 

 

악성코드 분석 방법

사용자가 많은 OS 대상의 악성코드가 다수

- 대부분 윈도우 파일이 많다.
- 모바일은 안드로이드

 

1. Fully-automated analysis → 완전 자동 분석(hybrid analysis - 샌드박스 형태로 자동 분석)
2. Static properties analysis   정적 분석(EXE 파일을 실행하지 않고 분석)
3. Interactive behavior analysis   동적 분석(Vmware 등의 가상환경에 동작시켜서 행위를 분석)
4. Maunal code reversing   C, C++ 컴파일 →  exe 파일, 파일에서 소스코드 형태로 역으로 구성되는 과정을 분석 - 리버스 엔지니어링

 

분석 방법 설명
완전 자동화 분석 (Fully-Automated Analysis) - 정적 분석 및 동적 분석을 통해 악의적인 행위를 판단
- 자동 분석 수행(파일 생성, 수정 과정의 분석, 레지스트리 분석, 네트워크 분석 등)
- 전문가에 의해 분석되는 만큼 상세하거나 정확하지 않을 수 있음
- 악성코드 분석 제공 서비스
정적 분석 (Static Properties Analysis) - 악성코드의 추가 분석을 위해 필요한 단계
- 문자열 헤더 정보, 해시 값, 리소스 정보, 패킹 여부 등 신속하게 정보 획득
- 정보들을 활용해 실행 파일 간의 비교 데이터베이스를 구성
- 바이러스 토탈(VirusTotal) 서비스
동적 분석 (Interactive Behavior Analysis - 레지스트리, 파일 시스템, 프로세스, 네트워크 활동을 이해하기 위해 분리된 가상 머신 환경에서 실행하며 분석
- 메모리 분석을 통해 다른 행위를 추가적으로 분석
- 악의적인 행위의 상세한 과정들을 확인
- 분석가들의 분석 시간이 많이 소요
수동 코드 역공학 분석 (Manual Code Reversing) - 위 과정이 완료된 후에 추가적인 정보를 획득하기 위해 분석하는 행위
- 수동 코드 역공학 분석이 필요한 경우
  - 특정 루틴에 난독화가 되서 복호화가 이루어지는 부분을 더 분석해 추가적인 정보를 획득
  - 악의적인 도메인 이름 생성 과정의 알고리즘 분석
  - 행동 분석 과정에서 자신을 숨기고 보여주지 않았던 부분으로 발생되는 다른 기능 이해

 

 

 

 

악성코드 분석 흐름

1. 간략 분석
- 기초 정적 분석(비실행)
- 기초 동적 분석(실행)

2. 상세 분석
- 고급 정적 분석(비실행)

- 고급 동적 분석(실행)

 

 

기초 정적 분석 도구들
- DLL 의존성 조사 → Dependency Walker
- 파일 내 스트링 BinText, Strings
- Hash → Virustotal
- PE 헤더 분석 → pestudio, PEview
- 리소스 분석 → 리소스 해커

기초 동적 분석 도구들
- 프로세스 분석 → ProcessMonitor, ProcessExploler
- 네트워크 패킷 분석 → Wireshark
- 시스템 모니터링
- 레지스트리 변경

고급 정적 분석
- 프로그램을 실행시키지 않고 전체 구조를 세세히 분석하는 방법
- 코드를 어셈블리어로 확인하고 주요 함수들에 대해 확인
- 선행 과정으로 이루어진 분석의 검증 단계로 내부 행위에 대한 정확한 분석
- 이 과정을 통해 악성행위를 정확히 진단 가능

고급 동적 분석
- 고급 정적분석을 통해 나오는 여러 분석들을 실질적인 동작을 살펴보는 단계
- 일반적으로 앞서 세운 분석을 검증하는 단계로 사용
- 알고리즘이나 난독화 등을 분석
- Olly Debugger
- 올리 유스척(Olleh Yuschuk)이 개발한 x86 디버거
- 무료, 사용의 편의성, 기능 확장을 위한 플러그인