꿈을꾸는 파랑새

오늘은 Kimsuky(김수키) 에서 만든 악성코드인 작물보호제 공급 검토 품목 제안서.lnk 에 대해서 알아보겠습니다.
일단 미끼 PDF 파일은 한국의 작물보호제, 농약 제조, 수입, 유통 업체의 영업, 구매, 조달, OEM 담당자 즉 국내 농화학 업계 대상으로 한 것으로 추측됩니다.
북한 해커 집단이 김수키(Kimsuky)에서 탈취를 하려고 하는 목적은 다음과 같이 추측을 할 수가 있습니다.
작물보호제 제품 기술자료: 제형 설계자료, 제품 규격, 제조·품질관리 관련 내부 문서, 안정성 자료
연구개발 자료: 신규 유효성분 검토자료, 혼합제 개발계획, 시험 결과, 저항성 대응 연구
등록 인허가 자료:약효·약해 시험, 잔류시험 독성·안전성 자료, 작물별 등록 자료
생산기술: 생산공정 문서, 품질관리 기준, 원료 규격, 생산설비 관련 정보
OEM·공급망 정보: 원제 공급업체, OEM 업체, 생산능력, 조달가격, 납기, 거래조건
시장정보: 어떤 성분의 수요가 높은지 어느 병해충 대응 제품이 많이 판매되는지 앞으로 출시 예정 제품 
이를 통해서 북한 내 농화학 제품의 자체 개발, 생산 역량을 보완하려는 산업, 기술정보 수집 가능성 쪽이 매우 높지 않을까? 생각이 듬
파일명: 작물보호제 공급 검토 품목 제안서.lnk
사이즈:1 MB
MD5:d555e46e36e34da5779145fa8ae8bed9
SHA-1:5b03dd1ece961e28febcfcb582ca58edd39da526
SHA-256:625f912f4bdb5df0f2584f6b162c8602e5bb756b4853b94a12b9b9dadc25b915

악성코드 에 포함된 Powershell 코드
악성코드 에 포함된 Powershell 코드

악성코드 분석

정상 PDF를 미끼로 포함하고 별도의 XOR 난독화를 사용을 하는 악성코드임
0x00000000~0x00001739
LNK 구조+악성 명령
x0000173A~0x0000FF17
미끼 PDF:59,358 bytes
0x0000FF18~0x00010B95
XOR 0xBF 페이로드:3,198 bytes
1.0x173A로 이동
offset:0x173A
length:0xE7DE
NET String.Replace()는 일치하는 문자열을 모두 치환하기 때문에 작물보호제 공급 검토 품목 제안서.pdf 이라는 미끼 파일 생성 후 사용자에게 보여주는 동시에 악성코드 실행

악성코드 실행 시 생성 되는 PDF 문서
악성코드 실행 시 생성 되는 PDF 문서

PowerShell의 call operator & 때문에 정상적으로 악성코드 실행을 했어도 PDF 가 정상적으로 보이지 않는 경우 발생을 할 수가 있고 그냥 분석을 한다고 하면 추출을 해서 보는 것이 편함
2. 악성코드 실행
0xFF18 이동을 해서 0xC7E바이트를 읽어들임
그러면 다음 복호화 공식을 사용할 것임
decoded[i] = encoded[i] XOR 0xBF
AV,정적 시그니처 우회를 위한 난독화 을 위한 작업
3.XOR 압축 아카이브
복호화 결과
C:\ProgramData\Intel_R\joysun08
로 사용이 되면 pack_free.js 부분이 존재
4.악성코드 설치 와 은닉
C:\ProgramData\Intel_R
C:\ProgramData\vc_lib
생성 한후 Intel_R,vc_lib라는 이름도 일반 사용자에게 Intel/Visual C++ 관련 정상 구성요소처럼 보이게 하려는 목적은
5. 감염 환경별 JavaScript 이름 생성
UUID 를 가져 와서 5AAC4544-2048-3810-5035-ABF02F4CF732 같이 생성
그와 동시에 WinSch_5AAC4544-2048-3810-5035-ABF02F4CF732 작업 스케줄러에 강제 등록 
현재시간 기준+1분 16분마다 반복 해당 악성코드 실행

작업 스케줄러 에 등록된 악성코드
작업 스케줄러 에 등록된 악성코드


그리고 삭제

pack_free.js 분석

그러면 pack_free.js를 분석을 해야 하는데 해당 부분은 난독화 돼 있고 여기서 파이썬의 도움을 받으면 됩니다.
그러면 다음과 같이 난독화 해제를 할 수가 있을 것이면 분석을 하면 다음과 같이 됩니다.
시스템에 미리 배치된 PowerShell 스크립트인 C:\ProgramData\vc_lib\advpackx.ps1의 존재 여부를 확인하고 이를 숨겨진 상태로 실행하는 로더 역할
XOR 키: 82사용
WScript.Shell.Run(..., 0, 1)을 사용하므로 PowerShell 창은 숨기고 나서 JavaScript는 PowerShell 종료까지 대기
오류는 try/catch로 모두 무시하게 처리한 상태

pack free js 내용
pack free js 내용

advpackx.ps1 분석

1./Agri_(10자리 호스트 ID)
예를 들어 내부적으로는 /Agri_a1b2c3d4e5 와 같은 형태가 되고 WMI 정보 수집 중 하나라도 예외가 발생하면 식별자는 aaaabbcc 로 대체 해 버림
피해 시스템마다 별도의 C2 공간을 할당하는 방식을 사용하고 있음
2.Drop box를 C2로 사용
Dropbox OAuth refresh token, client ID, client secret이 하드코딩되어 있으며 GoATK  함수는 해당 부분을 이용해 OAuth endpoint에 접근 새로운 access token을 발급받는 공격 방식을 사용
장기간 사용할 수 있는 refresh token을 스크립트 내부에 넣어두면서 실행 때마다 실제 Dropbox API 호출에 사용할 Bearer access token을 얻는 구조로 악성코드는 만들어져 있음
제공된 코드에 포함된 OAuth 자격증명은 분석 관점에서는 중요한 IOC이자 공격자 인프라 접근 자격증명 이게 되고 실제 운영 중인 계정의 값이라면 이미 노출된 것으로 간주하고 폐기시켜야 함
3. 정보 수집
gpi  함수가 초기 시스템 정보를 수집
외부 IP 주소
208(.)67(.)222(.)220 주소는 코드에서 각각 산술식으로 나누어 생성되며 이를 통해 피해 시스템이 인터넷에서 공인 IP로 보이는지 파악하려는 의도
운영체제 정보를 가져 수집

advpackx ps1 내용
advpackx ps1 내용

System.Environment의 OS Version 속성을 reflection 형태로 가져옴
3. 실행 중인 프로세스 목록 수집
공격자는 피해 시스템에서 실행 중인 보안 제품, 업무 프로그램, 브라우저, 관리 프로그램 등의 존재를 파악할 수 있게 되면 환경 변수에서 사용자 도메인과 사용자 이름을 가져와 호스트의 사용자 정보를 기록하려는 의도가 확실히 보임
OS 정보
암호화된 IP
사용자/도메인 정보
암호화된 프로세스 목록
4. 수집 데이터 암호화
내부 알고리즘을 보면 RC4 스트림 암호 구현
먼저 0~255 배열을 만들고 키를 사용하고 있으며 이후 동작은 PRGA(Pseudo-Random Generation Algorithm)를 통해 keystream을 생성 및 XOR 처리
사용되는 키:
"Se!cure32"
이거는 재탕
암호화 결과에는 다시 Base64 인코딩이 적용함
업로드되는 IP 주소와 프로세스 목록
원문->RC4(key="Se!cure32")->Base64
5.정보 유출
HoOoUo 함수는 수집한 데이터를 임시 파일로 저장하고 Dropbox로 업로드
hxxps://content(.)dropboxapi(.)com/2/files/upload
원격 파일 경로에는 피해 시스템 식별자와 시간이 포함을 시킴
실행 시점 할 때 피해 시스템의 상태를 별도 TXT 파일 형태로 Dropbox에 업로드 하는 구조 임
같은 이름이 충돌하면 Dropbox 새로운 이름으로 저장을 하는 것이 목적

advpackx 난독화 해제
advpackx 난독화 해제

업로드를 마치면 로컬 임시 파일은 삭제

전체적으로 정리
작물보호제 공급 검토 품목 제안서.lnk->cmd.exe->SysWOW64 PowerShell->LNK 내부 미끼 PDF 추출 및 실행->XOR 0xBF 추출->archive 압축 해제->pack_free.js 실행->
WinSch_(UUID) Scheduled Task 생성(약 16분 반복)->
JavaScript XOR 0x52 복호화->C:\ProgramData\vc_lib\advpackx.ps1->Dropbox OAuth access token 획득->시스템 정보 수집->Dropbox로 정보 유출->피해자별 _cafe 파일 확인->
BAT 다운로드->
_cafe_buy 로 원격 파일명 변경->숨겨진 BAT 실행->120초 뒤 BAT 삭제
IOC
content(.)dropboxapi(.)com/2/files/upload
content(.)dropboxapi(.)com/2/files/download
api(.)dropboxapi(.)com/2/files/move_v2
api(.)dropboxapi(.)com/oauth2/token
208(.)67(.)222(.)220
C:\ProgramData\vc_lib\advpackx.ps1
C:\ProgramData\Intel_R\joy_(ID).js
%TEMP%\cafebucket.bat
요약
피해 시스템을 하드웨어 기반으로 고유 식별
공인 IP,OS 정보, 사용자 정보, 실행 프로세스를 수집
일부 수집 정보를 RC4+Base 64로 인코딩하고 Dropbox에 업로드
Dropbox의 피해자별 _cafe 파일을 명령으로 받아 BAT로 실행
별도의 악성 C2 도메인을 운영하지 않고 Dropbox API를 C2 인프라로 악용하고 있으며 정상 dropboxapi(.)com HTTPS 트래픽 속에 명령, 제어 및 정보 유출을 숨기려는 목적은
아무튼, 해당 악성코드는 농약, 농자재 공급, 구매, 조달, 영업, 품목 선정 업무를 담당하는 실무자 등 즉 해당 업체들과 기관들 전수 조사가 필요
私見 분명히 밝힌 분 악성코드 감염이 돼 있을 것이고 탐지했더라도 작업 스케줄러에서는 아직도 흔적이 남아 있을 확률이 매우 높다고 생각이 듦

공유하기

facebook twitter kakaoTalk kakaostory naver band