콜드카드 펌웨어 결함, 594비트코인 25분 만에 털렸다
콜드카드 펌웨어 결함, 594비트코인 25분 만에 털렸다 / AI 생성 일러스트(삽화)

캐나다 토론토에 본사를 둔 코인카이트(Coinkite)가 만든 하드웨어 지갑 콜드카드(Coldcard)에서 대규모 비트코인 도난 사고가 발생했다. 코인카이트는 7월31일(현지시각) 약 500개의 단일서명 지갑에서 594비트코인(약 3800만달러 상당)이 빠져나간 사실을 공식 확인했다. 탈취는 UTC 기준 오전 1시31분부터 1시56분까지, 25분이라는 짧은 시간에 이뤄졌다. 원인은 2021년 3월 배포된 펌웨어부터 존재했던 결함으로, 지갑의 무작위 시드(seed)를 만드는 하드웨어 난수 생성기가 예측 가능한 소프트웨어 대체값으로 바뀌어 있었기 때문이다. 코인카이트는 처음에는 Mk3 모델만 영향받는다고 밝혔지만, 이후 기술 분석을 통해 현재 판매 중인 모든 모델이 정도의 차이로 영향받는다고 정정했다.

25분 만에 500개 지갑 턴 공격, 어떻게 벌어졌나

에이커워치(AnchorWatch) 최고경영자 롭 해밀턴(Rob Hamilton)의 예비 분석에 따르면, 공격자는 세 개 블록이 채굴되는 짧은 시간 동안 500건의 트랜잭션으로 1324개의 미사용 트랜잭션 출력(UTXO)을 쓸어갔다. UTC 기준 오전 1시31분~1시56분(한국시간 오전 10시31분~10시56분)에 벌어진 일이다. 탈취된 594.48비트코인 가운데 562비트코인은 이후 단일 주소로 모아졌고, 이 주소는 아직 움직이지 않았다.

털린 지갑은 모두 단일서명(single-signature) 방식이었고 각각 0.15비트코인 넘게 보유하고 있었다. 상당수는 수년간 잠자고 있던 지갑이었다. 도난당한 코인이 생성된 시점은 2021년부터 2026년까지 걸쳐 있는데, 이는 결함이 존재했던 기간과 거의 일치한다. 해밀턴은 “한눈에 봐도 지갑 생성 과정 어딘가에서 엔트로피(무작위성)에 결함이 있었던 것으로 보인다”고 말했다.

결함의 실체…하드웨어 난수 생성기 대신 예측 가능한 값 / AI 생성 이미지

결함의 실체…하드웨어 난수 생성기 대신 예측 가능한 값

콜드카드 펌웨어에는 난수를 가져오는 함수가 두 개 존재했다. 코인카이트가 직접 작성한 하드웨어 난수 생성기와, 마이크로파이썬(MicroPython)에서 물려받은 소프트웨어 대체 함수였다. 문제는 두 함수의 서명(signature)이 동일했다는 점이다. 빌드 설정을 검증하는 전처리기(preprocessor) 구문은 특정 값이 정의됐는지만 확인했을 뿐 그 값 자체는 검사하지 않았고, 그 결과 빌드는 오류 없이 소프트웨어 대체 함수를 그대로 사용해 완료됐다. 이런 상태는 2021년 3월 비트코인 코어의 라이브러리 libsecp256k1을 통합하는 과정에서 시작됐고, 이후 배포된 펌웨어 버전(매체별로 4.0.0 혹은 4.0.1로 표기)부터 시드 생성에 계속 이 대체 함수를 써왔다.

코인카이트 추산에 따르면 Mk3 모델의 실질적 탐색 공간은 약 40비트에 불과했다. 원래 지갑 시드가 갖춰야 할 128비트에 한참 못 미치는 수준이다. Mk4·Q·Mk5는 보안요소(secure element)에서 추가 엔트로피를 얻어 약 72비트까지 올라갔지만 이 역시 목표치에는 미달했다. 코인카이트는 공식 권고문에서 “Mk4, Mk5, Q에 대한 영향은 (Mk3보다) 심각하지 않지만 여전히 중대하다”고 밝혔다. 페이퍼월렛 개인키, 시드 분할 마스크, 기기 클로닝 키 등 같은 결함이 만들어낸 다른 산출물들도 함께 영향을 받았다.

“AI가 찾아낸 결함”…코인카이트도 놀란 자백

코인카이트를 더 당혹스럽게 한 대목은 이 결함이 어떻게 발견됐는지다. 회사는 “누군가 우리 펌웨어의 이전 버전들을 AI로 검토했다고 가정해야 한다”고 밝혔다. 콜드카드 펌웨어는 오픈소스로 공개돼 있는데, 코인카이트는 몇 주 전 자체적으로도 가장 성능이 좋다고 평가받는 AI 모델 하나로 같은 코드를 검토했지만 “이 버그나 다른 심각한 문제를 전혀 찾아내지 못했다”고 설명했다. 회사는 공격자와 방어자 모두 같은 도구를 쓰지만 이번에는 그 도구가 “우리에게는 도움이 되지 않았고, 오직 나쁜 쪽에만 도움이 됐다”고 자평했다.

이 사건은 블록(Block)의 대응으로도 확산됐다. 블록의 하드웨어 부문 리더 맥스 가이스(Max Guise)는 자사와 무관한(non-Bitkey) 지갑들이 탈취됐다는 신고를 접수한 뒤 즉시 자체 조사에 착수했다고 밝혔다. 블록은 자사 제품은 영향을 받지 않았다고 확인하면서도, 노출된 이용자는 안전이 확보되는 즉시 자금을 옮기라고 권고했다. 경쟁 하드웨어 지갑 업체 트레저(Trezor)도 자사 이용자들에게 자금이 안전하다고 안내하면서, 콜드카드에서 만들어진 취약한 시드는 다른 브랜드 기기로 복원해도 취약성이 그대로 유지된다는 점을 짚었다.

이용자가 지금 해야 할 일과 남은 위험

코인카이트는 Mk4·Mk5용 5.6.0 이상, Q용 1.5.0Q 이상의 긴급 펌웨어를 내놓았다. 다만 펌웨어를 업데이트한다고 해서 이미 만들어진 취약한 시드가 저절로 안전해지지는 않는다. 이용자는 패치된 펌웨어에서 완전히 새로운 시드를 생성하고, 기존 자금을 그 새 지갑으로 옮겨야 한다. 회사는 강력한 BIP-39 패스프레이즈나 최소 99회의 주사위 굴림, 혹은 두 가지를 함께 쓰라고 권고했다. 큰 금액을 옮기기 전에는 반드시 소액으로 테스트 트랜잭션을 먼저 보내보라고도 안내했다. 이미 지원이 종료된 Mk3 이용자에게는 별도의 이전 경로가 제시됐다. 탭사이너(Tapsigner)·오픈다임(Opendime)·사트카드(Satscard) 등 코인카이트의 다른 제품은 코드베이스 자체가 달라 이번 결함과 무관하다고 회사는 밝혔다.

위저드사르딘(Wizardsardine) 최고경영자 케빈 로에크(Kevin Loaec)는 공격자가 AI로 만든 스크립트를 이용해 취약한 지갑을 무차별 대입 방식으로 찾아냈을 것이라는 가설을 내놨다. 다만 탐색 범위를 일부 BIP-84 파생 경로로만 한정했을 가능성이 있어, 이번 탈취가 네이티브 세그윗(SegWit) 주소에 집중되고 일부 지갑은 자금이 일부만 빠져나간 이유를 설명할 수 있다고 봤다. 그는 이 가설이 맞다면 부분적으로만 털린 지갑은 여전히 추가 탈취 위험에 노출돼 있으며, 공격자가 탐색 범위를 넓힐 경우 다른 주소 유형의 자금도 위험해질 수 있다고 경고했다.

이번에 털린 지갑은 모두 단일서명 구조였다는 점도 눈에 띈다. 여러 독립된 기기의 승인을 요구하는 다중서명(multi-sig) 구조였다면 한 기기의 시드가 약하더라도 자금 이동이 막혔을 것이라는 지적이 나온다. 실제로 이번 사고를 계기로 다중서명 지갑 구성에 대한 관심이 커질 것이라는 전망도 나온다. 한편 이번 사고를 전후로 스마트컨트랙트 플랫폼 질리카(Zilliqa)도 자체 제작한 레저(Ledger) 서명 앱의 결함으로 네이티브 트랜잭션을 중단한 바 있다. 공개된 온체인 데이터로 개인키를 재구성할 수 있는 결함으로, 2019년부터 존재했던 것으로 알려졌다. 하드웨어 지갑의 신뢰성을 둘러싼 우려가 잇따라 불거지는 모습이다.

핫 뉴스

뉴스 view