2013년 2월 18일 월요일

Node.js 와 BlackHole 2.0 Exploit

BlackHole 2.0 Exploit 샘플을 Node.js를 이용하여 분석할려고 합니다.

Node.js를 사용하여 분석한 이유는 인터프리터 방식이기 때문에 자바스크립트 코드를 한줄 한줄 실행해가며 결과를 볼 수 있는 장점이 있기 때문입니다. 비록 브라우저가 아닌 콘솔 환경에서 결과물을 보기 때문에 사용에 불편함이 있지만 사용해볼 가치가 있습니다.

이 글에서는 Node.js를 설치하는 방법은 다루지 않겠습니다. 그 방법은 구글링 해보시기 바라며, BlackHole 2.0 Exploit 샘플을 분석해보겠습니다.

해당 샘플은 다음과 같이 3가지 부분으로 이루어져 있습니다:
[그림 1] BlachHole 2.0 Exploit 샘플

(1)  인코딩된 URL 로딩(특정 자바 취약점을 일으키는 JAR 파일 로딩 )
인코딩된 URL(N0b0909041f3131041a43431a001a223844213219353c3a350931003509353809193104431a323a2211351e28171a44000c283505323a3a323a052223173a320917443c040b043d2c2c391c2908181c3e1c3e1c1a020a35391c3408081c081c3e0842082b1c291c271c271c280217391c2702430a3905022c2c3928)이 Param태그("uid"로 네이밍)의 value에 할당된것을 볼 수 있습니다. 인코딩된 URL은 특정 키 값에 의해 해제할 수 있으며, 해당 키값을 얻으려면 특정 URL 정보가 필요합니다.
해당 샘플의 경우에는 특정 URL 정보(http://pallada-cruise.net/detects/plain-keyboard_beginning-monitor.php?fpdz=073809090a&lxrpa=4547&ryz=chh&bxkrc=ruuwzhkb) 존재하기 때문에 디코딩된 URL 을 다음과 같이 얻을 수 있습니다.
Secret Decoder Ring 툴을 이용했습니다.
[그림 2] URL 인코딩

(2) 난독화된 데이터
이 데이터는 디코딩 로직에 의해 풀려서 실행됩니다.
다수의 자바 취약점에 의해 사용자 PC에서 악성파일을 다운로드 및 실행시켜 악성 행위를 합니다.

(3) 디코딩 로직
디코딩 로직은 자바스크립트로 작성됐습니다. 해당 로직을 Node.js를 이용하여 관련 코드를 한줄 한줄 실행해 보겠습니다.

- 1. 각각의 변수에 필요한 함수 객체를 할당하였습니다.
[그림 3] 변수 할당(함수 객체)

- 2.  "google" 이라는 아이디를 가진 U 태그의 각 변수( d[0~94] 형식 )에 난독화 데이터를 할당했습니다.
95개의 변수에 난독화 데이터를 할당하는 일은 노가다성(?)이 짙기 때문에 분석을 위해서는 변수 하나에 할당하도록 하겠습니다(Node.js에서는 콘솔 환경이라서 난독화 데이터 할당후, 데이터가 일부만 보입니다).
[그림 4] 변수 할당(난독화 데이터)

[그림 5] 변수 할당(난독화 데이터)

- 3. 난독화 데이터에서 영문소문자(a-z ) 와 숫자(0-9)를 제외한 나머지 문자를 제거했습니다.
[그림 6] 특정 문자 제거(난독화 데이터)

- 4. 난독화 데이터의 각 문자(유니코드숫자)를 두자리씩 끊어서 28진수 데이터로 변환한 다음, String.fromCharCode 함수를 이용하여 문자로 변환하여 난독화 데이터를 디코딩합니다. 이 부분은 BlackHole 2.0 Exploit 샘플마다 다릅니다. 하지만 변환후 eval 함수를 통하여 실행 시키는 방식은 동일합니다.
때문에 BlackHole 2.0 Exploit 샘플을 볼 때, 난독화 디코딩 코드만 유의하여 보면 난독화 해제하기가 쉽습니다.
[그림 7] 난독화 데이터 디코딩

디코딩 코드에서 난독화를 해제한 다음 s 변수에 저장한것을 볼 수 있습니다.
해당 변수를 eval함수를 이용하여 실행하면 취약점이 있는 웹브라우저에서는 악성코드를 다운로드 받음 다음 실행됩니다. 따라서 Node.js에서 디코딩 코드를 볼려면 eval 함수를 console.log 함수로 변환하여 실행하면 됩니다.
[그림 8] 난독화 데이터 디코딩 결과

이러한 방법으로 우리는 Node.js를 이용하여 BlackHole 2.0 Exploit 샘플을 분석할 수 있었습니다. 아마 해당 샘플을 대략적으로 이해하는데 도움이 되셨으리라고 생각됩니다 :-). 이 글을 읽으시는 분들이 다른 샘플도 저와 같은 방법으로 분석해보면 난독화 샘플의 로직을 이해하는데 도움이 될것으로 생각됩니다.

댓글 없음:

댓글 쓰기