개요
Slow Pisces (별칭: Jade Sleet, TraderTraitor, PUKCHONG)는 북한 정부가 후원하는 사이버 위협 그룹으로, 주로 암호화폐 분야의 대규모 조직을 대상으로 공격을 감행하여 북한 정권에 수익을 창출하는 데 집중하고 있습니다. 본 보고서는 이 그룹이 최근 벌인 암호화폐 탈취 사건들과 연관되어 있다고 판단되는 캠페인을 분석합니다.
이번 캠페인에서 Slow Pisces는 LinkedIn에서 암호화폐 개발자들에게 접근하여 가짜 고용주로 위장하고, 코딩 과제로 가장한 악성코드를 전달했습니다. 개발자들은 이 과제를 실행함으로써 시스템이 감염되며, 이때 사용된 악성코드는 RN Loader 및 RN Stealer로 명명되었습니다.
이 그룹은 2023년 한 해에만 암호화폐 분야에서 10억 달러 이상을 탈취한 것으로 알려져 있습니다. 그들은 가짜 트레이딩 애플리케이션, Node Package Manager(NPM)를 통한 악성코드 배포, 공급망 공격 등 다양한 수단을 활용했습니다.
2024년 12월, 미국 FBI는 일본의 한 암호화폐 기업에서 3억 800만 달러가 탈취된 사건을 Slow Pisces의 소행으로 지목했습니다. 최근에는 두바이 암호화폐 거래소 15억 달러 탈취 사건에도 연루된 것으로 보도되고 있습니다.
팔로알토네트웍스는 관련 GitHub 및 LinkedIn 계정과 리포지토리 제거를 위해 각 플랫폼 분석가들과 위협 인텔리전스를 공유했습니다.
양사는 다음과 같은 입장을 밝혔습니다:
GitHub와 LinkedIn은 해당 악성 계정이 자사 서비스 약관을 위반한 것으로 판단해 삭제 조치를 취했습니다. 우리는 자동화 기술, 전문 조사팀, 사용자 신고 시스템을 활용하여 악성 행위자들을 탐지하고 약관을 집행합니다. 또한 시스템을 지속적으로 개선하고 있으며, 사용자들에게 의심스러운 활동을 신고할 것을 권장합니다.
추가 정보
GitHub 사용자는 Acceptable Use Policy 및 악용 및 스팸 신고 페이지에서 더 많은 정보를 확인할 수 있습니다.
LinkedIn 사용자는 스팸, 부적절한 콘텐츠 및 학대 행위 식별 및 신고 방법을 참고할 수 있습니다.
본 보고서는 Slow Pisces가 어떻게 코딩 과제에 악성코드를 은닉하고, 이후 어떤 툴을 사용하는지를 상세히 설명함으로써, 보안 커뮤니티 전체에 이 위협에 대한 더 깊은 이해를 제공하는 것을 목표로 합니다.
팔로알토네트웍스 고객은 차세대 방화벽의 Advanced URL Filtering 및 Advanced DNS Security 서비스를 통해 이 글에서 설명한 위협으로부터 더욱 확실하게 보호받을 수 있습니다.
만약 시스템 침해가 의심되거나 긴급한 보안 이슈가 있다면, Unit 42 사고 대응팀에 문의해 주시기 바랍니다.
기술적 분석
이 캠페인은 그림 1과 같이 크게 3단계로 나눌 수 있습니다.

1단계 - PDF 루어
Slow Pisces는 먼저 LinkedIn에서 채용 담당자를 사칭하여 잠재적 타깃과 관계를 맺고 그림 2와 같은 채용 정보 PDF를 보냈습니다. 공격자는 잠재적 타깃이 신청하면 질문 시트에 설명된 심각도 작업으로 구성된 코딩 과제를 제시했습니다.

우리는 Slow Pisces가 주로 암호화폐 분야에서 이러한 루어로 여러 조직을 사칭하는 것을 확인했습니다. 문제 시트에는 일반적인 소프트웨어 개발 작업과 아래 그림 3에 표시된 GitHub 리포지토리에 링크된 '실제 프로젝트' 코딩 챌린지가 포함되어 있습니다.

2단계 - GitHub 리포지토리
Slow Pisces는 GitHub 리포지토리의 프로젝트로 소위 코딩 챌린지를 목표로 제시했습니다. 리포지토리에는 열람 및 분석용 애플리케이션 등 오픈소스 프로젝트에서 전환된 코드가 포함되어 있었습니다:
- 주식시장 데이터
- 유럽 축구 리그 통계
- 기상 데이터
- 암호화폐 가격
이 그룹은 주로 Python이나 JavaScript 프로젝트를 사용하며, 지원자가 프론트엔드 개발직과 백엔드 개발직 중 어느 쪽에 지원했는지에 따라 달라질 수 있습니다. 이 캠페인에서는 Java 기반 리포지토리도 확인되었지만, 그 빈도는 훨씬 낮았으며, jCoin이라는 암호화폐 애플리케이션을 사칭한 두 개의 인스턴스만 확인되었습니다.
이러한 희소성은 공격자가 타깃이 선호하는 프로그래밍 언어를 기반으로 온디맨드 방식으로 리포지토리를 생성했을 가능성을 시사합니다. 그 결과, JavaScript와 Python 등 암호화폐 분야에서 많이 쓰이는 언어를 사용하는 경우가 많아졌습니다. 마찬가지로 다른 프로그래밍 언어에도 아직 발견되지 않은 리포지토리가 존재할 수 있습니다.
3a 단계 - Python 리포지토리
2024년 하반기, 그룹은 정규 리포지토리에서 전환한 'Stocks Pattern Analyzer'라는 제목의 그림 4와 같은 프로젝트를 사용했습니다.

리포지토리에 있는 코드의 대부분은 양성입니다. 타겟이 문제 시트에 따라 프로젝트를 실행하려고 할 때, 데이터는 3개의 원격 위치에서 수집됩니다:
- hxxps://en.wikipedia[.]org/wiki/List_of_S%26P_500_companies
- hxxps://en.wikipedia[.]org/wiki/Currency_pair
- hxxps://en.stockslab[.]org/symbols/sp500
URL 중 두 개는 Wikipedia에서 데이터를 가져옵니다. 세 번째 URL은 Slow Pisces가 관리하는 도메인을 사용합니다. 이 패턴(여러 데이터 소스를 사용하며 대부분 합법적이지만 일부는 악의적인 데이터 소스를 사용하는)은 그룹의 Python 리포지토리에서 흔히 볼 수 있는 패턴입니다.
악성 명령 및 제어(C2) 서버는 정상 소스의 형태를 모방하도록 구성되어 있습니다. 이 경우 en 서브도메인과 org 최상위 도메인(TLD)을 사용합니다.
YAML 역직렬화
Slow Pisces는 단순히 멀웨어를 리포지토리에 직접 배치하거나 Python의 내장된 eval 함수나 exec 함수를 사용하여 C2 서버에서 코드를 실행할 수 있었습니다. 그러나 이러한 기법은 수동 검사나 안티바이러스 솔루션으로 쉽게 탐지할 수 있습니다.
대신 Slow Pisces는 먼저 C2 서버가 유효한 애플리케이션 데이터로 응답하는지 확인합니다. 예를 들어, 위의 리포지토리는 S&P 500의 기업 기호 목록을 기대합니다. C2 URL은 먼저 이 데이터를 JSON 형식의 목록으로 반환합니다.
위협 행위자는 IP 주소, 지리적 위치, 시간, HTTP 요청 헤더를 기반으로 확인된 대상에게만 악성 페이로드를 전송합니다. 광범위한 피싱 캠페인과 달리 LinkedIn을 통해 접촉한 개인에게 집중함으로써 그룹은 캠페인의 후반 단계를 엄격하게 통제하고 예상 피해자에게만 페이로드를 전달할 수 있습니다.
의심스러운 eval 함수와 exec 함수를 피하기 위해 Slow Pisces는 그림 5와 같이 페이로드를 실행하는 데 YAML 역직렬화를 사용합니다.

이 코드는 HTTPS를 통해 C2 서버에서 데이터를 가져와 Content-Type 응답 헤더를 확인합니다. 헤더가 JSON 데이터(application/json)를 나타내는 경우, 코드는 JSON을 구문 분석하여 애플리케이션에 반환합니다.
응답이 YAML 데이터(application/yaml)를 나타내는 경우, 코드는 PyYAML 라이브러리의 yaml.load() 함수를 사용하여 데이터를 분석합니다. 이 함수는 본질적으로 안전하지 않으며, PyYAML 문서에서는 신뢰할 수 없는 입력에 대해 yaml.safe_load()를 명시적으로 권장합니다.
YAML은 일반적으로 아래 예시와 같은 설정 파일에 사용됩니다:
1 2 3 4 5 6 7 8 9 |
username: slow password: pisces api: key: supersecret url: example.com |
그러나 yaml.load()는 유효한 YAML 데이터뿐만 아니라 임의의 Python 객체를 직렬화 및 역직렬화할 수 있습니다. 예를 들어, 다음 Python 코드는 0-4의 숫자를 표시합니다:
1 |
range(0, 5) |
이 코드를 yaml.dump()를 사용하여 직렬화하면 다음과 같습니다:
1 2 3 4 5 6 7 |
!!python/object/apply:builtins.range - 0 - 5 - 1 |
마지막으로 이 데이터가 yaml.load()에 전달되면 원본 코드가 실행됩니다: range(0, 5).
이는 Python 리포지토리용 페이로드와 일반적으로 YAML 역직렬화를 사용하는 멀웨어가, 내장된 Python 함수를 사용하는 경우 !!python/object/apply:builtins를 포함하기 때문에 잠재적인 탐지 지점을 강조합니다.
표 1의 다음 단계는 주로 메모리에 존재하며, 일반적으로 디스크에 풋프린트가 없습니다. 커뮤니티의 탐지 및 인식을 돕기 위해 이러한 페이로드를 VirusTotal에 업로드했습니다. YAML 역직렬화 페이로드는 RN Stealer에서 관찰한 C2 토큰 형식을 기반으로 RN Loader와 RN Stealer라는 이름의 멀웨어를 실행합니다.
단계 | SHA256 해시 |
YAML 역직렬화 페이로드 | 47e997b85ed3f51d2b1d37a6a61ae72185d9ceaf519e2fdb53bf7e761b7bc08f |
RN Loader | 937c533bddb8bbcd908b62f2bf48e5bc11160505df20fea91d9600d999eafa79 |
RN Stealer | e89bf606fbed8f68127934758726bbb5e68e751427f3bcad3ddf883cb2b50fc7 |
표 1. Python 리포지토리 페이로드.
Slow Pisces의 YAML 역직렬화 페이로드는 피해자의 홈 디렉토리에 Public 폴더를 생성하고, 해당 디렉토리에 _init__.py.라는 이름의 새 파일을 생성하는 것으로 시작됩니다. 내장된 Base64 데이터는 디코딩되어 다음 감염 단계(RN 로더)가 포함된 이 파일에 기록되고 실행됩니다.
RN Loader
이 ~/Public/__init__.py에 새로 생성된 RN Loader용 파일은 실행 후 스스로 삭제되며, 메모리에만 존재하도록 합니다. 이 명령은 HTTPS를 통해 피해 컴퓨터와 운영체제에 대한 기본 정보를 en.stockslab[.] org의 동일한 C2로 기본 정보를 전송한 후, 표 2에 제시된 옵션으로 명령 루프를 실행합니다.
코드 | 설명 |
0 | 20초간 수면 |
1 | 전송된 콘텐츠를 Base64 디코딩하여 Windows의 경우 init.dll, 다른 OS의 경우 init이라는 파일에 저장합니다.
환경 변수 X_DATABASE_NAME에 빈 문자열을 설정합니다. ctypes.cdll.LoadLibrary를 사용하여 다운로드한 DLL을 로드하고 실행합니다. |
2 | 전송된 콘텐츠를 Base64로 디코딩하고, Python에 내장된 exec를 사용하여 실행합니다. |
3 | 전송된 콘텐츠와 파라미터를 Base64 디코딩합니다. 콘텐츠는 dockerd 파일에 저장되며, 파라미터는 docker-init으로 저장됩니다.
dockerd는 docker-init을 명령줄 인수로 지정한 새로운 프로세스에서 실행됩니다. |
9 | 실행을 종료합니다. |
표 2. RN Loader 명령어표.
옵션 1과 3을 사용한 표 2의 명령 루프 페이로드는 현재로서는 알 수 없으며, 특정 조건에 의해 트리거될 가능성이 높습니다. 그러나 우리는 옵션 2가 배포한 Python 기반 정보 탈취 툴을 회수했으며, 이 멀웨어를 RN Stealer로 추적하고 있습니다.
RN Stealer
RN Stealer는 먼저 임의의 피해자 ID를 생성하고, 이후 C2 서버와의 모든 통신에서 쿠키로 사용됩니다. 그리고 유출된 데이터를 암호화하기 위한 XOR 키를 서버에 요청합니다.
C2 서버와의 통신은 HTTPS로 이루어지며, 요청과 응답 유형을 식별하기 위해 Base64로 인코딩된 토큰이 사용됩니다. 분석된 페이로드에는 4종류의 토큰이 포함되어 있습니다:
- R0 - XOR 키 요청
- R64 - 데이터 유출
- R128 - 압축 데이터 유출
- R256 - 인포스틸러 완성
이러한 토큰 타입의 형식(문자 R 뒤에 정수 N이 뒤따르는 형식)이 이 페이로드의 이름으로 이어졌습니다. 페이로드를 RN Stealer, 전단계를 RN Loader라고 부릅니다.
이 RN Stealer 샘플 스크립트를 macOS 시스템에서 복원했습니다. 따라서 위협 제작자는 이 샘플을 다음과 같은 macOS 기기 관련 정보를 훔치도록 조정했습니다:
- 피해자의 기본 정보 사용자 이름, 머신 이름, 아키텍처
- 설치된 애플리케이션
- 피해자의 홈 디렉토리의 디렉토리 목록과 최상위 레벨의 내용
- macOS 시스템에 저장된 인증 정보를 저장하는 login.keychain-db 파일
- SSH 키 저장
- AWS, Kubernetes, Google Cloud용 설정 파일
RN Stealer가 수집한 데이터는 아마도 영구적인 접근이 필요한지 여부를 결정합니다. 만약 그렇다면, 이 Python의 감염 체인은 다음과 같은 단계를 거쳤을 것으로 추측할 수 있다:
- C2 서버는 알 수 없는 기준에 따라 비콘 발신자를 확인합니다. 유효한 피해자는 YAML 역직렬화 페이로드를 받게 됩니다. 잘못된 피해자는 무해한 JSON 데이터를 받게 됩니다.
- 역직렬화 페이로드는 C2 서버와 명령 루프를 설정하여 기본 피해자 정보를 유출하고, 표 2의 옵션 코드 2를 통해 맞춤형 Python 인포스틸러를 배포합니다.
- 인포스틸러는 더 자세한 피해자 정보를 수집하여 공격자가 지속적인 접근이 필요한지 여부를 판단하기 위해 사용한 것으로 보입니다.
- 지속적인 액세스가 필요한 경우 C2 서버는 옵션 코드 1 또는 3을 통해 페이로드를 전달합니다.
- 액세스 권한이 더 이상 필요하지 않은 경우, 옵션 코드 9는 악성코드의 실행을 종료하고 페이로드가 메모리에만 존재하기 때문에 모든 액세스를 제거합니다.
3b 단계 - JavaScript 리포지토리
표적이 된 피해자가 JavaScript 역할을 신청한 경우, 아래 그림 6의 예시와 같이 'Cryptocurrency Dashboard' 프로젝트를 만나게 될 수 있습니다.

이 애플리케이션에는 C2와 정식 데이터 소스가 포함된 .env 파일이 포함되어 있습니다:
- PORT=3000
- COINGECKO_API_URL=hxxps://api.coingecko[.]com/api/v3
- JQUERY_API_URL=hxxps://update.jquerycloud[.]io/api/v1
COINGECKO_API_URL 값은 암호화폐 대시보드의 데이터 수집에 사용되며, JQUERY_API_URL 값은 Slow Pisces가 제어하는 C2 서버를 나타냅니다. Python 리포지토리와 마찬가지로 JavaScript C2 서버는 검증된 대상에만 페이로드를 전달하고, 그렇지 않은 경우 버전 번호로 응답합니다.
리포지토리는 Embedded JavaScript(EJS) 템플릿 도구를 사용하여 C2 서버의 응답을 ejs.render() 함수에 전달한다.

yaml.load() 사용과 마찬가지로, 이것은 C2 서버에서 임의의 코드 실행을 숨기기 위해 Slow Pisces가 사용하는 또 다른 기법이며, 이 기법은 아마도 유효한 페이로드를 표시할 때만 드러날 것입니다.
EJS의 렌더 함수는 다양한 파라미터를 허용하는데, 그 중 하나가 view options라는 마라미터입니다. 이 중 escapeFunction 키를 통해 임의의 JavaScript 코드를 제공하고 실행할 수 있습니다.
Huli라는 아이디를 가진 대만의 연구원은, CTF 게시물에 올린 글에서 임의의 코드가 어떻게 실행되는지에 대한 기술적 세부 사항을 논의하고 있습니다. 하지만 그림 8과 같이 구조화된 페이로드가 ejs.render()에 전달되면 escapeFunction에 포함된 코드가 실행되는 것은 충분히 이해할 수 있습니다.

안타깝게도 이 페이로드를 모두 회수할 수 없었습니다. 이렇게 사용자의 홈 디렉터리 아래에 새로운 .jql 디렉터리가 생성되고, 거기에 Base64로 인코딩된 데이터가 포함된 helper.js라는 파일이 드롭되는 것으로 추측할 수 있습니다.
인프라
아래 그림 9의 타임라인은 2024년 2월부터 2025년 2월까지 캠페인에 사용된 C2 인프라의 세부 사항을 제공된 리포지토리 유형(JavaScript 또는 Python)별로 그룹화한 것입니다.

앞서 언급했듯이, 이 캠페인의 인프라 도메인은 API나 CDN과 같은 서브 도메인을 자주 사용하여 합법적인 소스의 형태를 모방할 수 있습니다. 이 글을 쓰는 시점까지 이 캠페인과 관련된 인프라를 발견했습니다.
결론
이번 보고서에서는 암호화폐 분야 개발자를 대상으로 채용 담당자를 사칭해 악의적인 코딩 챌린지를 진행하는 Slow Pisces의 최신 캠페인에 대해 알아봤습니다. JavaScript 리포지토리에 대한 전체 공격 체인을 복구할 수는 없었지만, Python 버전의 캠페인에서는 RN Loader와 RN Stealer라는 이름의 두 가지 새로운 페이로드가 전달되었습니다.
LinkedIn과 GitHub를 이렇게 사용하는 것은 특별한 일이 아닙니다. 조선민주주의인민공화국(북한) 계열의 여러 단체가 '조선민주주의인민공화국(북한)의 Alluring Pisces와 Contagious Interview등과 비슷한 수법을 사용하고 있습니다.
이 두 그룹에는 작전상 중복되는 부분이 없습니다. 그러나 이들 캠페인이 유사한 초기 감염 벡터를 사용하고 있다는 점은 주목할 만합니다.
Slow Pisces는 동종업계의 다른 캠페인과 비교했을 때 운영의 안전성이 돋보입니다. 각 단계의 페이로드 전달은 엄격하게 보호되며, 메모리 상에만 존재합니다. 또한, 이 그룹의 후기 툴은 필요한 경우에만 배포됩니다.
특히 이 그룹은 기능을 숨기기 위해 두 가지 기법을 활용했습니다:
- YAML 역직렬화
- EJS escapeFunction
이 두 가지 기술은 분석, 탐지 및 사냥을 방해합니다. 마찬가지로, 암호화폐 분야의 비교적 새로운 개발자들이나 경험이 부족한 개발자들은 이러한 리포지토리가 악의적인 것임을 식별하기 어려울 수 있습니다.
암호화폐 강도의 공개 보고서에 따르면, 이 캠페인은 매우 성공적이었으며, 2025년에도 계속될 가능성이 높다고 합니다. 이 글에서는 YAML 역직렬화와 EJS escapeFunction 페이로드의 두 가지 잠재적 탐지 가능성을 강조했지만, 가장 효과적인 완화책은 기업과 개인 기기를 엄격하게 분리하는 것입니다. 이를 통해 표적형 소셜 엔지니어링 캠페인에 의한 기업 시스템 침해를 방지할 수 있습니다.
Palo Alto Networks의 보호 및 완화
Palo Alto Networks의 고객은 다음과 같은 제품을 통해 위의 위협으로부터 보다 확실하게 보호받을 수 있습니다:
정보 유출 가능성이 있거나 긴급한 문제가 있는 경우 다음 연락처로 연락해 주시기 바랍니다. Unit 42 사고대응팀 또는 전화로 문의하세요:
- 북미 무료전화 +1 (866) 486-4842 (866.4.unit42)
- 영국: +44.20.3743.3660
- 유럽 및 중동: +31.20.299.3130
- 아시아: +65.6983.8730
- 일본: +81.50.1790.0200
- 호주: +61.2.4062.7950
- 인도: 00080005045107
Palo Alto Networks는 이 조사 결과를 사이버 위협 연합(Cyber Threat Alliance, CTA) 회원들과 공유했습니다. CTA 회원사들은 이 인텔리전스를 활용하여 고객에게 신속하게 보호 기능을 배포하고 악의적인 사이버 행위자를 조직적으로 방해하고 있습니다. 사이버 위협 동맹 Cyber Threat Alliance.
침해 지표
도메인 | IP 주소 | 첫 목격 | 마지막 목격 | 리포지토리 |
getstockprice[.]com | 70.34.245[.]118 | 2025-02-03 | 2025-02-20 | Python |
cdn[.]clubinfo[.]io | 5.206.227[.]51 | 2025-01-21 | 2025-02-19 | Python |
getstockprice[.]info | 131.226.2[.]120 | 2025-01-21 | 2025-01-23 | Python |
api[.]stockinfo[.]io | 136.244.93[.]248 | 2024-10-30 | 2024-11-11 | Python |
cdn[.]logoeye[.]net | 54.39.83[.]151 | 2024-10-29 | 2024-11-03 | Python |
ja[.]wfinance[.]org | 195.133.26[.]32 | 2024-10-12 | 2024-11-01 | Python |
ja[.]stocksindex[.]org | 185.236.231[.]224 | 2024-09-11 | 2024-10-04 | Python |
cdn[.]jqueryversion[.]net | 194.11.226[.]16 | 2024-08-23 | 2024-09-23 | JavaScript |
ja[.]stockslab[.]org | 91.103.140[.]191 | 2024-08-19 | 2024-09-12 | Python |
update[.]jquerycloud[.]io | 192.236.199[.]57 | 2024-07-03 | 2024-08-22 | JavaScript |
cdn[.]soccerlab[.]io | 146.70.124[.]70 | 2024-08-07 | 2024-08-21 | Python |
api[.]coinpricehub[.]io | 45.141.58[.]40 | 2024-05-06 | 2024-08-06 | Java |
cdn[.]leaguehub[.]net | 5.133.9[.]252 | 2024-07-15 | 2024-07-21 | Python |
cdn[.]clublogos[.]io | 146.19.173[.]29 | 2024-06-24 | 2024-07-12 | Python |
api[.]jquery-release[.]com | 146.70.125[.]120 | 2024-06-10 | 2024-06-28 | JavaScript |
cdn[.]logosports[.]net | 185.62.58[.]74 | 2024-05-08 | 2024-06-23 | Python |
skypredict[.] | 80.82.77[.]80 | 2024-05-06 | 2024-06-16 | JavaScript |
api[.]bitzone[.]io | 192.248.145[.]210 | 2024-04-25 | 2024-05-13 | Python |
weatherdatahub[.]org | 194.15.112[.]200 | 2024-04-05 | 2024-05-03 | JavaScript |
api[.]ethzone[.]io | 91.234.199[.]90 | 2024-04-16 | 2024-04-24 | Python |
api[.]fivebit[.]io | 185.216.144[.]41 | 2024-04-08 | 2024-04-14 | Python |
blockprices[.]io | 91.193.18[.]201 | 2024-03-15 | 2024-04-09 | JavaScript |
api[.]coinhar[.]io | 185.62.58[.]122 | 2024-03-26 | 2024-04-09 | Python |
mavenradar[.]com | 23.254.230[.]253 | 2024-02-21 | 2024-03-26 | JavaScript |
indobit[.]io | 146.70.88[.]126 | 2024-03-19 | 2024-03-20 | Python |
api[.]thaibit[.]io | 79.137.248[.]193 | 2024-03-07 | 2024-03-09 | Python |
chainanalyser[.]com | 38.180.62[.]135 | 2024-02-23 | 2024-03-06 | JavaScript |
기타 자료
- 북한, 15억 달러 규모의 Bybit 해킹에 연루 – 인터넷범죄신고센터(IC3)
- FBI, DC3, 경찰청, 비트코인닷컴(Bitcoin.DMM.com)에서 3억 800만 달러를 훔친 TraderTraitor로 추적된 북한 사이버 범죄자 확인 – FBI
- 보안 경고: 기술 산업 종사자를 노리는 소셜 엔지니어링 캠페인 – GitHub 블로그
- 북한, 표적형 공급망 공격에 SaaS 제공업체 활용 – Mandiant, Google Cloud