스마트 계약에 대한 서비스 거부 공격: PlatoBlockchain 데이터 인텔리전스를 수정하고 방지하는 방법(전문가 가이드). 수직 검색. 일체 포함.

스마트 계약에 대한 서비스 거부 공격: 수정 및 방지 방법(전문가 가이드)

읽기 시간: 6

로딩 시간이 오래 걸리는 사이트를 방문하여 현재 열 수 없다는 사실을 알게 된 적이 있습니까? 그것은 단순히 서비스 거부 공격의 영향에 관한 것입니다. 

서비스 거부(DoS) 공격은 스마트 계약을 감사할 때 주로 주의해야 하는 많은 취약점 중 하나입니다. 이 블로그는 DoS 공격이 무엇인지, 그 영향, 유형 등 추가해야 할 사항 등 DoS 공격의 내용을 풀어보는 것을 목표로 합니다.

빨리 들어가서 그들 모두를 탐험합시다. 

DoS 공격이란 무엇입니까?

DoS 공격은 네트워크, 서버 또는 애플리케이션의 처리 기능을 방해하여 합법적인 사용자의 요청을 받는 것을 제한합니다. 여기서 공격자는 서버의 메모리와 대역폭을 고갈시키는 더 많은 트래픽을 전송하여 네트워크를 압도합니다. 

블록체인은 엄청난 잠재력을 갖고 있기 때문에 DoS 공격이 부를 훔치는 주요 표적이 됩니다. 비트코인과 같은 가장 유명한 암호화폐는 이더리움등도 DoS 공격을 경험했습니다. 

분산 서비스 거부 (DDoS)

DDoS(분산 서비스 거부)는 공격자가 여러 장치를 제어하여 대상 노드에 대한 공격을 시작하는 DoS 공격입니다.

공격자는 대상 노드를 관찰하고 자신이 제어하는 ​​여러 장치를 채널로 지정하여 대상 노드에 넘쳐나는 많은 양의 정보를 보냅니다. 이로 인해 대상이 충돌하고 지정된 작업을 수행할 수 없습니다.  

블록체인 생태계에서 DoS 공격의 대상

DoS 공격의 과거 이벤트 기록에서 블록체인 생태계의 모든 부분이 DoS 공격에 취약합니다. 그리고 몇 가지를 꼽자면, 

암호화폐 지갑: 모든 지갑과 마찬가지로 암호화폐 지갑은 암호화폐를 저장, 전송 또는 수신하는 데 사용됩니다. 그리고 이러한 온라인 지갑은 서비스 및 Dapp과의 상호 작용을 방해하는 DoS 공격에 취약한 스마트 계약을 사용합니다. 

암호화폐 교환 서비스: 암호화폐가 거래되고 사용자 간에 교환이 이루어지는 온라인 플랫폼입니다. 그들은 해커가 플랫폼과 해당 서비스를 사용할 수 없게 만드는 DoS 공격을 수행하는 주요 대상입니다. 

예: 비트코인 ​​거래소 플랫폼인 Bifinex는 여러 차례 DDoS 공격을 받았습니다. 

메모리(트랜잭션) 풀: 블록체인의 트랜잭션은 블록에 추가되기 전에 유효성을 검사해야 합니다. 그때까지 트랜잭션 요청은 광부에 의해 선택되기를 기다리는 확인되지 않은 트랜잭션의 저장소와 같은 mempool에 저장됩니다. 

수수료가 높은 거래는 채굴자가 고를 가능성이 가장 큽니다. 따라서 작은 수수료의 많은 거래로 mempool을 넘치게 하면 사용자가 거래를 처리하기 위해 높은 수수료를 지불하게 됩니다. 따라서 DoS 공격은 처리 비용을 높이는 마법을 사용했습니다. 

합의 참여자: 그들은 논리를 해결하고 블록체인에 추가할 블록을 결정하는 플레이어입니다. 합의 리더에 DoS 공격을 가하면 전체 시스템이 중지됩니다. 

믹싱 서비스: 사용자가 익명으로 거래를 수행할 수 있도록 프로토콜을 사용합니다. 믹싱 풀에 대한 과도한 참여 요청, 셔플에 대한 일관성 없는 입력 등 다양한 수단으로 DoS 공격을 받습니다. 

스마트 계약 : 스마트 계약은 블록체인의 모든 트랜잭션 뒤에 있는 기본 프로토콜입니다. 스마트 계약에 대한 DoS 공격은 해당 노드가 호스팅하는 Dapp의 기능을 중지하는 노드를 충돌시킬 수 있습니다.

DoS 공격은 다음 섹션에서 자세히 설명하는 몇 가지 가능한 방법으로 수행됩니다.

스마트 계약 DoS 공격 유형 분석 

스마트 계약의 DoS 취약성으로 인해 무제한 리소스 사용 또는 계약 조작이 발생합니다. 이로 인해 정상적인 활동의 실행이 중단되거나 계약의 논리가 중단되고 붕괴됩니다. 

다음은 스마트 계약에서 다양한 DoS 공격의 분류입니다.

예기치 않은 DoS 되돌리기

스마트 계약에 대한 이 DoS 공격을 연구하기 위해 경매 계약을 예로 들어 보겠습니다. 경매 계약은 수신된 모든 최고 입찰가로 업데이트되고 현재 입찰가보다 낮으므로 이전 입찰자의 입찰 금액을 반환합니다.

contract Auction {
    address frontRunner;
    uint256 highestBid;

    function bid() public payable {
        require(msg.value > highestBid, "Need to be higher than highest bid");
        // Refund the old leader, if it fails then revert   
        require(payable(frontRunner).send(highestBid), "Failed to send Ether");
 
        frontRunner = msg.sender;
        highestBid = msg.value;
    }
}

공격자 계약은 경매 계약에 대한 액세스 권한을 얻는 생성자의 경매 계약으로 초기화됩니다. 이때 공격자는 'attack()' 함수를 호출하여 금액을 잠그므로 그보다 높은 입찰가를 받아도 공격자에게 입찰 금액을 반환하지 못합니다. 

import "./Auction.sol";   
contract Attacker{
    Auction auction;

    constructor(Auction _auctionaddr){
        auction = Auction(_auctionaddr);
    }

    function attack (){
        auction.bid{value: msg.value}();
    }

}

'공격자' 계약에 Ether를 환불하는 'receive()' 또는 fallback 함수가 포함되어 있지 않아 예기치 않은 복귀가 발생하기 때문입니다. 이것은 공격자가 항상 최고 입찰자가 되도록 계약을 맺습니다. 

가스 제한 DoS 차단 

블록에는 수행할 계산 작업의 양에 비례하는 소비되는 가스의 최대 한도가 있습니다. 가스 한도를 초과하는 경우 두 가지 유형의 DoS 공격으로 이어집니다.

가스 제한 DoS – 무제한 계약 운영

설정된 가스 한도가 있으며 트랜잭션이 설정된 한도보다 높은 가스 한도에 도달하면 트랜잭션이 실패합니다. 

공격자가 필요한 가스를 조작하면 상황은 더욱 악화됩니다. 공격자가 아주 적은 금액의 환불을 위해 몇 개의 주소를 추가하는 경우입니다. 각 환불에는 가스 요금이 부과됩니다. 따라서 가스 비용은 환불 거래가 발생하지 않는 한도를 초과합니다. 

struct Payee {
    address addr;
    uint256 value;
}

Payee[] payees;
uint256 nextPayeeIndex;

function payOut() {
    uint256 i = nextPayeeIndex;
    while (i < payees.length && msg.gas > 200000) {
      payees[i].addr.send(payees[i].value);
      i++;
    }
    nextPayeeIndex = i;
}

따라서 어레이에 루프를 구현하는 동안 필요한 단계를 고려해야 합니다. 

블록 스터핑

공격자는 높은 가스 가격으로 계산 집약적인 트랜잭션을 전송하여 트랜잭션이 블록에 추가되는 것을 막기 위해 이 공격을 시작합니다. 전체 가스 한도를 소비하기 위해 유사한 방식으로 여러 트랜잭션이 발행됩니다. 

높은 가스 요금을 지불함으로써 공격자는 의도한 거래만 블록에 추가되고 나머지는 제외되도록 합니다. 

소유자 작업

모든 계약에는 거래를 열거나 중지할 권한이 있는 소유자 주소가 있습니다. 전체 작업은 소유자의 주소에 의존하므로 분실 시 사용자는 토큰을 전혀 보낼 수 없으며 계약 기능이 붕괴됩니다.

DoS 공격의 영향

블록 스터핑은 합법적인 거래가 블록에 추가되는 것을 막는 많은 영향 중 하나입니다. 그러나 DoS 공격에는 몇 가지 다른 영향이 있습니다. 

부풀려진 장부: 블록체인 원장은 거래가 영구적으로 기록되는 곳입니다. 블록체인 노드는 이중 지출을 확인하기 위해 트랜잭션 사본을 저장합니다. DoS 공격은 스팸 거래로 원장을 부풀릴 수 있습니다.

네트워크 트래픽: 우리는 PXNUMXP 모드를 기반으로 하는 블록체인 기능을 알고 있습니다. 블록체인의 모든 노드는 트랜잭션 사본을 받습니다. DoS 플러딩은 네트워크 대역폭을 소모하는 큰 트랜잭션 볼륨을 초래할 수 있습니다. 

노드 장애: 블록체인은 많은 양의 데이터를 처리하기 위해 소프트웨어의 지원이 필요한 노드에서 기능합니다. 트랜잭션 플러딩 동안 노드의 메모리가 부족하여 작업이 중지될 수 있습니다.

소프트웨어 충돌: 논의한 바와 같이 mempool 또는 블록에는 할당된 메모리에 대한 특정 제한이 있습니다. 소프트웨어는 설정된 한도 내에서 트랜잭션을 수신, 처리 및 저장합니다. 들어오는 트랜잭션이 기본 제공 한도를 초과하면 소프트웨어가 충돌합니다.  

DoS 공격으로부터 스마트 계약 억제 

DoS 공격 분석에서 다음과 같은 방법을 사용하여 공격을 완화할 수 있습니다. 

퍼즐 : 서버는 메모리 퍼즐, 시간 잠금 퍼즐, CPU 바운드 퍼즐 등과 같은 퍼즐을 생성할 수 있습니다. 사용자가 서비스에 액세스하려면 스팸 공격에 맞서는 퍼즐을 풀어야 합니다.

수수료 기반 접근 방식: 마이닝 풀에 대한 마이닝 수수료, 거래 수수료 등과 같은 추가 수수료가 블록체인에 부과될 수 있습니다. 이는 공격자에게 DoS 해킹 비용이 많이 들게 하여 그러한 공격을 차단합니다. 

결론 노트

에서 수행된 스마트 계약 감사 코딩에 있는 잠재적인 취약점을 찾습니다. 그 중 일부는 재진입 취약성, 저장소 충돌, 임의성 공격, 서비스 거부 등을 포함합니다. 

이것은 분명히 의미합니다 현명한 계약 서비스 거부 공격 위협이 없는지 철저하게 테스트되었습니다. 이렇게 하면 Web3 공간의 가능한 취약성으로부터 프로젝트를 보호할 수 있습니다.

당사 서비스에 대한 최신 통찰력을 수집하기 위해 Telegram 채널을 시청하십시오. https://t.me/quillhash

13 조회수

타임 스탬프 :

더보기 퀼해시