Smart Contract/Security9 스마트 컨트랙트 공격 - Private 변수 악용 ⛔️ Private 변수 악용 스마트 컨트랙트의 변수를 private로 선언하면 외부에서 접근할 수 없다는 일반적인 개념과 달리, Solidity에서 private로 선언된 변수는 외부에서 접근이 가능합니다. 이는 Solidity 의 스토리지 구조와 저장 방식 때문에 발생합니다. ❗️ Solidity 스토리지 구조 Solidity에서 변수는 스토리지(storage) 또는 메모리(memory)에 저장됩니다. 스토리지는 하드 디스크에 데이터를 저장하는 것으로 비교할 수 있으며, 메모리는 RAM에 데이터를 저장하는 것으로 비교할 수 있습니다. 스토리지는 슬롯(slot)으로 구성되어 있으며, 총 스토리지 크기는 2^256 바이트이고, 각 슬롯은 32 바이트를 차지합니다. 데이터는 선언된 순서대로 순차적으로 저장.. Smart Contract/Security 2023. 11. 7. 스마트 컨트랙트 공격 - 리플레이 공격 ⛔️ 리플레이 공격 리플레이 공격은 블록체인에서 발생하는 보안 위협 중 하나로, 유효한 데이터 전송을 악의적이거나 부정하게 반복 또는 지연시켜 발생하는 공격입니다. 이러한 공격은 특히 블록체인에서 중요한 거래나 계약을 수행하는 경우에 매우 치명적일 수 있습니다. 리플레이 공격은 주로 블록체인 트랜잭션을 그대로 복사하여 다른 블록체인 또는 같은 블록체인 상의 다른 계정에 다시 제출하는 것으로 이루어집니다. 이로 인해 같은 거래가 두 번 이상 처리되는 결과를 초래할 수 있습니다. 멀티시그 지갑을 통해 리플레이 공격에 대해 설명하겠습니다. 잔액이 2 ETH이고 두 명의 관리자인 Bill과 Elon이 있는 멀티시그 지갑이 있습니다. Bill이 지갑에서 1 ETH를 인출하려면 아래와 같은 절차를 거칩니다. 1️⃣.. Smart Contract/Security 2023. 11. 6. 스마트 컨트랙트 공격 - 복제 논리 공격 ⛔️ 복제 논리 공격 스마트 컨트랙트의 임의성 또는 복제 논리 공격은 스마트 컨트랙트에서 랜덤한 값을 생성하거나 결정할 때 발생하는 취약점입니다. 복제 논리 공격은 공격자가 랜덤 숫자 생성 로직을 스마트 컨트랙트와 동일하게 복제하여 정확한 결과를 예측하는 방법입니다. 즉, 공격자가 스마트 컨트랙트에서 사용하는 난수 생성 함수를 자신의 공격용 컨트랙트에 동일하게 구현하고, 이를 통해 스마트 컨트랙트와 동일한 랜덤한 값을 얻어냅니다. 따라서 스마트 컨트랙트의 랜덤 결과를 예측할 수 있게 되어 공격자가 불공정하게 게임을 이길 수 있거나 다른 부정한 행위를 할 수 있는 상황이 발생합니다. 😭 피해자 스마트 컨트랙트 // SPDX-License-Identifier: MIT pragma solidity ^0.8.9.. Smart Contract/Security 2023. 11. 6. 스마트 컨트랙트 공격 - DelegateCall 스토리지 충돌 공격 ⛔️ DelegateCall 스토리지 충돌 공격 이 공격을 이해하기 전에, Solidity가 상태 변수를 저장하는 방식을 이해해야 합니다. 먼저 call과 delegatecall의 차이점을 설명하겠습니다. Solidity는 스마트 컨트랙트 함수에 메시지를 전달하는 두 가지 저수준 인터페이스를 지원합니다. 이러한 인터페이스는 스마트 컨트랙트 인스턴스 대신 스마트 컨트랙트 주소를 기반으로 작동합니다. ❗️ Call vs DelegateCall Solidity는 스마트 컨트랙트 함수에 메시지를 전달하는 두 가지 저수준 인터페이스를 지원합니다. 이러한 인터페이스는 스마트 컨트랙트 인스턴스 대신 주소를 기반으로 작동합니다. 🟠 Call Call은 호출된 스마트 컨트랙트의 스토리지 컨텍스트를 가진 호출자에서 호출된.. Smart Contract/Security 2023. 11. 6. 스마트 컨트랙트 공격 - 서비스 거부 공격 (DoS) ⛔️ 서비스 거부 공격 (Denial of Service) 서비스 거부 공격은 악의적인 공격자가 네트워크 또는 시스템을 과부하시키거나 새로운 연결을 거부하여 정상적인 사용자들이 서비스를 이용할 수 없도록 만드는 공격입니다. 이러한 공격은 서버 또는 네트워크 자원을 초과해서 사용하여 서비스를 정상적으로 처리할 수 없게 만드는 것이 목표입니다. ❗️ 예기치 않은 Revert 아래는 예기치 않은 Revert가 DoS를 유발할 수 있는 방법을 설명하기 위한 입찰 스마트 컨트랙트입니다. 😭 피해자 스마트 컨트랙트 // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; contract Auction { address frontRunner; uint256 highestBi.. Smart Contract/Security 2023. 11. 6. 스마트 컨트랙트 공격 - tx.origin 피싱 공격 ⛔️ tx.origin 피싱 공격 tx.origin 피싱 공격에 대해 설명하기 전 tx.origin과 msg.sender의 차이에 대해 설명하겠습니다. 위의 시나리오에서 사용자는 외부 소유 주소/계정(EOA)인 일반적인 이더리움 지갑 주소로 Contract A를 배포합니다. 사용자가 one 함수를 호출하면 내부적으로 two 함수를 호출하고 해당 함수는 내부적으로 다른 Contract B의 three 함수를 호출합니다. 이러한 경우, Contract B에서 msg.sender는 Contract A가 되고, tx.origin은 원래 트랜잭션을 시작한 주소, 즉 사용자(EOA)가 됩니다. 따라서 msg.sender는 현재 함수를 호출한 주체를 나타내며, 이는 스마트 컨트랙트일 수도 있고, EOA일 수도 있습니.. Smart Contract/Security 2023. 11. 6. 스마트 컨트랙트 공격 - 재진입 공격 ⛔️ 재진입 공격 재진입 공격은 스마트 컨트랙트에서 발생할 수 있는 보안 취약점 중 하나로, 이러한 공격은 보통 컨트랙트 간 자금 이체 시 발생하며, 공격자는 스마트 컨트랙트의 실행 흐름을 조작하여 여러 번 호출되는 함수를 악용하여 스마트 컨트랙트의 자금을 불법적으로 탈취하는 것을 목표로 합니다. 재진입 공격에서 해커는 일반적으로 피해자를 공격하는데 스마트 컨트랙트를 사용합니다. 😭 피해자 스마트 컨트랙트 // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; contract SavingsBank { mapping(address => uint) public balances; function deposit() public payable { balances[msg.. Smart Contract/Security 2023. 11. 3. 스마트 컨트랙트 공격 - 소유권 착취 ⛔️ 소유권 착취 아래 예시 스마트 컨트랙트는 부동산 가격을 설정하는 간단한 예시입니다. // SPDX-License-Identifier: MIT pragma solidity 0.8.9; contract RealEstatePrice { uint256 public apartmentprice; constructor(uint256 _price) { apartmentprice = _price; } function updateApartmentPrice(uint256 _price) external { apartmentprice = _price; } } 생성자는 아파트의 기본 가격을 설정하며, updateApartmentPrice 함수를 통해 아파트의 가격을 변경할 수 있습니다. 그러나 이 스마트 컨트랙트는 외부 함.. Smart Contract/Security 2023. 11. 2. 스마트 컨트랙트 정적/동적 분석 ✏️ 스마트 컨트랙트 정적/동적 분석 🔴 정적 분석 (Static Analysis) 정적 분석은 프로그램을 실행하기 전에 소스 코드를 분석하여 결함을 식별합니다. 개발자가 코드를 작성한 후에 컴파일 또는 빌드 단계에서 수행됩니다. 소스 코드의 문법 오류, 잠재적인 보안 취약점, 코드 스타일 문제 등을 검사합니다. 프로그램의 실제 실행 없이도 취약점을 찾을 수 있습니다. 정적 분석은 런타임 시에 발생할 수 있는 오류를 미리 예방하고, 개발 초기 단계에서 결함을 식별하여 비용과 시간을 절약합니다. 프로그램의 실행경로에 따른 동적인 상황은 고려하지 않으므로 모든 결함을 찾을 수는 없습니다. 🔵 동적 분석 (Dynamic Analysis) 동적 분석은 프로그램을 실행한 후에 프로그램의 동작을 모니터링하고 결함을.. Smart Contract/Security 2023. 11. 2. 이전 1 다음