분류 전체보기 219

Solidity 취약점 #6

Requirement violation Solidity에서 require는 외부 입력에 대해서 validate한다. 대부분의 경우에서 입력은 caller에게 들어오지만 return은 callee가 처리한다. 이러한 require의 violation이 일어나면 두가지 경우이다. 첫 번째는 외부 입력에 의해서 버그가 발견된 것이고, 두 번째는 requirement의 조건이 너무 강하게 제한된 것이다. 너무 강하게 조건이 정해져 있다면 올바른 입력을 처리 못할수가 이tek. 예시> Signature Replay Off-Chain에서의 데이터에 대해서 인증된 유저임을 나타내기 위해서 Sign을 하고 on-chain에 업데이트되면 이를 검증하게 된다. 이러한 서명이 재전송된다면 만약 한번만 전송되길 원하는 sig..

BlockChain 2022.01.18

Solidity 취약점 #5

Transaction ordering dependence Front Running, Race Condition이라고도 불린다. 이더리움 노드는 트랜잭션 풀에서 트랜잭션을 선택해서 블록을 생성한다. 채굴자가 작업 증명 알고리즘을 통해 해시 값을 찾고 해당 트랜잭션이 포함된 블록을 채굴해야만 트랜잭션은 유효한 것으로 간주된다. 이때 채굴자는 트랜잭션 풀에서 블록에 포함시킬 트랜잭션을 임의로 선택할 수 있다. 이때 공격자는 트랜잭션 풀에서 채굴자들이 푸는 문제에 대한 답, 논스 값을 포함하는 트랜잭션 정보를 얻을 수 있다. contract FindThisHash{ bytes32 constant public hash = 0x5b5b97fafd9855eec9b41f75d8f334abd24fd; constructo..

BlockChain 2022.01.17

1회차

1. 다중 코어 컴퓨터를 하나로 묶어 사용하는 다중 처리 컴퓨터를 사용할때... 대용량 프로그램을 효과적으로 처리하기 위한 기술이 아닌 것은 1) OpenCL : 개방형 범용 병렬 컴퓨팅 프레임워크. CPU,GPU,DSP등의 프로세서로 이루어진 이종 플랫폼에서 실행되는 프로그램을 작성할 수 있게 해준다. 2) OpenGL : 오픈 그래픽 라이브러리로 2차원 및 3차원 그래픽스 표준 API규격이다.(OpenCV도 컴퓨터비전) 3) OpenMP : 공유 메모리 다중처리 프로그래밍 API로 C,C++, 포트란 언어와 유닉스 및 마이크로소프트 윈도 플랫폼을 비롯한 여러 플랫폼을 지원한다. 4) GPUPU : 일반적으로 컴퓨터 그래픽을 위한 계산만 맡았던 GPU를 CPU가 맡았던 응용 프로그램들의 계산에 사용하는..

Bank IT,Digital 2022.01.16

Solidity 취약점 #4

1. Strict balance equalitiy Self_destruct 취약점, 예기치 않은 이더와 balance오류 취약점과 연관지을 수 있다. Self_destruct API로 인한 이더의 전송은 Fallback function을 호출하지 않으며 Ether를 강제로 보낼 수 있고 피해자 계약은 거부할 수 없다. 따라서 의도하지 않은 동작이 발생할 수 있다. pragma solidity ˆ0.4.25; contract Gamble{ address owner ; address [] members; address[] participators; uint participatorID = 0; function constructor (){ // constructor Dependency owner = 0xdCad..

BlockChain 2022.01.14

Solidity 취약점 #3

1. Over/Under Flow 변수의 데이터 타입 범위를 벗어나는 숫자를 고정 크기 변수에 저장해야하는 연산이 수행되면 오버플로/언더플로가 발생한다. 이를 통해 악용하여 예기치 않은 논리 흐름을 생성할 수 있다. 언더플로(underflow) : uint8(부호 없는 8비트 정수) 변수의 값이 0일때, 1을 빼면 결과는 255(8비트에서 가장 큰 수). 나타낼 수 있는 범위 아래에 숫자를 할당할 경우 오버플로(overflow) : uint8 변수는 나타낼 수 있는 가장 큰 값이 255인데, 이 변수의 초기값이 0일 때 256을 더하면 0이 되고 257을 더하면 1이 된다. 나타낼 수 있는 범위 이상의 숫자를 할당할 경우 contract Timelock{ mapping(address => uint) pu..

BlockChain 2022.01.13

Solidity 취약점 #2

1. Transfer forwards all gas 기본적으로 가스는 트랜잭션을 호출한 sender가 지불하도록 되어 있는데 이는 두 가지 공격 가능성을 열어둔다. 공격자가 트랜잭션을 보내도록 유도한다. 트랜잭션이 더 많은 가스를 소모하도록 유도한다. Call 함수는 Caller 컨트랙트의 Fallback Function을 invoke하고 재진입 공격이 가능하다. 이는 첫 번째 공격이 가능하게 하며 두 번째는 공격자의 트랜잭션에 포함되는 매개변수 또는 개발자의 잘못된 로직으로 인한 가스를 요하는 잦은 실행이 유도된다. 즉 재진입 공격과 유사하게 진행되며 예방 방법 또한 같은 선상에 있다. + (Supplement) 2. DOS 사용자가 일정 기간 또는 영구적으로 컨트랙트를 실행할 수 없게 만드는 공격이다..

BlockChain 2022.01.12

1/12 경제 스크랩

https://www.mk.co.kr/news/economy/view/2022/01/32399/ [단독] "한국, 오너경영으로 과감한 기술투자…고속성장 이끌었다" 세계銀-KDI가 본 선진한국 높은 교육열에 기업투자·수출 `결단력 있는 경영` 긍정적 역할 대기업 고용비중 獨 60%인데 한국 각종 규제 탓에 27% 불과 세계적 기업 숫자가 곧 국력 500대기업 韓 14개, www.mk.co.kr 세계은행은 1990년대 중후반부터 한국이 선진국 대열에 합류했다고 본다. 하지만 한국이 중진국에서 특별한 전환 계기를 마련한 것은 아니라는 게 이번 연구의 잠정 결론이다. 국민의 높은 교육열과 근면·성실성, 이를 바탕으로 한 기업들의 활발한 투자, 해외 시장 개척이 어우러지면서 1960년대부터 현재까지 경제 성장을 ..

Solidity 취약점 #1

Re-enterency (= in mastering Ethereum) ✔️ 이더리움 스마트 컨트랙트의 특징 중 하나는 다른 외부 컨트랙트의 코드를 호출하고 활용할 수 있다는 점이다. ✔️ 컨트랙트는 일반적으로 이더를 처리하기 때문에 종종 다양한 외부 사용자 주소로 이더를 전송하는데, 이 경우 컨트랙트는 외부 호출을 요청해야 함 ✔️ 이 경우, 공격자가 컨트랙트에 콜백을 포함하여 대체 코드를 실행하도록 강제할 수 있다. 간단하게는 개발자가 두 가지 사실을 놓쳤을 때 발생할 수 있다. 1. 이더를 보내는 것은 수신자의 Fallback Function을 호출하는 것과 동일하다. 또한, 이러한 코드 실행은 동기적으로 진행되므로 재진입이 발생할 수 있다. 2. 주소로 돈을 보내는 것은 주소의 코드에 제어를 이전할..

BlockChain 2022.01.11

Solidity 취약점 카테고리화

취약점을 체계화하기 위해 주제 조사 진행하여 아래 Keyword별 연구 간행물 조사 진행함 Survey Smart Contract Vulnerability Common pattern Known attack Solidity 추가적으로 Solidity 공식 문서, Smart Contract Weakness Classfication(SWC) 등의 웹사이트 활용하였음 : 최소 2번 언급된 것을 고려(= 논문일 시 최소 한 번 또는 두 번) & 악용될 수 있는 약점 추출 결과 취약점 약자 CWE Systemazation tx.origin으로 인한 인증 Atx CWE-284 Blockhash 사용 BU CWE-668 Call to the unknown CU CWE-669 Untursted Callee의 Delega..

BlockChain 2022.01.11

Solidity #5

이더리움 상태 EVM의 작업은 이더리움 프로토콜에 정의된 대로 스마트 컨트랙트 코드의 실행 결과로 유효한 상태 변화를 계산하여 이더리움 상태를 업데이트하는것이다. 이러한 측면에서 이더리움을 트랜잭션 기반 상태 머신으로 설명할수 있고, 이것은 외부의 주체가 트랜잭션 생성, 수락 및 주문을 통해 상태 변화를 시작한다는 사실을 반영한다. 가장 상위 레벨에서보면 이더리움 월드상태(world state)가 있다. 월드 상태는 이더리움 주소를 계정(account)에 매핑한것이다. 이더리움 주소는 이더 잔액(balance), 논스, 계정의 스토리지, 계정의 프로그램 코드를 의미한다. - 이더 잔액은 계좌가 소유한 웨이로 저장된다. - 논스는 계정이 EOA일 경우 해당 계정에서 성공적으로 전송한 트랜잭션의 수를 나타낸..

BlockChain 2022.01.10