본문 바로가기

블록체인/읽어 볼만한 아티클

[CertiK] 보안 감사를 준비하는 방법

안녕하세요, 디온입니다. 최근 바이낸스 스마트 체인(BSC) 생태계에 지속적인 러그풀과 해킹 피해 사고가 발생을 하면서 그 어느 때보다 보안 감사(Security Audit)에 대한 중요성이 높아지고 있습니다.

오늘은 팩실드와 함께 가장 널리 알려져 있는 CertiK에서 공개한 "보안 감사를 준비하는 방법"에 대한 가이드를 공유합니다.

감사의 범위와 목적에 대한 개요

제일 먼저 우리 스스로에게 2가지의 질문을 해봅시다.

① 무엇에 대해 감사를 받을 것인가?

③ 감사가 어떻게 수행되어야 할 것인가?

위 2가지 질문에 대한 당신의 응답은 해당 감사를 진행함에 있어 가장 기본적인 기초가 됩니다. 만일 당신의 스마트 컨트랙트를 감사함에 있어 전체 파일 세트가 필요한지, 아니면 필수적이고 고유한 기능만 필요한지 등을 판단할 수 있습니다.

써틱 감사팀과 감사 범위 지정을 위한 콜 중에는 다음과 같은 사항을 협의하게 됩니다.

  • 시스템에 가장 중요한 모듈은 무엇인가요?
  • 이 보안 감사의 주요 목표는 무엇인가요?
  • 우려되는 특정 공격 시나리오가 있나요?

보안 전문가들로 구성된 써틱의 전담 팀에서는 위와 같은 질의응답을 통해 협의된 범위를 대상으로 하는 테스트 전략 및 계획을 설계하고 리소스 최적화 작업 등을 진행하게 됩니다.

포괄적 문서 자료

프로젝트를 이해하고자 할 때 개발자가 가장 먼저 찾게 되는 것은 문서(documents)이며 이는 써틱 감사팀의 경우도 마찬가지입니다.

시스템의 아키텍처와 디자인에 대한 근본적인 이해를 통해 써틱 팀에서는 감사할 코드베이스 세트를 효율적으로 심층분석할 수 있습니다. 문서는 명확하면서도 포괄적이어야 하며 전반적인 시스템 작동 방식을 설명하는 것을 목표로 작성되어야 합니다. 감사인이 코드 이면에 숨겨져 있는 의도를 이해할 수 있으려면 이 문서가 정확하면서도 읽기 쉬워야 하고, 최신 상태로 업데이트가 되어 있어야 합니다.

문서와 관련하여 "필수 항목"을 확인하시기 바랍니다.

① READ ME

일반적으로 프로젝트나 리포지토리에 대해 자세히 알아보려는 사람이 처음에 열어보는 파일입니다. 프로젝트 설명, 빌드 및 실행 지침을 포함한 필수 정보가 포함된 텍스트 파일입니다. READ ME는 프로젝트를 확인함에 있어 첫인상의 역할을 하기 때문에 이를 깔끔하면서도 상세하게 유지하는 것이 중요합니다.

② 기술문서

  • 시스템 개요, 프로젝트에서 해결하려는 문제, 시스템 구성 요소들의 의도된 기능

③ 코드설명

  • 코드 작성과 관련하여 모범 사례의 기초입니다. 코드가 올바르게 주석 처리가 되었는지 확인하면 감사인이 코드의 목표를 이해하고 포함할 수 있는 잠재적인 문제를 강조하는 데 도움이 됩니다.

코드 퀄리티

코드 퀄리티는 효율적인 감사에 있어 많은 도움이 됩니다. 고품질 코드베이스를 통해 감사인은 특정 파트 코드의 의미를 찾는 것에 몰두하는 대신에 코드 자체에 집중할 수 있습니다. 코드 퀄리티가 좋은 모범 사례는 다음과 같습니다.

① 스타일의 일관성

  • 일관된 코드 스타일이 적용되어 있으면 감사인이 코드의 기능을 빠르게 이해할 수 있습니다. 일관성을 유지하기 위해서는 린터(linters)를 사용하여 소스 코드를 분석하고 프로그래밍 오류, 버스, 스타일 오류 및 의심스러운 구조에 플래그를 지정하는 것이 좋습니다. 개발자는 자신이 만든 코드에 린터를 실행하여 발견된 오류 및 경고문구가 뜬 부분을 고칠 수 있습니다.

② 중복 코드 제거
개발 프로세스가 진행됨에 따라 일부 코드 스니펫이 더 이상 사용되지 않을 수 있습니다. 해당 코드를 작성한 개발자에게는 더 이상 사용되지 않는 영역이 분명할 수 있지만, 감사인에게는 명확하지 않을 수 있습니다. 중복된 코드와 코멘트를 제거하면 감사인이 관련이 없는 세부사항에 대해 집중하는 것을 방지할 수 있습니다.

③ 신뢰할 수 있는 최신 Dependencies 활용
이미 감사를 받은 기존의 라이브러리는 스마트 컨트랙트나 애플리케이션을 개발할 때 활용될 수 있고 활용되어야 하기도 합니다. 이는 보다 효율적인 코드 개발에도 도움이 될 뿐만 아니라 발생가능한 보안 문제의 리스크를 줄이는 역할을 합니다.

그러나 개발 생태계는 빠르게 변화하고 끊임없이 진화하고 있으므로 dependencies의 보안 문제는 항상 경계해야 할 필요가 있으며, dependencies와 라이브러리가 최신 상태인지를 반드시 확인해야 합니다.

테스팅 : 1 라운드

감사 전에 코드가 오류없이 컴파일 및 실행되고 예상대로 작동하는지 확인하세요. 이는 감사 프로세스를 신속하게 처리하는 데 도움이 됩니다.

시스템의 모든 기능을 포괄하는 단위 테스트를 생성하시고 개발 시에는 극단적 경우와 오류 처리를 고려하세요. 그 후 프로세스의 다음 단계는 여러 구성요소를 대상으로 하는 추가 테스트를 생성하는 동시에 탑 티어 레벨에서 잠재적인 유즈 케이스를 고려하고 다루는 것입니다. 호환성을 확실하게 하기 위해 코드가 업데이트 될 때마다 단위 테스트도 업데이트를 해야 합니다.

테스트 대상 정렬

감사팀은 작업할 테스트 대상이 필요한데 이는 일반적으로 스마트 컨트랙트의 형태입니다. 이와 관련하여 클라이언트들은 다음의 작업을 하는 것이 좋습니다.

① 커밋 해시 지정

  • 이를 통해 감사팀은 적절한 코드베이스를 감사하고 있는지 확인할 수 있습니다. 개발 중인 코드 말고 준비가 완료된 코드를 제출해주세요

② 안정적인 테스트 환경

  • Penetrating test를 원하는 경우 Penetrating test팀이 분석과 테스트를 수행할 수 있도록 애플리케이션을 호스팅하는 것이 중요합니다. 안정적인 테스트 환경은 효율적인 Penetrating test를 가능하게 하는 반면에, 서버 문제가 있는불안정한 환경은 타임라인과 전체 프로세스를 방해할 수 있습니다.

여기까지의 가이드를 잘 따라 오셨다면 이제 프로젝트와 코드베이스가 효율적인 고품질 보안 감사를 받기 위한 준비가 완벽히 끝난 것입니다. 블록체인과 디파이 생태계에서 보안 감사는 이제 하나의 표준으로 간주되고 있습니다.

보안 감사를 시작할 준비가 되셨다면 CertiK.io에서 양식을 작성 및 제출하여 견적을 요청해주세요.

 

[암호화폐(디지털자산) 거래소 거래수수료 할인 가입링크 안내]

① 바이낸스(Binance.com) 가입링크 (거래수수료20% 페이백) : 바로가기
② 바이낸스 선물 가입링크 (1달간 거래수수료 10% 페이백) : 바로가기
③ 고팍스(GOPAX) 거래소 가입링크 (가입즉시 5,000원 원화 또는 코인지급) : 바로가기
④ FTX파생상품 거래소 가입링크 (거래수수료 5% 페이백) : 바로가기
⑤ 코인원(Coinone) 거래소 가입링크 (거래수수료 10% 페이백) : 바로가기
⑥ 폴로닉스(PolonieX) 거래소 가입링크 (거래수수료 10% 페이백) : 바로가기
⑦ OKEx 거래소 가입링크 (110달러 리워드+40달러 수수료쿠폰) : 바로가기
⑧ 코인리스트(CoinList) 토큰세일 플랫폼 가입링크 (100달러 이상 거래시 10달러 상당의 BTC지급) : 바로가기
⑨ 후오비 글로벌 가입링크 : 바로가기
⑩ 후오비 코리아 가입링크 : 바로가기