BlockChain 17

DID 서비스

DID 데이터 위변조가 불가능한 블록체인을 기반으로 탈중앙화된 신원확인 서비스를 지원하는 기술, 이를 통해 사용자가 자신의 정보를 선택적으로 제공하여 자신의 신원정보에 대한 주권을 강화하고 스스로 개인 정보에 대한 통제가 가능하다. 이 기술을 통해 특정 서비스의 이용, 컨텐츠의 소유 등을 인증할 수 있다.( => 개인 스스로가 자신의 신원을 인증하여 자신의 콘텐츠를 안전하게 보관하며, 콘텐츠에 대한 소유권을 신뢰성 있게 보장받을 수 있도록) DID는 블록체인 기반 인증으로 비대칭 암호화 알고리즘 방식을 사용하며 자신을 설명할 수 있는 DID Document를 직접 소유하면서 관리하여 스스로 신원 데이터의 통제, 신원 증명 권한을 가진다. DID Document는 자격증명을 검증할 수 있는 데이터를 담은 ..

BlockChain 2022.03.20

텐더민트(Tendermint) 합의 알고리즘

텐더민트 합의 알고리즘은 코스모스 블록체인의 엔진이다. 코스모스 블록체인은 블록체인 확장성 문제를 해결하는 코스모스 허브라는 메인넷 론칭을 준비하고 있다. 텐더민트는 비트코인, 이더리움의 poW의 문제를 풀기 위해 전체 검증자 중 3분의 2이상이 찬성으로 합의에 이르는 비잔틴 장애 허용(BFT)기반으로 설계됐다. 텐더민트는 BFT를 개량해, 퍼블릭 블록체인과 프라이빗 블록체인에서 모두 사용할 수 있게 했다. 이 코어 엔진은 초당 수천건의 트랜잭션처리가 가능하다. 이는 수많은 애플리케이션을 하나에 작동할 성능이라 생각하여 블록체인의 확장성 문제를 주목하게 된것이다. 이는 코스모스 허브라고 불리는데 블록체인들의 중간 역할을 하면서 블록체인간 통신 프로토콜을 통해 상호 통신한다. 텐더민트 코어 최근까지 블록체..

BlockChain 2022.03.19

최근 Re-enterancy양상

제외 취약점 Malicious library : Code단에서진단불가, 악의적인 라이브러리로 부터 받은 값을 검증하거나 예외처리 하는 쪽으로 돌려서 분류 Transaction Ordering dependency : 채굴자가 공격하는 블록 도메인에서의 취약점이라고 볼 수 있고 코드단에서 고려하긴 힘들다. Secrecy Failure : Nature한 취약점으로 private한 변수를 설정해도 그러한 변수가 있음을 알 수. 있으므로 값을 유추하려는 공격이 시도되는 것 Lack of Transactional privacy Under-priced opcode : 값이 저렴한 opcode의 연산을 대규모로 사용함으로서. 네트워크 단의 DOS공격을 일으키는 공격이었지만 이스탄불 하드포크이후 가스 가격이 상승하면서 ..

BlockChain 2022.01.21

Solidity re-enterancy

기본적인 재진입 패턴 Deposit() -- > user token 또는 balance를 올린다 이후 withdraw로 Deposit한 balance를 확인하고 출금한다. 이때 악의적인 fallback function이 동작하면서 다시 withdraw가 동작 방지 패턴 1) Call 방지 2) 전송전 로직 진행 3) mutex(= re-enterancy guard) 그러나 최근 공격은 Call과 같은 명시적인 출금 함수로 인해 진행되는 것이 아니다. 토큰을 활용한 거래에서 사용되는 로직에서 발생 * CEI pattern Make Checks ->make change -> all another contract 2020.04- Uniswap/Lendf.Me hacks Supply 함수는 deposit하는 t..

BlockChain 2022.01.20

Solidity 취약점 #7

1. 외부컨트랙트와 interaction 간 취약성 1-1) 내부로직취약성 Reentrancy, DelegateCall => 취약성을 모르고 배포한 컨트랙트는 악의적인 외부의 컨트랙트를 호출하고 이는 악의적인 Fallback Function을invoking하거나 delegate Call을 활용하여 공격을 시도한다. 1-2) 컨트랙트 호출 기반 진행 취약성 (Frozen Ether), Dos by external contract, Require violation => 외부 컨트랙트 호출을 기반한 코드가 진행된다. 호출 컨트랙트가 제대로 된 코드 진행을 못하고 그러한 값을 반환하면 코드 진행 자체가 멈출수 있다.(=Require문) 2. 미흡한 유효성 검증 취약성 2-1) 입력 값 검증 취약성 Short a..

BlockChain 2022.01.19

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

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