꿈을꾸는 파랑새

오늘은 김수키(Kimsuky) 대외보안 0223_주미한국대사관_비공개_정책간담회_계획안 문서로 위장한 악성코드를 분석하는 시간을 가져 보겠습니다.
파일명:(대외보안)0223_주미한국대사관_비공개_정책간담회_계획안.pdf.lnk
사이즈:1 MB
MD5:1f378c0efc13669dada1fe340c6837bd
SHA-1:215343916d101c6bbe287871816e063c78103dd1
SHA-256:a4f72ce8b5736fe3ca2083cfe21bd51697f12e900e307c357cb8523b8f86e3ec

(대외보안)0223_주미한국대사관_비공개_정책간담회_계획안 악성코드 내부 모습
(대외보안)0223_주미한국대사관_비공개_정책간담회_계획안 악성코드 내부 모습

악성코드 분석

PowerShell 
명령행 인자를 보면 긴 숫자 문자열 들이 존재하고 있음.
공백으로 구분된 숫자를 하나씩 읽어 byte[] 형태로 만듦
2차 스크립트를 평문으로 넣지 않고 숫자 배열로 숨겨 두는 방식을 사용하고 있음
2.복호화 키
고정키 문자열
Kdt&^%bgek
3.복호화 방식
키 바이트에서 +103 한 값과 비교해서 조건부로 빼는 방식을 사용하고 있음(비즈네르 암호법,Vigenère cipher)를 사용을 하고 있음
A–Z를 0–25의 수로 바꾸고, 26으로 나누어 나머지를 구하는 방법이면 대수학으로 설명해야 함 이거는 수학을 공부하시는 분들은 잘 아실 것이고. 저는 수포자 라서…….
목적은 보안 제품이나 사용자가 한눈에 PowerShell 원문을 못 보게 하는 것이지 강한 암호화가 아닙니다. (빈도분석법으로는 해결이 안 되겠지만)
4. 복호화된 스크립트 저장 및 실행
복호화된 결과를 문자열로 만들고서
%APPDATA%\firefox.ps1 에 기록
숨김 동작으로 ExecutionPolicy Bypass 옵션을 써서 실행 LNK는 실제 악성 행위를 하는 2차 PowerShell 스크립트를 다운로드 하는 드로퍼 
2차 스크립트는 시작부터 임시 폴더 경로를 만드는 동작
[void] 사용의 숨은 의도
불필요한 출력 제거

firefox ps1 내용
firefox ps1 내용

ArrayList.Add()의 특성
파워쉘에서 [System.Collections.ArrayList]의 .Add() 메서드는 항목을 추가할 때마다 해당 항목의 인덱스 번호(0, 1, 2, 3...)를 출력
해당 부분을 처리 안 했을 때: 복호화할 데이터가 1,0000개라면 콘솔 창에 0부터 9999까지의 숫자가 순식간에 출력
공격자 입장:-windowstyle hidden 옵션을 썼더라도 실행 순간에 검은 창이 잠깐이라도 보일 때 숫자가 주르륵 올라간다면 사용자가 의심하기 딱 좋은 환경 즉 나는 지금 악성코드 실행을 하고 있어요 가 됨
void 는 요렇게 시각적 증거를 완전히 지워버립니다.
요약
사용자가 의심 없이 PDF 파일인줄 알고 실행
LNK의 commandlinearguments 안에 숨겨진 PowerShell 실행
숫자 배열로 숨겨둔 2차 PowerShell 스크립트를 복호화
%APPDATA%\firefox.ps1 로 저장
powershell -windowstyle hidden -ExecutionPolicy Bypass 로 숨김 실행

firefox.ps1 분석

GitHub를 C2,배포 인프라 악용
1.TEMP에 미끼, 페이로드 저장
공문/외교/정책 문서 사칭
주미한국대사관에서 보낸 것처럼 사칭 일명 대북 관계자 분들을 노린 것을 추측이 가능
2.GitHub 토큰 및 다운로드 URL 조립
hxxps://raw(.)githubusercontent(.)com/roller-star/kimhz/main/doc(.)pdf
URL을 문자열 쪼개기로 만든 것은 단순 시그니처 탐지 회피
ghp_…. 형태의 문자열은 GitHub Personal Access Token(PAT)
3.GitHub 헤더 지정 후 파일 다운로드
지정한 헤더를 넣어 GitHub raw 콘텐츠를 받아 %TEMP%`의 PDF 이름으로 저장
Authorization="token $tkf":인증 토큰 사용
Accept="application/vnd.github(.)v3(.)raw:raw 파일 컨텐츠 수신 의도
srjidc=...:의미 없는 잡음 헤더로 보이며 분석 혼선, 패턴 회피 목적 가능
4.다운로드한 파일 실행
다운로드한 파일을 바로 실행
5.APPDATA에 YouTobe.ps1 생성
YouTube(유튜브)가 아니라 YouTobe
정상 파일처럼 보이게 하는 목적
AppData에 저장
6.3차 로더 문자열 생성
YouTobe.ps1안에는 이런 역할이 들어갔을 것 같음
GitHub에서 Sgolf.txt 다운로드

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

%APPDATA%\news.ps1로 저장
PowerShell 숨김 실행
YouTobe.ps1 는  지속성 트리거가 실행할 중간 로더
7.YouTobe.ps1 저장
위 문자열을 실제 스크립트 파일로 다운로드
저장 위치:
%APPDATA%\YouTobe.ps1
8,예약 작업 등록
예약 작업을 생성
최초 실행:5분 뒤
반복 실행:30분마다
실행 대상:%APPDATA%\YouTobe.ps1
숨김 설정: -Hidden
작업명
MicrosoftEdgeUpdateTaskMachineUAYA{7A029363-549A-4A2F-96A8-03C3ECD693f5}
정상 Microsoft 업데이트 작업 위장
정상 시스템 작업처럼 보이게 해서 관리자나 사용자가 지나치게 만듭니다.
9.즉시 후속 스크립트도 실행
예약 작업을 기다리지 않고 즉시 1회 추가 실행
여기서는 Fgolf.txt를 받아서 %APPDATA%\news.ps1로 저장하고 실행
10.자기 삭제
현재 실행 중인 스크립트 파일을 삭제합니다.

미끼 파일 대외보안 0223_주미한국대사관_비공개_정책간담회_계획안
미끼 파일 대외보안 0223_주미한국대사관_비공개_정책간담회_계획안

IOC

%TEMP%\(대외보안)0223_주미한국대사관_비공개_정책간담회_계획안.pdf
%APPDATA%\YouTobe.ps1
%APPDATA%\news.ps1
앞 단계에서 생성된 %APPDATA%\firefox.ps1
예약 직업명
MicrosoftEdgeUpdateTaskMachineUAYA{7A029363-549A-4A2F-96A8-03C3ECD693f5}
다운로드 경로
hxxps://raw(.)githubusercontent(.)com/roller-star/kimhz/main/doc(.)pdf
hxxps://raw.githubusercontent(.)com/roller-star/kimhz/main/Fgolf(.)txt
hxxps://raw(.)githubusercontent(.)com/roller-star/kimhz/main/Sgolf(.)txt
결론: 항상 조심하자~

공유하기

facebook twitter kakaoTalk kakaostory naver band