티스토리 뷰

Malware

아라비안(Arabian Night)사냥

히주코기 2018. 4. 13. 14:03

★☆★☆★첫포스팅★☆★☆★

포스팅에 앞서 본인은 제대로 분석 해본지도 2~3년은 된듯하다.
기억나는 거라곤 단순히 F7, F8, F9 버튼밖에 모른다(정말! 심지어 지금도!).
너무 오래되서 감을 잃고 흥미를 잃을 때쯤..
올크라이와 사탄의 유사성 발견에 이어 한 선배님이 주신 라자루스 관련 정보로 인텔리전스에 다시 흥미를 가지기 시작했다.
무튼 이렇게 처음으로 포스팅을 하게 되었다. 글 내용이 허접해보여도 이해해주었으면 한다.

★☆★☆★☆끝★☆★☆★☆

먼저, 이스트 시큐리티에서 공개한 인텔리전스 내용 중 라자루스 그룹과 관련해 작전명 코인매니저(Operation CoinManager), 아라비안
나이트
(Arabian Night) 등에 대한 내용이 있으며 이전의 글에서 이미 코인매니저 복호화 코드에 대해 자세히 다루신 바가 있다(^ .^)乃.
http://sfkino.tistory.com/52 <- 필독
그런데! 코인매니저에 이어 아라비안나이트에서도 매우 유사한 복호화 코드가 발견되었다. 이스트 시큐리티에서 공개한 아라비안 나이트
(Arabian Night) 문서에서 다룬 내용 중 본인은 복호화 코드에 대해 내용을 다루어보며 아라비안사냥을 해보려고 한다. 되려 사냥당
하지 않길 바라며 .. 분석스를 시작스한다.


파일 명 : 한싹시스템.doc

MD5 : E656E1E46E3AD644F9701378490880E2

1. 실행 시 다음과 같은 화면을 띄우며 [콘텐츠 사용] 버튼이 활성화 되어있다.

[그림 1] 악성 워드파일의 모습

2. 한싹시스템.doc 파일을 실행할 시 악성 매크로를 실행하고 종료한다. 또한 사용자가 파일을 의심하지 않도록 정상파일도 실행한다.

- (나만 헤맸지만) .doc 파일 실행하면 바로 꺼지니깐 한번 실행 후 우클릭 -> 편집

[그림 2] 드롭된 정상 DOC 파일

[그림 3] 정상 DOC파일에는 정상 내용이 기재됨

[그림 4] 실제 악성행위를 하는 매크로 파일

3. 매크로에서는 악성코드(svchost.exe)와 정상파일(.DOC)을 생성 및 실행한다.

여기서 본격적으로 다룰 svchost.exe가 나타난다.

■ (Dropped)svchost.exe(A4B3404FFFC581AB06D50F3F2243CB56)

1. 처음 실행 시 자기 프로세스 외 인자 없이 시작되므로 If문 루틴에 들어가 java.exe이름으로 자가복제 하고 다시 프로세스를 실행한다.

프로세스 인자

"C:\DOCUME~1\ADINI~1\LOCALS~1\Temp\java.exe" /c "C:\Documents and Settings\Administrator\바탕 화면\svchost.exe.vir"

[그림 5] svchost.exe 도입부

[그림 6] 인자 넣어버리기~

실행하다보면 아래와 같이 특정 값들이 복호화 추정 함수를 거쳐 API 함수의 인자로 들어가는 수상한 부분이 보인다.

[그림 7] 수상한 함수 decode_sub_4014f4

복호화 추정 함수를 한번 실행해봤더니 이상한 값이 IP로 바뀌었다.

[그림 8] 복호화 전 데이터

[그림 9] 복호화 후 데이터

복호화 추정 함수의 인자를 살펴보았다.
decode_sub_4016f4(16바이트의 데이터, 16, 14바이트의 데이터, 14)
첫 번째 인자는 16바이트의 데이터가 들어있다.
두 번째 인자는 값이 16인걸로 봐서 첫 번째 인자의 길이다. 이 악성코드에서 해당 함수의 두 번째 인자는 항상 16이 들어있다. 고로, 첫 번째 인자는 고정된 킷값(16바이트)으로 보인다.
세 번째 인자는 암호화된 데이터, 네 번째 인자는 암호화된 데이터 길이로 보인다.


[그림 10] 16바이트의 key 값

디코딩 함수(decode_sub_4016f4)에 타고 들어가면 [그림 11]처럼 네 개의 인자가 차례대로 두 개씩 쪼개져 각 함수에 들어간다
인자로만 봐선 첫 함수(key_table)KEY에 대한 연산, 두 번째 함수(data_decode)는 암호화된 데이터의 복호화 연산으로 추정된다.

[그림 11] 두 개의 디코딩 추정 함수

아래는 첫번째 함수(key_table)이며, 상태를 보아하니,, 두 가지 반복문이 존재한다.
1. 0~255(0x00~0xff)의 숫자를 특정 위치에 기재하는 반복문
2. 1에서 만들어진 키 블록(0x100)에 고정 킷값(0x16)과 더하기 연산을 하며 위치를 섞는 반복문

[그림 12] 키 블록 생성 함수

사실 정말 빠가사리라 연산 이해하고 짜서 했는데도 짠 소스 모름->이해->모름->이해ㅠㅠ..
간략하게 서술하면 아래와 같다(코딩 아님).

1.     tmp = tmp + arr[count] + key[key count]

tmp는 키 블록, 고정키 배열의 각 첫 배열부터 더하기 연산을 한다. 연산을 마친 값은 tmp 값에 누적되며 다음 카운트 덧셈 연산에 들어간다(블록 암호화 CBC 모드 마냥..).
(키 값은 로테이션 돌며 계산, 연산은 모두 BYTE 단위연산)

2,3. arr[count] = arr[tmp], arr[tmp] = arr[count] (값 교환)

더하기 연산 결과의 누적 값(tmp)은 키 블록의 배열번호로 들어가 값을 교환한다.
      arr[tmp]의 값과 arr[count]의 값을 서로 바꾼다.

[그림 13] 키 블록이 만들어지는 과정

위 연산으로 인해 최종적으로 숫자가 섞인 256 byte의 키 블록 완성!

[그림 14] 키 블록 연산 전(섞이기 전)

[그림 15] 키 블록 연산 후(섞인 후)

위 내용을 파이썬으로 구현하면 아래와 같다.

[그림 16] 키블록 데이터 생성

이제 만들어진 키블록을 기반으로 두 번째 함수를 거치면 최종적으로 복호화된 데이터가 나온다.
연산 방식은 그림 13의 함수와 비슷하다. 배열을 섞으면서 나온 결과값에 XOR 연산을 한다.

[그림 17] 복호화 연산 함수

1. v5 = v5 + arr[count]

count 배열의 값을 v5에 더하기 연산을 취하며 v5 값에 누적된다(BYTE단위 연산).

2. arr[count] = arr[v5], arr[v5] = arr[count]

           누적된 v5값은 배열 번호(arr[v5])로 들어가 arr[count]의 값과 교환한다.

3. encrypted_data = encrypted_data ^ arr[(arr[v5]+arr[count])]

arr[5]arr[count]의 값을 더하여 나온 결과값은 또 다시 배열의 번호로 들어간다.
           
들어간 해당 배열의 값과 암호화된 데이터는 XOR 연산을 취한다. 

Python으로 짠 두 번째 함수는 아래와 같다. 이 함수를 거치면 최종적인 데이터 복호화가 이루어진다.

[그림 18] 두 번째 함수

■ 오퍼레이션 코인매니저와 아라비안 복호화 차이점

이전에 오퍼레이션 코인매니저 게시글을 보았다면 이 게시글의 코드 내용이 약간 익숙함을 알 수 있다. 이전 게시글을 보았다면 이 연산방식이 95%이상은 유사하다. 그러나 무엇이 달라졌는지는 확인해봐야한다.

[그림 19] 첫 번째 함수(키블록함수 연산 비교)

이해도가 낮은 본인은 먼저 아라비안 코드에 코인매니저에서 사용된 키, 데이터로 바꾸고 실행해보았다.

이상한 값 ㅎㅎ. 코드가 아예 같으면 좋았을 것을
무엇이 바뀌었을까? 차이점이 무엇일까? 했다. 차이는 XOR 하는 암호화 대상의 위치 차이이다.
아라비안에선 암호화 데이터의 첫 번째 데이터(encdata[0])부터 복호화를 진행한다.
오픈코인매니저에선 암호화 데이터의 두 번째 데이터(encdata[1])부터 복호화를 진행하고 첫 번째 데이터는 값을 0으로 바꾼다.

[그림 21] 오퍼레이션 코인매니저의 코드 일부

아라비안에서 구현했던 파이썬 코드 [그림 18]에서 아래와 같이 두 가지만 바꾸면 오퍼레이션 코인매니저와 같은 결과값이 나온다.

[그림 22] 복호화 함수 코드 수정

그림 22처럼 변경해보니 API 함수가 나온당

[그림 23] 코드 수정 후 데이터

 끝..ㅎㅎ 밑에는 디코드파일..

decode_arabia.py











 
















 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함