먼저 POS란?
"판매시점 정보관리를 담당하는 기기이며 일반적으로 포스기라고 부르는 시스템을 이야기합니다."
라고 나와있네요 ㅎㅎ
사진 부터 보시죠
식당가면 카운터에 있는 기계를 POS라고 하는거 같아요 :)
본론으로 들어갑시다..
[참고] 샘플 : 1efeb85c8ec2c07dc0517ccca7e8d743
( Alina v3.4 )
[참고] https://blog.alyac.co.kr/3097
언패킹 시도...
분석하기전에 앞서 필요한 상식부터 짚고넘어가 보겠습니다.
[참고] 동기화란?
- 작업들 사이의 수행 시기를 맞추는 것.
- 사건이 동시에 일어나거나, 일정한간격을 두고 일어나도록 시간의 간격을 조정하는 것을 이른다.
CriticalSection(임계영역)란?
- 이 말을 '치명적 영역'으로 번역 할 수 있다. 치명적 영역은 보호되어야 하듯이 '자원의 독점'을 보장해주는 역할입니다.
- 한순간 반드시 하나의 프로세스만 진입해야 되는데, 프로그램에서 임계 자원을 이용하는 부분으로 공유 자원의 독점을 보장하는 코드 영역을 의미한다.
- 크리티컬 섹션을 지정한 구간은 한번에 하나의 '스레드'에서만 접근 가능
예시(Example),
남친과 여친 쪽에서 동시에 통장에서 돈을 빼려고하는데 잔액부족으로 출금이 불가능한 그러한 문제 즉, 동기화 문제를 유발하지 않도록 살펴줘야할 임계영역이라고 부릅니다.
[참고]
(세마포어, 뮤텍스랑 비슷한거 같아서 좀더 찾아보 았다.)
뮤텍스는 : 커널객체 사용, 무겁다
크리티컬 : 섹션 사용자 객체 사용, 가볍다
[중요]크리티컬 섹션이 한 프로세스 내의 쓰레드 사이에서만 동기화가 가능한 반면,
뮤텍스는 여러 프로세스의 스레드 사이에서 동기화 가능
[해석]
EnterCriticalSection과 LeaveCriticalSection는 임계영역의 시작과 정의 해주는 부분
즉, sub_40320을 임계영역으로 지정 해주었고,
여기에서는 한번에 하나의 쓰레드만 들어갈 수 있따. 다른 쓰레드가 들어갈려면 대기
이제 본론으로 돌아 가봅시당 :)
크리티컬섹션을 만들어주는 if문 조건 2개!
어떤 조건에 의해 만들어주는지 살펴보았습니다.
(빨간색함수와 주황색함수)
sub_403230
"alina=" ,"update="
무엇이 들어오냐에 따라 행위가 달라지는데
"alina=특정경로" 이렇게 옵션을 주면 특정경로에있는 파일을 삭제합니다.
끝낸다.
"update"
( 업데이트 경로는 카피한 바이너리 경로로 지정 )
하,,, 업데이트할때 눈으로 분석하기에는 너무 길다...
그래서 동적분석을 택함.
위의 이름 중 랜덤으로 '특수경로'에 파일을 생성합니다.
특수경로에 있는 파일에 자가 복제를 하고, 레지스트리에 자동실행을 등록합니다.
이렇게 빨간색함수가 끝나게되면 sub_403230으로 진입하는데 이건 좀이따 분석해보고
주황색함수를 먼저 보겠습니다.
sub_403230
"SeDebugPrivilege" 특권을 가지고 있는지 확인을 합니다.
[중요] SeDebugPrivilege권한이 있는지? 왜 활성화 시키는지!
"SeDebugPrivilege 권한이 있으면 다른 프로세스의 빈 영역에 코드 주입 가능"
위와 같은 이유로 권한을 확인해주고 활성화 시켜주는것 같다.
예를 들면 원격 프로세스의 TerminateProcess나 CreateRemoteThread 같은 함수를 호출하지 못한다고합니다.
악성코드가 이런 함수에 대한 권한을 획득하는 한 방법으로 접근 토큰의 권한에서 SeDebugPrivileage를 활성화한다
if문에 걸리는 함수를 살펴 봤다면
이제는 2개의 if문 안의 코드를 분석해 볼 것입니다.
sub_401040 :
xor된 값들을 전역배열에 저장
↓
sub_402fd0 :
C&C서버가 닫혀있어 분석이 어렵다.
↓
sub_403230(임계영역) :
분석하다 보면 중간 중간
이렇게 생긴 함수가 있는데 이벤트로그?라고 생각하시면 될거같습니다.
이렇게 만들어진 로그를 바탕으로 서버로 전송하나 봅니다.
( 이 정보를 0xAB랑 xor한 값을 서버로 전송 )
계속해서 분석해 보면
[참고]
어떤 악성코드는 인터넷 연결 여부를 확인하고 통신을 하는 경우도 있습니다.
그래서 'fakenet'이라는 툴을 사용할 것입니다.
fakenet이란?
악성코드가 정상적으로 인터넷이 연결되어 있다고 착각하게 만들어주는 툴입니다.
fakenet-ng를 켜준다음 계속해서 분석을 진행합니다.
한 곳만 통신하는 것이 아니라 여러 곳이랑 통신을 합니다.
그리고
인자에따라 서버로 전송하는 것들이 달라지는데........
암튼 이렇게 3개의 옵션으로 이루어져있다.
"d" : 볼륨시리얼 넘버, 유저명, 파일 경로? 간단한 정보?정도만
"l" : ldata파라미터가 붙는데 이벤트로그 포함 전송
"c" :
[*] 'someligeoas.com/whynot/sam.php'으로 클라이언트 정보 전송
[*] '208.98.63.228/forum/login.php'으로 클라이언트 정보 전송
[*] 'uipoqworkas.com/whynot/sam.php'으로 클라이언트 정보 전송
이렇게 임계영역으로 정해준 함수의 동작이 끝나게됩니다.
* 이제 70%정도 온거 같습니다 ㅠㅠ *
마지막 동작 코드입니다. while문을 돌면서 계속해서 동작을 하는데 하나씩 먼저 보겠습니다
sub404070
특정 프로세스의 페이지 영역 정보를 가지고 와서
여기서부터 삽질 좀했다 그러다가 도저히 답이 안나와 분석보고서를 찾아보았다.
먼저,
[중요] POS악성코드의 동작원리?가 메모리에 올라간 데이터드를 긁어서
신용카드 정보를 찾는 것이다.
그럼 이제 위에 함수가 이해가 되는가?
특정 프로세스에 있는 메모리를 읽어어서 신용카드 정보를 스캔하는 것이다.
[참고] 이 작업을 메모리 스크래핑이라고 한다.
이후 동작은 신용카드 스크래핑하는 과정인데
"Luhn Algorithm"을 사용한다고 한다......
이 알고리즘을 분석하는건 쫌,,
대충신용카드 정보를 긁어온다 정도? ㅎ
'Malware' 카테고리의 다른 글
HWP Malware containing COVID-19 contents By Lazarus (코로나19 악성코드) (0) | 2020.11.25 |
---|---|
FIESTA2020 Stepin-3 (매크로 악성코드) (0) | 2020.09.16 |
Codegate2020 simple_machine (0) | 2020.08.25 |
PEB를 이용한 DLL로드 (4) | 2020.08.23 |
cb-bitcoinstealer.exe (비트코인 주소를 바꾸는 악성코드) (0) | 2020.08.23 |