핵심 요약
- Binance가 밝힌 피해는 약 63억 4천만 달러입니다. 2026년 10월 29일(UTC)에 핫월렛에서 자산이 빠져나갔고, 11월 3일 보고서 기준 약 28억 5천만 달러가 동결되거나 차단됐습니다. FBI는 북한 소행으로 지목했습니다.
- 면접 과제 하나로 끝난 사건은 아닙니다. 6월 변조 Homebrew로 지갑 팀이 노출됐고, 9월 면접 과제가 엔지니어의 업무용 컴퓨터를 넘겼습니다. 10월 20일 공격자는 내부 AI 도구로 엔지니어 두 명을 더 장악했고, 29일 그중 한 명에게서 훔친 자격 증명으로 컨테이너를 띄웠습니다.
- 바뀐 파일은 70바이트 늘어난
pyenv였습니다. 보고서의 정상 파일 3,344바이트는 공개 소스 3,341바이트에 Homebrew 경로 치환 3바이트를 더한 값과 정확히 맞습니다. 악성본은 3,414바이트입니다.postinstall이 든 과제는npm install한 번이면 내 계정으로 돌아갑니다. 필자가 가짜 과제로 시험했더니 표식 파일이 바로 생겼고,--ignore-scripts나 네트워크를 끊은 컨테이너에서는 호스트에 표식 파일이 생기지 않았습니다.- 가장 싼 방어는 업무용 기기에서 과제를 열지 않는 것입니다. FBI는 2024년에 이미 같은 권고를 냈습니다. 지갑이나 비밀번호가 든 개인 기기도 안전하지 않으니 격리 환경을 쓰고, 회사는 노트북에 오래 쓰는 배포 토큰을 두지 않아야 합니다.
목차
- 바이낸스 해킹은 무엇이고 얼마가 나갔나
- 6월부터 10월까지: 공격은 네 단계로 이어졌다
- 면접 과제가 바꾼 파일: pyenv 70바이트
- 출금을 멈춰도 돈이 나간 이유
- 가짜 과제를 직접 실행해 보니
- 면접 과제를 받았을 때 할 일
- 회사가 고칠 곳: 토큰, 서명 경계, 내부 AI 도구, 노출된 팀
- 국내 개발자는 어디까지 걱정해야 하나
- 출처
바이낸스 해킹은 무엇이고 얼마가 나갔나
바이낸스 해킹은 2026년 10월 29일(UTC) 세계 최대 가상자산 거래소 Binance의 핫월렛(인터넷에 연결된 출금용 지갑)에서 수십억 달러가 빠져나간 사건입니다. 한국시간으로는 10월 30일 새벽 5시 5분에 첫 유출이 시작됐습니다. Binance는 11월 3일 낸 초기 보고서에서 영향을 받은 자산을 약 63억 4천만 달러로 적었습니다. 국내 보도는 이 금액을 약 8조 5천억 원으로 환산했습니다.
이 보고서는 조사 중에 나온 초기 보고서입니다. Binance도 독립 검토가 남았고 일부 기술 내용은 비공개로 둔다고 밝혔습니다. 아래 경로는 지금까지 공개된 범위입니다.
금액은 집계 주체마다 다릅니다. TRM Labs는 전송 시점의 자산 가격으로 계산했다고 밝혔습니다. 세 민간 수치의 차이를 직접 비교한 자료는 찾지 못해, 필자는 시점과 집계 범위의 차이로 봅니다.
| 집계 주체 | 금액 | 함께 적은 내용 |
|---|---|---|
| FBI 경보 | 60억 달러 이상 | 북한 소행 지목, 활동명 TraderTraitor |
| Binance 보고서 | 약 63억 4천만 달러 | 약 28억 5천만 달러 동결·차단 |
| TRM Labs | 약 63억 6천만 달러 | 10개 블록체인, 대부분 약 20분 안에 이동 |
| Elliptic | 64억 3천만 달러 | 28억 5천만 달러 동결·압수, 탈취액의 44% |
이용자 부담에 대해 Binance는 손실을 회사가 떠안겠다고 했습니다. 10월 31일 기준 영향받은 토큰 자산의 98%를 채웠고, 유동성이 낮은 나머지 자산은 사들이는 중이라고 적었습니다.
배후는 표현을 나눠서 읽어야 합니다. FBI는 10월 31일 경보에서 북한의 책임을 밝히고 이 활동을 TraderTraitor라고 부른다고 적었습니다. Binance 보고서는 FBI 정보를 인용해 북한이 책임이 있다고 적었습니다. 북한은 11월 초 김여정 담화로 이 주장을 부인했습니다.
수법의 이름도 구분해야 합니다. 'Contagious Interview'와 'Operation Dream Job'은 가짜 채용으로 악성코드를 실행시키는 북한 연계 캠페인 이름입니다. BleepingComputer와 SafeDep이 짚었듯, Binance는 이번 보고서의 직원 침해를 특정 캠페인과 연결하지 않았습니다. 수법이 닮았다는 말은 언론과 보안업계의 해석입니다.
6월부터 10월까지: 공격은 네 단계로 이어졌다
면접 과제는 네 단계 가운데 두 번째 단계입니다. Binance 보고서도 이 공격을 단일 침해나 단순 피싱이 아닌 다단계 캠페인으로 설명했습니다. 보고서는 관련자를 엔지니어 A, B, C로만 적었습니다.
6월: 공급망. 지갑 DevOps 팀의 엔지니어 A가 인기 AI 코딩 도구를 설치하려고 검색했고, 그 과정에서 변조된 Homebrew 설치본을 내려받았습니다. 보안팀은 이상을 잡아 기기를 바꾸고 관련 자격 증명을 전부 교체했습니다. 그래도 A의 역할과 지갑 인프라 팀 동료들이 공격자에게 드러났습니다.
9월: 면접. 소프트웨어 엔지니어 B는 정상적인 구직 플랫폼에서 프로젝트 디렉터를 사칭한 인물의 연락을 받았습니다. B의 프로필에는 Binance 경력이 적혀 있었습니다. 1차는 HR 담당자를 자처한 인물과 실시간 화상 면접이었고, 면접관은 개인 사진과 영상이 올라온 소셜미디어 계정을 보여 주며 신뢰를 쌓았습니다. 2차는 가상의 회사 CEO라는 인물과 채팅앱에서 진행됐습니다. 면접 막바지에 B는 "assignment"를 업무용 컴퓨터에 내려받으라는 지시를 받았고, 저장소 안의 코드는 설치 과정에서 실행됐습니다.
플랫폼 이름은 보고서에 없습니다. 포춘코리아는 링크드인으로 적었지만, 필자가 읽은 Binance 1차 자료로는 확인되지 않습니다.
10월 20일: 내부 AI 도구. 공격자는 B의 컴퓨터와 내부 AI 도구를 이용해 A와 지갑 소프트웨어 엔지니어 C를 장악했습니다. 곧이어 A의 컴퓨터에 컨테이너 배포 권한 토큰이 있다는 것을 찾아냈습니다. 보고서는 공격 기법을 나열하며 "compromised internal AI tooling"이라고 적었지만, 어떤 도구가 어떻게 침해됐는지는 설명하지 않았습니다.
10월 27일: 막았다는 발표. 보고서 시간표에는 없는 날짜지만, 필자는 나란히 놓고 볼 만하다고 판단했습니다. Crypto Briefing에 따르면 Binance는 이날 지난 한 주 동안 북한 연계 공격들을 막았다고 발표했습니다. 이때 막았다는 공격은 Contagious Interview와 연결했고, 시스템 침해도 자산 손실도 없었다고 했습니다. Binance의 1차 공지는 찾지 못해 보도로 확인했습니다.
보고서 시간표대로라면 이 발표 일주일 전에 공격자는 이미 A와 C를 장악한 상태였습니다. 수법 자체는 Binance도 경계하고 있었습니다. 보고서는 2026년에 북한 연계로 의심되는 위협 57건을 탐지해 막았고 그 수법에 가짜 면접이 들어 있다고 적었습니다. 최고보안책임자 지미 수는 7월 코인텔레그래프 인터뷰에서 직원 대상 피싱 공격을 매달 시험한다고 말했습니다.
10월 29일: 실행. 17시 15분부터 19시 56분 사이에 공격자는 C의 컴퓨터로 접속해 A에게서 훔친 자격 증명으로 컨테이너를 배포하고 악성 스크립트를 실행했습니다. 이 시각에는 시간대 표기가 없지만, 같은 보고서의 다른 시각이 UTC라 같은 기준으로 읽었습니다. 내부 지갑 서명 서비스에 무단 접근해 정상 출금 절차 밖에서 거래를 만들었습니다. 20시 5분부터 9분까지 핫월렛 다섯 개에서 XRP 2억 3,346만 개가 나갔고, 이어 SOL, OP, BTC가 빠져나갔습니다.
이 순서에서 필자가 가장 눈여겨본 대목은 엔지니어 A입니다. 6월 사고에서 Binance는 기기도 자격 증명도 바꿨습니다. 그런데 넉 달 뒤 공격자는 같은 사람을 장악했고, 그 사람의 컴퓨터에서 배포 토큰을 찾았습니다. 필자 해석으로는, 자격 증명은 교체해도 "누가 지갑 인프라를 맡는지"라는 정보는 되돌릴 수 없습니다.
면접 과제가 바꾼 파일: pyenv 70바이트
면접 과제의 악성 코드는 파이썬 버전을 관리하는 정상 개발 도구 pyenv를 악성 버전으로 바꿨습니다. Binance는 보고서에 파일 작업 목록을 그대로 실었습니다. 보고서에 macOS라는 말은 없지만, 경로가 /opt/homebrew라 필자는 맥의 Homebrew로 봅니다.
3,344바이트라는 숫자가 진짜인지 필자가 대조해 봤습니다. 보고서 경로의 버전인 pyenv v2.8.0 공개 소스의 libexec/pyenv는 3,341바이트이고 첫 줄이 #!/usr/bin/env bash인 셸 스크립트입니다. 3바이트가 모자라는 이유는 이후 버전의 Homebrew 포뮬러에 있습니다. 설치할 때 파일 안의 /usr/local(10자)을 Homebrew 경로 /opt/homebrew(13자)로 바꾸기 때문입니다.
| 파일 | 크기 | 확인 방법 |
|---|---|---|
| pyenv 2.8.0 공개 소스 | 3,341바이트 | GitHub 원본 직접 측정 |
| Homebrew 설치본(정상) | 3,344바이트 | 보고서 수치, 공개 소스 + 3바이트와 일치 |
| 악성본 | 3,414바이트 | 보고서 수치, 정상보다 70바이트 많음 |
같은 규칙을 필자 맥의 pyenv 2.4.20으로도 확인했습니다. 공개 소스는 3,184바이트, 설치본은 3,187바이트였고 diff로 비교하니 그 경로가 든 한 줄만 달랐습니다.
70바이트는 작은 숫자입니다. 악성본 내용은 공개되지 않았으니 무슨 명령이 들어갔는지는 알 수 없습니다. 보고서가 말한 것은 이 파일로 명령을 실행하고 공격자 서버와 통신했다는 점까지입니다.
왜 하필 이 파일이었는지도 보고서는 설명하지 않습니다. 다만 구조를 보면 그럴듯한 자리입니다. 필자 맥의 /opt/homebrew/bin은 로그인 계정 소유였고, 실제 파일이 있는 폴더도 sudo 없이 쓸 수 있었습니다. Homebrew FAQ도 포뮬러 빌드와 설치를 소유 계정으로 돌린다고 설명합니다. 또 pyenv 설치 안내는 ~/.zshrc에 eval "$(pyenv init - zsh)"를 넣게 합니다. 이렇게 설정한 사람은 새 터미널을 열 때마다 이 파일이 실행됩니다. 비밀번호 창 없이 바꿀 수 있고 자주 실행되는 파일이라는 뜻입니다. 이 부분은 필자의 해석입니다.
Binance는 이 코드를 "0-day malware"라고 부르며 당시 엔드포인트 보안 도구가 탐지하지 못했다고 적었습니다. 취약점 분석가 윌 도먼은 Mastodon에서 "0-day malware" 같은 것은 없다고 반박했고, 직원이 속아 악성코드를 실행한 것이라고 지적했습니다. Help Net Security도 이 발언을 전했습니다. 필자 설명을 덧붙이면, NIST 정의에서 제로데이는 아직 알려지지 않은 취약점을 노리는 공격을 가리킵니다. 보고서에는 사람이 과제를 내려받았고 설치 과정에서 코드가 실행됐다는 설명만 있고, 어떤 취약점이 쓰였다는 설명은 없습니다.
Homebrew로 pyenv를 쓴다면 설치본을 공개 소스와 비교할 수 있습니다. 이 명령은 pyenv를 실행하지 않고 폴더 이름에서 버전을 읽습니다. 다만 ~/.zshrc에 pyenv init이 있다면 터미널을 여는 순간 이미 실행됩니다. 그래서 이 점검은 예방이 아니라 사후 확인입니다.
D=$(readlink -f "$(brew --prefix)/opt/pyenv")
V=$(basename "$D"); V=${V%%_*}
H=raw.githubusercontent.com
if curl -fsSL "https://$H/pyenv/pyenv/v$V/libexec/pyenv" \
-o /tmp/pyenv.src; then
sed "s#/usr/local#$(brew --prefix)#g" /tmp/pyenv.src \
| diff - "$D/libexec/pyenv" && echo 일치
else
echo "공개 소스를 받지 못했습니다: $V"
fi
필자 맥에서는 일치가 나왔고, 없는 버전을 넣으면 공개 소스를 받지 못했습니다가 나왔습니다. 이 메시지는 변조 신호가 아닙니다. 줄 차이가 출력되면 pyenv와 터미널을 더 쓰지 말고 회사 보안팀에 알리는 편이 안전합니다. 이 명령은 pyenv 파일 하나만 봅니다. 일치한다고 컴퓨터가 깨끗하다는 뜻은 아닙니다.
출금을 멈춰도 돈이 나간 이유
공격자의 권한이 출금 시스템 밖, 블록체인 위에 있었기 때문입니다. 공격자는 서명 서비스로 EIP-7702 승인을 만들어, 자기 스마트 컨트랙트에 Binance 핫월렛의 일부 실행 권한을 넘겼습니다. EIP-7702는 일반 계정이 지정한 컨트랙트의 코드를 실행하도록 위임하는 이더리움 기능입니다.
Binance 보고서는 출금 중단만으로 모든 무단 이동을 막지 못했다고 인정했습니다. 공격자는 서명 거래 50건으로 계정 nonce(거래 순서 번호)를 조작해 위임을 심었고, 이 승인은 Binance의 출금 인프라와 따로 움직였습니다. 핫월렛이 MPC(다자간 연산) 방식이라 승인을 바로 취소할 단일 개인키도 없었습니다. Binance는 별도 절차를 만들어 취소해야 했습니다.
마지막 무단 전송인 ETH 2,961.9개는 이미 네트워크에 전파돼 대기 중이던 거래로, 23시 56분(UTC)에 확정됐습니다. 이후 추가 무단 전송은 관찰되지 않았다고 합니다. 10월 30일 0시 10분(UTC)에 Binance는 핫월렛 Binance14에서 영(0) 주소로 새 승인을 실행해 위임 코드를 지웠습니다. EIP-7702 명세도 영 주소를 승인하면 계정 코드를 비우도록 정해 두었습니다.
금액 한도만으로도 막기 어려웠습니다. 디지털자산 리스크 관리 업체 Metrika는 Binance14를 공격자에게 넘긴 거래에 전송 가치가 전혀 없었다고 지적했습니다. 그래서 금액 한도만으로는 부족하고, 서명기가 어떤 종류의 요청에 서명할지 정하는 정책도 함께 필요하다는 주장입니다.
개발자가 가져갈 교훈은 단순합니다. 차단 버튼이 듣는 범위와 공격자가 가진 권한의 범위가 같은지 사고 전에 확인해야 합니다. Binance도 사고 대응 절차, 서명 정책 범위, 핫월렛 통제를 다시 보고 있다고 적었습니다. 컨테이너 배포 권한이 어떻게 MPC 서명까지 이어졌는지는 이번 보고서에 나오지 않습니다.
가짜 과제를 직접 실행해 보니
면접 과제의 위험은 "실행하기 전에 이미 실행된다"는 데 있습니다. 보고서는 B의 과제가 어떤 언어이고 어떤 명령으로 실행됐는지 적지 않았습니다. 아래 시험은 필자가 만든 npm 예시이며 Binance 과제의 복제가 아닙니다. 필자는 표식 파일 하나만 쓰는 무해한 가짜 과제를 만들어 macOS 27.2, Node 24, npm 11.12.1에서 시험했습니다. package.json의 postinstall이 setup.js를 부르는 구조입니다.
$ MARKER_DIR=$PWD npm install
[demo] setup.js ran, wrote .../assignment-ran.txt
$ cat assignment-ran.txt
ran as <내 macOS 계정>
코드를 한 줄도 읽지 않았는데 과제 코드가 필자의 macOS 계정으로 실행됐습니다. macOS 권한 설정이 따로 막은 곳을 빼면, 그 계정이 읽을 수 있는 파일은 이 코드도 읽을 수 있습니다.
| 실행 방식 | 과제 코드 실행 | 호스트 표식 파일 |
|---|---|---|
npm install |
내 계정으로 실행 | 생김 |
npm install --ignore-scripts |
실행 안 됨 | 없음 |
| 격리 컨테이너 | 컨테이너 안에서만 실행 | 없음 |
격리 컨테이너 시험은 Docker 29.1.5와 node:24-slim 이미지로 했습니다. 과제 코드는 node 사용자로 돌았습니다. 같은 컨테이너에서 점검 명령을 돌려 보니 원본 폴더 쓰기는 Read-only file system으로 실패했고, 외부 접속은 EAI_AGAIN으로 막혔습니다. 맥의 /Users 폴더는 컨테이너 안에 없었습니다.
--ignore-scripts만 믿으면 안 됩니다. npm 문서대로 이 옵션은 패키지 스크립트 실행을 끌 뿐이고, 저장소 코드를 직접 실행하면 소용이 없습니다. Microsoft가 정리한 사례처럼 수법은 설치 밖으로 넓어졌습니다.
- 폴더 열기:
.vscode/tasks.json의runOn: folderOpen은 폴더를 신뢰하고 자동 작업을 허용하면 폴더를 열 때 작업을 실행합니다. GitLab과 엔키화이트햇이 이 수법을 분석했습니다. npm run dev: 데일리시큐가 소개한 엘라스틱 분석에서는 악성코드가 국기 SVG 파일에 나뉘어 숨어 있었고, 개발 서버를 띄울 때 작동했습니다.- Git 훅: 한 개발자는 받은 과제 안에 Git 훅이 미리 설정돼 있었다고 기록했습니다. 압축 파일로 받은 저장소는
.git/hooks까지 따라올 수 있습니다.
필자 맥에는 VS Code CLI가 없어 폴더 열기 실행은 시험하지 않았습니다. 이 부분은 공식 문서와 분석 글을 근거로 씁니다.
면접 과제를 받았을 때 할 일
순서대로 하면 위험이 줄어듭니다. 필자는 1번을 가장 중요하게 봅니다. 해커 뉴스에서 면접관 경험자는 전 직장 Zoom 면접에서 70% 이상이 회사 계정이었다고 추정했습니다. 한 사람의 어림값이고 분모도 분명하지 않으며 회사 계정이 곧 회사 기기라는 뜻도 아니지만, 업무 환경으로 면접을 보는 일이 낯설지 않다는 신호로는 읽을 수 있습니다.
- 업무용 기기에서 열지 않습니다. FBI는 2024년 공익 공고에서 회사 소유 노트북이나 기기로 채용 전 시험을 보거나 코드를 실행하지 말라고 권고했습니다. Microsoft도 이런 개발자 표적 공격의 피해가 단말 한 대를 넘어 번질 수 있다고 경고했습니다. 개인 노트북이라고 안전한 것도 아닙니다. 지갑, 비밀번호 관리자, SSH 키가 있는 기기라면 같은 이유로 피해야 합니다.
- 상대를 다른 경로로 확인합니다. FBI는 서로 연결되지 않은 별도 소통 수단으로 신원을 확인하라고 권합니다. 필자라면 회사 공식 사이트에 있는 채용 메일로 직접 물어보겠습니다. Binance 사건의 면접관은 실시간 화상 면접을 했고 개인 사진이 있는 계정까지 보여 줬습니다. 얼굴을 봤다는 사실만으로는 안심하기 어렵습니다.
- 실행 전에 텍스트로 먼저 봅니다. 숨김 폴더까지 포함해 실행 지점을 찾습니다.
.git/hooks에서는 이름이.sample로 끝나지 않는 파일을 봅니다. 필자의 가짜 과제에서는 아래 명령으로postinstall과runOn이 둘 다 나왔습니다. 아무것도 안 나와도 안전하다는 뜻은 아닙니다. 파일 안에 나뉘어 숨은 코드나 의존성 안의 코드는 이 명령으로 찾지 못합니다. - VS Code에서는 신뢰와 자동 작업 허용을 누르지 않습니다. 공식 문서는 Restricted Mode가 자동 코드 실행을 막으려는 기능이라고 설명하고, 확신이 없으면 Restricted Mode에 두라고 권합니다.
- 꼭 돌려야 하면 격리합니다. 첫 선택은 내 파일과 자격 증명이 없는 일회용 가상 머신이나 별도 기기입니다. 미국·일본·호주·독일 7개 기관의 공동 경보도 모르는 코드는 샌드박스나 가상 머신 안에서만 실행하라고 권했습니다. Docker를 쓴다면 아래처럼 두 단계로 나눕니다.
- 이미 실행했다면 숨기지 않습니다. 네트워크를 끊고 회사 보안팀에 바로 알립니다. 그 기기에 있던 토큰과 키는 지우는 것으로 끝나지 않으니 폐기하고 새로 발급합니다.
3번 명령입니다.
ls -la . .git/hooks .vscode 2>/dev/null
grep -n '"scripts"' -A12 package.json
grep -rn 'runOn\|folderOpen' .vscode 2>/dev/null
5번 명령입니다. 과제 폴더에서 실행합니다. 1단계는 네트워크를 켠 채 스크립트를 끄고 의존성만 받습니다. 2단계는 네트워크를 끊고 과제를 실행합니다.
# 1단계: 스크립트 없이 의존성만 받기
docker run --rm --read-only --tmpfs /tmp \
--cap-drop ALL --security-opt no-new-privileges --user 1000:1000 \
--mount type=bind,src="$PWD",dst=/src,readonly \
--mount type=volume,src=assignment,dst=/home/node \
-e HOME=/home/node -w /home/node node:24-slim \
sh -c 'cp -R /src/. . && npm install --ignore-scripts'
# 2단계: 네트워크를 끊고 실행
docker run --rm --network none --read-only --tmpfs /tmp \
--cap-drop ALL --security-opt no-new-privileges --user 1000:1000 \
--mount type=volume,src=assignment,dst=/home/node \
-e HOME=/home/node -w /home/node node:24-slim npm test
# 끝나면 지우기
docker volume rm assignment
필자는 의존성이 하나 있는 가짜 과제로 이 순서를 시험했습니다. 앞의 표에 적은 격리 컨테이너 시험은 의존성 없는 과제의 한 단계 구성입니다. 1단계가 끝난 뒤 2단계 테스트는 통과했고, 같은 코드의 외부 접속은 EAI_AGAIN으로 막혔습니다. 한계도 있습니다. 설치 스크립트가 꼭 필요한 패키지는 1단계에서 제대로 설치되지 않을 수 있습니다. 필자 의견으로는 컨테이너를 완전한 벽으로 여기지 말고, 그런 과제는 일회용 가상 머신으로 돌리는 편이 낫습니다.
필자 의견으로는 정상적인 회사라면 이런 확인을 문제 삼을 이유가 없습니다. 과제를 격리 환경에서 돌려도 되는지, 공식 코딩 시험 도구로 바꿀 수 있는지 물어봐도 됩니다.
회사가 고칠 곳: 토큰, 서명 경계, 내부 AI 도구, 노출된 팀
필자 의견으로는 개인이 조심해도 회사 구조가 그대로면 같은 경로가 남습니다. 해커 뉴스에서도 노트북이 뚫린다는 가정으로 시스템을 세워야 한다는 지적이 나왔습니다. 필자는 이번 사건에서 약한 고리를 네 군데로 봅니다.
노트북의 배포 토큰. 공격자는 A의 컴퓨터에서 컨테이너 배포 권한 토큰을 찾았습니다. 토큰의 수명이나 범위는 보고서에 없습니다. 29일에 쓰인 'A의 자격 증명'이 이 토큰인지도 보고서는 밝히지 않았습니다. 필자는 같은 것으로 보지만 이는 추론입니다.
KISA는 7월 자격증명 공지에서 자동 만료되는 임시 자격 증명을 쓰고 CI/CD 토큰의 권한 범위와 유효기간을 줄이라고 권고했습니다. GitHub OIDC처럼 작업 하나에만 유효한 단기 토큰을 발급하면, 개인 노트북에 배포 권한을 둘 이유가 줄어듭니다. 다만 CI로만 배포해도 끝은 아니라는 반론도 있습니다. 개발자 노트북에서 커밋이 오염되면 CI를 정상 통과할 수 있다는 지적입니다.
서명 서비스의 경계. 보고서는 컨테이너 배포가 어떻게 서명 서비스 접근으로 이어졌는지 설명하지 않습니다. 해커 뉴스에서 보험 인수 일을 한다고 밝힌 이용자는 서명 시스템에 주문을 넣는 제어 경로의 격리 부족을 핵심 잘못으로 꼽았습니다. 필자도 같은 쪽으로 봅니다. 서명 서비스에 닿는 배포와 설정 변경에는 다른 사람의 승인을 걸고, 앞서 본 거래 유형 정책을 서명 단계에 두는 편이 낫습니다.
내부 AI 도구. Binance는 이 도구와 접근 통제를 다시 구축했다고 밝혔습니다. 무엇이 잘못됐는지 단정할 수는 없습니다. 그래도 사내 AI 도구가 있는 회사라면 지금 물어볼 질문은 분명합니다. 이 도구가 다른 직원의 기기에 명령을 보내거나 접근할 수 있는지, 누가 그 권한을 쓰는지 기록되는지입니다. 호출 주체별 권한과 기록을 한곳에서 맡기는 구조는 Uber MCP 게이트웨이 글에 정리했습니다.
노출된 팀. 6월 사고 뒤 지갑 팀은 공격자가 아는 표적이었습니다. 필자 의견으로는, 침해 사고의 마무리에는 자격 증명 교체뿐 아니라 "공격자가 알게 된 사람" 목록이 들어가야 합니다. 그 사람들의 권한과 기기에는 한동안 더 강한 통제를 걸어야 합니다.
재직자의 구직 활동을 금지하는 방법은 현실적이지 않다고 봅니다. Fortra의 타일러 레구리는 Help Net Security에서 노트북에서 내려받아 실행할 수 있는 항목과 사용자 권한을 통제해야 한다고 지적했습니다. Binance도 이번에 기기 통제를 강화했다고 적었습니다. 이런 공격은 사람의 주의에만 맡기지 말고 기기 정책으로도 막아야 합니다.
개발 도구가 공격 입구가 되는 문제는 클로드 코드 확장 사고 정리에서도 다뤘습니다. 기본 통제가 금융 사고를 가른 국내 사례는 금융사 7곳 해킹 글에 있습니다.
국내 개발자는 어디까지 걱정해야 하나
필자가 보는 걱정의 기준은 플랫폼보다 프로필입니다. Binance 사건에서 B가 연락을 받은 플랫폼의 프로필에는 Binance 경력이 있었습니다. 가상자산, 금융, 인프라, 배포 권한을 다루는 사람이 경력을 공개해 두었다면 같은 조건에 놓인다고 필자는 봅니다. 프로필을 지울 필요는 없습니다. 과제를 업무용 기기로 받지 않는 습관만으로도 개인이 끊을 수 있는 가장 값싼 경로가 사라집니다.
코딩 과제로 피해를 입었다는 국내 개발자의 직접 경험담은 필자가 찾지 못했습니다. 블라인드와 네이버 카페처럼 로그인이 필요한 곳은 보지 못했으니, 없다는 뜻은 아닙니다. 원티드, 리멤버, 사람인, 잡코리아에서 코딩 과제 미끼가 쓰였다는 자료도 찾지 못했습니다. 그래서 국내 구직 플랫폼이 위험하다고 말할 근거도, 안전하다고 말할 근거도 없습니다.
같은 유형의 수법이 국내와 닿아 있다는 근거는 안랩 자료입니다.
- 안랩: 2024년 Dev.to에 공개된 채용 메일 위장 사례를 분석하면서 국내에서도 연관 로그가 확인된다고 적었습니다. 사례 자체는 해외 사례이고, 국내 로그는 설치 경로 등을 근거로 같은 사례로 추정한 것입니다.
- 안랩 ASEC: 2026년 9월 APT 동향 보고서는 가짜 채용, 기술 면접, 코딩 과제가 반복됐다고 적었습니다. 또 그달 APT 활동 전체의 무게중심이 사용자 단말 감염보다 개발자 계정, 클라우드 자격증명, 공급망, 네트워크 신뢰 인프라 장악으로 옮겨 갔다고 평가했습니다.
아래 자료는 코딩 과제를 직접 다루지 않았습니다. 2026년 7월 30일 합동 권고문은 이력서 위장 메일과 해킹된 헤드헌터 계정을 쓴 메일을 다뤘고, 공격 주체를 "국가배후 해킹조직"으로 적었습니다. KISA는 7월 16일 AI 개발도구 위장 악성코드 공지를 냈습니다. Binance 6월 사고와 미끼가 비슷하지만 두 사건을 잇는 근거는 없습니다. TJB 보도에 따르면 Microsoft 보고서는 올해 6월 위장 회사 3곳의 가짜 채용 제안과 8~9월 한국 이용자를 겨냥한 PDF 미끼 100개 이상을 적었습니다. 코딩 과제와 같은 수법인지는 확인하지 못했습니다. 거래소 쪽에서는 매일경제에 따르면 금융위원회가 11월 2일 긴급회의에서 콜드월렛 비중을 더 높이라고 당부했고, 핫월렛 승인·서명 절차와 관리자 권한을 점검했습니다.
세계 수치로는 두 가지가 참고가 됩니다. 7개 기관 공동 경보를 다룬 VOA 보도에 따르면 2025년 12월께부터 2026년 7월까지 코딩 테스트를 앞세운 공격으로 100여 개국에서 최소 3만 대가 침해됐습니다. 한국 기관은 이 경보의 공동 발표자가 아닙니다. 체이널리시스는 지난 18개월 유사한 가짜 면접 수법의 피해액을 1,430만 달러 이상으로 집계했고, 표적은 개인 지갑부터 DAO까지 다양했습니다.
출처
- Binance 보고서: binance.com/en/blog/community/3229153443759566763
- 약 8조 5천억 원: ddaily.co.kr/page/view/2026110405435518640
- FBI 경보: fbi.gov/investigate/cyber/alerts/2026/north-korea-responsible-for-6-bil…
- TRM Labs: trmlabs.com/resources/blog/north-korea-steals-usd-6-36-billion-from-bin…
- Elliptic: elliptic.co/insights/binance-largest-hack-in-history
- Help Net Security: helpnetsecurity.com/2026/11/04/binance-hack-north-korea-fake-job-interv…
- 이 주장을 부인했습니다: arabnews.pk/world/n-korea-slams-fbi-allegations-over-binance-hack-as-gr…
- BleepingComputer: bleepingcomputer.com/news/security/binance-says-fake-job-interview-led-…
- SafeDep: safedep.io/blog/binance-hack-developer-supply-chain-attack-path
- 포춘코리아: fortunekorea.co.kr/news/articleView.html?idxno=54617
- Crypto Briefing: cryptobriefing.com/binance-blocks-north-korea-cyberattacks
- 코인텔레그래프 인터뷰: cointelegraph.com/news/binance-red-teams-own-staff-every-month-to-keep-…
- pyenv v2.8.0 공개 소스: raw.githubusercontent.com/pyenv/pyenv/v2.8.0/libexec/pyenv
- Homebrew 포뮬러: raw.githubusercontent.com/Homebrew/homebrew-core/6e25177c4d4c7d3b4b52f3…
- Homebrew FAQ: docs.brew.sh/FAQ
- pyenv 설치 안내: github.com/pyenv/pyenv
- Mastodon: infosec.exchange/@wdormann/117554545205709682
- NIST 정의: csrc.nist.gov/glossary/term/zero_day_attack
- EIP-7702: eips.ethereum.org/EIPS/eip-7702
- Metrika: metrika.co/blog/binance-post-mortem-10-29-p1
- npm 문서: docs.npmjs.com/cli/v11/commands/npm-install
- 단말 한 대를 넘어 번질 수 있다: microsoft.com/en-us/security/blog/2026/02/24/c2-developer-targeting-cam…
- 자동 작업을 허용: code.visualstudio.com/docs/debugtest/tasks
- GitLab: about.gitlab.com/blog/how-to-detect-and-prevent-contagious-interview-id…
- 엔키화이트햇: enki.co.kr/media-center/blog/contagious-interview-campaign-abusing-vsco…
- 데일리시큐: dailysecu.com/news/articleView.html?idxno=207662
- Git 훅이 미리 설정돼 있었다: citizendot.github.io/articles/fake-job-interview-git-hook-malware
- 해커 뉴스: news.ycombinator.com/item?id=50366268
- 공익 공고: ic3.gov/PSA/2024/PSA240903
- 공식 문서: code.visualstudio.com/docs/editing/workspaces/workspace-trust
- 공동 경보: ic3.gov/CSA/2026/260918.pdf
- 네트워크를 끊고: docs.docker.com/engine/network/drivers/none
- 노트북이 뚫린다는 가정으로 시스템을 세워야 한다: news.ycombinator.com/item?id=50368621
- 자격증명 공지: boho.or.kr/kr/bbs/view.do?searchCnd=&bbsId=B0000133&searchWrd=&menuNo=2…
- GitHub OIDC: docs.github.com/en/actions/concepts/security/openid-connect
- CI로만 배포해도 끝은 아니라는 반론: news.ycombinator.com/item?id=50368064
- 서명 시스템에 주문을 넣는 제어 경로의 격리 부족: news.ycombinator.com/item?id=50360033
- 국내에서도 연관 로그가 확인된다: ahnlab.com/ko/contents/content-center/35819
- 2026년 9월 APT 동향 보고서: asec.ahnlab.com/ko/95882
- 합동 권고문: boho.or.kr/kr/bbs/view.do?bbsId=B0000133&menuNo=205020&nttId=72144
- AI 개발도구 위장 악성코드 공지: boho.or.kr/kr/bbs/view.do?searchCnd=&bbsId=B0000133&searchWrd=&menuNo=2…
- TJB 보도: tjb.co.kr/news05/bodo/view/id/105517
- 매일경제: mk.co.kr/article/12197610
- VOA 보도: voakorea.com/a/8207096.html
- 체이널리시스: chainalysis.com/blog/binance-hack-dprk-employment-fraud