본문 바로가기
블록체인/DASP

[DASP Top 10] Denial of Service (DoS)

by Dr.Ratel 2022. 11. 25.
반응형

Denial of Service (DoS)


DDoS와 DoS는 어떤 경우든 위험한 취약점이다. 서버에 직접적인 타격을 주기때문에 효과도 금방 나온다. 그런데 이더리움에게 DoS는 더욱 치명적이다. 다른 유형의 애플리케이션은 결국 복구될 수 있지만, 스마트 컨트랙트의 경우엔 영원히 복구가 불가능 할 수도 있기때문이다. 

거래의 수취인이 악의적으로 행동하거나 기능 계산이 필요한 가스를 인위적으로 증가시키거나 스마트 컨트랙트의 민간 구성 요소에 접근하기 위해 접근 제어를 남용하거나 혼용과 과실 이용 등으로 DoS, 서비스 거부를 초래할 수 있다.


EXAMPLE
1. 경매 계약을 통해 사용자는 다른 자산에 입찰 할 수 있다.

2. 입찰하려면 사용자가 원하는 양의 에테르로 입찰(uint object) 함수를 호출해야 한다.

경매 계약은 대상의 소유자가 입찰을 수락하거나 최초 입찰자가 이를 취소할 때까지 에테르를 에스크로에 보관한다. 이는 경매 계약이 미해결 입찰의 모든 가치를 잔액에 담아야 한다는 것을 의미한다.

3. 경매계약서에는 관리자가 계약에서 자금을 회수할 수 있는 인출(입금액) 기능도 포함되어 있다. 함수가 하드코딩된 주소로 금액을 보내면서 개발자들은 함수를 공개하기로 했다.

4. 공격자는 잠재적인 공격을 보고 그 기능을 호출하여 계약서의 모든 자금을 관리자에게 지시한다. 이것은 에스크로의 약속을 파기하고 보류 중인 모든 입찰을 차단한다.

5. 관리자가 에스크로 처리한 돈을 계약서에 돌려줄 수도 있지만, 공격자는 단순히 자금을 다시 회수하는 것으로 공격을 계속할 수 있다.

CODE

function becomePresident() payable {
require(msg.value >= price); // must pay the price to become president
president.transfer(price); // we pay the previous president
president = msg.sender; // we crown the new president
price = price * 2; // we double the price to become president
}

개인 시드(Private Seed)를 반복 번호, kecak256 해시 함수와 조합하여 호출자가 승리하는지를 결정. 시드는 비공개지만 특정 시점에서 트랜잭션을 통해 설정되어 블록 체인에서 볼 수 있음

function selectNextWinners(uint256 _largestWinner) {
for(uint256 i = 0; i < largestWinner, i++) {
// heavy code
}
largestWinner = _largestWinner;
}

block.blockhash를 사용하여 난수를 생성한다. blockNumber가 현재 block.number로 설정되어 0으로 설정된 경우엔 이 hash를 알 수 없다. blockNumber가 과거에 256개 이상의 블록으로 설정된 경우 항상 0이 된다.
너무 예전 블록 번호로 설정된 경우 다른 스마트 계약은 동일한 번호에 엑세스하고 동일한 거래의 일부로 게임 계약을 호출 할 수 있다.

반응형

'블록체인 > DASP' 카테고리의 다른 글

[DASP Top 10] Unchecked Low Level Calls  (0) 2022.11.24
[DASP Top 10] Arithmetic  (0) 2022.11.24
[DASP Top 10] Access Control  (0) 2022.11.18
[DASP Top 10] Reentrancy  (0) 2022.11.15
DASP TOP 10  (0) 2022.11.12

댓글