
0. 복습
- Solana 생태계 보안 (1) — Hello Solana
- Solana 생태계 보안 (2) — 프로그램 간 호출
- Solana 생태계 보안 (3) — 프로그램 업그레이드
- Solana 생태계 보안 (4) — 계정 검증
- Solana 생태계 보안 (5) — 다중 서명
- Solana 생태계 보안 (6) — 다중 서명2
1. 개요
이전 블로그에서 일반적인 다중 서명의 구현에 대해 소개했습니다. 이번 포스트에서는 또 다른 보안 문제인 타입 혼동(Type Confusion)에 대해 다루겠습니다.
2. 역직렬화/직렬화
Solana에서 프로그램 상태는 계정에 저장됩니다. 타입 혼동 문제는 계정의 역직렬화/직렬화 과정에서 발생합니다. 프로그램의 로직은 일반적으로 데이터 구조에 의존합니다. 그러나 프로그램이 역직렬화/직렬화 과정에서 계정의 타입을 올바르게 확인하지 않을 수 있습니다. 이는 공격자에 의해 악용될 수 있으며, 예상치 못한 손실을 초래할 수 있습니다.
3. 코드 리뷰 (타입 혼동)
다음에서는 간단한 프로그램을 통해 타입 혼동 문제를 설명합니다. 테스트 코드는 여기에서 확인할 수 있습니다.

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

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

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

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

트랜잭션을 전송했으며 여기에서 확인할 수 있습니다. 프로그램이 성공을 반환했으며, 이는 검증되지 않은 계정 타입으로 검사를 성공적으로 통과했음을 의미합니다.
4. 요약
이 글에서는 Solana의 타입 혼동 문제를 소개했습니다. 이 문제를 방지하는 방법은 여러 가지가 있습니다. 예를 들어, 구조체에 계정의 타입을 기록하는 속성을 추가하고, 프로그램이 전달된 계정에서 읽기/쓰기를 수행하기 전에 항상 타입 속성을 확인하도록 해야 합니다. 계속 팔로우해 주세요. 앞으로도 더 많은 내용을 공유할 예정입니다.
시리즈의 다른 글 읽기:
- Solana 생태계 보안 (1) — Hello Solana
- Solana 생태계 보안 (2) — 프로그램 간 호출
- Solana 생태계 보안 (3) — 프로그램 업그레이드
- Solana 생태계 보안 (4) — 계정 검증
- Solana 생태계 보안 (5) — 다중 서명
- Solana 생태계 보안 (6) — 다중 서명2
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



