악성코드 분석 업무 설명
악성코드 분석 업무 이해
악성코드 분석 = 바이너리 분석 = 컴파일된 파일들을 분석
→ 실행할 수 있는 파일(바이너리 파일 - 윈도우: 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 디버거
- 무료, 사용의 편의성, 기능 확장을 위한 플러그인