2018 HDCON 예선

목차



서론

이더리움은 암호화폐의 제2의 전성기를 이끌어낸 신호탄이였다. 스마트계약(Smart Contract)이라는 기능을 이용하여 단순히 수치적인 재화의 기록을 넘어 계약 자체의 행동까지 체인에 기록하기 시작했다.

이더리움의 창시자 비탈릭 부테린(Vitalik Buterin)은 이더리움을 다음과 같이 정의하였다.

이더리움(Ethereum)은 블록체인 기술 위에서 실행되는 분산된 애플리케이션(Application)을 사용할 수 있도록 하는 오픈된 블록체인 플랫폼이다. 어느 누구도 이더리움 플랫폼을 소유, 제어할 수 없다. 비트코인(Bitcoin)보다 유연하게 설계되어 새로운 애플리케이션을 쉽게 만들 수 있다.

이더리움은 단순히 블록체인 기술을 이용하는 것 외에도 계약을 실행하고, 기록하고, 어플리케이션과의 연동도 지원할 수 있도록 설계된 플랫폼이다.

본 팀은 모바일 디바이스와의 연동을 통해 인증 및 계약을 이행하도록 하고, 비정상적인 사용자를 구분하여 차단하는 것을 목적으로 이더리움의 특성을 이용하고자 한다.


본론

블록체인 사용 이유

본팀에서 블록체인을 사용하는 이유는 무결성의 유지확장성이다.

블록체인의 무결성 유지는 시스템을 사용하는 사람이 많아질수록 어려워 진다. 일정 수 이상의 동의를 얻어야 수정이 가능하기 때문에 단순히 한 사람의 기록을 변경하는 것으로는 무결성을 깨뜨리기 어려운 것이 블록체인의 장점이다. 그러나, 블록체인의 단점은 사용자의 인증이 불가능하며, 사용자가 많아질수록 느려진다. 이러한 단점은 퍼블릭 블록체인(Public Blockchain)의 얘기이다.

본 팀은 이 문제를 해결하기 위하여, 프라이빗 블록체인(Private Blockchain)을 이용한다. 블록체인의 경우 별도의 인증시스템이 존재하지 않기 때문에 외부의 인증시스템 도입이 필요하다. 추가로 회원가입시 별도의 인증시스템을 통해 인증을 받은 사용자를 노드로 추가하여 체인 시스템을 구축한다. 기존에 존재하던 관계형 데이터베이스 시스템과 유사하게 보이지만, 자사의 운동량을 측정하는 앱(이하 ‘헬스케어 앱’)은 상품 구매, 레져활동 추천, 스포츠 센터와의 연계 등 다양한 사업과 연계할 수 있다. 이렇게 사업의 영역을 넓히게 될 경우 관리자 노드를 추가하여 컨소시엄 블록체인(Consortium Blockchain)으로 확장할 수 있다. 컨소시엄 블록체인은 단순히 공유 데이터베이스가 아니다. 기업간 거래(B2B)에 대해 모든 계약을 체인에 기록하여 조작으로 인해 발생할 수 있는 사고를 예방하고 신뢰성을 보장하는 데이터베이스이다.


가정

자사의 문제를 해결하기 위하여 3가지 사항에 대하여 미리 가정한다.

  1. 자사의 서비스는 이더리움 플랫폼을 기반으로 한다.
  2. 재화의 탈취는 다음 두 가지로 정의한다.
    • 탈취된 계정의 코인을 공격자의 계정으로 이전하는 행위
    • 탈취된 계정으로 공격자가 상품을 구매하는 행위
  3. 외부의 인증서비스를 통해 사용자의 인증이 가능하며 다음 사항에 대하여 외부의 인증 시스템을 이용한다.
    • 회원 가입 과정
    • 핸드폰 번호 혹은 기기의 변경


문제 파악

자사의 서비스는 웹 페이지를 통해 재화 거래가 이루어진다. 계정 도용이 발생할 경우, 공격자의 부당한 이득과 취득이 발생할 수 있는 문제가 있기 때문에 고객들에게 2차 인증을 유도하고있다. 그러나, 2차 인증은 보안적인 측면을 향상시켜주지만 고객들의 불편과 고객 이탈로 이어질 수 있기 때문에 2차 인증을 필수화 할 수 없는 상황이다.

자사는 고객고객의 정보를 가장 중요한 자산으로 판단하며, 공격자로 부터 계정도용을 해결해야할 가장 큰 문제로 직면하고 있다.

이에 따라 본사는 계정 도용 문제를 해결하기위한 다음과 같은 방안을 제시한다.


해결 방안

사용자와 기기의 인증

본 서비스를 이용하기위해 회원가입을 한 뒤 모바일에서 어플리케이션을 실행할 때, 서비스 이용자의 핸드폰번호와 기기 단말의 고유번호(IMEI)를 수집하여 사용자의 고유식별번호로 이용한다. 이 경우 정보통신망 이용촉진 및 정보보호 등에 관한 법률에 의거, 개인정보로 분류된다. 따라서 사전에 이용자에게 고지하여 개인정보 수집에 대한 동의를 구하여야 한다.

자사에서는 사용자의 고유식별번호를 핸드폰 번호와 IMEI의 값을 결합한 뒤 해쉬함수를 통해 생성된 값으로 정의한다.

사용자 인증에 대한 매커니즘은 다음과 같다.

  1. 어플리케이션 최초 실행시 사용자의 고유식별번호를 생성한뒤 핸드폰 번호와 1:1로 맵핑(Mapping)한다.
  2. 회원이 어플리케이션에 접속시 두 정보를 비교한다.
    1. 비교된 정보가 일치한다면, 회원은 서비스를 정상적으로 이용할 수 있다.
    2. 비교된 정보가 불일치한다면 등록된 데이터에 해당하는 핸드폰으로 본인임을 확인하기위해 푸쉬 메세지(Push Message)를 전송한다.
      1. 디바이스에서 푸쉬 메세지가 정상적으로 수신되는 경우는 사용자의 고유식별번호가 일치할 때이다.
      2. 푸쉬 메세지가 수신되지 않는 경우는 사용자의 고유식별번호가 일치하지 않는 경우이다. 이 경우는 기기나 번호의 변경으로 판단하여 사용자가 먼저 인증을 요청해야하며, 외부의 인증시스템을 통하여 인증한다. 인증이 완료될 경우 고유식별번호가 교체된다.


부당한 사용자의 재화 탈취에 대한 방지

재화의 탈취를 이미 두 가지로 정의하였다. 각각을 나누어 대응하기 보다는 두 가지 경우를 동일한 방법으로 대응하고자 상품 혹은 코인의 이동을 지연시키는 방안을 제시한다. 시간을 지연시키는 이유는 본사에서 재화를 소비하는 사용자가 부당한 사용자인지, 아닌지를 판단하여 대응할 수 있는 시간을 얻기 위함이다.

단, 여기서 단순히 시간을 지연시키는 방법이라면 사용자의 불편으로 서비스 이탈을 야기할 수 있다. 본사는 이를 해결하기 위하여 헬스케어 앱의 특성을 이용한다.

재화를 사용하고자 하는 소비자는 일정량 이상의 코인이 있을 것이다. 이는 운동량을 기반으로 하기 때문에 헬스케어 앱 사용자의 운동 패턴이나 운동량이 수집되어있다. 이를 기반으로 임계치를 설정하고 실제로 재화가 사용되는 시점을 사용자의 운동량이 임계치가 넘어가는 시점으로 지연시킨다.


대량의 로그인 시도에 대한 대응 방안

재화의 소비는 웹 페이지를 통해 이루어지기 때문에 이미 임계치를 넘어간 이후 공격자가 로그인을 시도하여 성공한다면 정상적인 사용자로 판단되어 재화가 소비된다는 문제점을 가지고 있다. 이러한 문제를 해결하기 위해서 헬스케어 앱의 GPS 기록 및 유동 IP 정보를 이용하고자 한다. 이 두가지 정보를 이용하기 위해서는 위치정보의 보호 및 이용 등에 관한 법률통신비밀보호법에 의거 사전에 고지하여 사용자의 동의를 구하여야 한다.

GPS 기능이 켜져 있는 경우 헬스케어 앱의 GPS 데이터를, GPS 기능이 꺼져 있는 경우 유동 IP 정보를 수집하여 이용한다.

공격자는 VPN을 이용하여 IP를 무작위로 변경하여 접속을 시도하기 때문에 공격자의 행동 반경은 예측할 수 없다. 반면 사용자의 행동반경은 집, 운동하는 장소, 회사, 학교 등 어느정도 일정한 지역에 집중된다.

자사는 접속지의 위치 정보와 정상적인 사용자의 위치 정보를 기반으로 일정 범위 이상을 넘어간 곳에서 로그인 시도가 발생시 로그인을 차단하여 계정 도용을 예방한다.

단, GPS 및 IP로 알게된 위치정보의 보존 기간은 일주일로하며, 위치 정보는 동 단위(ex. 삼성동, 대치동 등)로 제한하여 저장한다.


부정한 로그인 시도에 대한 알림

사용자의 이상징후가 판단될 경우 푸쉬 메세지를 통하여 사용자에게 알리고, 별도의 로그로 관리한다

푸쉬 메세지를 단순히 [예/아니오] 로 물어볼 경우 사용자의 실수로 원하지않는 허용이 발생할 수 있으므로 다음과 같이 진행한다.

A(지역이름)에서 로그인 시도가 발생하였습니다. 본인이 맞다면 숫자 XX번을 눌러주세요.

단, 임계치 이전의 공격자의 접근으로 판단되는경우 정상 사용자가 로그인할때 부적절한 접근 시도가 있었음을 알린다.

회원님의 계정에 비정상적인 로그인 시도가 발생하였습니다.

일정 임계치를 넘어가면 2차 인증을 권유하는 알림을 발생한다.

회원님의 계정에 비정상적인 로그인 시도가 지속적으로 발생하고 있습니다. 안전한 이용을 위해 2차 인증을 설정해주세요.


분산 어플리케이션(Dapp)과의 연동 및 스마트계약의 이용

이더리움은 블록체인을 이용한 애플리케이션을 만들 수 있도록 지원한다. 이렇게 만들어진 어플리케이션을 분산 어플리케이션(Dapp)라고 부르며 분산 어플리케이션은 자바 스크립트 API(Java Script API)를 통해 블록체인과 통신하며, HTML/Javascript 기반의 웹 어플리케이션에서 사용자가 서비스를 이용할 수 있도록 한다.

스마트 계약은 분산 어플리케이션을 기반으로 실행되는데, 스마트 계약이란 계약에 필요한 요구사항을 블록체인에 기입한 뒤, 조건을 만족하면 자동으로 컴퓨터 코드에 의해 계약을 이행하게 된다.

자사는 고객의 정보 일부와 코인 지갑 주소를 블록체인으로 구성한다. 이 때, 블록체인에 정보가 생성되는 경우는 다음과 같다.

  1. 사용자의 고유 식별번호가 기존 정보와 일치하지 않는다면 스마트 계약을 이용하여 사용자에게 푸쉬 메세지를 보낼 수 있도록 설정한다. 본인의 로그인 시도가 아니라면 횟수와 날짜를 기록하여 일정 기간 안에 임계치를 넘어가는 시도가 관측되는지 확인한다. 만약 임계치를 넘어간 시도가 발견된다면, 사용자에게 2차 인증을 유도하는 스마트 계약을 다시 실행한다.
  2. 사용자가 직접 자신의 정보를 수정했다면 블록체인에 이를 기록한다.
  3. 코인의 획득을 블록체인에 기록한다. 단, 운동량에 따라 코인을 지급하기 위해 스마트 계약을 이용하며, 운동량에 따른 코인 산출식을 기입하여 조건 만족시, 자동으로 코인이 지급될 수 있도록 한다.
  4. 코인의 소비를 블록체인에 기록한다. 상품 구매시, 스마트 계약을 이용하여 자동으로 배송정보를 입력할 수 있는 창을 띄워 정보를 획득하고, 정보가 획득되면 상품 발송과 연동될 수 있도록 연계하여 상품 배송의 과정을 모두 기입한다.


결론

자사는 이더리움 플랫폼에서 계정 도용을 차단하기 위해 헬스케어 앱의 특성을 이용하여 위치를 기반으로 차단할 수 있는 조건을 세웠다.

또한, 거래가 이루어지는 임계치를 사용자의 패턴에 맞게 설정하여 사용자의 재화 이용에 불편을 최소화하면서 동시에 혹시 발생할 수 있는 사고에 대해 자사가 대응할 수 있는 시간을 만들었다.

이 사이에 일어나는 과정과 일부 서비스를 스마트 계약을 통해 설정하여 중요한 정보의 무결성을 지킬 수 있도록 하였고, 서비스를 자동화 하여 기록을 남길 수 있도록 하였다.

본 팀은 제시한 방법을 통하여 사용자의 편의성과 보안성 2가지 측면에서 일정 측면까지 보완할 수 있다. 또한, 비즈니스 측면에서도 타 회사와의 계약의 위/변조를 블록체인에 기록함으로써 대응할 수 있다는 긍정적인 면을 기대한다.