[논문 리뷰] SIF: A Framework for Solidity Code Instrumentation and Analysis
SIF는 Solidity 스마트 계약 분석, 인스트루멘테이션, 코드 생성을 위한 종합적인 C++ 기반 프레임워크로, 추상 구문 트리(_AST_)를 통해 개발자가 코드를 쿼리하고 변환하며 생성할 수 있도록 한다. 이 프레임워크는 취약성 탐지, 코드 분석, 디버깅을 위한 7종의 실용적 도구를 지원하며, 실제 1,838개의 이더리움 계약에 대해 높은 사용성과 자동화 수준을 입증하여 스마트 계약 개발을 위한 통합 도구 인fra로의 실현 가능성을 입증하였다.
Solidity is an object-oriented and high-level language for writing smart contracts that are used to execute, verify and enforce credible transactions on permissionless blockchains. In the last few years, analysis of smart contracts has raised considerable interest and numerous techniques have been proposed to check the presence of vulnerabilities in them. Current techniques lack traceability in source code and have widely differing work flows. There is no single unifying framework for analysis, instrumentation, optimisation and code generation of Solidity contracts. In this paper, we present SIF, a comprehensive framework for Solidity contract analysis, query, instrumentation, and code generation. SIF provides support for Solidity contract developers and testers to build source level techniques for analysis, understanding, diagnostics, optimisations and code generation. We show feasibility and applicability of the framework by building practical tools on top of it and running them on 1838 real smart contracts deployed on the Ethereum network.
연구 동기 및 목표
- 현재 분산된 저수준 바이트코드 분석 또는 불완전한 소스에서 IR로의 변환에 의존하는 바탕이 되는 Solidity 코드 분석, 인스트루멘테이션, 변환을 위한 통합 프레임워크의 부재를 해결하기 위해.
- C/C++의 Clang LibTooling과 유사한 고수준, 재사용 가능하고 확장 가능한 프레임워크를 Solidity 개발자 및 테스터에게 제공하기 위해.
- 원본 Solidity 소스 코드에 대한 강력한 추적성을 확보하면서도, 종단 간 소스 수준의 프로그램 분석, 변환, 코드 생성을 가능하게 하기 위해.
- 재사용 가능한 헬퍼 함수와 단순한 C++ 인터페이스를 통해 보안 분석, 진단, 테스팅을 위한 커스텀 도구 개발을 지원하기 위해.
- 실제 1,838개의 이더리움 스마트 계약에 대한 실전 배포를 통해 프레임워크의 사용성, 성능, 확장성 평가를 수행하기 위해.
제안 방법
- 프레임워크는 Solidity AST의 C++ 기반 중간 표현을 사용하며, AST 순회 및 조작을 위한 깔끔하고 확장 가능한 인터페이스를 제공한다.
- AST 노드를 쿼리하고, 인스트루멘테이션(예: 어서션)을 삽입하며, 이름 변경 또는 버그 시딩과 같은 코드 변환을 수행할 수 있는 헬퍼 함수를 제공한다.
- 수정된 AST에서 Solidity 소스 코드를 재구성함으로써 코드 생성을 지원하며, 순수 분석 작업을 위한 기본 코드 출력 비활성화 옵션도 제공한다.
- 프레임워크는 AST 수준의 문법적 차이 분석, 콜 그래프 및 컨트롤 플로우 그래프 생성, AST 노드의 정적 분석을 통한 취약성 탐지 기능을 제공한다.
- 텍스트 기반 및 JSON 형식의 AST 입력을 모두 지원하며, 성능 프로파일링을 통해 JSON AST 파싱 시의 성능 저하 요인을 식별하였다.
- 프레임워크는 확장 가능하다: 사용자는 제공된 인터페이스를 사용해 새로운 도구를 구현할 수 있으며, AST 노드 간 상태 유지 기능을 위한 before/after 방문자 함수를 내장하고 있다.
실험 결과
연구 질문
- RQ1원본 소스 코드에 대한 완전한 추적성을 확보하면서도, 인스트루멘테이션, 분석, 코드 생성을 모두 지원하는 통합 소스 수준의 프레임워크를 Solidity용으로 구축할 수 있는가?
- RQ2개발자 및 테스터가 커스텀 분석 도구를 구축하고 배포하는 데 있어 프레임워크의 사용성과 자동화 수준은 어떠한가?
- RQ3실제 스마트 계약에 대해 AST 기반 코드 생성 및 분석의 성능 오버헤드는 얼마나 되는가?
- RQ4프레임워크는 취약성 탐지, 코드 변환, 진단과 같은 다양한 용도에 얼마나 효과적으로 기여하는가?
- RQ5글로벌 개발자 커뮤니티가 실용적인 스마트 계약 도구 개발을 위해 프레임워크를 확장하고 채택할 수 있는가?
주요 결과
- SIF는 실제 1,838개의 이더리움 스마트 계약을 모두 성공적으로 처리하여 프레임워크의 견고성과 확장성을 입증하였다.
- SIF 기반으로 개발된 7개의 도구(예: 어서션 분석기, 콜 그래프 생성기, 결함 시딩 도구)는 세 명의 사용자 평가자 전원의 검증을 통해 정확한 출력을 생성하였다.
- 사용자들은 도구와 프레임워크의 사용성에 대해 높은 평가를 내렸으며, 평균 사용성 평점은 5점 만점에 3.7점이었고, 도구가 거의 완전히 자동화되어 있다고 평가하였다.
- 대부분의 계약에 대해 AST에서의 코드 생성은 효율적이었다: 1,000줄 이하의 계약은 4초 미만으로 처리되었다.
- 큰 규모의 계약(6,183줄)의 경우 코드 생성에 85.6초가 소요되었는데, 주로 루트 수준의 반복적인 JSON AST 쿼리 때문이었으며, 이 성능 저하 요인은 식별되었고 현재 최적화 중이다.
- 프레임워크는 출시 후 국제적 관심을 끌었으며, 커뮤니티 피드백을 바탕으로 핵심 수정사항(예: 초기화되지 않은 변수 탐지)과 기능 개선사항(예: 선택적 코드 생성, 상세한 AST 문서화)이 이루어졌다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.