티스토리 뷰

프로젝트/RaaS

CryptoHunt 정리

삼전동해커 2022. 2. 2. 16:39

랜섬웨어에서 사용하는 암호화 알고리즘

대칭키는 속도가 빠름. 비대칭키는 공개키로 암호화하고 개인키로 복호화해 보안적으로 강력하지만 속도가 느림.

하이브리드형은 파일을 대칭키로 암호화하고 키를 공개키로 암호화해 개인키가 있어야지 대칭키를 얻을 수 있게함.

랜섬웨어에서 사용하는 암호 알고리즘

  1. TEA
    • 128비트 키 사용
    • 64라운드 페이스텔구조
  2. AES
  3. RC4
  4. MD5
  5. RSA

cryptohunt 논문 정리

악의적인 페이로드는 안티멀웨어스캐닝을 지연시키기위해 암호화를 진행하는 경우도 있음. OpenSSL이나 Mircosoft Crpytography API는 다시 사용되는 암호화 함수를 간단한 일로 만든다. -> OpenSSL이나 MS API도 암호화 작업을 가볍게 진행하지만 멀웨어는 이를 무겁게 만듬.

암호화 함수를 찾는 3가지 방법이 있음.

  1. 암호화 함수는 시작부분이 있음. 암호화 함수를 모니터링 해 평문에 접근할 수 있고, 악의적인 페이로드를 발견할 수 있음.
  2. 바이너리 분석을 통해 시간을 아낄 수 있음. 만약 한 코드섹션이 특정한 암호알고리즘을 수행하는 부분이라면, 다른 부분은 건너뛸 수 있다.
  3. 비슷한 암호화 함수를 사용하는 것을 분석해 멀웨어의 계통을 확인할 수 있음. 뛰어난 코더들은 암호화의 상징적인 부분을 숨길 수 있음.

암호화 함수를 찾는 방법은 다른 함수들과 다르게 매직상수값이나 비트연산의 과도한 사용, 특이한 I/O 관계 등이 있다.

동적분석의 단점

  1. 흔하게 사용되는 암호화 함수를 찾기에 적당하지 않다.
  2. 메모리에서 I/O 복구가 난독화 때문에 어렵다.

이 논문의 중요점은 실행을 추적해 암호화 변화 반복의 세밀한 의미를 파악하는 것.

숙련된 코더가 암호화 루핑 알고리즘을 바꾸는 것을 대비해 이것을 발견하는 non-standard XTEA를 적용

cryptohunt의 주요한 방식은 정형적인 암호화 변환 반복을 정교하고 특징적인 반복문과 매칭시키는 방법임.

퍼징을 이용해 확장성 문제(루핑 알고리즘을 바꾸는 것)를 해결.

32번 레퍼런스 : 숙련된 코더가 어떻게 암호화 알고리즘을 바꿔서 탐지를 피하는가.

32번 레퍼런스 : XTEA 방식 적용으로 바뀐 알고리즘 탐지

섹션2 : BG,관련된 연구 소개

섹션3 : cryptohunt 오버뷰

섹션4,5 : 각 단계의 소개

섹션 6 : 실행 디테일

섹션 7 : 결과 평가

섹션 8 : 한계점 소개

섹션 9 : 관련 레퍼런스

섹션2(Code 난독화 기술 소개)

동적과 정적으로 암호화 기술을 발견하는 방법소개.

34번 레퍼런스 : 소프트웨어 지적 재산을 보호하기 위해 코드 난독화 기술 사용

21번 레퍼런스 : 멀웨어 제작자들이 탐지를 피하기 위해 코드 난독화 기술 사용

5번 레퍼런스 : binary packing 기술을 사용해 코드 난독화

binary packing 기법

실행가능한 바이너리를 데이터 형식으로 압축하거나 암호화한 후 암호화된 프로그램이 실행될 때 오리지널 코드를 복구시켜 탐지를 우회.

이 방법은 코드블럭(암호화 함수)을 난독화하기엔 적절한 방법은 아님.

A. Control 난독화

35번 논문 : control 흐름 평탄화

36번 논문 : 불투명한 예측

위와 같은 방법은 컨트롤 흐름을 정보를 크게 바꾸기 때문에 리버싱에 어려움이 있음.

Data 난독화는 데이터값과 사용을 감춤.

30,31번 레퍼런스 : data 인코딩 방법은 변수 표현을 모호하게 바꾼다.

37번 레퍼런스 : data 집합체에 관한 논문. data 집합체는 변수나 배열을 집합체로 바꾼다.

38,39번 레퍼런스 : 바이너리 코드에서 완벽하게 데이터를 추상화하고 유형을 복구하는 것은 어렵다.

코드 난독화는 특정한 상수와 수학연산만 사용하는 암호화 함수에 적합하다.

B.정적 분석

정적분석은 암호화 함수를 바이너리가 실행되기 전에 탐지한다. 탐지에는 3가지 방법이 있다. 반복문, 엔트로피, 비트연선 계산 수가 많음.

14번 레퍼런스 :

1번 레퍼런스 : 메세지 복호화 단계에서 암호화된 데이터를 위치 시킨다.

24번 레퍼런스 : 암호화 api, 고정 변수, 엔트로피를 이용해 멀티 디텍션 방법.

15번 레퍼런스 : 데이터 흐름 그래를 시그니처로 해 대칭 암호화 알고리즘 분석

26번 레퍼런스 : 동적 분석의 시그니처는 코드 난독화에 한계가 있음.

C.동적 분석

13번 레퍼런스(cipherXRay) : 데이터 눈사태 효과를 관찰한 논문

11번 레퍼런스 : I/O에 관해 loop boundary에서 인자로 관찰

동적 분석에서 탐지를 하기위해 3가지 주요 사항이 있음.

  1. I/O 매핑을 주요한 구현부분과 비교하려는 경계를 정확히 찾는다.
  2. 메모리부터 I/O의 정확한 복원이 필요
  3. t

base64 인코딩 같이 것은 I/O매핑을 방해하기 위해 멀웨어에서 많이 발견된다.

D.심볼릭 실행

40번 레퍼런스 : 심볼릭 실행은 프로그램 분석에 있어서 효과적임.

구체적인 값을 심볼릭 값으로 대체하고 모든 변수가 심볼릭 표현을 가질 수 있도록해 프로그램 실행.

41,42,43번 레퍼런스 : 심볼릭 실행이 소프트웨어 보안 분석에있어서 근본적인 접근이다.

심볼릭 실행을 루프 바디의 세분화 모델로서 실행한다.

크립토 헌트에서는 boolean형식의 타입만 포함.

크립토헌트 방식은 32비트 2개가 같은지 비교할 때 하위 15비트를 비교한다. 이러한 솔루션은 데이터 난독화를 정확히 잡아냄.

E.바이너리 차이 분석

섹션3(OverView)

크립토헌트 과정

  1. Execution trace generation
    • 타겟 바이너리 코드를 실행하고 상세한 런타임 정보를 포함해 실행 과정을 기록.
  2. Loop body identification
    • 탐지 범위를 좁히기 위해 루프 구조를 발견
  3. bit symbolic execution
    • 데이터 난독화를 복구하기 위해 bit symbolic execution으로 looping I/O 관계를 확인한다.
    • 이런 방법으로 input 인자는 boolean 타입으로 표현되고, output인자는 boolean 형식의 세트로 표현된다.
  4. variable mapping and comparison
    • symbolic formula가 참고 구현과 일치하는지 효율적으로 찾기 위한 퍼징 접근법을 제안.

섹션4(Reference Formula Generation)

reference formula에서 boolean formula를 생성하는 방법을 설명함.

OpenSSL같은 암호화 알고리즘을 사용함.

57번 레퍼런스 : C언어를 CIL을 사용해 분석하는 방법

먼저 C코드에서 암호화 변환 반복부분을 cil을 이용해 찾는다. 키 전송에 대한 방법은 section XI-A4에 있음.

다음으로 소스코드를 실행가능하도록 컴파일하고 트레이스를 기록하기 위해 실행. 그러면 루프 바디에서 비트연산 심볼릭 실행을 하고, boolean formula를 생성. 생성된 데이터가 디텍션 시그니처가 된다. 더 자세한 내용은 섹션V와 VII에 있음.

reference formula는 2가지 속성이 있음. 하나는 주어진 암호화 알고리즘의 대표적인 특징을 설명하기 간소하다는 것이다. 이건 전체적인 알고리즘의 전송을 reference formula로 바꿀 필요가 없다는 말이다.
또 다른 하나는 formula들은 특정한 구현에 독립적이다. 보안 분석가들은 알고리즘 설명만 보고 reference formula를 생성한다.
reference formula란 코드를 수식으로 표현한는 것을 말하는듯.

섹션5(Execution Trace Recording)

58번 레퍼런스 : pin에 관한 레퍼런스

56,59번 레퍼런스 : 런타임 언패킹 기술에 관한 레퍼런스

pin을 사용해 트레이스 레코딩을 함.

섹션6(Loop Body Identification)

11번 레퍼런스 : 루프 디텍션 알고리즘.

루프의 조건

  1. 명령의 순서의 opcode가 한번이상 반복
  2. 명령 순서가 조건/무조건 점프로 시작 순서로 돌아가서 끝나야함.

대부분의 루프문은 두번째를 따름.
같은 함수를 다른 인자로 호출하는 것은 다른 컨트롤 플로우를 도출할 수 있다.
그래서 함수 호출의 실행에서 내부의 간섭을 제거해야 함.
점프문의 도착지를 발견하면 그 루프문의 범위를 찾을 수 있다.
반복되는 부분을 군집화하는 것을 folding으로 표현.
entropy란 불확실성 정도를 의미.

섹션7(Bit-precise Symbolic Execution In Loop)

loop문을 발견한 후 symbolic execution을 실행해 loop문을 boolean formula로 변환한다.
난독화하는 방법으로 변수를 구조체로 묶거나 변수 하나의 계산과정을 두개의 다른 변수로 나누어 값을 저장하는 방법.
bit-precise symbolic execution을 사용하면 이런걸 우회할 수 있음. 연산을 boolean formula로 변환한다.

섹션8(Guided Symbolic Variable Mapping)

boolean formula로 출력된 결과물을 그룹핑하고 reference formula와 비교해 일치하는지 확인함.
주요한 문제는 input 변수를 reference formula와 비교하는 것이다.

A. motivation

PEDA(Pre-Encryption Detection Algorithm)

'프로젝트 > RaaS' 카테고리의 다른 글

RaaS 1일차  (0) 2022.01.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함