Malware

신용카드 정보를 훔치는 POS 악성코드(Alina v3.4)

wsoh9812 2020. 8. 28. 16:04

먼저 POS란?

"판매시점 정보관리를 담당하는 기기이며 일반적으로 포스기라고 부르는 시스템을 이야기합니다."

라고 나와있네요 ㅎㅎ

 

사진 부터 보시죠

구글 검색 "POS"

식당가면 카운터에 있는 기계를 POS라고 하는거 같아요 :)

 

 

본론으로 들어갑시다..

[참고] 샘플 : 1efeb85c8ec2c07dc0517ccca7e8d743

( Alina v3.4 )

[참고] https://blog.alyac.co.kr/3097

 

 

UPX패킹 확인

 

언패킹 시도...

언패킹 완료.

 

분석하기전에 앞서 필요한 상식부터 짚고넘어가 보겠습니다.

 

[참고] 동기화란?

- 작업들 사이의 수행 시기를 맞추는 것. 

- 사건이 동시에 일어나거나, 일정한간격을 두고 일어나도록 시간의 간격을 조정하는 것을 이른다.

 

CriticalSection(임계영역)란?

- 이 말을 '치명적 영역'으로 번역 할 수 있다. 치명적 영역은 보호되어야 하듯이 '자원의 독점'을 보장해주는 역할입니다.
- 한순간 반드시 하나의 프로세스만 진입해야 되는데, 프로그램에서 임계 자원을 이용하는 부분으로 공유 자원의 독점을 보장하는 코드 영역을 의미한다.

- 크리티컬 섹션을 지정한 구간은 한번에 하나의 '스레드'에서만 접근 가능

예시(Example),

남친과 여친 쪽에서 동시에 통장에서 돈을 빼려고하는데 잔액부족으로 출금이 불가능한 그러한 문제 즉, 동기화 문제를 유발하지 않도록 살펴줘야할 임계영역이라고 부릅니다. 

 

[참고]

(세마포어, 뮤텍스랑 비슷한거 같아서 좀더 찾아보 았다.)

뮤텍스는 : 커널객체 사용, 무겁다
크리티컬 : 섹션 사용자 객체 사용, 가볍다
[중요]크리티컬 섹션이 한 프로세스 내의 쓰레드 사이에서만 동기화가 가능한 반면,
뮤텍스는 여러 프로세스의 스레드 사이에서 동기화 가능

 

 

크리티컬 섹션 영역 지정

[해석]

EnterCriticalSection과 LeaveCriticalSection는 임계영역의 시작과 정의 해주는 부분

즉, sub_40320을 임계영역으로 지정 해주었고,  

여기에서는 한번에 하나의 쓰레드만 들어갈 수 있따. 다른 쓰레드가 들어갈려면 대기

 

 

이제 본론으로 돌아 가봅시당 :)

 

크리티컬섹션을 만들어주는 if문 조건 2개!

어떤 조건에 의해 만들어주는지 살펴보았습니다.

(빨간색함수주황색함수)

 

sub_403230

Mutex를 생성해 중복실행 방지

 

"alina=" ,"update=" 

무엇이 들어오냐에 따라 행위가 달라지는데

 

"alina=" 일때

"alina=특정경로" 이렇게 옵션을 주면 특정경로에있는 파일을 삭제합니다.

끝낸다.

 

"update"

( 업데이트 경로는 카피한 바이너리 경로로 지정 )

하,,,  업데이트할때 눈으로 분석하기에는 너무 길다...

그래서 동적분석을 택함.

 

SHGetSpecialForderPath 처음보는 API
자동실행 등록

 

위의 이름 중 랜덤으로 '특수경로'에 파일을 생성합니다.

 

 

 

특수경로에 있는 파일에 자가 복제를 하고, 레지스트리에 자동실행을 등록합니다.

 

 

에 있는 파일에 자가 복제를 하고, 레지스트리에 자동실행을 등록합니다

이렇게 빨간색함수가 끝나게되면 sub_403230으로 진입하는데 이건 좀이따 분석해보고

 

 

주황색함수를 먼저 보겠습니다.

sub_403230

주황색함수 내부

 

"SeDebugPrivilege" 특권을 가지고 있는지 확인을 합니다. 

 

[중요] SeDebugPrivilege권한이 있는지? 왜 활성화 시키는지!

 "SeDebugPrivilege 권한이 있으면 다른 프로세스의 빈 영역에 코드 주입 가능"

위와 같은 이유로 권한을 확인해주고 활성화 시켜주는것 같다.

예를 들면 원격 프로세스의 TerminateProcess나 CreateRemoteThread 같은 함수를 호출하지 못한다고합니다.

악성코드가 이런 함수에 대한 권한을 획득하는 한 방법으로 접근 토큰의 권한에서 SeDebugPrivileage를 활성화한다

 

 

WinMain함수의 일부분

if문에 걸리는 함수를 살펴 봤다면

이제는 2개의 if문 안의 코드를 분석해 볼 것입니다.

 

sub_401040 :

xor된 값들을 전역배열에 저장

sub_402fd0 :

쓰레드를 생성

C&C서버가 닫혀있어 분석이 어렵다.

sub_403230(임계영역) :

 

분석하다 보면 중간 중간 

이렇게 생긴 함수가 있는데 이벤트로그?라고 생각하시면 될거같습니다. 

 

이벤트로그?

이렇게 만들어진 로그를 바탕으로 서버로 전송하나 봅니다.

( 이 정보를 0xAB랑 xor한 값을 서버로 전송 )

 

계속해서 분석해 보면

http 통신 확인

[참고]

어떤 악성코드는 인터넷 연결 여부를 확인하고 통신을 하는 경우도 있습니다.

그래서 'fakenet'이라는 툴을 사용할 것입니다.

 

fakenet이란?

악성코드가 정상적으로 인터넷이 연결되어 있다고 착각하게 만들어주는 툴입니다.

fakenet-ng 실행

fakenet-ng를 켜준다음 계속해서 분석을 진행합니다.

 

한 곳만 통신하는 것이 아니라 여러 곳이랑 통신을 합니다.

그리고

인자에따라 서버로 전송하는 것들이 달라지는데........

 

act파라미터에 "d", "l", "c"가 들어갈 수 있다.

암튼 이렇게 3개의 옵션으로 이루어져있다.

"d" : 볼륨시리얼 넘버, 유저명, 파일 경로? 간단한 정보?정도만

"l" : ldata파라미터가 붙는데 이벤트로그 포함 전송

"c" : 

 

 

[*] 'someligeoas.com/whynot/sam.php'으로 클라이언트 정보 전송

someligeoas.com/whynot/sam.php

[*] '208.98.63.228/forum/login.php'으로 클라이언트 정보 전송

[*] 'uipoqworkas.com/whynot/sam.php'으로 클라이언트 정보 전송

이렇게 임계영역으로 정해준 함수의 동작이 끝나게됩니다.

 

* 이제 70%정도 온거 같습니다 ㅠㅠ *

 

마지막 분석 코드

마지막 동작 코드입니다. while문을 돌면서 계속해서 동작을 하는데 하나씩 먼저 보겠습니다 

 

sub404070

특정 프로세스의 페이지 영역 정보를 가지고 와서

read/write권한 있는지 확인
페이지 상태가 MEM_COMMIT일때 

 

여기서부터 삽질 좀했다 그러다가 도저히 답이 안나와 분석보고서를 찾아보았다.

 

먼저,

[중요] POS악성코드의 동작원리?가 메모리에 올라간 데이터드를 긁어서 

신용카드 정보를 찾는 것이다. 

 

sub_403FC0함수

그럼 이제 위에 함수가 이해가 되는가?

특정 프로세스에 있는 메모리를 읽어어서 신용카드 정보를 스캔하는 것이다.

[참고] 이 작업을 메모리 스크래핑이라고 한다.

 

 

메모리 스크래핑 제외 대상

 

이후 동작은 신용카드 스크래핑하는 과정인데 

"Luhn Algorithm"을 사용한다고 한다......

이 알고리즘을 분석하는건 쫌,, 

 

대충신용카드 정보를 긁어온다 정도? ㅎ