분류97 스마트 컨트랙트 공격 - 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. 스마트 컨트랙트 퍼즈 테스팅 (Fuzz Testing) ✏️ 퍼즈 테스팅 (Fuzz Testing) 스마트 컨트랙트 퍼징 또는 퍼징 테스팅은 자동화된 방식으로 구현된 소프트웨어 테스트 기술입니다. 이 기술은 블랙박스 테스트 방법으로, 기형 또는 반기형 데이터를 주입하여 소프트웨어의 구현 버그를 찾는 데 사용됩니다. 더보기 💡 블랙박스 테스트 블랙박스 테스트는 소프트웨어 테스트의 한 종류로, 테스트 수행자가 소프트웨어 내부의 구조나 코드를 알지 못하는 상태에서 테스트를 진행하는 것을 의미합니다. 😲 퍼징 기술의 활용과 목적 퍼징은 유효하지 않거나 예기치 않은 데이터를 컴퓨터의 입력으로 주입하여 애플리케이션 내의 버그와 취약점을 발견하는 자동화된 소프트웨어 테스트 기술입니다. 퍼징은 보안 전문가와 악의적인 공격자 모두에 의해 사용될 수 있습니다. 🟢 보안 전문가.. Smart Contract/Testing 2023. 11. 2. 스마트 컨트랙트 테스트 ✏️ 스마트 컨트랙트 테스트 스마트 컨트랙트 테스트는 스마트 컨트랙트의 코드가 예상대로 작동하는지 확인하는 프로세스입니다. 이를 통해 계약이 신뢰성, 유용성 및 보안에 대한 요구 사항을 충족하는지 확인할 수 있습니다. 테스트는 작은 데이터 샘플로 스마트 컨트랙트를 실행하고, 스마트 컨트랙트가 올바른 결과를 생성하는지 확인하는 과정을 포함합니다. 🤔 스마트 컨트랙트 테스트의 중요성 스마트 컨트랙트는 고가의 금융 자산을 관리하거나 다양한 중요한 기능을 수행하는 경우가 많기 때문에 프로그래밍 오류로 인한 위험이 큽니다. 이더리움과 같은 퍼블릭 블록체인은 배포 후 스마트 계약 코드를 변경하기 어렵습니다. 이로 인해 "가상 업그레이드"를 수행하기 위한 계약 업그레이드 패턴이 존재하지만 구현하기 어렵고 사회적 합의.. Smart Contract/Testing 2023. 11. 2. 스마트 컨트랙트 업그레이드 ✏️ 스마트 컨트랙트 업그레이드 스마트 컨트랙트 업그레이드란 스마트 컨트랙트의 비즈니스 로직을 변경하면서 스마트 컨트랙트의 상태를 유지하는 것을 말합니다. 블록체인에서 한 번 배포된 스마트 컨트랙트는 수정할 수 없다는 원칙이 있습니다. 그러나 실제로는 이러한 제한을 극복하기 위해 다양한 전략과 패턴이 개발되었습니다. 1️⃣ 컨트랙트 마이그레이션 컨트랙트 마이그레이션은 기존 스마트 컨트랙트의 새 인스턴스를 배포하고, 스토리지와 잔액을 새로운 컨트랙트로 이전하는 과정입니다. 새롭게 배포된 컨트랙트는 초기 상태가 비어있어, 이전 컨트랙트에서 데이터를 복구하여 새로운 구현에 쓸 수 있습니다. 이후에는 이전 컨트랙트와 상호작용 했던 모든 컨트랙트를 새 주소로 업데이트해야 합니다. 이 방법은 상대적으로 간단하나, .. Smart Contract/Smart Contracts 2023. 11. 2. 이전 1 ··· 4 5 6 7 8 9 다음