
보안 감사: 감사 보고서가 실제로 알려 주는 것
'○○의 감사 완료'는 암호화폐 업계에서 가장 흔히 볼 수 있는 배지 중 하나입니다. 웹사이트, 투자 유치용 발표 자료, 토큰 출시 현장에 등장하며, 마치 그것만으로 무언가가 안전한지에 대한 질문이 해결된 것처럼 쓰이곤 합니다. 하지만 그렇지 않습니다. 다만 실제 감사 보고서를 제대로 읽으면 아주 많은 것을 알 수 있습니다. 요령은 무엇을 봐야 하는지 아는 것입니다.
감사란 무엇인가
보안 감사는 외부 업체가 특정 코드를 정해진 기간 동안 검토하는 작업입니다. 감사인은 코드를 읽고, 테스트하고, 깨뜨려 보려고 시도한 뒤 발견한 내용을 문서로 정리합니다. 스마트 컨트랙트의 경우 보통 수동 검토와 자동화 도구를 함께 사용하며, 지갑의 경우 앱, 암호화 구현, 앱이 통신하는 서버, 그리고 이 모든 것이 어떻게 맞물리는지까지 포함될 수 있습니다.
결과물은 보고서입니다. 무엇을 검토했는지, 언제 했는지, 무엇을 발견했는지, 각 발견 사항의 심각도는 어느 정도인지, 그리고 팀이 이를 수정했는지가 담겨 있습니다.
이 설명에서 특히 중요한 표현은 세 가지입니다. 특정 코드, 정해진 기간, 그리고 무엇을 발견했는지입니다.
먼저 감사 범위를 읽으세요
감사 범위는 감사인이 정확히 무엇을 살펴봤는지를 알려 줍니다. 보통 이름이 명시된 저장소, 컨트랙트 또는 구성 요소이며, 특정 커밋에 고정되어 있는 경우가 많습니다.
오해를 부르는 '감사 완료' 주장의 대부분은 바로 여기서 무너집니다. 어떤 프로젝트는 작은 컨트랙트 하나만 감사를 받고서 프로토콜 전체가 감사를 받은 것처럼 홍보할 수 있습니다. 어떤 지갑은 스마트 컨트랙트만 검토를 받았을 뿐, 실제로 여러분의 거래를 만들고 서명하는 앱은 한 번도 검토되지 않았을 수 있습니다. 여러분이 신뢰하는 대상이 감사 범위에 포함되어 있지 않다면, 그 감사는 그것에 대해 아무것도 말해 주지 않습니다.
스스로 물어보세요. 감사 범위가 내 자금에 닿는 부분을 다루고 있는가?
날짜와 버전을 확인하세요
감사는 검토가 이뤄진 날의 코드 상태를 설명합니다. 그 이후에 출시된 모든 것, 즉 새 기능, 새 체인, 리팩터링 등은 다시 검토받지 않는 한 감사 대상에서 벗어납니다.
이는 자연스러운 일입니다. 소프트웨어는 계속 바뀌니까요. 하지만 빠르게 발전하는 프로젝트에서 2년 전 감사는 역사 기록에 불과하다는 뜻이기도 합니다. 유용한 질문은 감사가 언제 이뤄졌는지, 어떤 버전을 다뤘는지, 그리고 그 이후의 주요 변경 사항이 별도의 검토를 받았는지입니다.
스마트 컨트랙트에는 한 가지 고려할 점이 더 있습니다. 컨트랙트가 업그레이드 가능하다면, 오늘 실행 중인 코드는 감사받은 코드가 아닐 수도 있습니다. 누가 업그레이드를 통제하는지는 감사 자체만큼이나 중요합니다.
요약만 보지 말고 발견 사항을 읽으세요
보고서는 발견 사항을 심각도에 따라 분류합니다. 일반적으로 치명, 높음, 중간, 낮음, 정보 단계로 나뉘며, 각 항목이 수정되었는지, 인지되었는지, 그대로 남겨졌는지를 기록합니다.
- 치명 및 높음 등급은 자금 손실로 이어질 수 있는 발견 사항입니다. 그런 항목이 있었는지, 있었다면 수정되고 재확인되었는지 살펴보세요.
- 인지됨은 수정됨이 아닙니다. '인지됨'은 팀이 그 위험을 받아들였다는 뜻입니다. 때로는 합리적인 선택이니, 이유를 읽어 보세요.
- 발견 사항이 없다고 해서 무조건 좋은 소식은 아닙니다. 훌륭한 코드를 뜻할 수도 있지만, 좁은 범위와 짧은 계약 기간을 뜻할 수도 있습니다.
- 재테스트가 중요합니다. 좋은 보고서는 팀이 수정했다고 말한 것에 그치지 않고, 감사인이 직접 수정 사항을 검증했다고 명시합니다.
감사가 알려 줄 수 없는 것
아무리 철저한 감사라도 분명히 짚어 둘 한계가 있습니다.
- 감사는 주의를 기울인 일부 표본일 뿐, 증명이 아닙니다. 감사인은 많은 버그를 찾아내지만 모든 버그를 찾지는 못합니다. 감사를 받은 프로토콜이 공격당한 사례도 있습니다.
- 감사 대상은 코드이지, 운영이 아닙니다. 키를 어떻게 보관하는지, 누가 배포할 수 있는지, 팀이 사고에 어떻게 대응하는지는 보통 범위 밖입니다.
- 경제적 설계는 다루지 않습니다. 명시적으로 범위에 포함된 경우는 예외입니다. 컨트랙트가 작성된 그대로 정확히 동작하더라도 가격, 인센티브 또는 다른 프로토콜을 통해 악용될 수 있습니다.
- 여러분이 설치하는 것은 다루지 않습니다. 소스 코드 감사는 같은 이름을 가진 가짜 앱에 대해서는 아무것도 말해 주지 않습니다. 공개된 코드와 여러분이 실제로 실행하는 소프트웨어를 연결해 주는 것은 재현 가능한 빌드입니다.
'감사 완료' 주장에서 보이는 위험 신호
- 실제 보고서로 가는 링크가 없거나, 보고서가 프로젝트 자체 사이트에만 올라와 있다.
- 감사 업체를 찾을 수 없거나, 그 업체의 사이트에 해당 감사 건이 나와 있지 않다.
- 감사 범위가 홍보하는 내용과 맞지 않는다.
- 수정되지 않은 높은 심각도의 발견 사항을 '처리됨'이라고 설명한다.
- 몇 년 전에 받은 감사 한 번이 전부인데, 제품은 그 이후로 완전히 바뀌었다.
SSP의 접근 방식
SSP의 코드는 오픈 소스이므로 누구나 읽을 수 있습니다. 하지만 공개된 코드와 감사받은 코드는 같은 것이 아니며, 저희는 이 둘을 구분해서 다룹니다.
독립 보안 업체인 Halborn은 SSP의 ERC-4337 스마트 컨트랙트를 감사했고, SSP Wallet 확장 프로그램, SSP Key 앱, SSP Relay를 하나의 전체로서 감사했습니다. 두 보고서 모두 Halborn 사이트에 공개되어 있으며, 치명 또는 높음 등급의 발견 사항은 없었고, 낮음 및 정보 등급의 발견 사항은 처리되었습니다. 2025년 감사 결산 글에 각 감사의 범위와 날짜가 정리되어 있습니다.
다른 누구에게나 적용되는 단서는 저희에게도 똑같이 적용됩니다. 이 감사들은 검토 당시의 코드를 다룹니다. 그 이후 추가된 기능과 체인은 감사 대상에 포함되지 않으므로, 저희는 오래된 배지를 억지로 늘려 덮는 대신 새로운 코드가 어떤 검토를 거쳤는지 밝히고 있습니다.
솔직한 요약
감사는 증거이지 보증이 아닙니다. 감사는 특정 코드가 특정 시점에 특정 업체에 의해 검토되었다는 사실, 그리고 그들이 무엇을 발견했는지를 알려 줍니다.
감사 범위를 읽고, 날짜와 버전을 확인하고, 심각도와 각 항목이 어떻게 해결되었는지 살펴본 다음, 감사 업체 자체 사이트에서 보고서를 찾아보세요. 그렇게 하면 '감사 완료'는 더 이상 배지가 아니라 의미 있는 정보가 됩니다.


