블록체인서울

블록체인서울

뉴스

2026년 8월 17일 월요일 13:57

Coldcard 코드의 버그가 수년간 간과되어 1억 달러의 해킹 피해로 이어진 이유

코인데스크

Coldcard 코드의 버그가 수년간 간과되어 1억 달러의 해킹 피해로 이어진 이유

조나단 굿맨은 비트코인을 안전하게 보관하기 위한 규칙을 따랐다.

그의 키를 보관하는 하드웨어 지갑인 Coldcard는 인터넷에 연결된 적이 없었다. 그는 그것을 안전한 금고에 보관했다. 누구에게도 공유하지 않은 시드 구문은 두 번째 금고에 보관되어 있었다. 하지만 7월 29일, 굿맨은 모든 지갑이 비워졌고, 마지막 사토시까지 도난당했다고 말했다. 토론토의 기업가는 공격 당시 18.25 비트코인, 약 117만 달러의 손실을 보고했다.

“아마도 가장 어려운 부분은 제가 모든 것을 올바르게 했다는 것입니다,” 그는 8월 1일 X 게시물에 썼다.

굿맨의 손실은 수천 명의 Coldcard 사용자에게 영향을 미친 훨씬 더 큰 해킹의 일부였다. 갤럭시 리서치에 따르면 1,596 비트코인 — 1억 달러 이상 가치 — 이 일련의 공격에서 약 7,300개의 주소에서 도난당했다고 높은 확신을 가지고 말했다. 갤럭시 리서치의 수장 알렉스 손은 8월 4일에 적어도 15명의 다른 공격자가 이 결함을 악용하고 있다고 추정했다. 그들 중 누구도 장치에 물리적으로 접근할 필요가 없었다.

하드웨어 지갑의 전체 보안 전제는 비밀이 칩을 떠나지 않는다는 것이다. 인터넷 연결이 없기 때문에 장치에 물리적으로 접근하지 않는 한 접근할 방법이 없다. 하드웨어 지갑의 물리적 특성은 사용자를 위한 자체 위험을 수반하지만 — 장치를 잘못 놓치는 것부터 무서운 공격까지 — 그들의 주요 판매 포인트는 해커와 다른 온라인 위협으로부터 안전하다는 것이다.

하지만 Coldcard의 경우, 이 보안 약속은 부족했다. 취약점은 지갑 자체에 있는 것이 아니라 사용자의 코인을 보호하는 비밀 비밀번호 또는 시드 구문이 생성되는 방식에 있었다.

지갑 101

비트코인 지갑은 다양한 형태로 제공될 수 있다. 소프트웨어 지갑, 즉 '핫 지갑'은 인터넷에 연결된 장치에서 실행되어 사용하기 쉽지만 장치가 손상되면 노출된다.

하드웨어 지갑 또는 '콜드 지갑'인 Coldcard와 같은 장치는 인터넷에 연결되지 않은 별도의 장치에 키를 보관한다. 콜드 지갑의 초기 형태 중 하나는 사용자가 지갑에 접근하는 데 필요한 키를 종이에 적어 놓는 '종이 지갑'이었다. 해커로부터 안전하지만, 이러한 지갑은 손상되거나 분실될 위험이 컸다.

하드웨어 지갑은 종이 지갑과 브라우저 기반 핫 지갑의 중간쯤에 있다. 소프트웨어보다 해킹하기 어렵고 종이보다 잃어버리기 어렵지만, 완벽하지는 않다. 분실되거나 도난당할 수 있으며, 사용자는 처음에 키를 제대로 생성할 수 있도록 장치를 신뢰할 수 있어야 한다.

“에어갭 시스템은 도움이 되지만 완벽한 해결책은 아닙니다,” TEXITcoin의 창립자 바비 그레이는 CoinDesk에 말했다. “보안은 키가 생성되는 방식에서 시작하여 보관 과정의 모든 부분을 통해 계속되어야 합니다.”

불행히도 이것이 Coldcard 지갑을 만든 Coinkite에서 문제가 발생한 곳이다.

시스템의 버그

2016년 3월, 토론토에 본사를 둔 비트코인 회사는 고객에게 호스팅 핫 지갑을 종료한다고 알렸다. 온라인 금융 서비스 회사를 운영하는 것은 서비스를 오프라인으로 전환하려는 지속적인 쓰레기 인터넷 트래픽의 홍수와 증가하는 법적 비용 및 규제 복잡성을 가져왔다.

대신 Coinkite는 다른 것을 시도하고 싶다고 말했다. 분산된 하드웨어와 '서비스로서의 소프트웨어가 아닌' 것을 구축하고 싶었다. 그것은 비트코인의 두 번째 반감기 이전, 전체 비트코인이 약 400달러 이상 거래되던 암호화폐 역사 초기였다.

Coinkite의 전환은 처음으로 2016년 4월에 Opendime을 생산했다. 작은 USB 스틱은 개인 키를 생성하고 숨겨 비트코인을 물리적 소지자 수단처럼 한 사람에서 다른 사람으로 전달할 수 있게 했다. 장치의 봉인을 물리적으로 깨면 키가 드러나고 자금을 사용할 수 있었다.

곧 Coldcard가 뒤따랐다. Coinkite는 2017년 12월에 "세계는 개방적이고 저렴하며 초보안 하드웨어 지갑이 필요하다"라는 제목으로 장치를 발표했다. 회사는 기존 하드웨어 지갑이 너무 비싸고 독점적인 동반 앱에 의존한다고 주장했다.

원래 디자인은 숫자 키패드, 화면, 보안 요소 및 MicroSD 슬롯을 결합했다. 사용자는 Coldcard와 컴퓨터 간에 서명되지 않은 거래 파일을 이동할 수 있었으며, 라이브 데이터 연결을 설정할 필요가 없었다. Coinkite 계정이나 데스크톱 애플리케이션 없이도 지갑을 사용할 수 있었다.

첫 번째 유닛은 2018년에 배송되었다. 2019년 4월에 출시된 다음 모델은 더 많은 기능을 추가했다. 업데이트된 버전마다 Coldcard는 더 복잡해지고, 이론적으로는 더 기술적으로 정교해졌다.

Coldcard의 복잡성은 매력의 일부였다. 거래 세부 정보를 검사하고 백업을 관리하며 자신의 보안 모델을 구축하려는 사용자를 위해 설계되었다.

압박 핀, 암호화된 MicroSD 백업, 다중 서명 지원 및 사용자 제공 주사위 롤을 포함한 다양한 기능은 보관을 적대적인 연습으로 취급하는 비트코인 보유자를 대상으로 했다.

Coldcard의 소스 코드는 또한 공개되었다. 사용자는 펌웨어를 검사하고 빌드를 재현하며 Coinkite의 릴리스와 비교할 수 있었다. 이러한 가시성은 비트코인 생태계의 중심 정신인 "믿지 말고 확인하라"를 강화했다.

검증을 견뎌낸 버그

사용자가 Coldcard의 코드를 검사할 수 있었지만, 실제로는 너무 깊이 들여다보지 않았다. 시드 생성 실패는 2021년 주요 소프트웨어 변경 중에 Coldcard에 들어갔고 수년간 간과되었다.

Coinkite는 펌웨어 버전 4.0.0을 "모든 새로운 코드, 동일한 훌륭한 기능"이라고 설명했다. 이 릴리스는 코드를 새로운 동등물로 대체하고 재현 가능한 빌드를 추가했으며 "switck"라는 계정에 "새로운 소스 코드 라이브러리"에 대해 감사를 표했다.

비트코인 개발자 제임스 오비어니는 “switck” 계정을 Coinkite 공동 창립자 피터 그레이의 것으로 식별했다. 그 이름으로 게시된 58개의 코드 변경 사항을 발견한 후 그레이가 자신의 이름으로 게시한 변경 사항에 사용한 것과 동일한 암호화 서명을 사용했다.

이러한 서명은 변조 방지 디지털 서명처럼 작동하여 동일한 비밀 서명 키가 두 작업 세트를 모두 승인했음을 보여준다. Coinkite는 신원 주장에 응답하지 않았다.

Switck는 libngu를 개발했으며, 이는 고객의 장치에 설치된 Coldcard 펌웨어에 통합된 재사용 가능한 코드 모음이다. 그 역할 중 하나는 지갑을 생성할 때 사용되는 무작위성을 생성하는 데 도움을 주는 것이었다.

오비어니는 5월 2025년 Coldcard의 코드를 감사하는 동안 그 과정을 의문시했다. libngu로 지갑의 무작위성의 출처를 추적한 후 Coinkite에 결함의 가능성을 제기했다.

회사는 오비어니에 따르면 실제 문제가 이미 발견되었을 가능성이 있다고 답했다. “이것은 2025년 5월에 결함의 가능성에 대한 내 보고서를 무시한 동일한 사람입니다,” 그는 나중에 피터 그레이에 대해 썼다.

무작위성은 중요하다. 새로운 지갑은 가능한 값의 엄청난 수에서 시드를 선택해야 한다. 그 선택의 예측 불가능성은 예측 불가능성의 부족을 나타내는 '엔트로피' 비트로 측정된다. 추가 비트마다 가능성이 두 배로 늘어나 시드를 추측하기 어렵게 만든다.

Coldcard는 장치 내부의 전용 하드웨어 생성기에서 그 무작위성을 얻어야 했다. 대신, 구성 오류로 인해 지갑은 장치 및 타이밍 데이터를 포함한 정보를 사용하는 더 간단한 소프트웨어 생성기로 전송되었다.

그 정보는 완전히 무작위가 아니므로 좁혀지거나 재현될 수 있어 공격자가 테스트해야 하는 시드의 수를 크게 줄였다.

간단히 말해, Coldcard의 코드는 각 지갑의 비밀을 컴퓨터가 모두 시도할 수 없는 가능성의 풀에서 선택하도록 되어 있었다. 대신, 배선 오류로 인해 더 작고 약한 소스로 전송되어 공격자가 그것을 통해 작업할 수 있는 충분한 풀을 줄였다.

어디서 잘못되었는가

오류는 두 개의 소프트웨어가 설정을 읽기 위해 통신하는 방식에 따라 발생했다고 Block의 비트코인 엔지니어링 및 보안 팀이 말했다.

설정은 Coldcard가 다른 무작위 숫자 소스를 추가한 후 하나의 소스를 끄도록 되어 있었다. Libngu는 설정이 있는지 여부만 확인했으며, 켜져 있는지 꺼져 있는지는 확인하지 않았다. 따라서 펌웨어는 잘못된 생성기를 사용하면서도 정상적으로 빌드되었다.

Block은 영향을 받은 Mk2 및 Mk3 장치가 해당 프로세스를 통해 안전한 무작위성을 받지 못했다고 말했다. Mk4, Q 및 Mk5 장치는 일부를 받았지만 소프트웨어는 작은 부분만 유지했다.

Coinkite는 이러한 최신 장치가 의도된 128 대신 72 비트의 무작위성을 가진 시드를 생성했다고 추정한다. 이는 약 72경 배 더 적은 가능한 시드를 남겼다.

Block은 취약한 코드를 2021년 3월 17일에 릴리스된 펌웨어 버전 4.0.0으로 추적했다. Coinkite는 Mk2 및 Mk3 사용자를 위한 첫 번째 영향을 받은 릴리스로 버전 4.0.1을 식별한다.

소스 코드는 공개적으로 이용 가능했다, 그리고 올바른 하드웨어 생성기는 완성된 펌웨어에 존재했다. 검토자들은 구성 요소가 존재한다는 것을 확인했지만, 시드 생성 프로세스를 처음부터 끝까지 따르고 장치가 실제로 사용한 생성기를 결정하지 못했다.

회사는 도난 전 실행한 AI 지원 검토도 오류를 놓쳤다고 말했다. 사건 후 여러 주요 AI 모델을 사용한 테스트에서도 이를 식별하지 못했다.

Coinkite는 실패에 대한 더 완전한 설명을 게시할 것을 약속했다. 영향을 받은 고객을 직접 지원하고 있다고 말했다.

회사는 CoinDesk의 논평 요청에 응답하지 않았다.

Coinkite는 영향을 받은 모든 Coldcard 모델과 릴리스 트랙에 대한 수정된 펌웨어를 출시했다. 업데이트는 향후 시드 생성을 수정하지만 취약한 소프트웨어로 이미 생성된 시드를 강화하지는 않는다.

영향을 받은 사용자는 수정된 펌웨어를 설치하고 새 시드를 생성하고 비트코인을 이동해야 한다Coinkite의 권고에 따르면.

다른 종류의 상대방 위험

Coldcard는 비트코인 사용자가 수탁자를 제거하고 신뢰해야 할 당사자의 수를 줄일 수 있다는 아이디어에 기반을 두고 있었다. 이 사건은 거래소나 은행을 상대방으로서 신뢰를 회복하지 않는다. 이는 자기 보관이 다른 의존성을 대체함을 보여준다: 사용자가 키를 보유하지만, 지갑 제조업체는 여전히 그 키가 안전하게 생성되었는지 여부를 결정한다.

조나단 굿맨의 백만 달러 비트코인 보관 키는 온라인에 연결된 적이 없는 장치 안에 안전한 금고에 있었다. 그러나 Coldcard의 시드 생성 소프트웨어의 결함으로 인해 굿맨의 재산을 물리적으로 보호하려는 노력은 아무런 차이를 만들지 못했다.

Copyrights ⓒ BLOCKCHAINSEOUL. 무단 전재 및 재배포 금지

목록