블록체인/레벨 IX · 속도와 스펙터클/9.2 공정한 시장/수업 1
시장 남용의 유형
6가지 공격 계층, 그리고 코드로 실제 해결할 수 있는 것
준비물블록 탐색기 인터페이스토큰 컨트랙트 하나의 검증된 소스 코드공격 벡터를 정리할 노트컨트랙트 소스 코드를 볼 수 있는 블록 탐색기
호기심
- 퍼미션리스여야 할 토큰 컨트랙트에 왜 관리자 키가 필요할까요?
- 똑같은 두 거래가 누가 먼저 제출하느냐에 따라 어떻게 서로 다른 가격에 체결될 수 있을까요?
- 코드로 사회공학적 공격을 막을 수 없다면, 시장의 어느 부분이 여전히 취약한 상태일까요?
탐구
- 시장 교란 행위는 여섯 개의 계층으로 나뉘며, 각 계층은 특정한 구조적 약점을 악용합니다. 컨트랙트 계층은 발행이나 동결처럼 남겨 둔 권한과 관련되고, 시장 구조 계층에는 얕은 유동성 풀과 커브 설계가 포함되며, 순서 계층은 트랜잭션 순서를 악용하고, 가짜 활동 계층은 거래량과 홀더 수를 부풀리며, 소셜 계층은 사칭을 통해 신뢰를 조작하고, 지갑 계층은 피싱으로 자산을 빼냅니다. 각 계층은 네 가지 방어 주체(코드, 시장 설계, 암호학, 사람) 중 하나가 맡으며, 이번 레벨에서는 각각을 위한 도구가 이미 존재한다는 것을 보여 줍니다. 이 글은 빌더와 사용자 모두를 위해 쓰였습니다.
- 탈취는 흔히 컨트랙트 계층에서 시작됩니다. 개발자가 발행(민트) 권한을 계속 보유하고 있으면 원할 때마다 새 토큰을 찍어 내 기존 홀더들을 상대로 팔 수 있습니다. 동결 기능을 이용하면 특정 지갑의 매도를 막아 자본을 사실상 묶어 둘 수 있습니다. 업그레이드 가능한 프록시를 쓰면 개발자가 출시 후에도 기반 코드를 바꿀 수 있습니다. 이것들은 버그가 아니라 공격 표면을 만드는 기능입니다. 이러한 키를 제거하면 위협은 사라지지만, 치명적인 오류를 고치거나 긴급 상황에 대응할 수 있는 능력도 함께 사라집니다.
- 순서 공격은 대기 중인 트랜잭션을 순서가 정해지기 전에 볼 수 있는 쪽이 악용하는 공격입니다. 프론트러닝은 트레이더가 대기 중인 주문을 보고 더 높은 수수료를 붙인 자신의 트랜잭션을 제출해 먼저 체결되게 하는 것입니다. 샌드위치 공격은 피해자의 대규모 스왑 직전에 매수하고 직후에 바로 매도해, 그 스왑이 일으킨 가격 영향으로 이익을 얻는 방식입니다. 이 손실은 더 불리한 체결 가격을 받게 되는 일반 트레이더들이 떠안습니다. 슬리피지 한도는 잠재적 손실의 상한을 정해 주지만 공격 자체를 막지는 못합니다.
- 런칭 공격은 선착순 가격 책정의 속도를 악용합니다. 스나이퍼는 런칭 직후 맨 첫 블록에서 토큰을 매수하며, 여러 트랜잭션을 하나로 묶어 원자적으로 포함시키기 위해 번들을 사용하는 경우가 많습니다. 시빌 지갑을 이용하면 한 주체가 여러 주소를 제어하면서 보유 집중도를 위장하고 지갑당 보상을 파밍할 수 있습니다. 이러한 공격은 저렴한 주소 생성 비용과, 보유량에 선형적으로 비례하지 않는 보상 구조에 기대고 있습니다. 탐지하려면 보통 사후에 자금 출처 그래프를 분석해야 합니다.
- 가짜 활동은 관심을 끄는 지표를 부풀립니다. 워시 트레이딩은 인위적인 거래량을 만들기 위해 자기 지갑들 사이에서 토큰을 사고파는 것입니다. 볼륨 봇은 트렌딩 목록에 오르기 위해 거래를 반복적으로 일으키고, 더스트 살포는 가짜 홀더 수를 만들어 냅니다. 모든 거래에 수수료가 붙으면 워시 트레이딩은 비용이 많이 들지만, 트렌딩 알고리즘이 고유 지갑에 가중치를 두면 시빌 공격이 수익성을 갖게 됩니다. 이러한 왜곡은 실제 시장의 관심에 대해 투자자를 오도합니다.
- 소셜 계층은 코드가 아니라 사람의 신뢰를 악용합니다. 공개되지 않은 유료 홍보, 공식 계정 사칭, 조직적인 펌프 앤 덤프에는 기술적 취약점이 전혀 필요 없습니다. 피싱 사이트와 악성 승인은 사용자의 지갑에서 직접 자산을 빼냅니다. 코드는 온체인 기록 검증을 통해 이러한 공격을 드러낼 수는 있지만 막을 수는 없습니다. 이러한 위협은 컨트랙트의 로직이 아니라 사람들의 행동 속에 존재합니다.
- 컨트랙트 로직은 무엇이 가능한지를 정의합니다. 코드에 관리자만 호출할 수 있는 민트 함수가 남아 있다면, 그 키는 영구적인 공격 표면으로 남습니다. 민트 권한을 완전히 제거하면 통제되지 않는 인플레이션의 위험이 사라집니다. 마찬가지로 매도세 변수나 동결 함수를 삭제하면 허니팟과 블랙리스트 남용을 막을 수 있습니다. 이는 이분법적인 선택입니다. 권한은 존재하거나, 존재하지 않습니다.
- 시장 구조가 체결 순서를 결정합니다. 순차 처리 방식에서는 블록 안의 첫 매수가 가장 좋은 가격을 받습니다. 일괄 청산 메커니즘은 일정한 시간 구간 안의 트랜잭션을 묶어 모두 하나의 균일한 청산 가격으로 체결합니다. 모든 주문이 같은 가격을 받기 때문에 배치 안에서는 프론트러닝과 샌드위치 공격이 무력화됩니다. 먼저 들어가거나 다른 사람의 주문을 감싸도 얻는 것이 없습니다.
- 어떤 위험은 제한할 수는 있어도 없앨 수는 없습니다. 공급량의 40%를 보유한 크리에이터는 이를 한꺼번에 팔아 초기 구매자들이 보는 가격을 폭락시킬 수 있습니다. 코드는 크리에이터의 물량을 잠그거나 베스팅할 수 있지만, 잠금이 풀린 홀더가 파는 것을 막을 수는 없습니다. 이는 탈취와는 구별되는 시장 위험입니다. 더 이른 블록에서 매수하는 것도 여전히 이득이 될 수 있습니다. 설계자는 대형 홀더로 인한 변동성이 퍼미션리스 시장의 본질적인 특성이지, 패치해야 할 버그가 아니라는 점을 받아들여야 합니다.
- 사회공학적 공격은 코드베이스 바깥에 존재합니다. 피싱 링크, 사칭 계정, 유료 홍보는 연산상의 취약점이 아니라 사람의 신뢰를 악용합니다. 어떤 스마트 컨트랙트도 인플루언서가 토큰을 콜하기 전에 자신의 지분을 공개했는지 확인할 수 없습니다. 이러한 공격은 상태 전이가 아니라 관심과 믿음 위에서 작동하기 때문에, 기술적 보안 수준과 관계없이 계속됩니다.
- 정직한 설계 문서는 어떤 공격 유형이 코드로 제거되고, 어떤 것이 시장 메커니즘으로 무력화되며, 어떤 것이 사람의 행동에 달린 채 줄일 수 없는 위험으로 남는지를 나열합니다. 이 문서는 민트 남용은 불가능하고, 샌드위치 공격은 일괄 처리로 완화되며, 피싱은 여전히 개인의 보안 책임이라고 분명히 밝힙니다. 이러한 투명성 덕분에 사용자는 완전한 안전을 가정하는 대신 자신의 위험을 정확히 가늠할 수 있습니다.
- 검증된 소스 코드가 있는 EVM 토큰을 블록 탐색기에서 열고 `mint`, `pause`, `owner` 같은 함수를 찾아보세요. 솔라나에서는 대신 민트 권한과 동결 권한, 그리고 프로그램의 업그레이드 권한을 확인하세요. 이러한 함수를 누구나 호출할 수 있는지, 아니면 특정 주소로 제한되어 있는지 확인하세요. 그런 함수가 없고 컨트랙트가 업그레이드 불가능하다면, 해당 공격 벡터는 단순히 비활성화된 것이 아니라 구조적으로 존재하지 않는 것입니다.
파트 I시장 교란 행위의 분류
파트 II코드가 고칠 수 있는 것과 고칠 수 없는 것
핵심 사실
- 컨트랙트 계층의 교란 행위에는 개발자가 보유한 발행(민팅), 동결, 업그레이드 가능한 프록시가 포함됩니다.
- 샌드위치 공격은 블록 내에서 피해자의 대규모 스왑이 일으킨 가격 영향으로 이익을 얻습니다.
- 시빌 지갑을 이용하면 한 주체가 여러 주소를 제어하며 지갑당 보상을 파밍할 수 있습니다.
- 워시 트레이딩은 거래량 지표를 부풀리며, 흔히 동일한 주체가 통제하는 지갑들 사이에서 이루어집니다.
- 피싱과 같은 소셜 계층 공격은 사용자의 신뢰를 악용하며, 컨트랙트 코드만으로는 막을 수 없습니다.
- 관리자 키를 제거하면 특정 공격 벡터는 차단되지만, 긴급 유지보수 기능도 함께 사라집니다.
- 컨트랙트 코드에서 민트 권한을 제거하면 공격 벡터로서의 통제되지 않는 인플레이션이 사라집니다.
- 일괄 청산은 한 배치 안의 모든 주문에 같은 가격을 매겨, 배치 안에서 먼저 들어가는 이점을 없앱니다.
- 매도세와 동결 기능은 허니팟을 가능하게 합니다. 이 기능이 없으면 그 경로는 사라지지만, 블랙리스트, 전송 한도, 숨겨진 로직도 같은 일을 할 수 있습니다.
- 크리에이터의 물량 매도는 탈취가 아니라 시장 위험이며, 홀더의 권리를 제한하지 않고서는 코드로 막을 수 없습니다.
- 피싱과 사칭은 사람의 신뢰를 악용하며, 프로토콜 설계로는 없앨 수 없습니다.
- 정직한 설계 문서는 위험을 제거됨, 중화됨, 또는 줄일 수 없음으로 명확하게 분류합니다.
연습 아홉, 여섯, 셋, 하나
9모으기서로 다른 시장 교란 행위 9가지를 나열하세요. 각각이 어느 계층(컨트랙트, 구조, 순서, 활동, 소셜, 지갑)에 속하는지 적으세요.
6묶기9가지 교란 행위를 각각 어떤 종류의 방어 수단으로 막을 수 있는지에 따라 6개 그룹으로 묶으세요.
3추리기6개 그룹을, 기술적 안전장치가 있는데도 이러한 공격이 계속되는 근본적인 이유 3가지로 압축하세요.
1결정화퍼미션리스 시장이 공격 표면을 전혀 갖지 않을 수 있는지, 그리고 그 이유는 무엇인지 한 문장으로 쓰세요.
팩트 체크
날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.