Back to Blog

Solana 생태계 보안 강화 (7) — 타입 혼동

April 29, 2022
4 min read

0. 복습

1. 개요

이전 블로그에서 일반적인 다중 서명의 구현에 대해 소개했습니다. 이번 포스트에서는 또 다른 보안 문제인 타입 혼동(Type Confusion)에 대해 다루겠습니다.

2. 역직렬화/직렬화

Solana에서 프로그램 상태는 계정에 저장됩니다. 타입 혼동 문제는 계정의 역직렬화/직렬화 과정에서 발생합니다. 프로그램의 로직은 일반적으로 데이터 구조에 의존합니다. 그러나 프로그램이 역직렬화/직렬화 과정에서 계정의 타입을 올바르게 확인하지 않을 수 있습니다. 이는 공격자에 의해 악용될 수 있으며, 예상치 못한 손실을 초래할 수 있습니다.

3. 코드 리뷰 (타입 혼동)

다음에서는 간단한 프로그램을 통해 타입 혼동 문제를 설명합니다. 테스트 코드는 여기에서 확인할 수 있습니다.

테스트 프로그램에서는 두 가지 데이터 구조체를 구현합니다. 하나는 User이고 다른 하나는 Metadata입니다. 두 구조체 모두 계정의 공개 키를 기록합니다(서로 다른 계정).

프로그램에는 세 가지 명령이 있습니다. 명령 InitializeUserUser 계정을 생성하고 인증된 계정(즉, authority)을 설정하기 위해 설계되었습니다. 마찬가지로, 명령 InitializeMetaMetaData 계정을 생성하고 일반 계정(즉, account)을 설정하기 위해 호출됩니다. 명령 Test는 공격자가 프로그램의 검증 로직을 우회하고 제어된 MetaData로 공격을 수행할 수 있음을 보여줍니다.

명령 Test()를 살펴보겠습니다. 프로그램은 전달된 User 계정의 소유자가 프로그램 자체인지 확인합니다(86번째 줄 - 89번째 줄). 역직렬화 후(92번째 줄), 프로그램은 전달된 authority 계정의 공개 키와 User 계정에 저장된 공개 키를 비교합니다. 두 값이 같지 않으면 프로그램이 되돌아갑니다(93번째 줄 - 96번째 줄). 마지막 검사는 authority 계정이 트랜잭션에 서명했는지 확인하는 것입니다. 그러나 공격자가 제어된 Metadata 계정을 전달하면 모든 검사를 우회할 수 있습니다. 그 이유는 프로그램이 계정의 타입을 확인하지 않기 때문입니다. 프로그램은 바이트 배열을 받아 프로그램에 정의된 다양한 타입의 구조체로 직접 역직렬화합니다.

테스트 프로그램을 배포하여 추가 테스트를 진행했으며, 이 링크에서 확인할 수 있습니다.

3.1 트랜잭션 전송

프로그램을 배포한 후, 프로그램에서 제공하는 세 가지 명령을 순서대로 호출하는 스크립트를 작성합니다.

먼저 InitializeUserInitializeMeta를 호출합니다. Metadata 계정에 저장된 account 계정으로 자신의 공개 키를 설정한다는 점에 유의하세요.

함수 test()에서 Metadata 계정을 User 계정으로, 자신의 계정을 authority_info로 전달합니다(347번째 줄 - 348번째 줄). 프로그램은 Metadata를 구조체 User로 역직렬화하며 모든 검사가 우회될 수 있습니다.

트랜잭션을 전송했으며 여기에서 확인할 수 있습니다. 프로그램이 성공을 반환했으며, 이는 검증되지 않은 계정 타입으로 검사를 성공적으로 통과했음을 의미합니다.

4. 요약

이 글에서는 Solana의 타입 혼동 문제를 소개했습니다. 이 문제를 방지하는 방법은 여러 가지가 있습니다. 예를 들어, 구조체에 계정의 타입을 기록하는 속성을 추가하고, 프로그램이 전달된 계정에서 읽기/쓰기를 수행하기 전에 항상 타입 속성을 확인하도록 해야 합니다. 계속 팔로우해 주세요. 앞으로도 더 많은 내용을 공유할 예정입니다.

시리즈의 다른 글 읽기:


BlockSec 소개

BlockSec은 전 세계적으로 著名한 보안 전문가 그룹이 2021년에 설립한 선도적인 블록체인 보안 회사입니다. 이 회사는 대중적 채택을 촉진하기 위해 새롭게 부상하는 Web3 세계의 보안성과 사용성을 향상시키는 데 전념하고 있습니다. 이를 위해 BlockSec은 스마트 컨트랙트 및 EVM 체인 보안 감사 서비스, 보안 개발 및 위협 사전 차단을 위한 Phalcon 플랫폼, 자금 추적 및 조사를 위한 MetaSleuth 플랫폼, 그리고 Web3 빌더들이 암호화폐 세계를 효율적으로 탐색할 수 있는 MetaSuites 확장 프로그램을 제공합니다.

현재까지 MetaMask, Uniswap Foundation, Compound, Forta, PancakeSwap 등 300개 이상의 저명한 고객사에 서비스를 제공했으며, Matrix Partners, Vitalbridge Capital, Fenbushi Capital 등 유수의 투자자들로부터 두 차례의 자금 조달 라운드를 통해 수천만 달러를 유치했습니다.

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

공식 트위터 계정: https://twitter.com/BlockSecTeam

Sign up for the latest updates
돼지도살 사기로 잃어버린 암호화폐를 복구하는 방법

돼지도살 사기로 잃어버린 암호화폐를 복구하는 방법

피그 버처링 사기로 2025년 미국 피해자들이 72억 달러를 잃었습니다. 자금 회수를 위해선 수사기관 공식 신고와 충분한 온체인 증거가 필요합니다. 이 2026년 가이드는 피해 직후 1시간 내 조치, 자금 흐름 보고서, 현실적인 회수 가능성, 그리고 피해자를 노리는 2차 '회수 서비스' 사기 식별법을 다룹니다.

~$135만 달러 손실: BarnBridge, DeFiTuna | BlockSec 주간 보고
Security Insights

~$135만 달러 손실: BarnBridge, DeFiTuna | BlockSec 주간 보고

이 주간 보고서는 2026년 7월 13일부터 19일까지 발생한 2건의 보안 사고를 다루며, 이더리움과 솔라나에서 총 약 135만 달러의 손실이 발생했습니다. 솔라나 대출 프로토콜 DeFiTuna은 포지션 가치가 0일 때 부채와 무관하게 건전한 것으로 처리되는 결함으로 약 57만 달러를 잃었습니다. BarnBridge는 더 이상 사용되지 않지만 활성 상태인 이더리움 거버넌스 시스템을 악용한 공격자가 악의적인 제안을 통과시켜 약 77만 6천 달러의 USDC를 탈취당했습니다.

암호화폐의 오염 분석: 포이즌, 헤어컷, FIFO 방식 설명

암호화폐의 오염 분석: 포이즌, 헤어컷, FIFO 방식 설명

오염 분석은 수사관이 블록체인에서 도난 암호화폐를 추적하는 방법입니다. 이 가이드는 포이즌, 헤어컷, FIFO 세 가지 표준 방법을 이더리움 실제 예시와 한계점과 함께 설명하고, 현대 자금 추적 도구의 대규모 적용 방식을 소개합니다.