🦅 이전글 2023.10.03 - [Solidity] - [Solidity] 재진입 공격 (Reentrancy Attack) 🚫 재진입 공격 예방 기법 1. Checks Effects Interactions 패턴 Checks Effects Interactions 패턴은 컨트랙트 내부에서 외부 주소를 호출할 때 적용할 수 있는 패턴입니다. 외부 함수를 호출하거나 이더를 다른 계정으로 보낼 때, 이를 호출하는 컨트랙트는 제어 흐름을 외부 개체에게 넘겨주게 됩니다. 이러한 이유로 재진입 공격도 가능한 것입니다. 그렇기 때문에 외부 주소를 호출하기 전에 충분한 검토가 필요합니다. 먼저 가능한 모든 조건들을 검사(checks)하고, 컨트랙트 내부에서 실행가능한 모든 것들을 적용(effects)한 뒤에 마지막으로 ..
🚨 재진입 공격 (Reentrancy Attack)이란? BadBank 컨트랙트는 10 이더를 가지고 있고 Bob은 1 이더를 가지고 있습니다. BadBank가 가진 10 이더는 다른 사용자 또는 스마트 컨트랙트가 입금해 놓은 금액입니다. BadBank는 이를 안전하게 지켜야만 하고 소유주의 인출 요청에만 응답을 해야 되겠죠. 그런데 BadBank의 withdraw 함수에는 취약점이 존재합니다. 그리고 이를 오직 Bob만 눈치를 챘습니다. Bob은 공격을 감행하기로 마음먹습니다. 공격에 앞서 withdraw 함수를 호출하기 위한 조건을 만족시키기 위해 Bob은 자신이 가진 1 이더를 BadBank에 입금합니다. 그리고 withdraw 함수를 호출합니다. BadBank가 Bob에게 1 이더를 보내는 순간,..