시가총액: $3.704T 2.000%
거래량(24시간): $106.7616B -20.060%
공포와 탐욕 지수:

48 - 중립적

  • 시가총액: $3.704T 2.000%
  • 거래량(24시간): $106.7616B -20.060%
  • 공포와 탐욕 지수:
  • 시가총액: $3.704T 2.000%
암호화
주제
암호화
소식
cryptostopics
비디오
최고 암호화

언어 선택

언어 선택

통화 선택

암호화
주제
암호화
소식
cryptostopics
비디오

블록 체인에 대한 재입국 공격은 어떻게 발생합니까?

재진입은 거래가 완료되기 전에 반복적으로 기능을 호출하여 스마트 계약 취약점을 악용하여 제대로 확보하지 않으면 펀드 배수를 위험에 빠뜨립니다.

2025/04/11 20:21

재입국 공격 소개

재진입 공격 은 블록 체인 스마트 계약, 특히 금융 거래를 처리하는 악용 유형입니다. 이러한 유형의 공격은 계약 코드의 취약점을 활용하여 공격자가 초기 거래가 완료되기 전에 반복적으로 함수를 호출 할 수있게합니다. 이러한 공격이 어떻게 발생하는지 이해하는 것은 개발자와 사용자가 자산을 보호하고 블록 체인의 무결성을 유지하는 데 중요합니다.

재입국 공격의 역학

재진입 공격은 일반적으로 자금 양도와 관련된 현명한 계약을 목표로합니다. 이 공격은 계약이 내부 상태를 업데이트하기 전에 자금을 외부 주소로 보내는 계약의 논리에서 결함을 이용합니다. 작동 방식은 다음과 같습니다.

  • 초기 호출 : 공격자는 취약한 스마트 계약에서 기능을 호출하는 거래를 시작하며, 이는 공격자의 주소로 자금을 보내도록 설계되었습니다.
  • 외부 통화 : 계약이 내부 상태 (예 : 발신자의 잔액을 줄이기)를 업데이트하기 전에 자금을 공격자 주소로 보냅니다.
  • 재입국 : 공격자의 주소는 자금을 받으면 동일한 기능을 자동으로 호출하도록 설정되어 초기 거래가 완전히 처리되기 전에 계약을 다시 시작합니다.
  • 루프 :이 프로세스는 여러 번 반복 할 수있어 계약의 논리가 최종적으로 해당 상태를 업데이트하거나 자금이 부족할 때까지 공격자가 계약의 자금을 배수 할 수 있습니다.

취약한 스마트 계약 코드

재입국 공격이 어떻게 실행될 수 있는지 이해하려면 Ethereum Smart Contracts에 사용되는 프로그래밍 언어 인 Solidity로 작성된 취약한 스마트 계약의 단순화 된 예를 살펴 보겠습니다.

 contract VulnerableContract { mapping(address => uint) public balances; function withdraw(uint amount) public { require(balances[msg.sender] >= amount, 'Insufficient balance'); // Send funds to the caller (bool success, ) = msg.sender.call{value: amount}(''); require(success, 'Transfer failed'); // Update the balance balances[msg.sender] -= amount; } function deposit() public payable { balances[msg.sender] += msg.value; }

}

이 예에서 withdraw 기능은 먼저 자금을 발신자에게 보내고 잔액을 업데이트합니다. 이 시퀀스를 사용하면 공격자가 잔액이 업데이트되기 전에 계약을 재진입 할 ​​수 있습니다.

재입국 공격 실행

재입국 공격을 실행하려면 공격자는 자금을 수령 할 때 withdraw 기능을 자동으로 호출 할 수있는 악의적 인 계약을 설정해야합니다. 다음은 이러한 악성 계약의 단순화 된 예입니다.

 contract AttackContract { VulnerableContract public vulnerableContract; constructor(address _vulnerableContractAddress) { vulnerableContract = VulnerableContract(_vulnerableContractAddress); } function attack() public { vulnerableContract.withdraw(vulnerableContract.balances(address(this))); } receive() external payable { if (address(vulnerableContract).balance >= msg.value) { vulnerableContract.withdraw(msg.value); } }

}

  • 공격 계약 배포 : 공격자는 AttackContract 배치하고 VulnerableContract 계약의 주소로 초기화합니다.
  • 공격 시작 : 공격자는 AttackContract 에서 attack 함수를 호출하여 VulnerableContract 에서 withdraw 기능을 호출합니다.
  • Reintry Loop : 자금을 받으면 AttackContractreceive 기능이 자동으로 다시 withdraw VulnerableContract 배출하는 루프를 만듭니다.

재입국 공격 방지

재입국 공격을 방지하기 위해 개발자는 외부 통화가 이루어지기 전에 계약의 내부 상태가 업데이트되도록해야합니다. 다음은 재진입 공격에 저항력이있는 VulnerableContract 작업의 업데이트 버전입니다.

 contract SecureContract { mapping(address => uint) public balances; function withdraw(uint amount) public { require(balances[msg.sender] >= amount, 'Insufficient balance'); // Update the balance first balances[msg.sender] -= amount; // Then send funds to the caller (bool success, ) = msg.sender.call{value: amount}(''); require(success, 'Transfer failed'); } function deposit() public payable { balances[msg.sender] += msg.value; }

}

이 보안 버전에서는 자금이 전송되기 전에 잔액이 업데이트되어 재진입 시도를 방지합니다.

재입국 공격의 실제 사례

재입국 공격의 가장 악명 높은 사례 중 하나는 2016 년 이더 리움 블록 체인의 DAO 해킹 입니다. DAO (분산 된 자율 조직)는 벤처 캐피탈 펀드로 운영되도록 설계된 스마트 계약이지만 위에서 설명한 것과 유사한 취약성을 포함했습니다. 공격자는이 취약점을 악용하여 DAO에서 약 360 만 개의 ETH를 배출하여 이더 리움 블록 체인의 단단한 포크로 공격을 역전시켰다.

또 다른 예는 2017 년의 패리티 월렛 핵 으로, 공격자들은 패리티 다중 서명 지갑에서 재진입 취약성을 악용하여 150,000 개 이상의 도난을 초래했습니다.

자주 묻는 질문

Q : 리센트 공격을 블록 체인에서 실시간으로 감지 할 수 있습니까?
A : 재입국 공격을 실시간으로 감지하는 것은 블록 체인의 분산 특성으로 인해 어려울 수 있습니다. 그러나 일부 블록 체인 플랫폼 및 보안 회사는 고급 모니터링 도구 및 이상 탐지 알고리즘을 사용하여 재입국 공격을 나타낼 수있는 의심스러운 패턴을 식별합니다. 이러한 도구는 상당한 손상이 발생하기 전에 사용자와 개발자에게 잠재적 인 취약점을 알릴 수 있습니다.

Q : 모든 스마트 계약은 재진입 공격에 취약합니까?
A : 아니요, 모든 스마트 계약이 재진입 공격에 취약한 것은 아닙니다. 자금 양도와 관련이 없거나 외부 전화를하지 않는 계약은 일반적으로 민감하지 않습니다. 그러나 내부 상태를 업데이트하기 전에 자금을 외부 주소로 보내는 계약은 위험에 처할 수 있습니다.

Q : 재진입 공격으로부터 자신을 보호하기 위해 사용자가 취할 수있는 단계는 무엇입니까?
A : 사용자는 스마트 계약, 특히 많은 돈을 처리하는 계약과 상호 작용하는 것에주의를 기울여 자신을 보호 할 수 있습니다. 그들은 계약의 코드 및 감사 보고서를 조사하고 평판이 좋은 플랫폼을 사용하며 자금을 안전한 지갑에 보관해야합니다. 또한 Smart Contract Security의 일반적인 취약점 및 모범 사례에 대한 정보를 유지하면 사용자가 더 안전한 결정을 내릴 수 있습니다.

Q : 개발자는 어떻게 스마트 계약이 재진입 공격에 대해 안전을 보장 할 수 있습니까?
A : 개발자는 외부 통화가 이루어지기 전에 계약의 내부 상태가 업데이트되는 'Checks-Effects-Interaction'패턴과 같은 모범 사례를 따르면 스마트 계약을 확보 할 수 있습니다. 또한 철저한 코드 감사를 수행하고 공식적인 검증 도구를 사용하며 블록 체인 공간의 최신 보안 지침 및 취약점을 업데이트해야합니다.

부인 성명:info@kdj.com

제공된 정보는 거래 조언이 아닙니다. kdj.com은 이 기사에 제공된 정보를 기반으로 이루어진 투자에 대해 어떠한 책임도 지지 않습니다. 암호화폐는 변동성이 매우 높으므로 철저한 조사 후 신중하게 투자하는 것이 좋습니다!

본 웹사이트에 사용된 내용이 귀하의 저작권을 침해한다고 판단되는 경우, 즉시 당사(info@kdj.com)로 연락주시면 즉시 삭제하도록 하겠습니다.

관련 지식

온쇄 및 오프 체인 트랜잭션의 차이점은 무엇입니까?

온쇄 및 오프 체인 트랜잭션의 차이점은 무엇입니까?

2025-08-02 16:22:04

체인 거래 이해 온쇄 거래는 블록 체인 원장에 직접 기록 된 디지털 자산 전송을 나타냅니다. 이러한 트랜잭션은 영구적으로 저장되고 공개적으로 검증 될 수 있으므로 네트워크의 모든 노드는 트랜잭션 데이터의 사본을 검증하고 유지합니다. 사용자가 Bitcoin 또는 Ethe...

블록은 어떻게 서로 연결됩니까?

블록은 어떻게 서로 연결됩니까?

2025-08-04 06:56:36

블록 체인의 구조 이해 블록 체인은 각각 트랜잭션 목록을 포함하는 일련의 블록으로 구성된 분산 디지털 원장입니다. 이러한 블록이 연결되는 방식은 데이터 무결성과 불변성을 보장합니다. 각 블록에는 필수 구성 요소가 포함되어 있습니다 : 블록 헤더 , 트랜잭션 목록 및 이...

블록 체인 네트워크에서 노드의 역할은 무엇입니까?

블록 체인 네트워크에서 노드의 역할은 무엇입니까?

2025-08-03 15:16:26

블록 체인 네트워크에서 노드의 기능 이해 노드는 모든 블록 체인 네트워크 의 기본 구성 요소이며, 시스템의 분산 아키텍처를 지원하는 참가자 역할을합니다. 각 노드는 컴퓨터, 서버 또는 모바일 장치와 같은 장치이며 블록 체인에 연결되어 작동에 기여합니다. 노드의 주요 역...

블록 체인에서 트랜잭션은 어떻게 확인됩니까?

블록 체인에서 트랜잭션은 어떻게 확인됩니까?

2025-08-04 00:35:38

트랜잭션 검증에서 노드의 역할을 이해합니다 블록 체인 네트워크에서 노드는 시스템의 무결성과 보안을 유지하는 기본 구성 요소입니다. 모든 노드는 전체 블록 체인 원장의 사본을 저장하고 트랜잭션 검증에 참여합니다. 사용자가 한 지갑에서 다른 지갑으로 cryptocurren...

이중 지출 문제는 무엇이며 블록 체인은 어떻게 막을 수 있습니까?

이중 지출 문제는 무엇이며 블록 체인은 어떻게 막을 수 있습니까?

2025-08-02 13:07:57

이중 지출 문제 이해 이중 지출 문제 는 동일한 디지털 토큰에 두 번 이상 소비 될 수있는 디지털 통화 시스템의 근본적인 과제입니다. 두 사람에게 동시에 건조 할 수없는 물리적 현금과 달리 디지털 파일을 복사하고 재사용 할 수 있습니다. 악의적 인 행위자가 디지털 코인...

블록 체인과 데이터베이스의 차이점은 무엇입니까?

블록 체인과 데이터베이스의 차이점은 무엇입니까?

2025-08-01 21:36:31

블록 체인의 핵심 구조 이해 블록 체인은 암호화 해시를 사용하여 함께 연결된 일련의 불변 블록 으로 데이터를 기록하는 분산 된 디지털 원장입니다. 각 블록에는 트랜잭션 또는 레코드 목록, 타임 스탬프 및 해시를 통한 이전 블록에 대한 참조가 포함되어 있습니다. 이 구조...

온쇄 및 오프 체인 트랜잭션의 차이점은 무엇입니까?

온쇄 및 오프 체인 트랜잭션의 차이점은 무엇입니까?

2025-08-02 16:22:04

체인 거래 이해 온쇄 거래는 블록 체인 원장에 직접 기록 된 디지털 자산 전송을 나타냅니다. 이러한 트랜잭션은 영구적으로 저장되고 공개적으로 검증 될 수 있으므로 네트워크의 모든 노드는 트랜잭션 데이터의 사본을 검증하고 유지합니다. 사용자가 Bitcoin 또는 Ethe...

블록은 어떻게 서로 연결됩니까?

블록은 어떻게 서로 연결됩니까?

2025-08-04 06:56:36

블록 체인의 구조 이해 블록 체인은 각각 트랜잭션 목록을 포함하는 일련의 블록으로 구성된 분산 디지털 원장입니다. 이러한 블록이 연결되는 방식은 데이터 무결성과 불변성을 보장합니다. 각 블록에는 필수 구성 요소가 포함되어 있습니다 : 블록 헤더 , 트랜잭션 목록 및 이...

블록 체인 네트워크에서 노드의 역할은 무엇입니까?

블록 체인 네트워크에서 노드의 역할은 무엇입니까?

2025-08-03 15:16:26

블록 체인 네트워크에서 노드의 기능 이해 노드는 모든 블록 체인 네트워크 의 기본 구성 요소이며, 시스템의 분산 아키텍처를 지원하는 참가자 역할을합니다. 각 노드는 컴퓨터, 서버 또는 모바일 장치와 같은 장치이며 블록 체인에 연결되어 작동에 기여합니다. 노드의 주요 역...

블록 체인에서 트랜잭션은 어떻게 확인됩니까?

블록 체인에서 트랜잭션은 어떻게 확인됩니까?

2025-08-04 00:35:38

트랜잭션 검증에서 노드의 역할을 이해합니다 블록 체인 네트워크에서 노드는 시스템의 무결성과 보안을 유지하는 기본 구성 요소입니다. 모든 노드는 전체 블록 체인 원장의 사본을 저장하고 트랜잭션 검증에 참여합니다. 사용자가 한 지갑에서 다른 지갑으로 cryptocurren...

이중 지출 문제는 무엇이며 블록 체인은 어떻게 막을 수 있습니까?

이중 지출 문제는 무엇이며 블록 체인은 어떻게 막을 수 있습니까?

2025-08-02 13:07:57

이중 지출 문제 이해 이중 지출 문제 는 동일한 디지털 토큰에 두 번 이상 소비 될 수있는 디지털 통화 시스템의 근본적인 과제입니다. 두 사람에게 동시에 건조 할 수없는 물리적 현금과 달리 디지털 파일을 복사하고 재사용 할 수 있습니다. 악의적 인 행위자가 디지털 코인...

블록 체인과 데이터베이스의 차이점은 무엇입니까?

블록 체인과 데이터베이스의 차이점은 무엇입니까?

2025-08-01 21:36:31

블록 체인의 핵심 구조 이해 블록 체인은 암호화 해시를 사용하여 함께 연결된 일련의 불변 블록 으로 데이터를 기록하는 분산 된 디지털 원장입니다. 각 블록에는 트랜잭션 또는 레코드 목록, 타임 스탬프 및 해시를 통한 이전 블록에 대한 참조가 포함되어 있습니다. 이 구조...

모든 기사 보기

User not found or password invalid

Your input is correct