하드웨어 지갑에 보관된 비트코인 1,367개가 털렸다. 피해 규모는 시세 기준 약 8,900만달러로, 개인이 직접 보관하던 비트코인이 한 번에 빠져나간 사고로는 손에 꼽히는 규모다. 인터넷에 연결되지 않은 상태로 자산을 보관하는 방식이 가장 안전하다고 여겨져 왔다는 점에서, 이번 사고는 보관 방식 자체에 대한 질문을 남겼다.

보안 업계 분석에 따르면 피해가 확인된 주소는 4,000여 개에 이른다. 공격은 한 번에 끝나지 않고 여러 차례에 걸쳐 진행됐다.

2021년에 만들어진 지갑이 2026년에 털렸다

문제의 뿌리는 5년 전 펌웨어에 있다. 콜드카드 Mk3 모델의 2021년 3월 빌드에서, 지갑의 시드를 만드는 과정에 결함이 있었다. 해당 결함은 버전 4.0.1부터 4.1.9까지와 그 이전 버전에 영향을 준 것으로 파악됐다.

시드는 지갑을 복구할 때 쓰는 단어 12개 또는 24개의 조합으로, 사실상 자산의 소유권 그 자체다. 시드를 만들 때는 아무도 예측할 수 없는 무작위 값이 필요하고, 하드웨어 지갑은 이를 위해 전용 난수 생성기를 탑재한다. 그런데 이 펌웨어에서는 버그로 인해 무작위 값이 전용 하드웨어를 거치지 않고 소프트웨어 방식으로 만들어졌다.

결과적으로 시드가 겉보기만큼 무작위하지 않았다. 공격자 입장에서는 가능한 시드의 범위가 크게 줄어들어, 후보를 하나씩 대입해 실제 지갑을 찾아내는 계산이 현실적으로 가능해졌다. 이 계산은 공격자의 컴퓨터에서 이뤄지므로 피해자의 기기를 물리적으로 만지거나 네트워크에 접근할 필요가 없었다.

세 차례에 걸쳐 빠져나갔다

첫 인출은 지난달 30일 발생했다. 이때 약 594개의 비트코인이 30분도 안 되는 사이에 빠져나갔고, 대상은 대부분 오랫동안 거래가 없던 휴면 주소 500여 개였다. 당시 시세로 약 3,800만달러 규모다.

이어 이달 1일 2차와 3차 인출이 확인되면서 누적 피해는 1,367개까지 늘었다. 휴면 주소가 먼저 표적이 된 점은 시사하는 바가 있다. 오래 건드리지 않은 지갑일수록 소유자가 이상 징후를 늦게 알아차리고, 동시에 초기 펌웨어로 만들어졌을 가능성이 크기 때문이다.

이번 사고는 거래소가 해킹당한 것이 아니다. 개인이 스스로 보관하던 자산이 대상이었다는 점에서 성격이 다르다. 자가 보관은 거래소 파산이나 출금 중단 위험을 피할 수 있다는 장점 때문에 권장돼 왔지만, 그 대신 보관의 책임과 기술적 위험을 개인이 전부 떠안는 방식이기도 하다.

지금 확인할 것

이번 사고에서 실제로 문제가 된 것은 보관 장소가 아니라 시드가 만들어진 시점의 조건이었다. 그래서 확인해야 할 것도 단순하다.

첫째, 콜드카드 Mk3를 쓰고 있다면 시드를 언제 처음 생성했는지 확인한다. 2021년 무렵 초기 펌웨어에서 만든 시드라면, 펌웨어를 최신으로 올리는 것만으로는 해결되지 않는다. 이미 만들어진 시드 자체가 취약하기 때문이다. 이 경우 최신 펌웨어에서 시드를 새로 만들고 자산을 새 주소로 옮기는 절차가 필요하다.

둘째, 오래 열어보지 않은 지갑이 있다면 잔액을 확인한다. 이번 공격이 휴면 주소부터 노린 만큼, 보관해 둔 사실 자체를 잊고 있던 지갑이 가장 위험하다.

셋째, 시드를 새로 만들 때 기기가 제시하는 단어를 그대로 쓰되, 그 과정에서 누구에게도 단어를 입력하거나 촬영해 저장하지 않는다. 사고 직후에는 복구를 도와주겠다며 시드를 요구하는 시도가 늘어난다. 정상적인 제조사나 지원 조직은 어떤 경우에도 시드 단어를 묻지 않는다.

확인되지 않은 것도 있다. 피해 주소 수는 조사 주체에 따라 4,385개에서 4,585개까지 차이가 있고, 추가 인출 가능성도 아직 완전히 닫히지 않았다. 취약한 시드로 만들어진 지갑이 얼마나 더 남아 있는지는 외부에서 정확히 셀 수 없다. 자산을 옮겼다면 옮긴 주소가 새 시드에서 파생된 것이 맞는지 한 번 더 확인해 두는 편이 안전하다.