이 글은 아래의 책을 읽고 공부 목적으로 작성됨.
몬나파 K A, 「악성코드 분석 시작하기」
동적분석 : 악성코드 실행 후 다양한 모니터링 활동을 수행.
-> 목표 : 악성코드 행위, 시스템에 끼친 영향과 관련된 실시간 데이터 수집.
여러 유형의 모니터링
- 프로세스 모니터링 : 프로세스 활동 모니터링, 악성코드 실행 중 생성한 결과의 속성을 검사.
- 파일 시스템 모니터링 : 파일 시스템 실시간 모니터링.
- 레지스트리 모니터링 : 접근/수정된 레지스트리 키, 악성코드 바이너리가 읽거나 작성한 레지스트리 데이터 모니터링.
- 네트워크 모니터링 : 시스템으로 유입되거나 외부로 나간 라이브 트래픽 모니터링.
랩 환경 설정 후, 분석 도구 호스트 머신에서 다운. 도구를 가상머신에 전송하거나 설치, 클린 스냅샷 생성.
*스냅샷 : VM에서 사진찍듯 현재 가상 머신의 상태 저장. 사용자가 원하면 언제든지 그 상태로 돌아갈 수 있음.
(클린 스냅샷 = 동적 분석 전의 상태가 있어야 악성코드 실행 전으로 돌아갈 수 있어서 "클린"이라 부른 것으로 추측됨.)
모니터링 도구
프로세스 해커
오픈 소스, 다목적 도구. 시스템 리소스 모니터링에 도움. 실행 중인 프로세스 조사, 프로세스 속성을 살펴볼 수 있음.
- 프로세스 속성 조사 : 프로세스명 오른쪽 클릭 - 속성(Properties) 선택
프로세스 모니터
고급 모니터링 도구. 프로세스가 파일 시스템, 레지스트리, 프로세스/스레드 활동의 실시간 상호작용 보여줌. 실행 시 모든 시스템 이벤트를 캡처함.
- 이벤트 캡처 중지 : Ctrl+E
- 모든 이벤트 삭제 : Ctrl+X
- 필터링 기능 : 필터(Filter) 메뉴 선택 - 필터(Filter) 선택 / Ctrl+L
노리벤(Noriben)
악성코드 런타임 지표를 수집, 분석, 리포트하는 데 도움주는 파이썬 스크립트. 악성코드 관련된 이벤트에 집중할 수 있는 필터 제공.
프로세스 모니터와 함께 동작. 파이썬 스크립트 실행 전 프로세스 모니터를 동일한 폴더에 복사할 것. 노리벤 실행 시 프로세스 모니터 실행.
- 모니터링 종료(노리벤, 프로세스 모니터 종료 -> 종료 시 텍스트 파일과 CSV 파일을 결과로 저장.) : Ctrl+C
- 카테고리 기반 이벤트 요약 : 텍스트 파일
- 타임라인순 이벤트 : CSV 파일
와이어샤크(Wireshark)
악성코드 실행 결과로 생성되는 네트워크 트래픽 캡처. -> 악성코드가 사용하는 통신 채널 이해에 도움. 네트워크 기반 지표 파악에 도움.
- 리눅스 와이어샤크 실행 명렁어 : sudo wireshark
- 트래픽 캡처 : (캡처 - 옵션 선택 / Ctrl+K) - 네트워크 인터페이스 - 시작
INetSim
표준 인터넷 서비스(DNS, HTTP/HTTPS, 기타)를 시뮬레이션하는 무료 리눅스 기반 소프트웨어 스위트(suite). -> 악성코드가 작동하는 데 필요한 서비스 제공에 도움.
그외 : 비표준 포트로 연결하는 접속을 처리하는 더미 서비스 실행 / 통신 로깅 / 확장자 기반 어떤 파일이라도 반환하도록 설정 가능.
동적 분석 단계
- 클린샷으로 복원 : 가상머신을 클린 상태로 복원.
- 모니터링/동적 분석 도구 실행 : 악성코드 샘플 실행 전, 모니터링 도구를 관리자 권한으로 실행.
- 악성코드 샘플 실행 : 관리자 권한으로 샘플 실행.
- 모니터링 도구 종료 : 악성코드 바이너리 일정 시간 동안 실행 후 종료.
- 결과 분석 : 모니터링 도구에서 데이터/리포트 수집 후 분석. 악성코드 행위 및 기능 확인.
악성코드 실행 파일 분석
1. 샘플 정적 분석
- 파일 유형, 암호 해시 확인. -> 예시로, 이를 통해 32비트 실행 파일이란 사실을 알 수 있음.
- string 유틸리티 이용해 바이너리에서 ASCII 문자열 추출. -> URL, 명령어 등의 단서 확보 가능.
- API의 존재(예시로 WinExec 같은). -> 다른 프로그램 호출하는 악성코드 기능 나타냄.
- 바이러스토털 데이터베이스에 해시 값 질의.
2. 샘플 동적 분석
- 윈도우 VM, 리눅스 VM 클린샷으로 복원.
- 윈도우 VM에서 프로세스 해커 관리자 권한으로 실행. -> 프로세스 속성 파악.
노리벤 실행. -> 악성코드와 시스템 간 상호작용 관찰. - 리눅스 VM에서 INetSim 실행. -> 네트워크 서비스 시뮬레이션.
와이어샤크 실행. -> 네트워크 트래픽 캡처. - 모든 모니털이 도구 실행. 악성코드 관리자 권한으로 약 40초간 실행.
- 40초 후 윈도우 VM에서 노리벤 중지. 와이어 샤크 리눅스 VM에서 중지.
- 결과 수집 및 검사, 악성코드 행위 파악.
동적 링크 라이브러리 분석
동적 링크 라이브러리(DLL) : 다른 프로그램에서 사용할 수 있는 함수를 담고 있는 모듈.
DLL 구현 이점 : 여러 애플리케이션에서 해당 코드 공유 가능.
윈도우 운영 시스템 : API이라 불리는 다양한 함수를 익스포트하는 다수의 DLL 포함. -> 이를 통해 프로세스가 파일 시스템, 프로세스, 레지스트리, 네트워크, GUI와 상호작용.
CFF 익스플로러 도구에서 익스포트 함수 표시 : 함수 익스포트한 PE 파일 로드. -> 익스포트 디렉터리(Export Directory) 클릭.
공격자가 DLL 사용하는 이유
- DLL 실행하려면 호스트 프로세스 필요. 어떤 프로세스에서든 DLL 로드 가능.
-> 악성코드 행동 숨길 수 있음. 호스트 프로세스를 통해 악의적인 활동이 발생한 것으로 보이게 함. - 실행 중인 프로세스에 DLL 삽입 시, 시스템에 대한 지속 공격 가능.
- DLL을 메모리 공간에 로드하면 DLL은 전체 메모리 공간에 접근 가능. -> 프로세스 기능 조작 가능(예시로, 자격 증명 훔쳐서 조작).
- 실행 파일 분석보다 어려움.
DLL 분석
1. rundll32.exe
DLL 실행 시 프로세스 필요. -> 윈도우에서 rundll32.exe를 이용해서 DLL 실행 및 익스포트한 함수 호출 가능.
rundll32.exe <DLL 전체 경로>, <익스포트 함수> <선택적 인수>
- DLL 전체 경로 : DLL 전체 경로 지정.
- 익스포트 함수 : DLL이 로드된 후 호출될 DLL의 함수.
- 선택적 인수 : 익스포트 함수가 호출됐을 때 전달.
- 쉼표 : 올바른 문법을 위해, DLL 전체 경로와 익스포트 함수 사이에 쉼표 필요.
rundll32.exe 동작
- 커맨드 라인 인수 우선 검증. 문법이 틀리면 rundll32.exe 종료.
- 문법이 올바르면 전달받은 DLL 로드. DLL 로드 시, DLL 엔트리 포인트 함수 실행. DLLMain 함수 호출.
- 익스포트 함수의 주소를 얻고 함수 호출. 주소 파악 불가능한 경우 rundll32.exe 종료.
- 선택 인수가 존재하면 이를 전달.
DLL 변형 예시
- 익스포트가 없는 DLL : 공격자는 익스포트 함수 없는 DLLMain 함수에 악의적인 기능 구현 가능.
-> DLLMain 함수에 익스포트가 없어도 rundll32.exe 실행 시에 <익스포트 함수>가 필요하다. 존재하지 않는 익스포트 함수를 끼워넣으면, 에러가 발생해도 DLL이 실행됨. - 익스포트 포함한 DLL :
DLL이 익스포트한 함수가 2개.
임의의 <익스포트 함수> 입력 : DLL의 엔트리 포인트에 어떤 기능도 구현되지 않아서 어떤 행위도 시작하지 않음.
익스포트 함수 2개 중 하나를 <익스포트 함수>에 입력 : C2 서버와 HTTPS 통신 시작. -> 해당 익스포트 함수가 네트워크 기능 구현하고 있음을 추측할 수 있음. - 익스포트 인수 갖는 DLL :
파일을 삭제하는 기능을 가진 익스포트 함수, 삭제할 파일을 인수로 가짐.
2. 프로세스 체크
일부 DLL : 특정 프로세스에서 실행되는지 확인 -> 다른 프로세스에서 실행되는 경우, 행위 변경하거나 스스로를 종료함.
이 경우, 특정 프로세스에 DLL을 삽입해야 한다.
RemoteDLL
시스템의 어떤 실행 프로세스에도 DLL 삽입할 수 있도록 함.
세 가지 방법으로 DLL 삽입이 가능하며, 한 가지 방법이 실패해도 다른 방법으로 시도 가능.
'보안 > 악성코드' 카테고리의 다른 글
LummaStealer 악성코드 정적분석 (0) | 2025.05.07 |
---|---|
[4장]어셈블리 언어와 디스어셈블리 기초 (0) | 2025.05.06 |
[2장]정적 분석 (0) | 2025.04.01 |
[논문]"머신러닝 기반 악성 URL 탐지 기법" 정리 (0) | 2025.04.01 |
[1장]악성코드 분석 소개 (0) | 2025.03.25 |