Security/AI

머신러닝을 활용한 악성코드 분석 - 악성코드 분석(정적 방법 - 정적 분석)

criling 2022. 2. 8. 23:35

실습환경

[그림 1 실습환경]

정적 분석

[그림 2]를 통해 앞선 정적 분석에서 apktool을 사용해 infected.apk 파일을 디코드 할 때 "Baksmaling classes.dex..."가 출력된 것을 확인할 수 있습니다

 

[그림 2] Baksmaling classes.dex...

 

dex 파일은 안드로이드 애플리케이션의 컴파일된 바이트 코드로 *Dalvik 가상 머신에서 실행됩니다.

 

*Dalvik

달빅 가상 머신은 레지스터 형태의 가상머신으로 현재 안드로이드 휴대 전화 플랫폼에 들어갑니다.

 

대부분의 APK에서 컴파일된 바이트코드는 classes.dex 파일에 통합됩니다.

 

Baksmali는 .dex 형식(smali는 해당 어셈블러의 이름)의 역어셈블러입니다.

 

이 역어셈블러는 통합 dex 파일을 사람이 읽을 수 있도록 *smali 소스코드로 변환합니다.

apktool 디코드를 통해 사람이 읽을 수 있는 smali 소스코드로 변환합니다.

 

*smali

"smali/baksmali is An assembler/disassembler for the dex format used by dalvik"

dex 바이너리를 사람이 읽을 수 있도록 표현한 언어

Dalvik 바이트 코드를 위한 어셈블리 언어

 

[그림 3] cat MainActivity.smali (일부 캡처)

 

 

[그림 4]

※ Mainactivity.smali 안에[그림 4]에 해당하는 내용을 찾을 수가 없다...

 

 

smali 명령어를 n-그램을 이용하여 학습 알고리즘의 속성을 추출할 수 있습니다.

 

[그림 4]의 각 코드를 분석해보겠습니다.

 

const-string v0, "http://178.57.217.238:3000"

C&C 서버에 대한 하드코드된 IP 주소를 정의합니다.

 

iget-object v1, po, Lcom/fanta/services/SocketService;->b:La/a/b/c;

SocketService를 레지스터 v1에 할당해 인스턴스 필드에서 객체 참조를 읽습니다.

 

invoke-static {v0, v1}, La/a/b/b;->

    a(Ljava/lang/String;La/a/b/c;)La/a/b/ac;

파라미터로 IP 주소와 객체 참조가 있는 정적 메소드를 호출합니다.

 

move-result-object v0

그 뒤 정적 메소드의 결과가 레지스터 v0으로 이동됩니다.

 

iput-object v0, p0, Lcom/fanta/services/SocketService;->a:La/a/b/ac;

마지막으로 SocketService 인스턴스 필드에 기록됩니다.

 

이것은 Dalvik opcode를 smali 형식으로 표현된 것을 *n-그램을 적용해 속성으로 만들 수 있는 아웃바운드 전송입니다.

 

예를 들어 smali 형식 정보를 5-그램으로 표현하면 다음과 같습니다.

{const-string, iget-object, invoke-static, move-result-object, iput-object}

 

*n-그램(k-그램)

n개로 이루어진 집합

 

 

속성으로 syscall이나 opcode n-그램을 사용하는 것은 악성코드 분류에 있어서 유용합니다.

 

baksmali 역어셈블러는 dex 파일에 해당하는 모든 smali 코드를 생성할 수 있지만 때로는 필요 이상일 때도 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

참고

"머신 러닝을 활용한 컴퓨터 보안, 클라렌스 치오, 데이비드 프리먼, 에이콘"

"Machine Learning and Security by Clarence Chio and David Freeman(O'Reilly). Copyright 2018 Clarence Chio and Davide Freeman, 978-1491-97990-7"

 

Dalvik

https://ko.wikipedia.org/wiki/%EB%8B%AC%EB%B9%85_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4) 

 

달빅 (소프트웨어) - 위키백과, 우리 모두의 백과사전

달빅 (소프트웨어) 위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

 

 

Smali

https://github.com/JesusFreke/smali

 

GitHub - JesusFreke/smali: smali/baksmali

smali/baksmali. Contribute to JesusFreke/smali development by creating an account on GitHub.

github.com