1. 개요
○ 2024.12.25. NTT Security Holdings에서 북한 위협 행위자가 Contagious Interview 캠페인*에 사용한 OtterCookie 악성코드 분석내용 일부 공개
* 2023.11.21 Palo Alto에서 명명한 IT기업에 취업을 원하는 구직자를 대상으로 하는 공격 캠페인
○ BeaverTail, Invisible Ferret을 이용해 정보 탈취 및 백도어 등을 수행하는 기존 사례*에 더해 Loader 및 새로운 유형의 악성코드를 사용한 특징 발견됨
•
새로운 유형의 OtterCookie 악성코드는 시스템 정보 탈취, 백도어, 클립보드 캡쳐 기능 수행
[그림 1] 금번 Contagious Interview 캠페인 사례 공격 흐름도
2. 대응방안
○ 링크드인, 헤드헌터 등을 통한 구직 시 취업 담당자의 신원 및 지원 회사 확인 필요
○ 화상회의 앱 설치 요구 시 안내받은 링크가 아닌 공식 사이트를 통한 다운로드 필요
○ GitHub, NPM, Bitbucket 등의 코드 저장소를 통한 파일 다운로드 시 해당 저장소 및 계정의 신뢰도 파악 필요
- 다운로드한 파일은 실제 환경이 아닌 가상 환경에서 실행하는 방법 고려
3. 악성코드 상세 분석
3.1. Contagious Interview 캠페인
○ Contagious Interview 캠페인 흐름
① 북한 위협 행위자가 익명 또는 모호한 신원의 고용주로 가장하여 SW개발자에게 접근
② 평가를 가장해 정상 사이트(Github, NPM 등)를 이용해 악성 프로젝트/패키지 파일 설치 유도
③ 악성파일 설치 시 사용자 몰래 백도어 다운로드 후 감염
악성코드 종류 | 주요 악성 행위 |
BeaverTail | 전자 지갑 탈취, 브라우저 Login Data 및 Local State 정보 탈취, 추가 페이로드(Invisible Ferret) 다운로드 |
Invisible Ferret | 시스템 정보 탈취, 위치정보 탈취, 브라우저 계정정보 탈취, 백도어, 원격제어 프로그램 설치 및 실행 |
OtterCookie | 시스템 정보 탈취, 백도어, 클립보드 캡쳐 |
[표 1] Contagious Interview 캠페인에 사용된 악성코드 종류
○ 기존에 식별된 BeaverTail 악성코드는 프로젝트/패키지 내 js 파일 자체에 숨겨진 채로 실행되는 구조였으나, 이번 공격은 프로젝트/패키지 내 Loader 형식의 악성 js 파일이 C2에 접근해 BeaverTail, OtterCookie 스크립트를 읽어와 실행하는 구조
[그림 2] BeaverTail 악성코드 실행 방식 변화 (좌: 기존, 우: 최근)
○ 이번 캠페인에서 사용된 Loader 형식의 js 파일은 [그림 3]와 같이 작성된 것으로 알려짐
•
npoint.io 사이트는 json 파일을 보관하는 저장소 사이트로 해당 사이트에 업로드된 json 파일에 cookie 값으로 저장된 악성 스크립트를 읽어와 사용
•
위 특징으로 인해 해당 파일에서 발견된 추가 악성코드를 OtterCookie로 명명한 것으로 추정
[그림 3] 추가 스크립트 로드 및 실행하는 Loader js 파일 (출처: NTT Security Holdings)
[그림 4] json 형식으로 저장된 악성 스크립트
○ js 파일이 사용된 NPM 패키지 정보는 확인 불가하여, 확보 가능한 BeaverTail, OtterCookie 악성코드에 대해 분석 진행
3.2. BeaverTail 악성코드 분석 (MD5: 01abb0b0fff83bea08eef2a1bd8cb413)
○ js 파일에서 변수 및 함수명이 잘 작성된 스크립트 중간에 가독성이 좋지 않고 심각한 난독화가 되어 있는 BeaverTail 악성코드 확인됨
○ 변수와 함수의 이름이 구분하기 힘들게 작성되어 있으며 더미 코드도 일부 작성되어 있고, 배열에 문자열들을 저장한 뒤 이를 조합해서 함수로 사용하는 방식
[그림 5] 난독화 된 BeaverTail 악성코드 일부
○ BeaverTail 스크립트 난독화 해제하여 확인 결과 [표 2]의 동작 수행
•
크로스 플랫폼(Windows, Linux, MacOS)으로 작성된 특징 발견됨
기능 | 상세 내용 |
전자 지갑 탈취 | (MacOS, Windows, Linux)
Chrome, Brave, Opera 브라우저별로 경로 설정 후 확장프로그램 내 전자지갑 정보 탈취(* 탈취 대상은 [표 3] 참고)
“~/.config/solana/id.json” 파일(블록체인 플랫폼인 Solana로 생성한 지갑의 keypair 저장소) 탈취
FireFox 브라우저는 moz-extension 폴더 내 idb를 비롯한 파일들 탈취
(Windows)
Microsoft Edge 브라우저 지갑 탈취 작업 추가 수행 |
브라우저 별 Login Data, Local State 탈취 | (MacOS)
“~/Library/Keychains/login.keychain” 파일(macOS에서 사용되는 기본 키체인 정보) 탈취
Chrome, Brave 브라우저 프로필 별 Login Data 탈취
(Windows, Linux)
Chrome, Brave, Opera 브라우저 별 Local State 및 Login Data 탈취 |
Invisible Ferret 다운로드 및 실행 | (MacOS, Windows, Linux)
C2(<IP>:1224/pdown)에서 p.zi 파일 다운로드 후 p2.zip 으로 이름 변경 및 tar –xf 명령어로 홈디렉토리에 압축해제
C2(<IP>:1224/client/<campaign_id>)에서 .npl(Invisible Ferret) 파일 다운로드 후 앞서 압축 해제한 파일 내 python.exe로 .npl 실행 |
안티 디버깅 | (MacOS, Windows, Linux)
브라우저 환경에서 console 메서드(log, warn, info, error, exception, table, trace)을 이용한 디버깅 탐지 및 방해
debugger 명령, 무한 루프 및 무한 재귀 호출 함수를 통해 분석 방해 |
[표 2] 운영체제 별 BeaverTail 악성코드 동작
브라우저 확장프로그램 ID | 확장프로그램 지갑 종류 |
nkbihfbeogaeaoehlefnkodbefgpgknn | MetaMask Wallet |
ejbalbakoplchlghecdalmeeeajnimhm | MetaMask Wallet |
fhbohimaelbohpjbbldcngcnapndodjp | Binance Wallet |
hnfanknocfeofbddgcijnmhnfnkdnaad | Coinbase Wallet |
ibnejdfjmmkpcnlpebklmnkoeoihofec | TronLink Wallet |
bfnaelmomeimhlpmgjnjophhpkkoljpa | Phantom Wallet |
aeachknmefphepccionboohckonoeemg | Coin98 Wallet |
hifafgmccdpekplomjjkcfgodnhcellj | crypto.com Wallet |
jblndlipeogpafnldhgmapagcccfchpi | kaia Wallet
(구 : kaikas Wallet) |
acmacodkjbdgmoleebolmdjonilkdbch | Rabby Wallet |
dlcobpjiigpikoobohmabehhmhfoodbb | Argent X Wallet |
aholpfdialjgjfhomihkjbmgjidlcdno | Exodus Web3 Wallet |
[표 3] 탈취 확장프로그램 지갑 목록
○ 다음 단계인 Invisible Ferret 악성코드는 C2 접근 불가로 직접적인 파일 확보 불가하나 기존 사례와 동일하게 동작하는 것으로 알려짐
•
[표 4]는 기배포문서의 “Invisible Ferret - pay 악성코드” 분석 내용 중 수정사항
번호 | 명령 | 수행 동작 |
1 | ssh_obj | shell 명령어 실행 |
2 | ssh_cmd | 실행중인 python 강제 종료 |
3 | ssh_clip | 키로깅 데이터(클립보드 포함) 전송 |
4 | ssh_run | 브라우저 계정정보 탈취를 위한 bow(brow99.py) 다운로드 및 실행 |
5 | ssh_upload | 피해자 시스템의 폴더 목록, 파일, 검색 결과 등 FTP 서버에 전송 |
6 | ssh_kill | 크롬, 브레이브 브라우저 강제 종료 |
7 | ssh_any | 원격 제어 프로그램(AnyDesk) 실행을 위한 adc(any99.py) 다운로드 및 실행 |
8 | ssh_env | (Windows) C,D,E,F,G 드라이브
(Linux, MacOS) : 각 계정별 홈디렉토리
운영체제 별로 시작 지점의 하위 폴더(node_modules 제외)를 탐색하며 환경변수 파일(.env) 업로드 |
[표 4] Invisible Ferret pay 스크립트 수행 동작
3.3. OtterCookie 악성코드 분석
○ “3.2. BeaverTail 악성코드”와 같은 파일에 작성되었으나, BeaverTail과 다른 C2와 통신하며 다른 기능을 수행하는 스크립트 확인됨
○ 해당 기능의 스크립트만 작성된 파일(MD5: 30ed90b4a570d6ff0c29759bfff491c2)이 발견되어 BeaverTail과 분리하여 분석된 것으로 추정
○ OtterCookie 악성코드는 [표 5]의 세 가지 동작을 수행함
•
소켓 통신을 통한 추가 동작의 경우 분석 시점에서는 통신이 되지 않아 분석 불가하나, 시스템 환경 정찰 및 문서, 이미지 파일 등을 조사해 암호화폐 지갑 키 탈취를 하는 것으로 알려짐
NO | 수행 동작 |
1 | 시스템 기본 정보 탈취
- OS 종류, platform, release 정보, hostname, userinfo, uid |
2 | 클라이언트-서버 소켓 통신 통해 시스템 기본 정보 탈취 및 추가 동작 수행 |
3 | clipboardy 모듈 설치 후 0.5초 간격으로 클립보드 내용 탈취 |
[표 5] OtterCookie 수행 동작
[그림 7] OtterCookie 악성코드 일부
[그림 8] 소켓 통신을 통해 실행된 추가 명령어 (출처: NTT Security Holdings)
○ OtterCookie에서 사용되는 C2 주소는 [표 6]의 세 가지 유형으로 분류 가능
주소 유형 | 사용 목적 |
<C2>/api/v2/process/<uid> | 시스템 기본 정보 탈취용 |
<C2>:5918 | 소켓 기반 메시지 송수신을 통한 명령어 실행 및 클라이언트 시스템 정보 확인 |
<C2>/api/v2/makelog | 로그 기록용 (클립보드 내용 탈취 기록 포함) |
[표 6] C2 주소 유형
○ (추가내용) 확보한 OtterCookie 악성코드 중, 초기 버전으로 추정되는 파일의 경우 소켓 통신을 통한 추가 동작 대신 하드코딩된 스크립트를 통해 암호화폐 관련 데이터 탈취 수행
•
Linux, MacOS의 경우 계정별 홈디렉토리, Windows의 경우 마운트된 디스크를 조사하여 하위 폴더를 탐색하며 [표 7]의 조건에 맞는 데이터 탈취
항목 | 내용 |
탐색 제외 폴더명 | node_modules, .vscode, .git, .next, .nvm, .local, .cache, .npm, .package.json, AppData, Windows, Program Files, ProgramData |
탐색 대상 파일 확장자 | txt, ts, js, tsx, jsx, json, csv, env, py, config, cpp |
암호화폐 관련 데이터 | 5,K,L로 시작하는 50~51자리의 영문자 및 숫자 조합 (비트코인 개인키)
64자리의 16진수 문자열 (SHA256 해시값) (이더리움 개인 키)
12자리에서 24자리 사이의 영문자열 (seed로 가능성 있는 값들) |
[표 7] 파일 탐색에 사용되는 특정 조건 목록
4. IOC 정보
NO | Type | Data | Info |
1 | MD5 | 01abb0b0fff83bea08eef2a1bd8cb413 | BeaverTail+OtterCookie (일부 난독화) |
2 | MD5 | 30ed90b4a570d6ff0c29759bfff491c2 | OtterCookie (난독화X) |
3 | MD5 | 9154c7d643e6d762dd1ab1df9125e4ea | BeaverTail+OtterCookie (난독화) |
4 | MD5 | ef13692228ee8e929c6e2e463b1ec30b | BeaverTail+OtterCookie (json, 난독화) |
5 | C2 | api.npoint[.]io/e9769067e97d0baa4d09 | |
6 | C2 | zkservice[.]cloud | |
7 | C2 | w3capi[.]marketing | |
8 | C2 | payloadrpc[.]com | |
9 | C2 | 185.235.241[.]208:1224 | |
10 | C2 | 45.128.52[.]14:1224 | |
11 | C2 | 45.159.248[.]55:1224 |
5. 참고자료
1.
Contagious Interviewが使用する新たなマルウェアOtterCookieについて : https://jp.security.ntt/tech_blog/contagious-interview-ottercookie
2.
Contagious Interview: DPRK Threat Actors Lure Tech Industry Job Seekers to Install New Variants of BeaverTail and InvisibleFerret Malware : https://unit42.paloaltonetworks.com/north-korean-threat-actors-lure-tech-job-seekers-as-fake-recruiters/
3.
北からのジョブオファー: ソフトウェア開発者を狙うContagious Interview : https://security.macnica.co.jp/blog/2024/10/-contagious-interview.html

_%EA%B3%B5%EA%B2%A9%ED%9D%90%EB%A6%84%EB%8F%84.png&blockId=181f216a-760c-8026-8c0a-ce31a25bbb11&width=3600)






