Back to Blog

#2 Bybit 사건: Web2 침해로 인한 역사상 최대 규모의 암호화폐 해킹

Code Auditing
February 9, 2026
4 min read

2025년 2월 21일, Bybit은 공격자가 소셜 엔지니어링을 통해 Safe{Wallet} 개발자의 머신을 침해한 후 약 15억 달러를 탈취당했습니다. 공격자는 Bybit의 트랜잭션을 특정적으로 겨냥하여 Safe{Wallet}의 AWS S3 버킷에 악성 JavaScript를 주입했습니다. 주입된 코드는 서명 과정에서 트랜잭션 내용을 변조했으며, Safe{Wallet} UI는 정상적인 트랜잭션을 표시하는 동안 실제로 서명자의 Ledger 장치에 전송된 페이로드는 Bybit의 Safe 컨트랙트를 악성 구현체로 업그레이드하여 공격자에게 완전한 제어권을 부여했습니다. 서명 및 실행이 완료되자 공격자는 컨트랙트에서 모든 자산을 탈취했습니다. 자세한 기술적 분석은 이전 보고서 [1]에서 확인할 수 있습니다.

배경

Safe{Wallet}(GnosisSafe라고도 함)은 n-of-m 모델을 사용하는 멀티시그 지갑 인프라로, 트랜잭션을 실행하려면 m명의 전체 서명자 중 최소 n개의 서명이 필요합니다.

각 Safe 지갑은 프록시 컨트랙트로 배포됩니다. 이 사건에서 핵심이 되는 두 가지 스토리지 변수가 있습니다:

  • masterCopy (슬롯 0): 구현 컨트랙트의 주소입니다. 이 컨트랙트에는 서명 검증 및 업그레이드 메커니즘을 포함한 모든 실행 로직이 포함되어 있습니다. 프록시는 delegatecall을 통해 모든 호출을 masterCopy에 위임합니다.
  • threshold (슬롯 4): 필요한 최소 서명 수(n)입니다. Bybit의 Safe의 경우 이 값은 3이었습니다.

프록시가 delegatecall을 사용하기 때문에 masterCopy에서 호출된 모든 함수는 프록시의 스토리지 컨텍스트에서 실행됩니다. 이는 delegatecall 대상이 슬롯 0의 masterCopy를 직접 덮어쓸 수 있으며, 단일 트랜잭션으로 전체 구현체를 교체할 수 있음을 의미합니다.

취약점 분석

공격 경로는 시스템의 세 가지 계층을 통과했으며, 각 계층에는 공격자가 활용한 구조적 조건이 존재했습니다:

프론트엔드 서빙 모델. Safe{Wallet} 프론트엔드 JavaScript는 AWS S3 버킷에서 제공되었습니다. 이 아키텍처에서는 버킷에 대한 쓰기 권한을 가진 누구든 서명자를 위한 트랜잭션을 구성하는 코드를 수정할 수 있습니다. 서브리소스 무결성(SRI) 해시나 코드 서명과 같은 무결성 검증 메커니즘이 이러한 위험을 완화할 수 있지만, 대부분의 dApp 프론트엔드에서는 아직 표준 관행으로 자리잡지 못했습니다. 공격자는 침해된 개발자 머신을 통해 쓰기 권한을 획득하고 제공되는 JavaScript를 은밀하게 수정했습니다.

UI 표시와 서명 페이로드 간의 괴리. 주입된 JavaScript는 Safe{Wallet} UI에 정상적으로 보이는 트랜잭션을 표시하면서 Ledger 하드웨어 지갑에는 다른 페이로드를 전송했습니다. Ledger 화면에 표시된 트랜잭션 세부 정보는 UI와 달랐겠지만, 하드웨어 지갑 화면에서 원시 트랜잭션 데이터를 해석하는 것은 특히 복잡한 멀티시그 작업의 경우 쉽지 않습니다. 이 괴리로 인해 공격자는 악성 페이로드에 대한 세 개의 유효한 서명을 수집할 수 있었습니다.

프록시 업그레이드 모델. 배경 섹션에서 설명한 바와 같이, delegatecall은 대상의 코드를 프록시의 스토리지 컨텍스트에서 실행합니다. Safe 프록시 아키텍처는 슬롯 0의 단일 masterCopy 포인터를 통해 모든 호출을 라우팅합니다. 이 포인터를 덮어쓰면 단일 트랜잭션으로 서명 검증 로직을 포함한 완전히 다른 구현체로 프록시를 리다이렉트할 수 있습니다. n-of-m 모델은 트랜잭션을 시작할 수 있는 주체를 제어하지만, 트랜잭션이 승인되고 실행된 후에는 구현체 자체를 변경할 수 있습니다. 새 구현체가 서명 검증을 제거하면, 이후의 모든 트랜잭션에서 멀티시그 보호가 사실상 무력화됩니다.

공격 분석

공격은 악성 코드 주입, 구현체 교체, 자산 탈취의 세 단계로 진행되었습니다.

1단계: 악성 코드 주입

공격자는 Safe{Wallet} 개발자의 머신을 침해하고 프론트엔드를 제공하는 AWS S3 버킷에 악성 JavaScript를 주입했습니다. 주입된 코드는 Bybit의 Safe 주소에서 발생하는 트랜잭션을 특정적으로 겨냥했습니다. Bybit CEO Ben Zhou [2]에 따르면, Safe{Wallet} UI는 정상적인 트랜잭션을 표시했지만, 서명자의 Ledger 장치에는 다른 페이로드가 전송되었습니다. 서명자들은 UI에 표시된 트랜잭션을 승인했고, 이로써 공격자는 악성 페이로드에 대한 세 개의 유효한 서명을 획득했습니다.

2단계: 구현체 교체

공격자는 수집된 세 개의 서명과 함께 악성 트랜잭션을 제출했습니다. Safe 프록시는 호출을 masterCopy에 위임했고, masterCopyexecTransaction() 함수는 서명을 검증한 후 트랜잭션 페이로드를 실행했습니다: 공격자의 컨트랙트(0x962214...5c7242)로의 delegatecall이었습니다. 이 delegatecall은 프록시의 스토리지 컨텍스트에서 실행되므로, 공격자의 transfer() 함수는 슬롯 0의 masterCopy 값을 악성 구현체 주소(0xbDd077...9516)로 덮어썼습니다. 이 시점부터 Safe 컨트랙트에 대한 모든 호출은 공격자의 코드로 위임되었습니다.

3단계: 자산 탈취

masterCopy가 이제 공격자의 구현체를 가리키게 되면서 멀티시그 요건이 더 이상 적용되지 않게 되었습니다. 공격자는 Safe 컨트랙트에서 직접 SweepERC20()SweepETH()를 호출했습니다. 공격자의 구현체 컨트랙트에 정의된 이 함수들은 서명 검증 없이 보유한 모든 자산을 이전했습니다. 총 다섯 건의 탈취 트랜잭션이 실행되었으며, 손실액은 약 15억 달러에 달했습니다.

관련 컨트랙트 및 트랜잭션

유형 설명 주소 / 해시
컨트랙트 Bybit의 Safe 컨트랙트 0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4
컨트랙트 원본 masterCopy 컨트랙트 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F
컨트랙트 악성 masterCopy 컨트랙트 0xbDd077f651EBe7f7b3cE16fe5F2b025BE2969516
컨트랙트 공격자의 컨트랙트 (즉, transfer()) 0x96221423681A6d52E184D440a8eFCEbB105C7242
트랜잭션 masterCopy 컨트랙트를 교체한 트랜잭션 0x46deef0f52e3a983b67abf4714448a41dd7ffd6d32d32da69d62081c68ad7882
트랜잭션 15,000 cmETH를 탈취한 트랜잭션 0x847b8403e8a4816a4de1e63db321705cdb6f998fb01ab58f653b863fda988647
트랜잭션 90,375 stETH를 탈취한 트랜잭션 0xa284a1bc4c7e0379c924c73fcea1067068635507254b03ebbbd3f4e222c1fae0
트랜잭션 8,000 mETH를 탈취한 트랜잭션 0xbcf316f5835362b7f1586215173cc8b294f5499c60c029a3de6318bf25ca7b20
트랜잭션 401,346 ETH를 탈취한 트랜잭션 0xb61413c495fdad6114a7aa863a00b2e3c28945979a10885b12b30316ea9f072c
트랜잭션 90 USDT를 탈취한 트랜잭션 0x25800d105db4f21908d646a7a3db849343737c5fba0bc5701f782bf0e75217c9

요약

이번 사건은 오프체인 인프라의 침해가 어떻게 온체인에서의 치명적인 손실로 이어질 수 있는지를 보여주었습니다. 공격자는 Web2 침해, 프론트엔드 조작, 프록시 업그레이드를 연결하여 온체인 취약점을 악용하지 않고도 멀티시그 보호를 우회하는 단일 공격 경로를 구성했습니다.

주요 교훈:

  • 프론트엔드 무결성은 온체인 보안과 동일한 수준의 주의를 받아야 합니다. 공격 체인은 프론트엔드 서빙 계층에서 시작되었습니다. dApp이 점점 더 고가치 트랜잭션을 중개함에 따라, 무결성 검증(SRI, 코드 서명, 재현 가능한 빌드)을 통한 프론트엔드 코드 보호와 무단 변경 모니터링이 기본 요건이 되고 있습니다.
  • 하드웨어 지갑 검증은 실제로 여전히 어렵습니다. 하드웨어 지갑은 실제 서명 페이로드를 표시할 수 있지만, 작은 화면에서 복잡한 멀티시그 트랜잭션 데이터를 해석하는 것은 알려진 사용성 문제입니다. 장치 내 트랜잭션 요약의 가독성 향상은 지갑 생태계의 미해결 과제입니다.
  • 프록시 업그레이드 메커니즘은 고영향 공격 대상입니다. Safe 프록시 아키텍처는 모든 로직을 단일 업그레이드 가능한 포인터를 통해 라우팅합니다. 단일 단계 구현체 교체를 허용하는 메커니즘은 위험을 집중시킵니다. 업그레이드에 타임락, 보조 확인 단계, 또는 독립적인 가디언을 추가하면 단일 침해 트랜잭션의 영향을 줄일 수 있습니다.

참고 문헌

  1. BlockSec: Bybit 15억 달러 해킹 심층 분석

  2. Bybit CEO Ben Zhou X 방송


BlockSec 소개

BlockSec은 풀스택 블록체인 보안 및 암호화폐 컴플라이언스 제공업체입니다. 저희는 고객이 코드 감사(스마트 컨트랙트, 블록체인 및 지갑 포함), 실시간 공격 차단, 사건 분석, 불법 자금 추적, 그리고 프로토콜 및 플랫폼의 전체 수명 주기에 걸쳐 AML/CFT 의무를 이행할 수 있도록 돕는 제품과 서비스를 구축합니다.

BlockSec은 권위 있는 학술 컨퍼런스에서 다수의 블록체인 보안 논문을 발표했으며, DeFi 애플리케이션의 여러 제로데이 공격을 보고하고, 2,000만 달러 이상을 구조하기 위한 다수의 해킹을 차단했으며, 수십억 달러 규모의 암호화폐를 보호했습니다.

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