슬리더 스마트 계약을 위한 정적 분석 프레임워크

읽는 시간: 4 분
...

📝 원문 정보

- Title: Slither A Static Analysis Framework For Smart Contracts
- ArXiv ID: 1908.09878
- 발행일: 2019-08-28
- 저자: Josselin Feist, Gustavo Grieco and Alex Groce

📝 초록

이 논문은 이더리움 스마트 컨트랙트에 대한 풍부한 정보를 제공하도록 설계된 정적 분석 프레임워크인 Slither에 대해 설명합니다. 이를 위해 Solidity 스마트 컨트랙트는 SlithIR이라는 중간 표현으로 변환됩니다. SlithIR은 정적 단일 할당(SSA) 형식과 축소된 명령 집합을 사용하여 분석의 구현을 용이하게 하면서, Solitidy를 바이트코드로 변환할 때 잃어버릴 수 있는 의미 정보를 유지합니다. Slither는 데이터 흐름 및 오염 추적과 같은 일반적으로 사용되는 프로그램 분석 기법에 적용됩니다. 우리의 프레임워크는 네 가지 주요 용도가 있습니다: (1) 취약성의 자동 탐지, (2) 최적화 기회의 자동 탐지, (3) 사용자의 컨트랙트 이해 향상, 그리고 (4) 코드 검토 지원. 이 논문에서는 Slither에 대한 개요를 제시하고, 그 중간 표현 설계와 실제 컨트랙트에서의 능력을 평가합니다. 우리는 Slither의 버그 탐지가 빠르고 정확하며, 속도, 견고성 및 검출과 거짓 양성 간의 균형 측면에서 이더리움 스마트 컨트랙트에 있는 문제를 찾는 다른 정적 분석 도구보다 우수함을 보여줍니다. 우리는 대규모 스마트 컨트랙트 데이터 세트를 사용하여 도구를 비교하고 가장 많이 사용되는 1000개의 컨트랙트 결과를 수동으로 검토했습니다.

💡 논문 해설

**핵심 요약**: 이 논문은 이더리움 스마트 컨트랙트에서 발생하는 취약성을 탐지하고 최적화 기회를 찾는 정적 분석 프레임워크인 Slither에 대해 설명합니다. Slither는 Solidity 코드를 중간 표현으로 변환하여 다양한 분석을 쉽게 수행할 수 있게 합니다.

문제 제기: 이더리움 스마트 컨트랙트는 금융 서비스, 공급망 관리, 물류 및 의료 등 여러 산업에서 신뢰하지 않는 계산을 위해 사용됩니다. 그러나 이러한 컨트랙트에는 소프트웨어 취약성이 자주 발견되며, 이로 인해 수백만 달러의 손실과 블록체인 시스템의 명성에 해가 발생할 수 있습니다.

해결 방안 (핵심 기술): Slither는 Solidity 코드를 중간 표현(SlithIR)으로 변환하여 분석을 쉽게 수행합니다. 이 중간 표현은 정적 단일 할당(SSA) 형식과 축소된 명령 집합을 사용하여, Solitidy를 바이트코드로 변환할 때 잃어버릴 수 있는 의미 정보를 유지합니다. 이를 통해 데이터 흐름 및 오염 추적과 같은 일반적인 프로그램 분석 기법을 적용할 수 있습니다.

주요 성과: Slither는 이더리움 스마트 컨트랙트에서 발생하는 취약성을 빠르고 정확하게 탐지하며, 속도, 견고성 및 검출과 거짓 양성 간의 균형 측면에서 다른 정적 분석 도구보다 우수합니다. 또한, Slither는 코드 이해를 향상시키고 최적화 기회를 찾는 데 사용될 수 있습니다.

의의 및 활용: Slither는 스마트 컨트랙트 개발자가 안전하고 효율적인 코드를 작성하는 데 도움을 줍니다. 이를 통해 블록체인 기반 애플리케이션의 보안과 성능을 향상시킬 수 있습니다.

📄 논문 발췌 (ArXiv Source)

# 소개

일부 산업은 블록체인 플랫폼을 사용하여 신뢰하지 않는 계산을 수행하고 있습니다. 금융 서비스부터 공급망 관리, 물류 및 의료까지 다양한 애플리케이션이 블록체인 기술에 의존하고 있으며 그 중 가장 인기 있는 기술은 이더리움 스마트 컨트랙트입니다. 이러한 컨트랙트는 고수준 프로그래밍 언어인 Solidity로 작성되며, 컴파일되어 이더리움 가상 머신(EVM) 어셈블리 명령으로 블록체인 배포를 위해 변환됩니다. 종종 배포된 스마트 컨트랙트 코드는 보안이 취약하며, 소프트웨어 취약성은 자주 발견되어 악의적인 행위자들에 의해 악용되어 수백만 달러의 손실과 블록체인 시스템의 명성을 해치는 결과를 초래합니다.

최근 몇 년 동안 다양한 도구와 프레임워크가 개발되었습니다. 이들은 정적 분석 및 동적 분석을 기반으로 이더리움 스마트 컨트랙트에서 취약성 검출에 사용됩니다. 이러한 도구는 퍼징, 심볼릭 실행, 오염 추적 및 정적 분석과 같은 일반적인 프로그램 테스트 기법을 기반으로 합니다.

정적 분석은 계약 내에서 잠재적인 문제를 감지하는 가장 효과적인 방법 중 하나입니다. 일반적으로 정적 분석 도구는 Solidity 소스 코드나 컴파일된 컨트랙트의 역어셈블리 버전을 분석합니다. 그런 다음, 공통 보안 이슈의 탐색 및 검출에 적합한 내부 표현으로 컨트랙트 코드를 변환합니다.

현대 컴파일러인 clang은 제3자 분석기를 구축할 수 있는 다양한 API를 제공하지만 Solidity 컴파일러는 같은 기능을 제공하지 못합니다. 이상적으로, 이더리움 스마트 컨트랙트용 정적 분석 프레임워크는 다음과 같은 속성을 가져야 합니다:

  1. 적절한 추상화 수준: 프레임워크가 너무 추상적이면 일반적인 사용 패턴을 포착하는 정확한 의미론을 도입하기 어렵습니다. 반대로, 특정 이슈만 탐지에 초점을 맞추는 경우 새로운 검출기 또는 분석을 추가하는 것이 어려울 수 있습니다.

  2. 견고성: 실제 코드를 분석하고 파싱할 때 프레임워크가 중단되지 않아야 합니다.

  3. 성능: 분석이 큰 컨트랙트에 대해서도 빠르게 수행되어야 하며, IDE와 같은 개발 도구나 각 커밋 시 실행되는 지속적인 통합 체크와 쉽게 통합할 수 있어야 합니다.

  4. 정확성: 대부분의 잠재적 이슈를 찾아내면서 거짓 양성을 낮은 비율로 유지해야 합니다. 만약 거짓 양성이 매우 높다면, 전체 컨트랙트에 대한 수동 검토가 필요하게 되어 그 효용이 상실될 수 있습니다.

  5. 기본 분석 포함: 대부분의 컨트랙트에 유용한 일반적인 분석 및 이슈 탐지기를 제공해야 합니다. 이를 통해 프레임워크를 확장하려는 보안 엔지니어와 문제를 찾아내려는 코드 검토자가 모두 활용할 수 있습니다.

이 논문에서는 Slither라는 오픈 소스 정적 분석 프레임워크를 소개합니다. 우리의 도구는 이더리움 스마트 컨트랙트에 대한 풍부한 정보를 제공하며, 앞서 언급된 중요한 속성을 갖추고 있습니다. Slither는 자체 중간 표현인 SlithIR을 사용하여 Solidity 코드의 정적 분석이 간단하도록 설계되었습니다. 이 프레임워크는 데이터 흐름 및 오염 추적과 같은 일반적으로 사용되는 프로그램 분석 기법을 적용하여 정보를 추출하고 정제합니다.

Slither는 보안에 중점을 둔 정적 분석 프레임워크로 설계되었지만, 스마트 컨트랙트 이해 향상, 코드 검토 지원 및 누락된 최적화 탐지에도 사용됩니다.


📊 논문 시각자료 (Figures)

Figure 1



감사의 말씀

이 글의 저작권은 연구하신 과학자분들께 있으며, 인류 문명 발전에 공헌해주신 노고에 감사를 드립니다.

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키