상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
후쿠오카에서 벚꽃을 즐길 때 필요한 여행 경비 절약 팁은 무엇인가요?
후쿠오카에서 벚꽃을 즐길 때 추천하는 지역 카페는 어디인가요?
벚꽃과 관련된 유명한 시나 노래는 무엇이 있나요?
벚꽃을 주제로 한 유명한 아티스트는 누구인가요?
벚꽃이 지는 모습도 아름답다고 하는데, 그 이유는 무엇인가요?
무궁화의 꽃은 어떤 향이 나나요?
도쿄의 벚꽃 시즌에 맞춰 열리는 전통 행사나 의식은 무엇인가요?
여자친구가 가장 좋아하는 동물은 무엇인가요?
UFC에서 가장 많은 타이틀 방어를 기록한 선수는 누구인가요?
전북대학교의 교내 행사 참여 방법은 무엇인가요?
연세대학교의 해외 연수 프로그램은 어떤 것이 있나요?
건국대학교의 학생회 활동은 어떤가요?
Previous
Next
수정하기 - 솔리디티에서 'reentrancy' 공격이란 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Reentrancy 공격은 스마트 계약에서 발생할 수 있는 보안 취약점 중 하나로, 공격자가 특정 함수가 실행되는 동안 해당 함수에 다시 접근하여 상태를 변경하거나 자산을 <a href='https://sangseek.com/sangseeks/탈취/ko'>탈취</a>하는 방식으로 이루어집니다. 이 공격은 주로 이더리움과 같은 블록체인 플랫폼에서 작성된 솔리디티(Solidity) 스마트 계약에서 발생할 수 있습니다. Reentrancy 공격의 원리 Reentrancy 공격은 주로 다음과 같은 방식으로 이루어집니다: 1. <a href='https://sangseek.com/sangseeks/상태 변경/ko'>상태 변경</a> : 공격자는 스마트 계약의 특정 함수를 호출하여 자산을 인출하거나 상태를 변<a href='https://sangseek.com/sangseeks/경합/ko'>경합</a>니다. 2. 콜백 함수 : 이 함수가 외부 계약을 호출하거나 이더를 전송할 때, 공격자는 해당 외부 계약의 콜백 함수를 통해 다시 원래의 계약으로 돌아와 같은 함수를 재호출할 수 있습니다. 3. 상태 불일치 : 원래 계약의 상태가 업데이트되기 전에 공격자가 재진입하여 추가적인 자산을 인출하거나 상태를 변경할 수 있습니다. 이로 인해 계약의 상태가 예상과 다르게 변하게 됩니다. 예시 가장 유명한 Reentrancy 공격의 예로는 2016년의 DAO 공격이 있습니다. 이 공격에서는 공격자가 DAO 계약의 `withdraw` 함수를 호출하여 이더를 인출하는 과정에서, 이더를 전송하는 동시에 다시 `withdraw` 함수를 호출하여 반복적으로 자산을 인출했습니다. 이로 인해 DAO는 수천만 달러에 해당하는 이더를 잃게 되었습니다. Reentrancy 공격 방지 방법 Reentrancy 공격을 방지하기 위해 개발자들은 여러 가지 방법을 사용할 수 있습니다: 1. Checks-Effects-Interactions 패턴 : 이 패턴은 함수의 상태를 변경한 후 외부 계약과 상호작용하는 방식입니다. 즉, 먼저 상태를 업데이트하고, 그 다음에 외부 호출을 수행하여 재진입 공격의 가능성을 줄입니다. ```solidity function withdraw(uint amount) public { require(balances[<a href='https://sangseek.com/sangseeks/msg.sender/ko'>msg.sender</a>] >= amount); // 상태 변경 balances[msg.sender] -= amount; // 외부 호출 payable(msg.sender).transfer(amount); } ``` 2. Mutex (상호 배제) : 함수가 실행되는 동안 다른 호출이 이루어지지 않도록 잠금을 설정하는 방법입니다. 이 방법은 코드가 복잡해질 수 있으며, 잘못 구현될 경우 <a href='https://sangseek.com/sangseeks/데드락/ko'>데드락</a>(<a href='https://sangseek.com/sangseeks/교착 상태/ko'>교착 상태</a>)을 초래할 수 있습니다. 3. Reentrancy Guard : 특정 플래그를 사용하여 함수가 재진입되는 것을 방지하는 방법입니다. 이 플래그는 함수가 실행 중일 때 true로 설정되고, 함수가 종료되면 false로 설정됩니다. ```solidity bool internal locked; modifier noReentrancy() { require(!locked, "No reentrancy allowed"); locked = true; _; locked = false; } function withdraw(uint amount) public noReentrancy { // withdraw logic } ``` 4. Gas Limit : 외부 호출 시 가스 한도를 설정하여 공격자가 재진입할 수 있는 기회를 줄이는 방법입니다. 그러나 이 방법은 완벽한 해결책이 아닙니다. 결론 Reentrancy 공격은 스마트 계약의 보안에 있어 매우 중요한 문제입니다. 개발자들은 이러한 공격을 방지하기 위해 다양한 패턴과 기법을 사용해야 하며, 코드 리뷰와 테스트를 통해 취약점을 사전에 발견하고 수정하는 것이 필수적입니다. 블록체인 기술이 발전함에 따라 이러한 보안 문제에 대한 인식과 대응이 더욱 중요해지고 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기