블록체인 기술이 여러 금융 서비스, 공증 등에 쓰이고 있다.
이를 스마트 컨트랙트라고 한다.
블록체인의 장점은 한번 기록되고 나면 누구나 임의로 수정할 수 없고,
누구나 공정하게 열람할 수 있는 기회가 있다는 것이다.
스마트 컨트랙트 역시 한번 배포되었을 경우 컨트랙트를 공유한 노드들에
많은 컴퓨팅 연산과정을 거쳐 정보가 기록되기 때문에
해커들이 침투한다는 것은 사실상 불가능에 가깝다.
그럼에도 스마트 컨트랙트 서비스 런칭에 있어서 '스마트 컨트랙트 감사'라는 과정이 반드시 필요하다.
이를 뒷받침하는 사례로 2016년 4월에 오픈한 TheDAO의 크라우딩 펀딩을 들 수 있다.
해커들이 난입해 총 243만 이더리움을 인출하였고, 피해금액은 그 당시 가치로 약 750억 원으로 추정된다. 이는 스마트 컨트랙트가 모두에게 공개되는 코드이기 때문에 가능했던 것.
따라서 스마트 컨트랙트가 배포되기 이전에 이러한 사태를 막는 것이 중요하다. 이미 스마트 컨트랙트가 배포되고, 사용자들에게 전달된 이후에는 돌이킬 수 없기 때문에 보안 감사는 필수적인 요소이다.
보안감사 5단계
1. 명세 확인
이 단계에서는 스마트 컨트랙트가 구현하고자 하는 로직에 대한 정보를 받는다. 보통 README파일에 아키텍쳐, 함께 구현하고자 하는 내용 등에 대한 정보를 담는다.
2. 테스트 코드 작성
스마트 컨트랙트에 대한 테스트 코드를 작성하는 작업이다.
라이브러리들이 올바르게 작동하는지, 예외처리가 잘 되었는지 등을 검증한다.
일반적으로 이 과정에서 대부분의 버그와 보안 취약점이 검출되면 수정 제안 사항들을 찾아내게 된다.
3. 정적 분석
테스트 코드만으로 스마트 컨트랙트의 완전성을 판단하기 어려운 부분이 존재한다.
대부분 알려진 스마트 컨트랙트 코드의 취약점들은 Smart Contract Weakness Classification(SWC)로 검색해 볼 수 있다. 숙련된 감사원들이 필요로 느끼는 SWC 항목에 대해 검증한다.


4. 코드 디자인 리뷰 및 가스 최적화 분석
스마트 컨트랙트의 아키텍처에 대한 종합적인 분석을 하는 단계이다. 예를 들어 상속 구조나 변수가 불필요하게 사용되었을 경우, 이를 해결할 수 있는 방법을 논의한다. 또한 시뮬레이션을 통해 해당 스마트 컨트랙트가 메인넷에서 실행될 때 얼마나 많은 가스를 소모하는지 분석하고 이를 최적화할 수 있는 방안을 모색한다.
5. 보고서 발행
보안감사 대상 코드에서 취약점과 버그가 발견된 경우, 정적분석, 코드 디자인 리뷰에서 논의된 모든 내용을 최종적으로 보고서에 기록한다.
https://ko.quantstamp.com/blog/what-is-a-smart-contract-audit