권한 스캐너를 사용하면 DeFi 프로토콜 또는 모든 스마트 계약 시스템에서 권한이 있는 기능을 검색할 수 있습니다. 이는 스마트 계약, 식별된 허가된 기능 및 해당 허가 소유자의 목록을 반환합니다.
허가된 기능에 대한 프로토콜을 스캔하기 위해 대상 프로토콜은 배포된 모든 계약의 주소 집합과 체인 측면에서 지정됩니다. 이러한 계약은 모두 공개 블록 탐색기에서 확인되어야 합니다. 여기에서 지원되는 체인 및 탐색기 목록을 찾을 수 있습니다. 그런 다음 권한 스캐너는 탐색기에서 계약의 소스 코드를 다운로드하고, 이를 검색하여 권한을 검색하고, 해당 스토리지 슬롯에서 권한 소유자를 읽고 결과를 출력 파일에 기록합니다.
solc
컴파일러가상 Python 환경을 생성 및 활성화하고 다음을 사용하여 필수 Python 패키지를 설치합니다.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
.env.example
파일을 .env
에 복사하고 계약이 배포된 네트워크에 따라 RPC 공급자의 URL과 유효한 블록 탐색기 API 키를 입력합니다. 그런 다음 변수를로드하십시오.
source .env
프로토콜의 모든 계약의 체인 이름과 주소로 ./contracts.json
파일을 완성하세요. 여기에서 지원되는 체인 목록을 찾아보세요.
그런 다음 스캐너 스크립트를 실행하십시오.
python src/main.py
올바른 solc
컴파일러 버전이 없으면 스크립트에 의해 자동으로 설치됩니다.
스크립트는 스캐너 결과를 새 파일 ./permissions.json
에 기록합니다.
분석이 완료되면 다음 명령을 사용하여 Python 환경을 다시 비활성화할 수 있습니다.
source deactivate
계약을 가져오고 선별하기 위해 지원되는 체인
"mainnet:" : (".etherscan.io", "etherscan.io")
"optim:" : ("-optimistic.etherscan.io", "optimistic.etherscan.io")
"goerli:" : ("-goerli.etherscan.io", "goerli.etherscan.io")
"sepolia:" : ("-sepolia.etherscan.io", "sepolia.etherscan.io")
"tobalaba:" : ("-tobalaba.etherscan.io", "tobalaba.etherscan.io")
"bsc:" : (".bscscan.com", "bscscan.com")
"testnet.bsc:" : ("-testnet.bscscan.com", "testnet.bscscan.com")
"arbi:" : (".arbiscan.io", "arbiscan.io")
"testnet.arbi:" : ("-testnet.arbiscan.io", "testnet.arbiscan.io")
"poly:" : (".polygonscan.com", "polygonscan.com")
"mumbai:" : ("-testnet.polygonscan.com", "testnet.polygonscan.com")
"avax:" : (".snowtrace.io", "snowtrace.io")
"testnet.avax:" : ("-testnet.snowtrace.io", "testnet.snowtrace.io")
"ftm:" : (".ftmscan.com", "ftmscan.com")
"goerli.base:" : ("-goerli.basescan.org", "goerli.basescan.org")
"base:" : (".basescan.org", "basescan.org")
"gno:" : (".gnosisscan.io", "gnosisscan.io")
"polyzk:" : ("-zkevm.polygonscan.com", "zkevm.polygonscan.com")
"blast:" : (".blastscan.io", "blastscan.io")
권한 스캐너는 제공된 계약 주소 세트가 완전하다는 점이나 계약이 실제로 프로토콜의 일부라는 점을 보장하지 않습니다.
권한은 계약 기능에서 onlyOwner
수정자 또는 msg.sender
검사를 사용하여 식별됩니다. 이 접근 방식으로 캡처되지 않는 다른 형태의 권한이 있을 수 있습니다.
권한 스캐너는 계약 저장소에서 직접 권한 소유자를 읽으려고 시도합니다. 특히 계약이 업그레이드 가능성 패턴을 사용하고 수동으로 확인해야 하는 경우에는 실패할 수 있습니다.
권한 스캐너는 권한과 해당 소유자 만 식별할 뿐 해당 권한의 영향이나 위험은 평가하지 않습니다.
권한 스캐너는 Slither 정적 분석기를 기반으로 구축되었습니다. 이 오픈 소스 도구를 만들고 DeFi 부문의 보안을 위해 수행한 모든 작업에 대해 Trail of Bits 팀에 감사드립니다.