Unlike traditional software, smart contracts can change their states by a sequence of transactions as an input. Due to a characteristic, existing fuzzing tools fail to find critical transaction sequences. To tackle this challenge, we introduce data-flow-based feedback, a novel feedback mechanism for fuzzing that considers both control flows and data flows. We implement Smartian, an open-source fuzzer using
data-flow-based feedback. Smartian is able to detect bugs on smart contracts without the need for source code. In the evaluation, Smartian outperforms various existing state-of-the-art tools in terms of both code coverage and bug finding ability. Also, Smartian found 1,460 from 1,000 widely-used smart contracts collected from Etherscan.
일반적인 소프트웨어와는 달리 이더리움 스마트 컨트랙트는 트랜잭션 수행 순서가 컨트랙트 내의 상태를 바꿀 수 있다. 이 때문에 기존에 알려져 있는 퍼즈 테스팅 도구는 취약점이 발생할 수 있는 상태를 만드는 트랜잭션 수행 순서를 제대로 찾지 못한다. 이 문제를 해결하기 위해 제어 흐름과 데이터 흐름을 모두 고려한 새로운 피드백 메커니즘인 데이터 흐름 기반 피드백을 만들었다. 본 논문은 데이터 흐름 기반 피드백을 구현한 Smartian라는 오픈 소스 퍼저를 소개한다. Smartian은 소스 코드가 없어도 이더리움 스마트 컨트랙트에서 취약점을 찾을 수 있다. 실험 결과를 통해 Smartian이 코드 커버리지와 취약점 발견 능력 측면에서 기존의 최첨단 툴들을 능가함을 보여준다. 또한 Smartian은 Etherscan에서 수집한 1,000개의 범용 이더리움 스마트 컨트랙트에서 1,460개의 취약점을 찾았다.