Back to Blog

보안 연구자 관점에서 바라본 Poly Network 해킹 사건 회고

Code Auditing
August 15, 2021
4 min read

이 블로그에서는 Poly Network 해킹의 전체 과정을 검토하고 얻은 교훈에 대해 논의하고자 합니다.

우리는 2021년 8월 10일에 Poly Network가 해킹당하고 있다는 사실을 알게 되었습니다(이 블로그에서는 +8 시간대를 사용합니다). 그러나 해킹이 어떻게 진행되고 있는지, 그리고 해킹의 근본 원인이 무엇인지에 대한 단서가 없었습니다. 보안 연구팀으로서 우리는 조사를 시작했습니다.

Step 1: 공격 트랜잭션 찾기

우리는 트랜잭션 가상화 시스템(https://tx.blocksecteam.com)에서 공격 트랜잭션 0xd8c1f7424593ddba11a0e072b61082bf3d931583cb75f7843fc2a8685d20033a를 재현했습니다.

트레이스는 상당히 단순한데, 이는 가격을 조작하는 다른 공격들과는 다릅니다. 그러한 공격들은 보통 매우 복잡한 함수 호출을 가지고 있습니다(Popsicle 해킹 참조).

Step 2: 컨트랙트 코드 분석

공격 트레이스를 얻은 후, 컨트랙트의 소스 코드를 검토해야 했습니다. 놀랍게도, Poly Network는 Etherscan에 검증된 소스 코드를 보유하고 있지 않았습니다. 그러나 우리는 Github에서 공개된 소스 코드를 찾을 수 있었습니다.

소스 코드를 검토한 후에도 명백한 코드 취약점을 발견하지 못했습니다. 또한 공격 트레이스와 정상적인 트랜잭션 트레이스를 비교했을 때 유사하다는 것을 발견했습니다.

Step 3: 중요 상태 복원

그런 다음 공격 중의 중요한 상태들을 복원했습니다. 공격이 VerifyHeaderAndExecuteTxEvent의 호출로부터 시작되었기 때문에, 여러 중요한 변수 값들을 복원했으며, 이는 첫 번째 분석에서 공유한 바 있습니다 [1].

이 과정에서 우리는 키퍼(keeper)가 하나뿐이라는 것을 발견했습니다(위 그림 참조). 해당 값이 공격 트레이스에서 얻어졌고 공격 트랜잭션이 모든 서명 검증을 통과했기 때문에, 잠재적인 원인은 개인 키 유출이거나 서버의 서명 프로세스의 버그일 수 있다고 생각했습니다 [1].

그러나 우리는 여기서 실수를 했습니다. 공격을 분석하는 것은 양파 껍질을 벗기는 것과 같습니다. 진짜 "근본적인 근본적인 근본 원인"을 찾을 때까지 한 번에 한 겹씩 벗겨냅니다. 그 당시, 우리는 키퍼가 변경되었는지 여부를 확인하기 위해 양파를 더 벗기지 않았습니다!

Step 4: 새로운 단서

몇 시간 후, Kelvin과 slow mist가 트위터에서 키퍼가 변경되었음을 보여주는 새로운 단서를 제공했습니다. 변경 과정은 해시 충돌을 악용하여 강력한 함수를 호출합니다 — "스마트"한 해킹입니다.

이제 우리는 첫 번째 분석이 완전하지 않았음을 깨달았습니다. 최신 정보를 바탕으로, 키퍼를 변경한 트랜잭션을 재현했습니다. 여전히 트레이스는 매우 단순했습니다.

그러나 이 트랜잭션 중에는 (하나가 아닌) 네 명의 키퍼가 있었다는 점을 기억하십시오. 이 모든 키는 다른 정상적인 트랜잭션들과 동일했습니다 — 즉, 키들은 정상적이었습니다. 여기서 질문이 생깁니다: 키퍼를 변경하는 트랜잭션이 어떻게 체인에 올라가고 첫 번째로 실행될 수 있었을까요?

Step 5: 소스 트랜잭션 찾기

Poly Network는 크로스체인 브릿지이기 때문에 소스 트랜잭션을 찾으려 했습니다. 어딘가에 소스 트랜잭션이 존재해야 했습니다. 우리는 중요한 변수를 디코딩하여 이를 수행했습니다(다음 그림에서와 같이). 이는 소스 체인과 폴리 체인의 트랜잭션 해시를 보여줍니다.

다른 곳에서는 언급되지 않은 트릭이 있습니다. 변수의 tx 해시 값은 폴리 체인의 공식 값과 다른 표현 방식을 가집니다. 예를 들어, 그림에서 폴리 체인의 tx 해시는 0x80cc978479eb082e1e656993c63dee7a5d08a00dc2b2aab88bc0e465cfa0721a입니다. 그러나 폴리 체인 브라우저에서 해시 값은 1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80입니다(차이점이 보이시나요?). 우리는 8월 11일 16:55에 EthereumSecurity 텔레그램 그룹에서 발견한 내용을 공유했습니다.

Step 6: 근본 원인 찾기

그러나 여전히 "키퍼를 변경하는 트랜잭션"이 왜 체인에 패킹될 수 있었는지에 대한 질문에 답할 수 없었습니다. 이 질문에 답하기 위해 Ontology 체인에서 시작하여 트랜잭션 흐름을 찾았습니다:

Ontology 트랜잭션 -> Ontology 릴레이어 -> Poly 체인 -> Ethereum 릴레이어 -> Ethereum

그런 다음 Ontology 체인과 릴레이어들의 소스 코드를 읽었습니다. 몇 시간 후, Ontology 릴레이어가 크로스체인 트랜잭션에 대한 충분한 검증을 갖추지 않았다는 것을 발견했습니다. 이로 인해 악성 트랜잭션이 폴리 체인에 패킹될 수 있었습니다. 그 후 시스템이 침해되었습니다.

내부 토론과 검토 후, 우리는 8월 12일 02:41에 트위터와 미디엄[3]에 발견 사항을 공개했습니다.

교훈

  • 설계에 의한 보안. 보안은 DeFi 프로젝트의 전체 과정에 포함되어야 합니다. 사용자들은 프로젝트에 자신의 돈을 맡깁니다. 그에 대한 보답으로 프로젝트는 그 신뢰를 받을 자격이 있어야 합니다. 안타깝게도, Poly Network에서 보안에 대한 무관심을 목격했습니다. 예를 들어, 검증의 부재는 구식 보안 취약점으로, 제가 학부 수업에서 가르치는 내용입니다.

  • 600M TVL이 넘는 DeFi 프로젝트에 검증된 소스 코드가 없습니다. 분산 인프라의 기반은 신뢰이며, 신뢰의 토대는 투명성입니다. 안타깝게도, 사용자들은 블랙박스 프로젝트에 기꺼이 돈을 넣으려 하는데, 이는 나를 놀라게 하고 걱정하게 만듭니다. 사용자의 보안 의식을 향상시키는 방법은 아마도 새로운 해결책이 필요할 것입니다.

참고 문헌

[1]https://blocksecteam.medium.com/the-initial-analysis-of-the-polynetwork-hack-270ac6072e2a

[2]https://twitter.com/kelvinfichter/status/1425290462076747777

[3]https://blocksecteam.medium.com/the-further-analysis-of-the-poly-network-attack-6c459199c057

크레딧: Yufeng Hu, Siwei Wu, Lei Wu, Yajin Zhou @ BlockSecTeam

BlockSec (@BlockSecTeam) / Twitter

Sign up for the latest updates
~$160만 손실: Moke 토큰, LpdFi 익스플로잇 | BlockSec 위클리
Security Insights

~$160만 손실: Moke 토큰, LpdFi 익스플로잇 | BlockSec 위클리

2026년 8월 3~9일, BNB 체인에서 2건의 보안 사고가 발생해 총 약 160만 달러의 손실이 발생했으며, 모두 가격 조작이 원인이었습니다. LpdFi(약 69.7만 달러)는 PancakeSwap 유동성 풀을 주문 평가와 이자 정산에 동시 사용해 공격자가 원금을 부풀리고 과도한 이자를 탈취했습니다. Moke Token(약 90.6만 달러)은 조작 가능한 현물 가격과 중복 LP 배당 회계를 결합해 MOKE를 부풀려 BNB 배당을 반복 수령했습니다.

COLDCARD 사건: 지갑의 "무작위" 시드가 무작위가 아니었을 때
Security Insights

COLDCARD 사건: 지갑의 "무작위" 시드가 무작위가 아니었을 때

COLDCARD 펌웨어의 빌드 통합 버그로 비트코인 시드 생성이 취약한 소프트웨어 RNG로 라우팅되어 지갑 시드가 오프라인 복구 가능해졌습니다. 시드 자체의 취약점이므로 펌웨어 업데이트로 해결 불가하며, 2026년 8월 7일 기준 확인된 피해는 1,405 BTC(~9,100만 달러), 비공개 추정치는 최대 2,055 BTC입니다.

~$88M 손실: COLDCARD 및 LULA 익스플로잇 | BlockSec 위클리
Security Insights

~$88M 손실: COLDCARD 및 LULA 익스플로잇 | BlockSec 위클리

2026년 7월 27일~8월 2일, 비트코인과 BNB 체인에서 약 8,800만 달러 손실을 유발한 두 건의 보안 사고가 발생했습니다. COLDCARD 사고는 하드웨어 지갑 펌웨어의 엔트로피 오류로, RNG 매크로 활성화 여부 미확인으로 결정론적 폴백이 실행되어 약 1,370 BTC(~8,800만 달러)가 탈취됐습니다. BNB 체인의 LULA 토큰은 비즈니스 로직 취약점으로 `recycle()` 함수가 악용되어 PancakeSwap V2 유동성에서 약 57만 8천 달러가 유출됐습니다.

Best Security Auditor for Web3

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

BlockSec Audit
보안 연구자 관점에서 바라본 Poly Network 해킹 사건 회고