ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [악성문서분석] MS 오피스 - 이론
    보안/악성문서분석 2024. 10. 29. 00:13

    1. 이론

    1.1 악성 문서 파일의 일반적인 구성 요소

    • 악성 문서 파일은 일반적으로 익스플로잇, 쉘코드, 스크립트, 실행파일 등의 악성개체를 포함
    • 이러한 악성 개체를 포함해야 하는 악성 문서 파일들의 특성상 이상 징후 식별이 가능
    • 악성 문서 파일의 목표 중 하나는 쉘코드를 찾는 것이다
      • 익스플로잇을 찾는 것이 중점이 아님. 
      • 익스플로잇은 취약점을 이용하여 쉘코드를 실행시키는데 사용되는 도구일 뿐 공격자의 의도를 이해하기 위해선 쉘코드를 얻어 분석해야 함

     

    1.2 악성 문서 파일 분석 절차

    1. 파일의 포맷 확인
    2. 악성징후 식별
    3. 악성개체 식별 및 추출
    4. 악성개체의 기능 분석
      • 여기서 분석 대상은 쉘코드, 스크립트, 실행파일(PE 파일)일 수 있음
      • 분석의 목표는 IOC 추출

     

    1.3 악성 MS 오피스 문서 파일 트리아지를 위한 징후

    1. 매크로를 포함하고 있는가? (OLEDUMP를 활용하면 파악 가능)
      • OLEDUMP를 이용하여 조사해 보았을 때 "M" 플래그가 지정된 스트림이 존재하는지 확인
    2. DDE/DDEAUTO 명령어를 포함하고 있는가?
      • MSODDE를 이용하여 조사해 보았을 떄 명령어들이 내장되어 있는지 확인
    3. 쉘코드를 포함하고 있는가?
      • YARA를 이용하여 쉘코드 및 악성 문서 패턴을 조사하였을 때 식별되는지 확인

     

    1.4 파일리스 공격

    • 디스크에 터치가 이루어질 경우 흔적이 메모리에서 바로 실행될때에 명확하게 남음
    • 공격자는 이러한 상황을 우회하기 위해 시스템에서 정상적으로 사용되는 LOL Binary를 이용하여 정상 프로세스에 악성코드를 인젝션해 디스크 터치가 이루어지지 않고 메모리 상에서 공격이 실행되게 하는 공격
      • 예 : 프로세스 인젝션

     

    1.5 실행 파일의 메모리 상 동작 방식과 쉘코드

     

     

    1.6 쉘코드 분석 방법

    1. 문자열 분석
      • 예 : Strings
    2. 동적 분석
      • 에뮬레이터를 이용하는 방법
        • 예 : scdbg
    3. 동적 분석
      • 디버거를 이용하는 방법
        • 예 : xDbg, OllyDbg, Immunity Debugger
    4. 정적 분석
      • 디컴파일러/디스어셈블러를 이용하는 방법
        • 예 : IDA, Ghidra

     

    1.7 쉘코드가 일을 하기 위해서 임베드 하고 있을만한 데이터

    1. API/DLL 문자열
    2. 통신하는 C2 서버의 도메인 혹은 IP
    3. 통신에 사용하는 HTTP 헤더의 내용(User-Agent, URI 등)
    4. 파일, 레지스트리 관련 문자열

     

    1.8 쉘코드 레이아웃

     

    경우에 따라 다를 수 있지만 쉘코드는 다음과 같은  루틴으로 구성되어 있음

    • GetPC 루틴
      • 쉘 코드는 처음 실행될 때 자신이 로드된 가상주소를 알지 못함. 그래서 디코딩, 문자열 참조를 할 수 없음
    • PEB를 통한 KERNEL32.DLL 베이스 주소 추적 루틴
    • Self-Decoding(Decryption) 루틴
      • 일반적으로 루프 패턴을 가짐. XOR 연산을 이용하는 경우가 많음
      • 인코딩(암호화)된 상태로는 실행이 불가능해서 디코딩(복호화) 수행 필요
      • 인코딩 하는 이유는 센서(AV 시스템)에 대한 우회를 목적으로 함
    • API 해시 값 계산 루틴
      • 셀프 바인딩을 하는데 사용되는 문자열(API 문자열, DLL 문자열)을 해시화 해서 센서(AV 시스템)의 우회를 목적으로 함
    • API 주소 확보 루틴
      • 쉘코드는 메모리상에 있는 API들의 주소를 알지 못하므로, Loadlibrary/GetProcAddress 함수를 통해 API의 주소 값들을 확보 해야함
    • API를 이용한 쉘코드 기능 구현 루틴
      • API 세트를 이용하여 프로세스 인젝션, 프로세스 워킹, 임베드된 파일 추출 및 실행, URL을 통한 파일 다운로드, 키로깅 등 주요 악성 기능을 수행

     

    1.9 악성코드의 주요 기능

    • 기능이름: 프로세스워킹(Process Walking)
      • 기능설명: 공격대상 시스템의 프로세스 정보 확보
      • 관련함수: CreateToolHelp32Snapshot, Process32Fisrt, Process32Next
      • 기능목표: 시스템에서 동작중인 프로세스들의 이름, PID 등의 정보를 확보하여 특정(AV, 모니터링 프로그램) 프로세스를 강제 종료 시키거나, 향후 프로세스 인젝션을 하기 위함
    • 기능이름: 프로세스인젝션(Process Injection)
      • 기능설명: 다른 프로세스의 메모리 공간에 코드 혹은 실행파일등을 삽입한 후 실행 시키는 공격
      • 관련함수: OpenProcess(PID), VirtualAllocEx, WriteProcessMemory, CreateRemoteThread or RtlCreateUserThread
      • 기능목표: Fileless 공격 개념의 기술적 구현. AV의 탐지를 우회 및 권한상승
    • 기능이름: 동적바인딩(Dynamic Binding)
      • 기능설명: 프로그램이 동작하면서 메모리상에 매핑된 DLL의 VA와 익스포트하고 있는 API의 VA를 확보하는 작업
      • 관련함수: Loadlibary, GetProcAddress
      • 기능목표: 악성코드의 기능 수행에 필요한 API들의 VA를 확보

     

    1.10 쉘코드의 루핑 수행 목적

    1. 암호화된 데이터(쉘코드 본체, DLL/API 이름, 도메인/IP 등) 복호화
    2. DLL 익스포트 테이블의 API 해시 값을 계산하는 경우
    3. 바인딩
    4. 참조할 데이터가 존재하는 위치까지 탐색을 수행할 때 

     

    1.11 GetPC

    • 프로세스의 가상주소공간 내에서 쉘 코드가 자신의 주소위치를 확인하는데 사용되는 루틴
      • 암호화된 쉘코드는 자가 복호화 등의 작업을 위해 포인터를 확보해야 하는데 이떄 GetPC 코드가 필요
    • 유형 :
      • CALL/POP(JMP/CALL/POP) 루틴
        • POP 레지스터 명령이 실행 되면서 오퍼랜드인 레지스터에 포인터가 저장
      • CALL $+N 루틴
        • CALL/POP 과 유사하나, POP 코드와 붙어 있다는 차이점을 가짐
      • FSTENV 루틴
        • 부동소수점(Floating Point)를 다루는 명령을 기반으로 하는 루틴
        • 부동소수점을 다루는 명령이면 어떤 것이든 상관없이(FLDZ, FCMOVNE 등) 해당 명령이 실행된 직후 FSTENV 명령을 실행하면 스택에 부동소수점이 실행된 주소가 보관됨
        • FSTENV 명령은 부동소수점을 다루는 환경정보 값들을 스택에 저장하는 명령이며, 이때 이전 실행되었던 부동소수점 관련 명령의 주소도 저장
      • SER(Structured Exception Handler) 조사 루틴
        • 쉘코드가 커스텀 핸들러를 SEH에 등록함. 그리고 임의로 예외 상황을 발생하여 핸들러 루틴을 호출
        • 핸들러는 예외를 발생시킨 명령어의 주소 값을 전달

     

    1.12 바인딩

    • 참조하는 API의 주소 값을 확보하여 별도의 주소 테이블에(IAT) 기록하는 작업
    • 바인딩은 실행되는 시기에 따라 정적 바인딩과 동적 바인딩으로 나누어짐
Designed by Tistory.