Chiral Analysis of Smart Contracts: Detecting Vulnerabilities from Relational Inconsistencies Across Business Paths
이 논문은 의미론적으로 쌍을 이루는 비즈니스 경로 간의 불일치를 식별함으로써 전통적인 단일 함수 분석기가 놓치는 복잡한 로직 버그를 효과적으로 찾아내는 관계형 정적 분석 모델인 '카이럴 분석(chiral analysis)'과 이를 구현한 ChiralDetector 도구를 소개한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
탐정의 딜레마: 코드가 생략을 통해 거짓말을 할 때
당신이 북적이는 도시에서 미스터리를 풀려는 탐정이라고 상상해 보십시오. 보통 당신은 결정적인 증거를 찾습니다: 깨진 창문, 진흙 묻은 발자국, 혹은 수상한 쪽지 같은 것 말입니다. 컴퓨터 코드, 특히 블록체인에서 실행되는 '스마트 컨트랙트'의 세계에서 전통적인 보안 도구들은 바로 이 탐정 역할을 합니다. 이 도구들은 코드를 한 줄씩 스캔하며 문에 잠금장치가 빠졌거나 계산 오류가 있는 것과 같은 명백한 실수들을 찾아냅니다. 이러한 도구들은 '로컬(local)' 버그, 즉 단일 방 안에서 발생하는 종류의 버그를 찾는 데는 탁월합니다.
하지만 만약 범죄가 방 안에서 일어난 것이 아니라면 어떨까요? 만약 앞문은 잠겨 있는데 뒷문은 활짝 열려 있고, 이 두 문이 원래 하나의 보안 시스템의 일부여야 했다면 그 미스터리는 무엇일까요? 컴퓨터 과학에서는 이를 '관계적(relational)' 문제라고 부릅니다. 이는 하나의 부서진 조각에 관한 것이 아니라, 서로 일치해야 하지만 그렇지 않은 두 조각에 관한 문제입니다. 이 논문은 두 코드 경로를 마치 서로의 진실을 비추어야 하는 거울 이미지처럼 비교함으로써, 이러한 교묘한 버그를 잡아내는 새로운 방법을 탐구합니다. 만약 한 경로가 "정지"라고 말하고 다른 경로가 "진행"이라고 말한다면, 설령 "정지"와 "진행" 각각은 완벽해 보일지라도 그 시스템은 고장 난 것입니다.
논문: 카이럴 분석(Chiral Analysis)과 거울 테스트
이 논문은 **카이럴 분석(Chiral Analysis)**이라는 영리하고 새로운 방법을 소개합니다. '카이럴(chiral, 카이랄)'이라는 단어는 화학에서 유래되었으며, 서로 거울상 관계에 있지만 완벽하게 겹쳐질 수 없는 물체(예: 왼손과 오른손)를 설명할 때 사용됩니다. 스마트 컨트랙트의 세계에서 저자들은 많은 비즈니스 운영이 쌍으로 이루어진다고 제안합니다: '단일(single)' 거래와 '배치(batch)' 거래, '구매(buy)'와 '판매(sell)', 또는 가격의 '미리보기(preview)'와 그 가격의 '실행(execution)' 등이 그것입니다. 이 쌍들은 코드의 카이럴 쌍둥이들입니다.
핵심 아이디어는 단순하면서도 강력합니다: 이 쌍들이 서로의 숙제를 검사하는 것처럼 취급하는 것입니다. 사용자가 아이템을 구매하면, 코드는 사용자에게 수수료를 부과해야 합니다. 만약 동일한 사용자가 나중에 그 아이템을 판매한다면, 코드는 원래의 구매와 맥락이 맞도록 돈을 처리해야 합니다. 만약 '구매' 경로는 수수료를 달러로 부과하는데 '판매' 경로가 실수로 다른 통화로 환불하거나, 혹은 '배치' 버전이 '단일' 버전이 반환하는 돈을 환불하는 것을 잊어버린다면 버그가 존재하는 것입니다. 논문은 이러한 버그들이 표준 스캐너들에게는 보이지 않는 이유가 각 코드 라인 자체는 올바르게 보이기 때문이라고 주장합니다. 오류는 두 경로를 거울에 비추어 보았을 때 서로 일치하지 않는다는 것을 발견할 때 비로-로 드러납니다.
이 보이지 않는 오류를 찾기 위해 저자들은 **카이럴 디텍터(ChiralDetector)**라는 프로토타입 도구를 구축했습니다. 이 도구를 특정 직무 기술서를 가진 매우 똑똑한 인턴이라고 생각하십시오. 먼저, 이 도구는 전체 코드베이스를 읽고 모든 가능한 '비즈니스 경로'(예: 고객이 상점을 통과할 수 있는 모든 경로를 추적하는 것)를 맵핑합니다. 그런 다음, '정적 랭커(static ranker)'—즉, 일련의 간단한 규칙들—를 사용하여 어떤 경로들이 카이럴 쌍둥이일 가능성이 있는지 추측합니다. 예를 들어, buy라는 이름의 함수와 동일한 은행 계좌를 건드리는 sell이라는 이름의 다른 함수를 찾아낼 수 있습니다.
잠재적인 쌍 목록을 확보하면, 이제 핵심적인 역할을 수행할 LLM(대규모 언로 모델, 인간의 언어와 코드를 이해하는 유형의 AI)을 호출합니다. 이 AI는 단순히 오류를 찾는 것에 그치지 않고, 논리학자처럼 행동합니다. AI는 다음과 같이 질문합니다: "만약 이 두 경로가 서로의 거울이라면, 그들은 어떤 규칙을 따라야 하는가?" AI는 일곱 가지 특정 차원을 점검합니다:
- 가드(Guards): 두 경로 모두 동일한 비밀번호나 권한을 확인했는가?
- 액터(Actors): 두 경로 모두에서 동일한 사람이 돈을 지불하고 받았는가?
- 상태(State): 두 경로 모두 데이터베이스를 동일한 방식으로 업데이트했는가?
- 값(Value): 수수료와 환불을 일관되게 처리했는가?
- 순서(Order): 동일한 순서로 작업을 수행했는가?
- 실패(Failure): 문제가 발생했을 때, 두 경로 모두 동일하게 중단되거나 복구되는가?
- 외부(External): 동일한 외부 소스를 신뢰하는가?
만약 AI가 불일치를 발견하면, 즉시 "버그!"라고 외치지 않습니다. 대신 발견 내용을 '엄격한 검증기(strict validator)'에게 전달합니다. 이 검증기는 AI가 틀렸음을 증명하려고 노력하는 회의적인 편집자 역할을 합니다. 검증기는 다음과 같이 묻습니다: "이것이 정말 버그인가, 아니면 단순히 설계상의 선택인가?" 마지막으로, 도구는 유사한 결과들을 그룹화하여 100개의 작은 오류를 보고하는 대신, 하나의 큰 근본 원인을 보고합니다.
결과: 숨겨진 결함 찾기
저자들은 이 시스템을 **Phi 프로토콜(Phi protocol)**이라는 실제 프로젝트에 테스트했습니다. 결과는 이 접근 방식이 작동하고 있음을 시사하지만, 여전히 진행 중인 작업임을 보여줍니다.
실험에서 일어난 과정은 다음과 같습니다:
- 도구는 3,217개의 코드 경로 쌍을 조사하는 것으로 시작했습니다.
- 분명히 관련이 없는 것들을 필터링한 후, 심층 조사를 위해 1,643개의 쌍을 유지했습니다.
- AI 디텍터는 201개의 잠재적 이슈(의심스러운 후보와 확정된 후보의 혼합)를 찾아냈습니다.
- 유사한 보고를 그룹화하고 중복을 제거한 후, 이 숫자는 101개의 그룹으로 줄어들었습니다.
- 엄격한 검증기를 거치면서 이 숫자는 44개의 확정된 양성 사례로 더 줄어들었습니다.
- 마지막으로, 인간 전문가가 근본 원인을 검토한 후, 팀은 13개의 고유하고 효과적인 이슈를 식별했습니다.
이 13개의 이슈는 표준 도구들이 놓쳤던 종류의 것들이었습니다. 예를 들면 다음과 같습니다:
- "증명(Proof)" 혼동: 시스템이 소유권 증명을 다른 아이템에 재사용할 수 있도록 허용했는데, 이는 '구매'와 '청구(claim)' 경로가 해당 증명을 특정 아이템에 올바르게 결합하지 않았기 때문입니다.
- 수수료 혼선: 시스템의 한 부분은 수수료를 '베이시스 포인트(basis points, 백분율 단위)'로 계산하는 반면, 다른 부분은 동일한 숫자를 '웨이(wei, 아주 작은 화폐 단위)'로 취급하여 막대한 금융 오류를 초래했습니다.
- 환불 함정: 사용자가 과다 지불했을 때, '단일' 거래 경로는 사용자에게 돈을 환불했지만, '배치' 거래 경로는 실수로 중간 컨트랙트로 환불을 보내 사용자가 돈을 받지 못하게 만들었습니다.
저자들은 이 방법이 단순한 오타보다는 시스템이 돈과 규칙에 대해 어떻게 '생각'하는지에 대한 오류인 '비즈니스 로직' 버그를 잡는 데 특히 유용하다고 제안합니다. 또한 이 과정이 완벽하지는 않다고 언급했습니다. 즉, 많은 '노이즈(오탐)'가 발생하여 이를 정제해야 했으며, AI가 관계를 포착할 만큼 충분히 똑똑해야 한다는 점에 의존한다는 것입니다. 그러나 이 방법이 다른 도구들이 놓친 13개의 독특하고 영향력 있는 이슈를 찾아냈다는 사실은, 코드를 '카이럴 쌍'의 관점에서 바라보는 것이 유망한 새로운 방향임을 시사합니다.
논문은 이 방식이 모든 보안 문제를 해결하는 마법 지팡이는 아니지만, 코드 라인 사이의 공간에 숨어 있는 버그를 찾는 구조화된 방법을 제공한다고 결론짓습니다. 코드 경로를 거울 이미지로 취급함으로써, 우리는 마침내 반영된 모습이 실체와 일치하지 않을 때 나타나는 균열을 볼 수 있습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.