공급망 공격이 보안 칩을 우회하는 방법
지갑 보안에서 가장 과소평가된 위협이 소프트웨어 계층에서 발생하는 이유.
이 시리즈의 이전 글에서는 보안 칩 자체를 대상으로 한 공격 유형(결함 주입, 칩 침입 분석, 사이드 채널 기법 등)을 살펴봤어요. 이런 공격은 실제 위협이지만, 상당한 자원과 특수 장비, 개별 타깃팅이 필요해요. 대부분의 사용자는 이런 공격을 직접 겪을 일이 없어요.
Supply chain attacks는 다릅니다. 실험실이나 기기에 직접 접근할 필요가 없고, 보안 칩 자체를 뚫을 필요도 없어요. 칩 위의 코드 계층에서 작동하기 때문에, 한 번 성공한 공급망 공격은 수천, 수만 명의 사용자에게 동시에 영향을 줄 수 있어요. 경제적으로도 하드웨어 수준 공격보다 훨씬 더 많은 공격자에게 매력적이에요.
이 글에서는 세계적으로 가장 널리 사용되는 하드웨어 지갑 제조사를 둘러싼 두 가지 실제 사례를 통해 소프트웨어 관점의 공급망 위험을 살펴봐요.
공급망 공격이란 무엇인가요?
공급망 공격은 최종 사용자를 직접 노리는 대신, 신뢰받는 관계를 악용해 공격 경로로 삼아요. 즉, 사용자가 의존하는 소프트웨어 라이브러리, 펌웨어 업데이트 메커니즘, 유통 채널 등을 침해하는 방식이에요.
하드웨어 지갑에서 주요 공급망 공격 경로는 다음과 같아요:
- 무선 펌웨어 업데이트: 제조사가 모든 기기에 자동 또는 사용자의 승인 하에 푸시하는 소프트웨어 업데이트
- 컴패니언 앱 라이브러리: 지갑의 데스크톱/모바일 앱에 포함된 코드
- 서드파티 JavaScript 라이브러리: 제조사의 웹 서비스가 의존하는 코드(대표적으로 NPM 같은 공개 패키지 저장소에서 제공)
- 유통 및 물류: 기기가 최종 사용자에게 도달하기 전의 물리적 가로채기
이런 경로가 위험한 이유는 바로 '규모' 때문이에요. 공격자는 한 번만 투자하면, 취약점이 발견되어 패치되기 전까지 해당 컴포넌트를 거치는 모든 사용자를 노릴 수 있어요.
보안 칩은 이런 공격 경로에 대해 아무런 보호를 제공하지 못해요. 칩을 뚫지 않아도 되기 때문이죠. 키는 여전히 안전하게 보안 칩 안에 있지만, 그 주변 환경이 조작당하는 거예요.
공급망 공격 사례: Connect Kit (2023년 12월)
2023년 12월 14일, Ledger의 Connect Kit를 대상으로 한 공급망 공격이 발생했어요. Connect Kit은 분산형 앱이 Ledger 하드웨어 지갑과 연동할 수 있게 해주는 JavaScript 라이브러리인데, 이 공격으로 약 48만~60만 달러 상당의 자산이 유출됐어요. 공격은 약 5시간 동안 이어졌고, 실제 자금 유출은 약 2시간 내에 집중적으로 일어났어요. 여러 주요 DeFi 프로토콜이 동시에 피해를 입었죠.
이 사건의 전개 과정은 하드웨어 지갑 보안이 실제로 어디에서 취약해지는지 잘 보여줘요.
공격은 어떻게 이루어졌나요?
Ledger의 Connect Kit은 NPM, Node 패키지 매니저에 오픈소스로 배포된 JavaScript 라이브러리예요. 수백 개의 분산형 앱이 이 라이브러리를 통합해 Ledger 하드웨어 지갑과의 연동 기능을 제공했어요.
특히 Ledger는 NPM의 일반적인 버전 고정 방식뿐 아니라 CDN(Content Delivery Network) 로더를 통해서도 라이브러리를 배포했어요. 이 때문에 의존하는 앱들은 고정된 버전이 아니라, 실행 시마다 항상 최신 버전을 자동으로 받아와서 사용하게 됐죠.
즉, NPM에 새로운 버전이 올라오는 즉시, CDN 로더를 쓰는 모든 앱이 그 버전을 바로 실행하게 된 거예요. 리뷰나 수동 업데이트, 안전 대기 구간 없이요.
공격자는 Ledger 전 직원의 피싱 공격을 통해 NPM 배포 권한을 탈취했어요. 해당 직원은 퇴사 시 내부 시스템 접근 권한은 정상적으로 회수됐지만, NPM API 키는 회수되지 않았어요.
API 키는 NPM의 2단계 인증을 우회할 수 있기 때문에, 공격자는 키만 있으면 추가 인증 없이 배포 권한을 얻을 수 있었어요.
이렇게 확보한 권한으로 공격자는 Connect Kit의 악성 버전(1.1.5, 1.1.6, 1.1.7)을 배포했고, Angel Drainer malware라는 악성 코드가 포함됐어요. 이 코드는 사용자가 서명하면 자산이 공격자 지갑으로 이동되는 악성 트랜잭션 승인 요청을 만들어냈죠.
CDN 로더가 최신 버전을 자동으로 불러오면서, 영향을 받은 dApp들은 배포 직후 몇 분 만에 사용자들에게 악성 코드를 제공하게 됐어요. 앱 개발자들은 아무런 조치 없이도 피해가 확산됐죠.
Ledger는 신속하게 대응해, 내부 경보 후 40분 이내에 패치 버전을 배포하고 Tether와 협력해 도난 자산을 동결했어요. 이 사례의 핵심은, 공격 경로가 존재했고 실제로 악용됐다는 점이에요.
업그레이드 가능한 펌웨어의 공급망 위험
2023년 5월의 Ledger Recover 논란은, 업그레이드 가능한 펌웨어를 가진 모든 하드웨어 지갑에 내재된 공급망 위험을 보여줬어요. Ledger의 옵트인 시드 백업 서비스는, 펌웨어를 통해 시드 구문 조각을 세 곳의 수탁자에게 암호화해 전송하는 기능이었는데, 공격은 아니었지만 이런 기능이 가능하다는 사실 자체가 우려를 낳았죠.
제조사가 서명해 배포하는 펌웨어 업데이트는, 보안 칩에 시드 데이터를 처리·전송하도록 지시할 수 있어요. Ledger Recover 분석에서 살펴봤듯, 시큐어 부트는 서드파티 펌웨어만 막을 뿐, 제조사가 배포하는 펌웨어는 제한하지 못해요. 이 업데이트 채널 자체가 공급망 공격 경로가 되는 거예요.
만약 제조사의 서명 인프라가 침해되거나, 정부가 업데이트를 통해 백도어를 강제한다면, 사용자는 사전에 이를 감지할 방법이 없어요.
업그레이드 가능한 펌웨어 기기에서는 어떤 일이 벌어지나요?
제조사 통제 하에 펌웨어 업데이트가 이뤄지는 하드웨어 지갑을 신뢰한다는 것은, 곧 다음을 신뢰한다는 뜻이에요:
- 제조사의 의도: 기업이 지금이나 미래에, 상업적 압박이나 규제, 소유권 변경과 무관하게 사용자 보안을 해치는 펌웨어를 의도적으로 배포하지 않을 것
- 제조사 서명 키 인프라: 펌웨어 서명에 쓰이는 개인 키가 안전하게 관리되고, 유출된 적이 없다는 점. 만약 키가 탈취되면, 공격자가 제조사 인증 펌웨어를 모든 기기에 배포할 수 있음
- 전체 업데이트 전달 경로: 개발에서 기기로 펌웨어가 이동하는 모든 유통 채널
- 제조사의 내부 프로세스: 직원 접근 통제, 퇴사 절차, 코드 리뷰 요건, 안전한 빌드 시스템 등
- 규제 환경: 제조사는 자국 법률의 적용을 받으므로, 정부가 제조사에 특정 펌웨어 배포를 강제할 수도 있음
이런 점들이 업그레이드 가능한 펌웨어 아키텍처가 방어 불가능하다는 뜻은 아니에요. 다만, 방어 책임이 더 넓고 복잡한 신뢰 구조에 분산된다는 의미예요. 대부분의 사용자는 이런 신뢰 구조를 깊이 들여다보지 않죠.
대안: 불변(Immutable) 펌웨어
일부 하드웨어 지갑(예: Tangem)은 펌웨어를 제조 시 기기에 영구적으로 탑재하고, 출고 후에는 누구도 업데이트할 수 없게 설계돼 있어요. 이 방식은 완전히 다른 보안 트레이드오프를 가져와요.
장점은 명확해요. 펌웨어 공급망 공격 경로 자체가 사라지죠. 업데이트 메커니즘도, 탈취될 서명 키도, 오염될 유통 경로도 없어요. 제조 시 탑재된 펌웨어가 기기 수명 내내 그대로 동작해요.
제조사는 출고 후 기기 동작을 변경할 수 없으므로, 자의든 타의든(정부 강제 등) 펌웨어를 바꿀 수 있는 통로가 없어요.
Kudelski Security, Riscure, SlowMist 등 독립 보안업체의 펌웨어 감사를 통해, 펌웨어가 신뢰할 수 있고 진짜 불변인지 확인할 수 있어요. 불변 기기 사용자는 초기 감사 품질을 신뢰해야 하며, 주요 프로토콜 변화 시에는 하드웨어 교체가 필요할 수 있어요.
마무리
공급망 공격은 실험실 장비, 사이드 채널 분석, 기기 물리적 접근 없이도 가능해요.
이런 공격은 모든 사용자에게 빠르고 대규모로 확산될 수 있어요. 공격자는 대부분의 사용자가 들여다보지 않는 계층에서, 보통은 보이지 않거나 당연히 신뢰된다고 여겨지는 메커니즘을 통해 움직여요.
지갑을 처음 설정할 때는 반드시 정품 여부를 확인하고, 제조사 또는 공식 인증 판매처에서 직접 구매하세요. 또, 잘 모르는 앱이 승인 요청을 할 때는 항상 의심하는 태도가 필요해요.