glen.log
로그인
glen.log
로그인
DASP TOP 10 - Access Control(Delegatecall)
Glen
·
2023년 6월 23일
팔로우
0
Smartcontract
blockchain
solidity
0
smart contract
목록 보기
2/2
call, delegate call
컨트랙트의 함수를 호출할 때 사용
Solidity 0.5.0 에서의 변경사항을 소개합니다.
call
사용자는 proxy컨트랙트의 a함수를 호출함
proxy는 logic 컨트랙트의 b함수를 호출함
call을 사용하면 logic컨트랙트에서의 msg.sender는 proxy의 컨트랙트 주소가 됨(0xbb)
logic컨트랙트에서 변경부분 또한 logic에 저장
delegate call
delegatecall을 사용하면 logic컨트랙트에서의 msg.sender는 사용자의 주소가 됨(0xaa)
logic컨트랙트에서의 변경된 사항은 proxy로 리턴하여 proxy에 저장
upgrade proxy 패턴이 아래와 같음.
테스트
예제코드(remix)
proxy(caller)의 컨트랙트를 통하여 logic(Plus)컨트랙트의 함수를 실행
proxy(caller)컨트랙트의 call함수를 호출하면 logic(Plus)컨트랙트에 num이 저장
proxy(caller)컨트랙트의 delegate call함수를 호출하면 proxy(caller)컨트랙트에 num이 저장
delegatecall 취약점
a가 Lib, HackMe 배포
b(공격자)가 attack 배포
이때 HackMe의 owner는 a
Attack.attack()을 실행
HackMe의 owner는 Attack이 됨
예방기법
컨트랙트를 라이브러리로 사용할경우
라이브러리
키워드로 선언
they cannot have state variables
they cannot inherit nor be inherited
they cannot receive Ether
they cannot be destroyed
reference
Solidity by Example
Ethereum 응용 개발 - Smart Contract 의 이해
[마스터링 이더리움] 스마트 컨트랙트 보안 - 패턴4 DelegateCall — Steemit
DelegateCall : Solidity에서 다른 계약 함수 호출
Transaction Data 살펴보기 (feat. ABI)
Glen
어제보다 나은 엔지니어가 되기 위해서 공부중
팔로우
이전 포스트
DASP TOP 10 - Reentrancy
0개의 댓글
댓글 작성