tmxklab

Obfuscation(encoding, crypto, packing) 본문

Security/07 Malware Technique

Obfuscation(encoding, crypto, packing)

tmxk4221 2021. 4. 22. 14:18

1. Intro

악성코드는 다양한 난독화(Obfuscation)기술을 통해서 탐지하거나 리버싱하기 어렵게 만들도록 한다. 일반적으로 인코딩/암호화/패킹 기술을 사용한다. 주로 다음과 같은 이유로 난독화 기술을 적용한다.

  • C&C 통신 은닉
  • IDS와 같은 시그니쳐 기반 솔루션 우회
  • 설정 파일 은닉
  • 몰래 빼내는 정보 암호화
  • 바이너리에 있는 문자열 은닉

등등.. 다양한 이유가 있겠지만 탐지나 분석를 어렵게 하거나 중요한 정보를 숨기기 위해서 사용한다.

 

2. Encoding

대부분 Base64 또는 xor 인코딩과 같은 매우 간단한 인코딩 알고리즘을 사용해 데이터를 모호하게 한다. 이렇게 간단한 알고리즘을 사용하는 이유는 구현이 쉽고 리소스를 조금 소모할 뿐만 아니라 분석가로부터 모호하게 만들 수 있기 때문이다. 

1) Caesar cipher

  • 가장 간단한 인코딩 기술이며 평문에 있는 각 문자를 고정된 수 위치만큼 이동
  • 문자를 암호화할 수 있지만, 바이너리 데이터를 암호화하기엔 충분하지 않음

 

2) Base64 Encoding

  • 바이너리 데이터를 ASCII 문자열 포맷으로 인코딩
  • 디코딩하는 방법은 인코딩 반대 과정
  • 패딩이 사용되면 '='문자를 Base64 인코딩한 문자열 끝에서 볼 수 있음
  • 식별하는 방법은 바이너리에 포함된 문자열 중에서 Base64 인코딩하는데 사용되는 문자 집합 확인(영문자,숫자,+,/)

 

3) XOR Encoding 

  • Base64 인코딩 외에도 흔히 사용되는 인코딩

① Single Byte XOR

  • 평문의 각 바이트를 암호화 키와 XOR하는 방식
  • 키 길이는 1byte(0x1 - 0xff)이므로 모든 키를 무차별 대입하여 의미있는 정보가 나옴으로써 XOR 키 탐색 가능

② Multi Byte XOR

  • 앞서 언급한 무차별 대입 기술에 방어력을 높은 멀티 바이트 XOR 사용
  • 예를 들어 4byte XOR 키를 사용하게 되면 총 경우의 수가 0xFFFFFFFF개로 늘어남

XOR 인코딩 식별 도구)

 

XORSearch & XORStrings

XORSearch XORSearch is a program to search for a given string in an XOR, ROL, ROT or SHIFT encoded binary file. An XOR encoded binary file is a file where some (or all) bytes have been XORed with a…

blog.didierstevens.com

 

 

hiddenillusion/NoMoreXOR

Tool to help guess a files 256 byte XOR key by using frequency analysis - hiddenillusion/NoMoreXOR

github.com

 

3. Crypto

악성코드가 암호화되어 있으면 주로 암/복호화 함수와 암/복호화하는데 사용하는 키를 식별해야 한다. 바이너리에서 암호화 기능의 사용을 확인하고자 다음과 같은 시그니쳐를 식별할 수 있다.

  • 암호화 함수를 참조하는 문자열 또는 임포트
  • 암호화 상수(Crptographic Constants)
  • 암호화 루틴에 사용하는 고유의 명령 순서

 

암호화 시그니쳐 식별 도구) - signsrch

 

pierrezurek/Signsrch

Contribute to pierrezurek/Signsrch development by creating an account on GitHub.

github.com

암호화 시그니쳐는 signsrch.sig에 존재

 

암호화 상수 탐색 도구) - Findcrypt(IDA Pro plugin)

 

IDA-Pro/plugins/FindCrypt2 - aldeid

 

www.aldeid.com

 

암호화 시그니쳐 Yara rule 관련)

 

x64dbg/yarasigs

Various Yara signatures (possibly to be included in a release later). - x64dbg/yarasigs

github.com

 

+) 암호화 상수를 사용하지 않는 RC4와 같은 암호화 알고리즘은 암호화 시그니쳐를 이용해 탐지하기 어렵다. RC4 암호화 알고리즘 구현이 쉽기 때문에 종종 사용된다. 다음 링크 참고

 

An Introduction to Recognizing and Decoding RC4 Encryption in Malware

A blog from the world class Intelligence Group, Talos, Cisco's Intelligence Group

blog.talosintelligence.com

 

 

+) CyberChef -> 거의 모든 종류의 인코딩, 암호화, 압축 알고리즘 지원

 

CyberChef

 

gchq.github.io

 

+) PyCryto(Python 복호화 모듈) 

 

pycrypto

Cryptographic modules for Python.

pypi.org

 

 

PyCrypto API Documentation

 

www.dlitz.net

해시 알고리즘 : HMAC, MD2, MD4, MD5, RIPEMD, SHA1, SHA256 등등 지원

암호화 알고리즘 : AES, ARC2, Blowfish, CAST, DES, DES3, IDEA, RC5, ARC4 등등 지원

 

+) Custom Encoding/Cryto

자신만의 Encoding/Cryto scheme을 사용하게 되면 암호화(또는 키)의 식별이 어려워지고 리버싱도 어려워진다. 이러한 방법 중 하나가 인코딩과 암호화를 조합하는 방법이다.

-> 관련 악성코드 : Etumbo

 

4. Packing

패킹은 정상 바이너리 파일을 패커를 통해 실행 압축시킨다. 압축파일과는 다르게 압축해제 없이 바로 실행할 수 있다. 패커의 목적은 분석을 어렵게하고 탐지를 회피하기 위해서 사용되며 대부분 악성코드는 패킹된 상태로 발견된다. 패킹된 바이너리는 매우 적은 정보만 노출되어 임포트 함수의 수가 매우 낮아지고 프로그램 명령이 난독화된다. 따라서, 패킹된 바이너리를 분석하기 위해서는 언패킹(난독화 레이어 제거)을 수행해야 한다.

 

패커 특징)

  • 파일의 크기를 축소시키기 위해 압축
  • 파일이 실행되는 경우에만 언패킹되어 메모리에 로드
  • 정적 분석을 통한 탐지를 어렵게 만듦
  • 언패킹하지 않으면 코드 수정 및 확인 x

 

정상 바이너리가 패커에 전달되면 파일은 압축되고 언패킹 스텁(unpacking stub, 압축해제 루틴)이 추가된다. 그런 다음 패커는 EP(Entry Point)를 스텁 위치로 변경하고 새롭게 패킹된 실행 파일을 생성한다.

패킹한 바이너리를 실행하면 unpacking stub에서 원본 바이너리를 추출한 다음 원래 OEP로 전달하게 된다.

 

패킹된 바이너리를 언패킹하려면 2가지 방법이 존재한다.

  • 수작업으로 언패킹
  • 언패커로 언패킹(자동화)

1) 수작업으로 언패킹

① OEP 식별 및 OEP에 도달할 때까지 프로그램 실행

② 언패킹된 프로세스를 디스크로 덤프

③ 덤프한 파일에서 IAT를 수정

 

OEP를 직접 식별하고 수작업하는 방법보다 x64dbg의 plugin에 Scylla를 이용하여 프로세스 메모리 덤프하는 것이 편함

 

x64dbg의 Scylla플러그인을 이용해 프로세스 메모리 덤프 뜨는 방법)

 

[CodeEngn] Basic RCE L09

1. 문제 1) 문제확인 실행시키면 왼쪽 그림이 나오고 확인 누르면 왼쪽 그림처럼 파일을 찾을 수 없다고 뜸 upx 언패킹 ㄱㄱ 근데 언패킹하고 다시 실행시켜보면 알 수 없는 문자가 나온다. 2. 접근

rninche01.tistory.com

 

2) 자동화된 언패커

VMUnpacker -> 다수의 언패킹 지원(근데 64bit지원안해주는 것 같음, 64bit binary 언패킹안됨)

다른것도 찾아봐야함, 사용해보고 괜찮은 것 있으면 새로 업데이트하기

'Security > 07 Malware Technique' 카테고리의 다른 글

Hooking (악성코드 관련)  (0) 2021.04.22
DLL Injection using shim  (0) 2021.04.22
다양한 인젝션 기술  (0) 2021.04.20
SetWindowsHookEx DLL Injection  (0) 2021.04.20
APC Injection  (4) 2021.04.19
Comments