Back to Blog

텔코인 보안 사고 사후 분석 및 심층 분석

Code Auditing
January 10, 2024
6 min read

2023년 12월 25일, 저희 모니터링 시스템은 Telcoin을 대상으로 한 일련의 악의적인 활동을 탐지했습니다. 저희는 Telcoin 팀이 근본 원인을 파악하는 데 도움을 드렸으며, 그 원인은 지갑의 실제 구현과 해당 프록시 간의 불일치로 인해 발생한 지갑 컨트랙트의 부적절한 초기화였습니다. 이 보고서는 사건을 완전히 이해하기 위한 철저한 분석을 제공하는 것을 목표로 합니다.

0x0: 기본 설계

취약점을 살펴보기 전에, 관련된 스마트 컨트랙트들 사이의 관계를 먼저 이해하는 것이 중요합니다. 본질적으로, 이는 CloneFactory, Cloneable Proxy, Beacon Proxy 패턴이라는 세 가지 설계 패턴의 조합으로 추상화될 수 있으며, 아래 다이어그램에 나타나 있습니다.

0x1: 취약점 분석

취약점은 지갑의 실제 구현과 해당 프록시 간의 불일치로 인한 지갑 컨트랙트의 부적절한 초기화에서 비롯됩니다. 구체적으로, 초기화 과정에서 프록시는 스토리지 위치의 최하위 비트에 쓰기 작업을 수행하여 스토리지 슬롯 0을 비제로 상태로 초기화했습니다. 이후 지갑 코드도 스토리지 슬롯 0에 쓰기 작업을 수행하여 최하위 비트에서 프록시의 초기 값을 덮어썼습니다. 이 문제는 스마트 컨트랙트 중 어느 하나에 내재된 취약점의 결과가 아니라, 두 컨트랙트 간의 상호작용으로 인한 것입니다.

이하에서는 아래에 제공된 트랜잭션 추적을 기반으로 세부 사항을 설명하겠습니다:

구체적으로, CloneableProxy:Proxy.initialize() 함수 내에서 Wallet.initialize() 함수를 호출하는 delegatecall이 있습니다. 이 호출은 CloneableProxy:Implementation.initialize() 함수로의 delegatecall을 통해 이루어집니다. 결과적으로, Wallet.initialize() 함수가 스토리지에 수행하는 모든 수정 사항은 CloneableProxy:Proxy 컨트랙트의 스토리지에 반영됩니다.

이 영향을 완전히 이해하기 위해서는 CloneableProxy:Proxy 컨트랙트의 스토리지 레이아웃을 살펴볼 필요가 있습니다. 이 컨트랙트의 정의는 다음과 같이 설명됩니다:

Proxy 및 ERC1967Upgrade 컨트랙트 모두 스토리지 변수를 가지고 있지 않으므로, 슬롯 0은 Initializable 컨트랙트에서 상속된 두 스토리지 변수인 _initialized와 _initializing에 의해 사용됩니다.

이제 Wallet 컨트랙트를 살펴보겠습니다. Wallet.initialize() 함수 내에서, 슬롯 0xaa가 초기화 플래그로 사용됨을 알 수 있습니다. 이는 3–4번째 줄과 11–12번째 줄의 다음 코드 스니펫에서 강조됩니다:

슬롯 0은 _state에 할당되어 있으며, 21번째 줄에 나타난 것처럼 함수 선택자 다음에 오는 calldata의 다음 32바이트를 저장합니다. 추가적인 세부 정보는 Wallet 컨트랙트 시작 부분의 주석을 참조하십시오:

슬롯 0의 사용과 관련하여 명백한 불일치가 있습니다: CloneableProxy:Proxy 컨트랙트는 이를 초기화 플래그로 해석하는 반면, Wallet:initialize() 함수는 이를 지갑의 상태로 취급합니다.

결과적으로, 초기화 과정이 완료된 후 슬롯 0의 최하위 두 바이트는 0으로 재설정됩니다. 이는 _initialized와 _initializing 모두를 0으로 설정하는 효과를 가져옵니다. 그 결과, CloneableProxy:Proxy 컨트랙트는 initialize() 함수를 통한 재초기화에 취약해지며, initializer 수정자의 보호가 우회될 수 있습니다.

분명히, 악용 가능성은 지갑의 상태에 달려 있습니다. 비제로 값으로 업데이트되면, 지갑의 상태는 이 컨트랙트의 추가적인 재초기화를 방지합니다. 초기화 후, 각 트랜잭션마다 지갑 상태가 업데이트됨에 따라, 슬롯 0의 최하위 두 바이트가 비제로 값이 될 가능성이 높아지며, 이는 실질적으로 지갑이 재초기화되는 것을 방지합니다. 이는 왜 취약한 지갑의 대다수가 트랜잭션 내역이 거의 없거나 전혀 없었는지, 그리고 공격에 노출된 이유를 설명합니다.

0x2: 공격 분석

공격자는 먼저 취약한 CloneableProxy:Proxy 컨트랙트를 재초기화하여 Beacon 컨트랙트의 주소를 변경했습니다. 이후 공격자는 아래에 자세히 설명된 것처럼 CloneableProxy:Proxy 컨트랙트에 포함된 자산을 이전하는 작업을 진행했습니다:

여러 취약한 컨트랙트가 단일 트랜잭션에서 침해되었으며, 공격자는 이 전략을 반복적으로 실행했다는 점이 주목할 만합니다.

0x3: 공격 요약

저희는 6개의 서로 다른 계정에 의해 실행된 총 4,958건의 공격을 관찰했으며, 내용은 다음과 같습니다:

0x4: 수정 및 권고사항

저희의 조사에 따르면, 핵심 문제는 스토리지 슬롯 0의 일관성 없는 사용에서 비롯되어 취약한 컨트랙트의 재초기화 가능성을 야기했습니다. 분명히, 수정 방법은 스토리지 할당의 신중한 관리를 포함합니다.

이번 사건에서 저희는 몇 가지 중요한 인사이트를 얻었습니다:

  • 인라인 어셈블리로 스토리지 슬롯을 조작할 때는 극도의 주의를 기울이십시오. 오류는 심각한 취약점으로 이어질 수 있습니다.

  • 컨트랙트 상태를 지속적으로 모니터링하십시오. 신속한 대응 능력은 적시에 알림을 받는 것에 달려 있습니다.

  • 침해가 감지될 경우 즉각적인 활동 중단을 가능하게 하기 위해 컨트랙트 내에 일시 정지 메커니즘을 구현하십시오.

또한, 이번 사건이 서로 다른 지갑 컨트랙트를 대상으로 한 여러 공격 트랜잭션을 수반했다는 사실은 Phalcon과 같은 위협 모니터링 및 공격 차단 솔루션의 시급한 필요성을 강조합니다. 이러한 도구들은 미래의 위험을 완화하고 잠재적인 손실을 방지하는 데 필수적입니다.

0x5: 사건 타임라인

태평양 표준시 2023년 12월 25일 오전 9시 23분: 저희 시스템은 Polygon 네트워크에서 첫 번째 악의적인 트랜잭션을 탐지했습니다:

태평양 표준시 12월 25일 오전 10시 28분: Telcoin 지원팀이 내부 커뮤니케이션 채널에서 사건을 보고했습니다.

태평양 표준시 12월 25일 오전 10시 32분 — 오전 10시 37분: Telcoin 팀원들이 Telcoin Discord 커뮤니티에 알리고 모든 관련 핵심 팀원들과 긴급 통화를 개설했습니다.

태평양 표준시 12월 25일 오전 10시 45분: 모든 Telcoin 인프라 접근을 제한하기 위한 웹 애플리케이션 방화벽 규칙이 구현되었습니다.

태평양 표준시 12월 25일 오전 11시 02분: Telcoin 팀이 Seal 911과 협의를 시작했습니다.

태평양 표준시 12월 25일 오전 11시 11분: Telcoin 팀과 기타 보안 멤버들에 의해 워룸이 구성되어 문제의 근본 원인을 파악하고 공격을 차단하기 위한 잠재적 해결책을 논의했습니다.

태평양 표준시 12월 25일 오후 1시 14분: Telcoin 팀이 X(Twitter)를 통해 사용자에게 공개 알림을 발령했습니다:

태평양 표준시 12월 25일 오후 3시 39분: Telcoin은 Chainalysis 및 Slowmist에 연락하여 도난된 지갑과 주소를 표시하고 이 정보를 거래소와 공유하는 조사를 통해 도난된 자금을 조사하는 데 도움을 요청했습니다.

태평양 표준시 12월 25일 오후 10시 35분: Telcoin 팀의 초청을 받아 저희가 워룸에 합류하여 근본 원인을 파악하기 위한 분석을 공유했습니다.

태평양 표준시 12월 25일 오후 11시 00분부터 12월 26일 오전 2시 06분까지: 근본 원인을 파악한 후, Telcoin 팀은 안전하고 통제된 환경에서 익스플로잇을 재현하여 완화 전략을 성공적으로 고안했습니다. 이 과정에는 새롭게 안전하게 구현된 비콘과 일치하도록 지갑 프록시를 재초기화하는 것이 포함되었습니다. 이 익스플로잇이 일회성 기회였기 때문에, Telcoin은 지갑 구성을 선제적으로 업데이트하여 공격자가 이러한 취약점을 추가로 악용할 수 있는 능력을 비활성화할 수 있었습니다.

태평양 표준시 12월 26일 오전 2시 07분부터 오전 2시 14분까지: Telcoin 팀은 이전에 침해되지 않은 모든 지갑에 걸쳐 완화 프로세스를 구현하여 포괄적인 적용 범위를 보장했습니다. 신속하고 효율적인 배포를 위해, 프로세스는 엄격하게 정의된 시간 창 내에서 배치로 실행되었습니다. 이후 Telcoin은 영향을 받은 모든 지갑의 완전한 복구 및 모든 지갑에 대한 영구적 수정을 위한 복구 계획을 준비하고 내부적으로 테스트하는 과정을 시작했습니다.

태평양 표준시 12월 26일 오후 4시 52분: Telcoin과 저희 팀은 다음 주제에 대한 논의를 시작했습니다:

  • 사건 개요

  • 사건 타임라인: 사건이 전개된 방식의 연대기적 기록.

  • 근본 원인 분석: 사건의 근본적인 원인에 대한 심층 분석.

  • 개선을 위한 권고사항

  • 코드 감사

태평양 표준시 12월 29일 오후 12시 27분: 여러 차례의 논의 끝에, 저희는 Telcoin 팀과 협력하여 사후 보고서 초안을 작성하고 수정 사항을 감사하기 시작했습니다.

2024년 1월 3일: 사후 보고서 초안이 제공되었습니다.

2024년 1월 4일: 확인된 문제점 및 권고사항을 포함한 저희의 감사 결과가 제출되었습니다.

2024년 1월 4일부터 1월 10일까지: 저희는 Telcoin 팀과 협력하여 사후 보고서를 최종 확정하고 수정 사항을 검토했습니다.

또한, 12월 25일부터 현재까지 Telcoin이 사건과 관련하여 블록체인 조사 회사 및 법 집행 기관과 긴밀한 협력을 통해 적극적으로 활동하고 있다는 점을 언급할 필요가 있습니다.

BlockSec 소개

BlockSec은 세계적으로 저명한 보안 전문가 그룹에 의해 2021년에 설립된 선구적인 블록체인 보안 회사입니다. 이 회사는 대규모 채택을 촉진하기 위해 신흥 Web3 세계의 보안성과 사용성을 향상시키는 데 헌신하고 있습니다. 이를 위해 BlockSec은 스마트 컨트랙트 및 EVM 체인 보안 감사 서비스, 보안 개발 및 위협 사전 차단을 위한 Phalcon 플랫폼, 자금 추적 및 조사를 위한 MetaSleuth 플랫폼, 그리고 Web3 빌더들이 암호화폐 세계에서 효율적으로 탐색할 수 있는 MetaDock 익스텐션을 제공합니다.

현재까지 이 회사는 MetaMask, Uniswap Foundation, Compound, Forta, PancakeSwap과 같은 300개 이상의 저명한 클라이언트를 대상으로 서비스를 제공했으며, Matrix Partners, Vitalbridge Capital, Fenbushi Capital을 포함한 저명한 투자자들로부터 두 차례의 자금 조달 라운드에서 수천만 달러를 유치했습니다.

웹사이트: https://blocksec.com/

X(Twitter): @BlockSec @Phalcon

Sign up for the latest updates
~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리
Security Insights

~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리

이 주간 블록체인 보안 리포트는 2026년 6월 22~28일 발생한 주요 사건 2건을 다루며, 이더리움과 카르다노에서 약 410만 달러의 피해가 확인됐습니다. Taiko 브릿지 공격은 노출된 SGX 서명 키와 디버그 엔클레이브를 거부하지 못한 증명 정책 결함을 이용해 악성 증명자를 등록하고 L2 상태 증명을 위조했습니다. SecondFi 지갑은 Ed25519 논스 도출 시 비밀 입력이 제거되는 결함으로 공개 트랜잭션 데이터만으로 개인 키 복구가 가능했습니다.

~$18M 손실: jaredFromSubway, Aztec 등 | BlockSec 위클리
Security Insights

~$18M 손실: jaredFromSubway, Aztec 등 | BlockSec 위클리

이 주간 블록체인 보안 보고서는 2026년 6월 15일~21일을 다루며, 이더리움과 BNB 체인에서 3건의 주요 사고가 발생해 약 $18.3M의 손실이 발생했습니다. jaredFromSubway 사건은 MEV 봇이 차익거래를 위해 신뢰할 수 없는 제3자 컨트랙트에 자산을 승인한 역방향 승인 공격으로, 가짜 래퍼 토큰과 스왑 풀을 이용해 약 $15M 손실이 발생했습니다. Aztec은 이스케이프 해치 ZK 회로의 제약 누락으로 공격자가 가짜 머클 트리로 온체인 검증을 통과했습니다.

Web3 컴패니언: 오픈소스 보안 에이전틱 지갑

Web3 컴패니언: 오픈소스 보안 에이전틱 지갑

BlockSec가 Web3 Companion을 오픈소스로 공개했습니다. 이 보안 중심의 에이전트 지갑은 자체 AI 에이전트를 신뢰하지 않는 방식으로 설계되었으며, 키 격리, 강력한 정책, Passkey를 활용해 온체인 자산을 보호합니다.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit