위협 인텔리전스
엔키화이트햇
2025. 6. 19.
요약
Github를 공격 인프라로 악용해 악성코드를 유포하는 정교한 스피어 피싱 공격을 포착했다.
악성코드는 하드코딩된 Github PAT(Personal Access Token)를 이용해 비공개 리포지토리에 접근한다.
비공개 리포지토리에 저장된 로그에서 공격자가 테스트 용으로 사용하는 ip가 확인됐다.
공격에 사용된 XenoRAT C&C 서버 분석 결과, 북한 배후 공격 그룹 Kimsuky와 연관된 것으로 드러났다.
1. 개요
X에서 확인한 악성코드 분석 과정에서, 지난 2025년 3월부터 공격에 악용된 Github 계정을 확인했다.
악성코드에는 공격자의 유효한 Github PAT(Personal Access Token)이 하드코딩되어 있었고, 이 토큰을 이용하여 비공개 리포지토리에서 악성코드를 다운받고, 피해 시스템에서 수집한 정보를 비공개 리포지토리로 업로드하는 것이 확인되었다.
리포지토리에 존재하는 파일들은 악성코드와 미끼 파일, 감염 시스템 정보로 확인되었으며, 공격자가 Github를 공격 인프라로 악용한 것을 알 수 있었다.
본 글에서는 공격 인프라를 식별한 과정과 공격 흐름을 분석하고, 북한 배후 공격 그룹인 Kimsuky와의 연관성에 대하여 다룬다.
2. 공격 식별
분석 대상을 명확히 하고 정보 간의 새로운 연관성을 식별할 수 있도록 공격 인프라를 식별한 과정부터 서술한다.
2.1. Dropbox를 악용한 RAT 다운로더
처음 확인한 악성코드는 2025년 4월 7일 X에 올라온 게시글에서 확인하였다.

caption - 악성코드가 언급된 X 게시글
Powershell script 형태의 악성코드는 Dropbox에서 rtf 확장자 파일을 다운받은 뒤, 파일의 앞 7바이트를 GZIP 헤더로 덮고 압축을 해제한다. 이후 파일리스 형태로 악성코드를 실행한다.

caption - 다운받은 파일 헤더를 변경하고 압축 해제 후 실행하는 루틴
파일을 다운받는 URL은 아래와 같다.
https://dl.dropboxusercontent[.]com/scl/fi/c6ba7iwuke57d75j3mmte/eula.rtf$dropboxBaseUrl?rlkey=t0jnirhxk48xdu8p74rqgv9dw&st=oofgjsq8&dl=0
다운받는 파일은 "minam park"이라는 이름의 사용자가 업로드하였고, 3월 27일 처음 업로드된 후 지속적으로 수정되었다. 마지막 수정 일시는 2025.5.26. 오후 4:47이다.

caption - 다운받는 파일 정보
GZIP 압축 해제된 파일은 .NET 실행 파일이며 State Machine 방식으로 난독화되어 있다. dnspy로 확인한 클래스 구조는 XenoRAT와 동일하다.

caption - 악성코드에서 확인한 CodjkhioSSdieofmm 클래스

caption - XenoRAT 소스코드에서 확인한 Compression 클래스
확인된 뮤텍스 이름과 C&C 서버 주소는 아래와 같다.
뮤텍스 이름: Dansweit_Hk65
C&C 서버 주소: 158.247.230[.]196:443
2.2. Github를 악용하는 RAT 다운로더
Dropbox를 악용하는 악성코드 외에 바이러스 토탈에서 Github를 악용하는 악성코드를 확보하였다. 악성코드에 하드코딩된 Github PAT을 이용하여 비공개 리포지토리에서 악성코드를 다운받아 실행한다.
파일을 요청하는 URL은 아래와 같다.
https://raw.githubusercontent[.]com/Dasi274/star/main/xxx.rtf
https://raw.githubusercontent[.]com/luckmask/asp/main/xxx.rtf
악성코드에 하드코딩된 Github PAT은 repo scope를 가지고 있어 공격자의 모든 리포지토리에 접근할 수 있다. 이 PAT를 이용하여 공격 인프라를 식별하고 분석하였다.
3. 공격 인프라 분석
Github를 공격 인프라로 악용하는 악성코드와 관련 있는 두 계정을 확인하였으며, 두 계정 중 한 계정에 접근하여 악성코드를 다운받는다.

caption - 공격자 계정 - Dasi274

caption - 공격자 계정 - luckmask
두 계정 모두 2025년 3월에 생성되었으며, 공개 리포지토리는 없다. 분석 당시 "luckmask" 토큰은 폐기되었으며, "Dasi274" 계정 토큰은 현재까지 유효하다.
확보한 토큰은 repo scope를 가지고 있어 모든 리포지토리에 대한 읽기 및 쓰기 권한이 있다. 이는 비공개 리포지토리와 구성 요소를 모두 수집할 수 있음을 의미한다. API로 Dasi274 계정의 모든 리포지토리를 조회하면 5개의 비공개 리포지토리를 확인할 수 있다.
hole_311
hole_408
hole_409
hole_414
star
커밋 로그에서 확인한 계정 이메일 정보는 아래와 같다.
janman8907@gmail.com
각 리포지토리들은 조금씩 다른 구성을 가지고 있으며, 미끼 파일 및 피해자 정보 확인 결과 각 리포지토리가 특정 인물을 대상으로 정교하게 짜인 하나의 스피어 피싱 공격과 연계되어 있음을 파악할 수 있었다. 리포지토리 별 파일 구성은 아래 표와 같다.
caption - 각 리포지토리 구성
공격 인프라 분석 파트에서는 비슷한 유형의 리포지토리를 분류하여 정리하고, 공격 흐름과 상세한 악성코드 분석 내용은 공격 분석 파트에서 다룬다.
3.1. hole_311
3.1.1. 미끼 파일
3월 11일에 생성된 리포지토리로, tmp.docx와 tmp.pdf 두 개의 미끼 파일이 존재하지만 두 파일은 동일한 docx 미끼 파일이다. 국내 법무법인을 사칭한 채무 상환 독촉장으로 피해자 개인정보가 명시되어 있지는 않지만 상세한 채권 기록이 서술되어 있고, 지정 입금 계좌를 첨부하여 송금을 유도한다.

caption - 국내 법무법인을 사칭한 채무 상환 독촉장 미끼 파일
3.1.2. /log 폴더
로그 파일은 이름 형식에 따라 두 가지 유형으로 분류할 수 있었다. 또한 피해자 감염 로그 파일 뿐만 아니라 공격자 테스트 로그 파일 또한 존재하는 것을 확인하였다. 로그 파일 유형은 다음과 같다.
최초 감염 시 1회 실행되는 스크립트에 의해 업로드되는 로그 파일:
[ip]-[currentTime]-0956_info.txt
작업 스케줄러에 등록된 스크립트에 의해 30분 간격으로 업로드되는 로그 파일:
[ip]-[currentTime]-XXX-kkk.txt
1번 유형 로그 파일에는 악성코드가 실행되며 수집한 정보가 작성되어 있다. 수집하는 정보는 아래와 같다.
마지막 부팅 시간
윈도우 운영체제 이름, 버전, 빌드 번호, 아키텍처 정보
컴퓨터 정보
운영체제 설치 일시
현재 실행중인 프로세스 목록
2번 유형 로그 파일에는 마지막 부팅 시간만 작성되어 있다. 리포지토리에 존재하는 2번 유형의 로그 파일을 확인해보면 피해자 로그는 정확히 30분 간격으로 생성된 것을 알 수 있다.

caption - 리포지토리에 존재하는 로그 파일 목록
그러나 리포지토리에 30분 간격으로 생성되지 않은 2번 유형의 로그 파일이 존재한다. 이는 공격자가 업로드한 테스트 로그 파일로 보이며, 공격자가 사설 ip와 공인 ip를 바꿔가며 파일 업로드를 테스트한 것을 확인하였다.
10.7.185[.]68
10.33.77[.]174
80.71.157[.]55
158.247.253[.]215
192.168.35[.]35
3.1.3. /boot 폴더
hole_311 리포지토리에만 존재하는 폴더로, 감염 시스템의 키로깅 로그 파일이 존재한다. 키로깅 로그 파일에서 확인할 수 있는 정보는 아래와 같다.
실행중인 프로세스 타이틀 정보
접속 웹 페이지 타이틀 정보
키로깅 정보([LM], [Ctrl])
클립보드 기록
모두 [ip]-[currentTime]-XXX-kkk-key.txt 형식으로, log 폴더에 존재하는 피해자 감염 알림 로그 파일 이름에서 "key"가 추가되었다. 분석 당시 키로깅 로그 파일을 리포지토리에 업로드하는 악성코드가 존재하지 않아, 자세한 생성 과정은 확인할 수 없었다.
3.1.4. 원격 접속 도구
리포지토리에 저장된 eula.rtf
파일 또한 압축된 XenoRAT 파일임이 확인되었다. 뮤텍스 이름과 C&C 서버 주소는 아래와 같다.
뮤텍스 이름: Dansweit_Hk65
C&C 서버 주소: 216.244.74[.]115:80

caption - dnspy로 확인한 hole_311 리포지토리 악성코드 구조
3.2. star
3.2.1. 미끼 파일
3월 11일에 생성된 리포지토리로, 미끼 파일은 국내 법무법인을 사칭한 위임계약서 문서이다. 특정인의 개인정보가 포함되어 있으며, hole_311 리포지토리의 미끼 파일과 동일한 템플릿을 사용하여 같은 법무법인을 사칭하였다.

caption - 국내 법무법인을 사칭한 위임계약서 미끼 파일
3.2.2. /log 폴더
하나의 사설 ip 로그 파일만 존재하며, 특이한 점은 실행중인 프로세스 목록에 "xeno rat server
"가 존재한다. 이는 공격자의 테스트 로그 파일로 보이며, XenoRAT를 사용한 것을 알 수 있다. 사설 ip 주소는 아래와 같다.
10.33.77[.]174

caption - 실행중인 프로세스 목록
3.2.3. 원격 접속 도구
파일 이름은 xxx.rtf
로 앞선 eula.rtf
와 동일하게 압축 해제 시 XenoRAT가 나타난다. 뮤텍스 이름과 C&C 서버 주소는 아래와 같다.
뮤텍스 이름: Dansweit_Hk65
C&C 서버 주소: 165.154.78[.]9:443

caption - dnspy로 확인한 star 리포지토리 악성코드 구조
3.3. hole_408, hole_409, hole_414
3.3.1. 미끼 파일
각각 4월 8일, 4월 9일, 4월 14일에 생성된 리포지토리로, 미끼 파일 정보는 아래 표와 그림 참고 바란다.
caption - 각 리포지토리 미끼 파일 정보

caption - hole_409 - 교통사고 사실 확인원

caption - hole_414 – 금융감독원 계좌 사용 제한 및 이체 요청 안내
3.3.2. /log 폴더
공격자 테스트 로그 파일만 존재하며, hole_311에서 확인되지 않은 새로운 ip 주소가 확인되었다.
80.71.157[.]55
139.99.36[.]158: 새로 확인된 ip 주소
158.247.253[.]215
4. 공격 분석
분석 과정에서 확보한 스피어 피싱 메일과 실제로 악성 행위가 수행되어 피해자 정보가 업로드된 공격은 서로 다른 공격으로, 스피어 피싱 메일은 hole_414 리포지토리의 공격 사례이며, 악성코드 유포 과정은 hole_311 리포지토리에 해당한다.
전체 공격 흐름을 확인하기 위해, 이를 종합하여 공격 분석 파트를 작성하였다.

caption - 공격 개요도
4.1. 스피어 피싱 메일
공격자 테스트 로그 파일에서 확인된 ip주소 분석 결과, 158.247.253[.]215에서 스피어 피싱 메일이 발신된 것을 확인하였다. 공격자는 피해자의 법률 대리인을 사칭하였고, 피해자가 수신한 다른 이메일이 범죄에 악용되었다는 내용으로 첨부 파일 다운로드 및 실행을 유도하였다.

caption - 메일 내용
여기서 공격자가 얼마나 치밀한지 알 수 있었다. 내용은 다음과 같다.
hole_414 리포지토리 미끼 파일에서 확인한 피해자 이름과 메일에서 확인한 피해자 이름이 동일하다.
공격자는 먼저 금융감독원을 사칭하여 계좌 사용 제한 및
"이체 요청 안내"
메일을 피해자한테 전송하였다.그 다음 공격자는 위 과정(2)에서 자신이 보낸 메일이 범죄에 악용되었다는 내용의 메일을 피해자한테 전송하였다.
결국 공격자는 피해자한테 메일을 두 번 전송하였고, 두 메일 모두 악성코드 실행을 유도하기 위한 목적으로 전송한 것이다.
첨부 파일은 압축 파일로, 암호는 메일에 포함되어 있다. 첨부 파일 이름은 “이메일 사본_계좌 사용 제한 및 이체 안내.zip”으로, hole_414 리포지토리 커밋 로그에서 동일한 이름의 pdf 파일을 확인할 수 있었다.

caption - 첨부 파일 정보

caption - 이메일 사본_계좌 사용 제한 및 이체 안내.pdf 관련 커밋 로그
첨부 파일의 경우 발신자와 수신자만 다운받을 수 있어 확보할 수 없었다. 안랩의 유사 사례 보고서를 참고하였을 때 압축 파일에 포함된 파일은 파워쉘 명령어를 포함한 링크 파일 악성코드로 추정된다. 안랩 보고서에 언급된 링크 파일 실행 시 수행되는 행위는 다음과 같다.
Temp 경로에 악성코드(파워쉘 스크립트) 생성 및 실행
미끼 파일 다운로드 및 실행
악성코드(파워쉘 스크립트) 생성 및 작업 스케줄러 등록
작업 스케줄러에 등록되는 작업은, 30분마다 악성코드(파워쉘 스크립트) 실행
인포스틸러 다운로드 및 실행
4.2. onf.txt - 인포스틸러
hole_311 리포지토리에 남아있는 커밋 로그를 분석하여 작성하였다.
감염 시 처음 한 번만 다운로드되고 실행되는 파워쉘 스크립트로, 감염 시스템 정보를 수집하고 전송한다.

caption - 감염 시스템 정보 수집 루틴
%AppData%\Microsoft
경로에 [ip]-[MMdd_HHmm]-0956_info.txt
이름의 파일을 생성하고 수집한 감염 시스템 정보를 작성한다. 수집 정보는 아래와 같다.
마지막 부팅 시간
윈도우 운영체제 이름, 버전, 빌드 번호, 아키텍처 정보
컴퓨터 정보
운영체제 설치 일시
현재 실행중인 프로세스 목록
감염 시스템 정보가 작성된 파일은 Github PAT를 이용하여 공격자 비공개 리포지토리 /log 경로에 업로드된다.

caption - 파일 업로드 루틴
4.3. ofx.txt
작업 스케줄러에 의해 실행되는 악성코드가 다운로드하여 실행하는 스크립트 파일이다.
4.3.1. 마지막 커밋 시점 ofx.txt
%AppData%
경로에 [ip]-[MMdd_HHmm]-XXX-kkk.txt
형식의 파일을 생성하고 해당 파일에 마지막 부팅 시간을 작성한다. 마지막 부팅 시간이 작성된 파일은 Github PAT를 이용하여 공격자 비공개 리포지토리 /log 경로에 업로드된다.

caption - 감염 알림 로그 작성 루틴
공격자는 리포지토리에 반복해서 업로드되는 로그를 이용하여 피해자 감염 여부를 판단한 뒤에 ofx.txt
파일을 RAT 다운로더로 변경하여 감염 시스템에서 실행되게 만들었다.
30분마다 작업 스케줄러에 등록된 작업이 실행되고, 작업 스케줄러에 의해 실행되는 악성코드는 Github에서
ofx.txt
를 다운받아 실행한다. 공격자가ofx.txt
파일을 변경하면 지속적으로 원하는 파워쉘 스크립트를 실행할 수 있다.
4.3.2. 감염 직후 ofx.txt
공격자는 감염 직후 ofx.txt 파일의 스크립트를 RAT 다운로더 기능을 수행하도록 수정하였다. "hole_311" 리포지토리에서 악성코드를 다운받고 로그 파일을 업로드하지만 RAT 파일은 "star" 리포지토리에 존재하는 xxx.rtf를 다운로드하는 것이 특징이다.

caption - 감염 직후 변경된 ofx.txt 파일
4.3.3. 공격 중단 이후 ofx.txt
2025년 3월 16일 이후 더 이상 피해자 정보가 업로드되지 않자, 공격자는 테스트 로그 업로드를 3번 수행한 뒤에 eula.rtf
를 리포지토리에 업로드하였다. 테스트 로그 업로드에 사용된 ip는 아래와 같다.
10.7.185[.]68
158.247.253[.]215
192.168.35[.]35

caption - 피해자 정보 업로드 중단 이후 커밋 로그
또한 "star" 리포지토리의 xxx.rtf
가 아닌 "hole_311" 리포지토리에 업로드한 eula.rtf
를 다운받도록 수정한 스크립트를 잠시 업로드하였다. 마지막에는 oft.txt
를 최신 커밋에서 확인할 수 있는 로그 전송 스크립트로 수정하였다.
4.4. XenoRAT
최종적으로 실행되는 악성코드는 "star" 리포지토리에 존재하는 xxx.rtf
이다. "star" 리포지토리 커밋 로그를 확인하면 xxx.rtf
가 2025년 3월 11일에 처음 생성되고, 2025년 3월 21일에 파일이 변경된 것을 알 수 있다.

caption - 변경 전 커밋 로그
변경 전, 후 파일의 차이점은 아래와 같다.
변경 전 rtf: 어셈블리 이름이 "Danty"이고, 문자열이 난독화된 상태로 하드코딩되어 있다.
변경 후 rtf: 어셈블리 이름이 "Solar"이고, 문자열이 리소스 영역에서 동적으로 로드된다.
커밋 로그 순서 상 피해자에게 전달된 악성코드는 변경 전 xxx.rtf
로, 해당 악성코드를 분석하였다.
악성코드는 Github에 오픈소스로 공개되어 있는 XenoRAT 변종으로, 난독화가 적용되어 있다.

caption - Github XenoRAT 리포지토리
악성코드가 사용하는 문자열은 암호화되어 있고, 복호화 메소드를 호출하여 복호화한다. 복호화 메소드는 복잡하게 난독화되어 있지만 핵심 과정은 다음과 같다.
유니코드 문자열을 char 배열로 변환
리소스 영역에 존재하는 16바이트 키에서 [seed & 0xf] 번째 값을 가져온 뒤, seed와 or 연산하여 xor 키 생성
xor 연산으로 char 배열 복호화

caption - 복호화 메소드 루틴
문자열 복호화로 확인한 뮤텍스 이름과 C&C 서버 주소는 아래와 같다.
뮤텍스 이름: Dansweit_Hk65
C&C 서버 주소: 165.154.78[.]9
포트 정보는 IL 코드에서 정수 형태로 바로 확인할 수 있다.

caption - IL코드에서 확인한 포트 정보
5. 추가 분석
5.1. XenoRAT
C# 파일에서 GUID는 일반적으로 Visual Studio와 같은 개발 환경에서 프로젝트가 생성될 때 자동으로 생성되는 값이다. 공격자가 수정하지 않는 한 동일한 프로젝트 환경에서 컴파일되는 파일은 GUID가 모두 동일하다고 볼 수 있다. 이러한 특징을 가진 GUID 값을 이용하여, 바이러스 토탈에서 문자열 기반 검색 쿼리로 악성코드를 추가로 확보할 수 있었다. 쿼리는 아래와 같다.
content:"12DE1212-167D-45BA-1284-780DA98CF901"

caption - 본 글에서 분석한 XenoRAT GUID 값
쿼리 결과 총 4개의 악성코드를 추가 확보하였고, 모두 star 리포지토리의 XenoRAT와 GUID 외에도 문자열 암호화 방식이 동일하였다. 각 악성코드 해시와 문자열 복호화로 확인한 뮤텍스, C&C 서버 주소는 아래 표와 같다.
caption - 추가로 확보한 악성코드 정보
추가로 확보한 악성코드에서 확인된 C&C 서버 주소 101.36.114[.]190에 요청을 보내는 파워쉘 스크립트도 발견되었다.
85f5075610661c9706571a33548d7585
해당 파워쉘 스크립트는 Temp 경로에 존재하는 dose.vbs, processlist.zip, processlist.txt 파일을 삭제한다. 이때 사용되지 않는 변수에서 disk.txt, user.txt, ip.txt도 확인할 수 있다.

caption - 변수 목록
이 외에 시스템 정보를 수집하여 processlist.txt 파일에 저장한다. 수집하는 정보는 아래와 같다.
ip 정보
백신 프로그램 이름
실행중인 프로세스 목록
로컬 디스크 정보
로컬 사용자 정보
운영체제 정보

caption - 시스템 정보 수집 루틴
시스템 정보 수집 이후 txt 파일을 zip 파일로 압축한 뒤, zip 파일 데이터를 읽어 메모리에 저장한 다음 두 파일을 삭제한다. 메모리에 저장된 데이터는 base64로 인코딩되어 C&C 서버로 업로드된다.

caption - 파일 업로드 루틴
5.2. Dropbox URL
Dropbox를 악용하는 RAT 다운로더를 찾기 위해, 바이러스 토탈에서 아래 검색 쿼리를 이용하여 악성코드를 추가 확보하였다.
content:{7b5b436d646c657442696e64696e6728295d20506172616d2028} type:powershell
쿼리 결과 9개의 악성코드를 추가 확보하였고, 대부분은 파일이 삭제된 상태였다. 확보한 악성코드에서 추출한 URL 중, 현재까지 접근 가능한 URL은 없다.

caption - 추가로 확인된 파일 정보
URL 정보는 아래와 같다.
https://dl.dropboxusercontent[.]com/scl/fi/okglg167i8kuwna1m2lxm/bie70er.rtf?rlkey=473ofwk5bcqsehgyw4dxs2ibv&st=ecned2g2&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/c6ba7iwuke57d75j3mmte/eula.rtf?rlkey=t0jnirhxk48xd8p74rqgv9dw&st=oofgjsq8&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/67j5162v19rtngxkexau5/bie70er.rtf?rlkey=2kdy91rrcugaueif7aucd8b0d&st=mflxxjq7&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/ti6rphsns0xsvx1ekb02f/bie70er.rtf?rlkey=ug5wa6p2tzyq9rukv51dx4ity&st=hpuv2uwd&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/bifls0sn1nx1b52adydyn/tt7024.rtf?rlkey=le9xhv7v9clh9sof5787wl3da&st=rz6k0vgl&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/3z2lxx1aor5g82e86c6ru/panel.rtf?rlkey=zaafvohxvwgvnfv383oe1vmt5&st=umtc7teu&dl=0 https://dl.dropboxusercontent[.]com/scl/fi/nanwt6elsuxziz05hnlt4/cjfansgmlans1-x.txt?rlkey=l6gzro1rswkqbk6tinxnkuylv&st=iv78c1cg&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/hpv3jd8o9annkala8vskb/hhopp.rtf?rlkey=nmwknu8l1ormxcmvo77ehhwr8&st=y99kquph&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/bqicute746gcts2utf903/pong_race.rtf?rlkey=53r0g9f69khan7zkgzkc9ox90&st=nry1hb3s&dl=0
6. 연관성 분석
6.1. 테스트 ip 연관성
80.71.157[.]55는 거의 모든 리포지토리 로그 파일에서 확인된 ip 주소로, 공격자가 사용하는 테스트 ip 주소이다. 해당 ip 주소는 2024년도 MoonPeak 사례에서도 테스트 용도로 사용되었다. MoonPeak은 북한 배후 공격 행위자인 Kimsuky의 하위 혹은 동일 그룹으로 추정되는 UAT-5394가 운영한 캠페인이다.
6.2. 제작 환경이 동일한 XenoRAT
앞서 악성코드 추가 확보 과정에서 GUID 값을 이용하였는데, C# 파일에서 GUID는 일반적으로 Visual Studio와 같은 개발 환경에서 프로젝트가 생성될 때 자동으로 생성되는 값이다. 공격자가 수정하지 않는 한 동일한 프로젝트 환경에서 컴파일되는 파일은 GUID가 모두 동일하다.
이러한 특징을 이용하여 추가로 6개의 악성코드를 확보할 수 있었고, 공통점도 찾을 수 있었다.
6개 악성코드 중 5개 악성코드는 본 글에서 분석한 XenoRAT와 동일한 문자열 암호화 방식을 사용하였다. 5개 악성코드 해시는 아래와 같다.
0cb6e67f23ccebc3727f755be5140497
976ad041832082f2d304df12b61457cb
baf164d2a5066cab5772dc6ae4807f43
10ce9409d8d1e72ea6439bec7cd7e4cd
f51a2ccb4b9b2bf163c81b525bfac08e
나머지 1개 악성코드는 star 리포지토리에서 변경 전 xxx.rtf와 동일하게 문자열이 난독화된 후 하드코딩되어 있다.
a87659641e00d724de5662b14fe142e8
이는 동일 공격자 소행으로 볼 수 있는 근거가 되며, 아래 "네이버 피싱 공격에 사용된 C&C XenoRAT서버와" 내용이 이어진다.
6.3. 네이버 피싱 공격에 사용된 XenoRAT C&C 서버
추가로 확보한 XenoRAT(baf164d2a5066cab5772dc6ae4807f43) 중 C&C 서버 주소(158.247.202[.]109)는 네이버 피싱 사이트로 사용중이며, 북한 배후 공격 그룹인 Kimsuky가 사용하는 도메인 형식인 "p-e.kr"과 ""Million OK!!!!" 문자열이 확인되었다.

caption - C&C 서버 접속 시 나타나는 "Million OK!!!!" 문자열
네이버 피싱 사이트 접속 URL은 아래와 같다.
http://158.247.202[.]109/invoice/?wreply=&m=https%3a%2f%2fnid.naver[.]com%2fnidlogin[.]login%3furl%3dhttp%253a%252f%252fmail.naver[.]com%252f

caption - 네이버 로그인 피싱 사이트
타 보고서에서 언급된 동일 테스트 ip 주소와 XenoRAT C&C 서버가 네이버 피싱 페이지로 사용된 이력, 마지막으로 제작 환경이 동일하고 문자열 암호화 방식이 동일한 악성코드들, 이러한 특징들을 종합하였을 때 본 글에서 분석한 공격 사례의 공격자와 북한 배후 공격 그룹인 Kimsuky와의 연계되어 있음을 시사한다.
7. 대응 방안
7.1. 의심스러운 이메일 첨부 파일 다운로드 및 실행 지양
공격자는 공격 대상과 공격 시기 별로 리포지토리를 나누고, 공격 대상을 겨냥한 미끼 파일을 사용하여 치밀한 공격을 설계하였다. 공격의 정밀함은 개인 정보를 언급하고, 법무법인 등의 특정 기관 관계자를 사칭하는 이메일과 미끼 파일에서 드러난다.

caption - 공격 대상에게 전송된 이메일
따라서 전송받은 이메일에 첨부 파일 또는 링크가 포함되어 있다면, 우선 다운로드 및 실행을 삼가며 바이러스 토탈 등의 서비스에서 제공하는 파일 검사 기능을 사용하는 것 좋다.
그러나 압축 파일을 검사할 때 비밀번호가 적용되어 있으면 바이러스 토탈의 경우 정상 파일로 인식하기 때문에 출처가 불분명한 이메일의 첨부 파일은 다운로드 및 실행하지 않는 것이 가장 좋다.
8. 마치며
본 글에서는 북한 배후 공격 그룹인 Kimsuky가 Github 비공개 리포리토리를 공격 인프라로 적극 활용하는 국내 공격 사례에 대하여 분석하였다. 공격자는 공격에 사용된 악성코드를 포함하여 감염 시스템 로그 파일과 유출 정보를 Github PAT을 이용하여 비공개 리포지토리에 업로드하고 관리하였다. 본 글에서 언급한 계정 중 토큰이 만료되어 분석하지 못한 계정은 아직 사라지지 않았으며 토큰을 재발급하여 공격을 진행하고 있을 가능성도 존재한다.
또한 3월부터 현재까지 확인된 Dropbox를 악용한 XenoRAT 다운로드 URL은 약 10개에 이른다. 이는 분석된 사례 외에도 수많은 스피어 피싱 공격이 지속적으로 수행되고 있음을 시사한다.
공격자는 악성코드 감염을 위해 더욱 치밀하고 정교한 공격을 수행하고 있다. 사용자는 출처가 불분명하거나 분명하여도 신뢰할 수 있는지 다시 한번 확인하고, 보안 솔루션 또는 바이러스 토탈과 같은 서비스를 이용하여 악성코드인지 사전에 검사하는 것이 필요하다.
9. 부록
부록 A. MITRE ATT&CK
caption - MITRE ATT&CK
부록 B. IOCs
md5
a56edfef94008c77abfb4e151df934d9
30d5f17d5e3f85be18220a7cab0b9fff
5e9a80d3d4f71ecd8bf8e579a5e2449c
f692c1dd797f68c34744a377482c4ed4
b77e4e9f5897f00dcbd08b2ee9bde7e8
74b1d5f857a4245aef8189ac4f409a99
6cbc007799b56682ac196e44d79e496d
a9d80e7fe3f217ea4d33f8a4a0f3f73c
57015267d06b0d80721015ccd29a04cd
5076c579e378f976a57e862e5b6a7859
45ed6abfc12be606bdbcfe76bd17b2af
b36159563452d9a837a5e566ad2a1e44
522a122f3cd4c488a51d81c846bfabbb
c2f88038d431bb190454fae02225e639
d0a8cd7584547bdb2959f0d1008e6871
b13ffe7b8e351291250f1a3a855134aa
1dee4c60fffcc80eb4bbd523eedab2f4
8c84d7f559cf0947fbf1981a0acb8a35
acd2d728ee4d1110521524c1eac6204e
157d1b1798f0f370a95125253e039c18
b99c1d9bf70be5172a8b36b098c67ee5
8c561a53085651d7f47b24129c2cd2d0
7df07ecb0b516df085a5ee95ed8e6560
af999c3c615b56691d75e8c877e185fb
5be0527f5c84208371761cee852f0d7c
f51a2ccb4b9b2bf163c81b525bfac08e
10ce9409d8d1e72ea6439bec7cd7e4cd
a87659641e00d724de5662b14fe142e8
1808bd4919c5943096a4a19784d6b8de
C&C
80.71.157[.]55
139.99.36[.]158
158.247.253[.]215
165.154.78[.]9
141.164.41[.]17
118.194.249[.]201
158.247.202[.]109
45.61.161[.]103
101.36.114[.]190
216.244.74[.]115
158.247.230[.]196
Dropbox URL
https://dl.dropboxusercontent[.]com/scl/fi/okglg167i8kuwna1m2lxm/bie70er.rtf?rlkey=473ofwk5bcqsehgyw4dxs2ibv&st=ecned2g2&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/c6ba7iwuke57d75j3mmte/eula.rtf?rlkey=t0jnirhxk48xd8p74rqgv9dw&st=oofgjsq8&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/67j5162v19rtngxkexau5/bie70er.rtf?rlkey=2kdy91rrcugaueif7aucd8b0d&st=mflxxjq7&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/ti6rphsns0xsvx1ekb02f/bie70er.rtf?rlkey=ug5wa6p2tzyq9rukv51dx4ity&st=hpuv2uwd&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/bifls0sn1nx1b52adydyn/tt7024.rtf?rlkey=le9xhv7v9clh9sof5787wl3da&st=rz6k0vgl&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/3z2lxx1aor5g82e86c6ru/panel.rtf?rlkey=zaafvohxvwgvnfv383oe1vmt5&st=umtc7teu&dl=0 https://dl.dropboxusercontent[.]com/scl/fi/nanwt6elsuxziz05hnlt4/cjfansgmlans1-x.txt?rlkey=l6gzro1rswkqbk6tinxnkuylv&st=iv78c1cg&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/hpv3jd8o9annkala8vskb/hhopp.rtf?rlkey=nmwknu8l1ormxcmvo77ehhwr8&st=y99kquph&dl=0
https://dl.dropboxusercontent[.]com/scl/fi/bqicute746gcts2utf903/pong_race.rtf?rlkey=53r0g9f69khan7zkgzkc9ox90&st=nry1hb3s&dl=0
Mutex
Dansweit_Hk65
Cheetah_0716
janman8907@gmail.com
.NET Assembly GUID
12DE1212-167D-45BA-1284-780DA98CF901