본문으로 건너뛰기

스마트 컨트랙트 보안 체크리스트

스마트 컨트랙트
보안
solidity
중급
Trailofbits
2020년 9월 7일
6 분 소요

스마트 컨트랙트 개발 체크리스트

스마트 컨트랙트를 작성할 때 따를 것을 권장하는 전반적인 프로세스는 다음과 같습니다.

알려진 보안 문제 확인:

  • 슬리더 (opens in a new tab)를 사용하여 컨트랙트를 검토하세요. 일반적인 취약점을 찾아내는 40개 이상의 내장 탐지기가 있습니다. 새로운 코드를 체크인할 때마다 실행하여 문제없는 보고서를 받는지 확인하세요(또는 특정 문제를 무시하려면 분류(triage) 모드를 사용하세요).
  • Crytic (opens in a new tab)을 사용하여 컨트랙트를 검토하세요. 슬리더가 확인하지 않는 50가지 문제를 검사합니다. 또한 Crytic은 GitHub의 풀 리퀘스트(Pull Request)에서 보안 문제를 쉽게 드러내어 팀원들이 서로의 코드를 잘 파악할 수 있도록 돕습니다.

컨트랙트의 특수 기능 고려:

코드의 중요한 보안 기능을 시각적으로 검사:

중요한 보안 속성을 문서화하고 자동화된 테스트 생성기를 사용하여 평가:

  • 코드의 보안 속성을 문서화하는 방법을 배우세요. 처음에는 어렵지만, 좋은 결과를 얻기 위해 가장 중요한 단일 활동입니다. 또한 이 튜토리얼의 고급 기술을 사용하기 위한 전제 조건이기도 합니다.
  • 에키드나 (opens in a new tab)맨티코어 (opens in a new tab)와 함께 사용할 수 있도록 Solidity로 보안 속성을 정의하세요. 상태 머신, 접근 제어, 산술 연산, 외부 상호작용 및 표준 준수에 집중하세요.
  • 슬리더의 Python API를 사용하여 보안 속성을 정의하세요. 상속, 변수 종속성, 접근 제어 및 기타 구조적 문제에 집중하세요.
  • Crytic (opens in a new tab)을 사용하여 모든 커밋에서 속성 테스트를 실행하세요. Crytic은 보안 속성 테스트를 사용하고 평가할 수 있으므로 팀의 모든 사람이 GitHub에서 테스트 통과 여부를 쉽게 확인할 수 있습니다. 실패한 테스트는 커밋을 차단할 수 있습니다.

마지막으로, 자동화된 도구가 쉽게 찾을 수 없는 문제에 유의하세요:

  • 프라이버시 부족: 트랜잭션이 풀(pool)에 대기하는 동안 다른 모든 사람이 이를 볼 수 있습니다.
  • 프론트 러닝(Front running) 트랜잭션
  • 암호화 연산
  • 외부 탈중앙화 금융 (DeFi) 컴포넌트와의 위험한 상호작용

도움 요청하기

이더리움 오피스 아워 (opens in a new tab)는 매주 화요일 오후에 진행됩니다. 이 1시간짜리 1대1 세션은 보안에 관한 질문을 하고, 도구를 사용하여 문제를 해결하며, 현재 접근 방식에 대해 전문가의 피드백을 받을 수 있는 기회입니다. 이 가이드를 잘 활용할 수 있도록 도와드리겠습니다.

Slack에 참여하세요: Empire Hacking (opens in a new tab). 질문이 있으시면 언제든지 #crytic 및 #ethereum 채널에서 답변해 드립니다.