로그인

검색

디파이는 머니레고? “결합 잦을수록 보안 취약점 늘어나”

출처: https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=009&aid=0004725261

 

 

은행 예금이나 대출과 같은 서비스를 블록체인으로 구현한 탈중앙화금융(DeFi, 이하 디파이) 애플리케이션은 이식성이 높아 어떤 서비스와도 잘 호환되는 특징이 있다. 전통 금융서비스보다 가볍고 아무리 작은 기능이라 할지라도 자체적인 완결성을 갖추고 있어 특정 기능만 따로 떼어내도 즉각 사용할 수 있기 때문이다. 디파이를 조각하듯 잘 엮으면 새로운 금융상품도 쉽게 만들 수 있다는 의미에서 ‘머니 레고’라는 표현도 생겨났다.

 

 

반면 오픈소스나 프로젝트를 여럿 연동해 개발한 디파이 서비스일수록 각 서비스를 연결하는 부분에서 보안 취약점이 발생할 수 있어 주의가 필요하다는 전문가 의견이 나오고 있다. 디파이 서비스에서 해킹이 발생하면 금전적 피해의 규모가 상당한 만큼 디파이 서비스를 개발하는 업체와 사용자 모두에게 주의가 요구된다.

 

 

여러 서비스 간 결합성을 높인 ‘머니 레고’ 디파이 서비스 봇물

 

전통 금융에선 다른 서비스에 기능을 쉽게 공개하는 경우가 드물고 연동되는 기능도 단순히 조회하는 기능처럼 제한적인 경우가 많다. 반면 디파이에선 프로젝트가 개발한 서비스를 오픈소스로 공개하는 경우가 많다. 또 스테이블 코인을 발행하는 기능 같은 주요 기능도 외부에서 활용할 수 있도록 적극 지원하기도 한다. 기능을 연동하기 위해 상대방에게 허락을 별도로 구할 필요도 없다. 디파이에서 사용자들이 자주 사용하는 기능들은 이미 오픈소스로 공개돼 있고 별다른 제약 없이 활용할 수 있다. 이를 이용하면 개발자는 다양한 종류의 디파이 앱을 부품처럼 조합해 원하는 애플리케이션을 얼마든지 만들 수 있다. 디파이에선 이를 서비스 간 결합성이 좋다는 말로도 표현한다. 디파이 앱의 결합성이 높아지면서 서비스를 개발하는 생산성이 부쩍 늘어난 효과가 발생했다.

 

 

최근 디파이 영역에선 서비스 간 결합성을 더욱 끌어올린 제품들이 속속 등장하고 있다. 이렇게 만들어진 서비스로는 블록체인으로 구현한 복권 앱인 풀투게더가 대표적이다. 풀투게더는 여러 디파이 서비스를 결합해 만든 전형적인 ‘머니 레고’ 디파이 앱이다. 실제로 풀투게더에 구현된 기능의 상당수는 기존 디파이 프로젝트와 연동돼 있다. 예를 들어 예치금으로 모인 금액에서 이자를 발생시키는 기능은 컴파운드에서 구현한 기능을 끌어와 사용하고 있다. 또 이자 농사 프로젝트인 스시스왑은 탈중앙화 거래소(DEX)인 유니스왑의 코드를 포크해 똑같은 서비스를 하나 만든 뒤 거버넌스 토큰인 스시를 결합해 독자적인 서비스로 발전시킨 경우로 유명하다.

 

 

*이자 농사 : (디파이 서비스에서) 사용자가 토큰을 특정한 유동성 풀에 예치하고 플랫폼 토큰으로 보상받는 행위. 토큰 등 유동성을 제공하면 수익을 얻는다는 의미로 ‘유동성 채굴’이라고도 표현한다.

 

 

디파이 앱에서 연동되는 서비스가 늘고 호환성이 높아지면서 디파이 앱을 개발하는 과정은 예전보다 훨씬 수월해졌다. 반면 결함 없이 작동하는 안정적인 디파이 앱을 만들긴 결코 쉽지 않다는 분석이 업계에서 나오고 있다. 실제로 다른 곳에서 만든 애플리케이션을 부품 삼아 새로운 애플리케이션을 만들다 보면 보안성에 문제가 되는 경우가 종종 생긴다. 디파이 앱도 마찬가지다. 여러 개의 디파이 앱을 하나로 엮어 만든 디파이 서비스일수록 보안 취약점이 외부로 드러나기 더욱 쉽기 때문이다. 세르게이 나자로프 체인링크랩스 최고경영자(CEO)는 “디파이에선 다른 프로젝트의 컨트랙트와 기능을 연동해 서비스를 만드는 경우가 늘었다. 하지만 여러 기능을 모아서 디파이 앱을 제작하는 경우 공격당할 수 있는 범위가 늘어날 수 있어 주의가 필요하다”고 지적한 바 있다.

 

 

 

‘머니 레고’의 허점을 노린 피클 파이낸스 해킹 사건

 

실제로 연 파이낸스를 포크해 개발한 피클 파이낸스에선 2000만달러(한화 약 223억원) 규모의 암호화폐가 해커의 공격으로 지난달 도난당한 바 있다. 피클 파이낸스는 다른 디파이 앱의 기능을 조합해 ‘머니 레고’ 방식으로 탄생한 대표적인 디파이 앱 중 하나다. 피클 파이낸스는 사용자가 암호화폐를 스테이킹하면 상대적으로 높은 이자를 제공하는 이자 농사 플랫폼 중 하나다. 피클 파이낸스는 기본적으로 연 파이낸스의 코드를 포크해 만들어졌고 이자 농사 요소가 추가됐다. 즉 연 파이낸스의 설계도를 그대로 사용해 틀을 만들고 부품을 추가로 얹은 셈이다. 내부에서 사용자가 서로 다른 토큰을 맞바꿔야 하는 상황에선 피클 파이낸스가 유니스왑과 커브 파이낸스에 이를 요청해 대신 처리하고 있다. 피클 파이낸스는 외부의 디파이 서비스 여럿과 밀접하게 연관돼 있었지만 서비스가 맞닿아 있는 부분은 상대적으로 안전하지 못했다. 실제로 피클 파이낸스가 공개한 부검 문서에 따르면 해커는 피클 파이낸스에서 유니스왑과 커브 파이낸스로 이어지는 연결 고리를 집중 공격한 것으로 밝혀졌다.

 

 

피클 파이낸스에서 발생한 공격을 자세히 이해하려면 피클 파이낸스가 작동하는 구조를 먼저 이해할 필요가 있다. 피클 파이낸스에선 피클 항아리라는 자체적인 금고를 사용하고 있다. 피클 항아리는 사용자가 예치한 암호화폐를 보관하는 곳으로 연 파이낸스에서 사용하던 금고의 코드를 포크해 만들어졌다. 피클 항아리는 사용자들로부터 다양한 토큰을 받아오는 중요한 부분으로 스테이킹을 통해 수익을 발생시키도록 설계돼 있다. 피클 항아리는 피클 항아리는 업데이트를 통해 스왑 함수가 최근 추가된 바 있다. 버그 개선 등을 목표로 피클 항아리를 자체적으로 업그레이드하는 경우 항아리에 담겨있는 코인을 스테이블 코인으로 바꿔 새로운 항아리로 옮기는 기능이다.

 

 

하지만 스왑 함수에는 치명적인 결함이 존재했다. 스왑 함수는 옮겨야 할 코인이 들어있는 피클 항아리가 정상적인 항아리인지 위조된 항아리인지 구별할 수 없었다. 항아리를 검사하는 기능이 존재하지 않았기 때문이다. 해커는 이를 악용해 피클 파이낸스의 스왑 함수에 위조된 항아리를 전달할 수 있었다. 검사 과정이 없었기 때문에 위조된 항아리는 자동문처럼 피클 파이낸스를 쉽게 드나들었다. 외부 디파이 서비스에 요청 사항을 전달하는 중간자인 프록시 컨트랙트도 건네받은 피클 항아리가 진짜인지 확인하지 않았다. 그 결과 위조된 항아리에 들어있던 가짜 코인의 양만큼 커브 파이낸스에서 스테이블 코인이 출금됐고 공격자에게 전달됐다.

 

 

한편 프록시 컨트랙트는 코드가 실행된 맥락을 그대로 전달하는 ‘델리게이트 콜’로 연결돼 있었다는 점도 취약점으로 작용했다. 델리게이트 콜은 요청자의 명령어를 별도의 여과 없이 그대로 전달하는 특성이 있다. 델리게이트 콜은 공격자가 위조한 피클 항아리가 피클 파이낸스 내부로 깊숙이 침투할 수 있었던 배경으로도 풀이된다. 만약 델리게이트 콜을 사용해 컨트랙트를 설계하는 경우엔 개발자의 주의가 더욱 요구된다. 해커의 코드가 델리게이트 콜로 전달되면 예상치 못한 공격에 노출될 수 있기 때문이다.

 

△ 피클파이낸스에서 발생한 해킹은 놀이용 알파벳 매트를 예로 설명할 수 있다. O자리에 Q를 구겨 넣어도 매트를 완성시킬 수 있듯 해커는 가짜 피클 항아리를 제출해 디파이 자금을 출금할 수 있었다. 이같은 사고는 피클 파이낸스가 처음이 아니다. 오리진달러(OUSD) 프로젝트에서도 다이, 테더(USDT), 유에스디코인(USDC) 외에도 호환되지 않는 토큰이 프로토콜에 유입돼 피해가 발생한 바 있다.

 

 

 

디파이를 설계하는 개발자, 서비스 사용자 모두 주의 필요

 

이더리움 블록체인에선 어떤 컨트랙트가 외부의 다른 컨트랙트를 참조하거나 호출할 때 예기치 못한 문제점이 발생할 가능성이 일반적으로 존재한다. 컨트랙트에선 요청을 보낸 상대방 컨트랙트가 정상적인 컨트랙트인지 공격자가 만든 컨트랙트인지 가늠하기 어렵기 때문이다. 특히 디파이 앱은 외부의 서비스와 연동돼 한 정보를 주고받는 작업이 빈번하기 때문에 이같은 문제점이 심화할 수 있어 업계의 주의가 요구된다.

 

 

컨트랙트로 유입된 트랜잭션이 실제로 올바른 데이터인지 판단하려면 트랜잭션을 직접 실행해보고 판단해야 하는 경우가 많다. 이더리움에선 이를 보완하고자 이더리움 가상머신(EVM)에 기능을 추가해 결과값을 미리 알 수 있도록 지원하고 있다. 해당 기능을 사용하면 트랜잭션을 블록에서 직접 실행하지 않아도 가상으로 결과값을 확인할 수 있다. 일종의 테스팅과 디버깅을 위한 기능이다. 반면 이같은 기능을 사용하더라도 컨트랙트가 외부 컨트랙트를 호출하는 데서 발생할 수 있는 문제점을 완벽히 막아줄 순 없다는 지적이 나온다.

 

 

최윤성 DSRV 연구책임자는 “이더리움 블록체인은 개발과 디버깅을 위해 이더리움 가상머신(EVM)의 기능을 이용해 트랜잭션이 블록에 담기지 않더라도 결과를 미리 확인할 수 있도록 했다. 반면 해커들은 이러한 기능을 토대로 해킹이 가능한지 테스트를 수행하는 용도로 사용할 수 있어 보안성을 담보하려면 앞으로 더욱 주의가 요구될 것”이라고 이라고 말했다. 특히 “델리게이트 콜을 프로젝트에 구현하면 이를 통해 여러 기능에 누구나 접근할 수 있게 된다. 때문에 콜을 하는 주체가 허용된 대상인지 또 허용된 함수로 접근하는지 검사할 수 있도록 구현해야 한다”고 말했다. 컨트랙트가 외부와 요청을 주고받는 경우 애플리케이션에서 접근성을 관리하는 게 보안상 중요하다는 의견이다. 만약 호출한 상대방의 컨트랙트를 검사할 수 없는 경우라면 델리게이트 콜을 사용하지 않게끔 하나의 컨트랙트로 기능을 구현하는 방식이 더 안전하다고 그는 덧붙였다.

 

 

그는 “개발자는 이용하려는 상대편 프로토콜에 대한 모든 명세를 파악할 수 있어야 하지만 그렇지 못해 사고가 발생하는 경우가 종종 있다. 보안 감사업체도 사용자의 시나리오를 하나하나 완벽하게 검증하진 않아 보안감사를 받았다 해도 버그와 사고가 없다는 것을 온전하게 증명하지는 않는다. 결국 사용자가 조심해야 한다”고 말했다. 그는 “사용자들은 디파이 플랫폼이 어떤 방식으로 수익을 발생시키고 있는지 명확히 알고 있어야 한다. 이같은 정보의 대부분은 거버넌스 투표를 통해 공개돼 있기 때문에 지속적으로 내역을 확인할 필요가 있다”고 조언했다.

 

 

댓글 0개