Post Mortem of KlaySwap Incident through BGP Hijacking

Author: S2W TALON with eyez (Lead by Sojun Ryu)

Last Modified : 2022.02.10.
Photo by Markus Spiske on Unsplash

Executive Summary

클레이스왑에서 공개한 Incident Report에 따르면 2022년 2월 3일 11:31:41경 (한국시간 기준), 클레이스왑 UI를 통해 토큰이 공격자의 특정 지갑으로 전송되는 이상 트랜잭션이 최초로 실행되었다고 한다. 해당 사고에 대한 원인으로 외부 네트워크망 공격에 의한 사용자의 Kakao SDK 파일 위장 악성코드 다운로드가 제기되었다.

클레이스왑 뿐만 아니라 카카오톡 관련 서비스들은 마케팅 목적으로 카카오 SDK (Software Development Kit)라는 파일을 동적으로 로딩하여 사용하는데, 위 공격이 이루어지는 동안 ‘카카오톡 QR체크인’, ‘카카오맵’, ‘다음’ 등과 같은 해당 SDK를 사용하는 서비스에서 접속이 되지 않거나 느려지는 문제가 발생하였다.

S2W에서 이와 관련한 분석을 진행한 결과, 언급된 외부 네트워크망 공격에 BGP Hijacking 기법이 활용된 것으로 파악되었다. 공격자는 BGP Hijacking을 통해 네트워크 흐름을 조작하여, 클레이스왑에 접속한 일반 사용자들이 정상적인 SDK 파일이 아닌 공격자가 세팅한 서버로부터 악성코드를 다운로드 받도록 구성하였다.

알려진 바로는 접속 시 HTTP 헤더의 Referer 값을 확인하여 클레이스왑을 통해 접속한 사용자들에게만 악성코드를 유포했으며, 이외의 유저들에게는 서버 쪽 에러를 반환하였다. 이러한 이유 때문에 해당 SDK를 사용하는 이외 서비스들에 대한 접속 장애가 이루어졌던 것으로 파악된다.

이번 공격으로 인해 3일 11시 30분 부터 1시간 30분동안 클레이스왑 사용자가 자산 예치·스왑·인출 등을 요청할 경우, 즉시 악성코드에 명시된 해커의 지갑으로 코인이 전송되었으며, 블록체인 트랜잭션을 분석한 결과 탈취된 코인은 약 22억원의 가치이지만, 실제 공격자는 최종적으로 약 10억원 가치의 코인을 탈취해간 것으로 확인되었다.

S2W는 이번 BGP Hijacking 이라는 비교적 낯선 공격에 대한 설명, 그리고 자세한 공격 과정을 기술하여 공격의 위험성을 알리고, 이 공격으로 인해 실제로 어떤 피해가 발생할 수 있는지에 대하여 공유하고자 한다.

아래 분석결과에 언급된 모든 시간은 Korea Standard Time (UTC+9)을 기준으로 작성되었다.

사고 전체 타임라인

사고 전체 타임라인

BGP Hijacking

인터넷은 전 세계의 호스트들이 고유한 IP주소를 기반으로 언제 어디서나 데이터를 주고받을 수 있는 글로벌 네트워크이다. 서로 다른 IP 주소를 가진 호스트들은 최단 이동 거리를 관리하고, 서로에게 자신이 관리하고 있는 IP대역을 알려주는 라우터에 의해 통신이 가능해지는데, 이러한 IP대역을 prefix로 관리하는 것이 AS (Autonomous System)이다. 이로 인해 AS들은 IP prefix (예, 128.6.0.0/16)를 관리하는 최신 라우팅 테이블이 정기적으로 업데이트되어야 하는데, 이처럼 자신의 라우팅 테이블을 서로에게 공유할 때 BGP (Border Gateway Protocol)라는 프로토콜이 사용된다.

BGP Hijacking이란 AS 간에 라우팅 테이블을 공유하는 BGP 프로토콜을 악용하여 공격자가 임의로 설정한 라우팅 테이블을 인접한 AS에 퍼뜨리는 것이다. BGP 프로토콜은 신뢰도를 고려하지 않고 가장 빠른 경로만을 따라가기 때문에 공격자는 공격 대상의 라우팅 경로를 분석한 후, 원하는 경로로 네트워크의 흐름을 변경하여 중간에 있는 AS를 공격 및 자신의 의도대로 라우팅 정책을 설정함으로써 네트워크 마비, 데이터 가로채기 등의 행위가 가능하다.

정상 네트워크 흐름 (좌) / BGP Hijacking 공격 시 네트워크 흐름 (우)

공격 대상의 입장에서는 서버 및 서비스 간에 어떠한 이슈 발생 없이 네트워크의 흐름이 일방적으로 변경되는 것이기 때문에, 뚜렷한 원인없이 트래픽이 발생하지 않는 상황을 마주하게 된다. 이러한 공격 범위는 AS 운영에 개입할 수 없는 일반 기업이 대응할 수 있는 범주를 넘어선다.

BGP Hijacking 기법을 이용한 클레이스왑 공격

1. 사고 당시 BGP 분석 개요

주요 타임라인 : 2022.02.03 10:04 ~ 18:01

사고 당시 타임라인
  • BGP Hijacking 시도 최초 확인: 10:04
  • BGP Hijacking 시도 최초 확인-2: 11:09
  • 카카오 SDK 관련 서비스 중지: 11:30
  • 이상 트랜잭션 최초 발생: 11:30~31
  • BGP Hijacking 공격 철회(추정): 13:04
  • 철회(추정)로 인한 정상 라우팅 경로로 갱신: 13:28
  • 카카오 SDK 관련 서비스 복구: 13:30
  • 이상 트랜잭션 마지막 발생: 18:01

1.1 상세 사고 분석

Kakao SDK 파일을 배포하고 있는 도메인(developers.kakao.com)은 2020년 6월 26일 이후부터 사고 당시 및 현재까지 두 개의 IP로 resolving되고 있다. 두 IP 모두 드림라인이라는 서버 호스팅 회사가 관리하고 있으며, 카카오는 드림라인으로부터 임대받아 사용하고 있는 실 사용자이다.

관련 네트워크 인프라 정보를 정리하면 아래와 같다.

developers.kakao.com 도메인 인프라 정보

인터넷 인프라의 기술 및 행정적 협력을 지원하는 RIPE NCC에서 제공하는 RIS Raw Data를 이용하여 사고가 발생한 기간동안(2월 3일 9시~17시) 전 세계에서 수집된 모든 BGP Update 정보를 분석한 결과, AS9457로부터 발생한 121.53.104.0/24, 121.53.0.0/17, 121.53.0.0/16, 211.249.221.0/24, 211.249.128.0/17 및 211.249.0.0/16에 대한 경로 소개가 10시 4분부터 14시 37분까지 지속됨을 확인할 수 있었다.

클레이스왑을 대상으로 한 BGP Hijacking 공격은 2022년 2월 3일 10:04경 부터 시작되었다. 공격자는 먼저 211.249.216.0/21를 대상으로 우선순위를 높이기 위해 IP Prefix가 더 큰 211.249.221.0/24을 사용하고 AS9457을 거치도록 공격을 수행하였다. 이후 11:09부터 나머지 대역에 대한 공격도 추가로 시작하였으며, 121.53.104.0/23을 대상으로 121.53.104.0/24를 사용하고 AS9457을 거치도록 업데이트 하였다. 두 대역에 대한 공격이 모두 진행되기 시작하고 약 20분 뒤인 11:30에는 공격자의 특정 지갑으로 클레이스왑 토큰이 전송되는 트랜잭션이 최초로 발생하였으며, 이때를 기점으로 본격적인 자산 유출이 시작되었다.

당시 공격자에 의해 업데이트된 오염된 BGP 라우팅 경로가 모두 AS9457에서 시작한다는 점으로 보았을 때, 국내 드림라인 업체에서 운영하고 있는 해당 AS가 공격자에 의해 조작되어 공격에 악용된 것으로 보여진다.

정상 라우팅 정책BGP Hijacking 공격 이후 오염된 라우팅 정책

아래 두 그림은 각 대역별 정상 BGP 경로와 BGP Hijacking 공격에 의해 오염된 BGP 경로를 보여준다. 공격 당시, 정상 경로가 아닌 조작된 경로로 인해 공격자가 구축한 서버로 접속이 이루어지게 된다.

211.249.216.0/21의 정상 BGP 경로 및 오염 이후 조작된 경로121.53.104.0/23의 정상 BGP 경로 및 오염 이후 조작된 경로

두 대역에 대한 공격은 13:04까지 총 3시간 동안 지속되었다. 이유는 알 수 없으나 공격자는 121.53.104.0/23 대역에 대한 공격을 중단하였고, 이후 공격 이전의 원래의 라우팅 경로로 13:28부터 갱신되기 시작하였다. 이로 인해 클레이스왑 및 관련 다른 서비스들에 대한 서비스도 정상적으로 복구되기 시작하였다. 하지만, 또 다른 오염 대역인 211.249.221.0/24에 대해 원래의 라우팅 경로로의 갱신은 최소 오후 5시까지 이루어지지 않았으며, 그로 인해 피해가 지속되어 18:01까지 이상 트랜잭션이 발생된 것으로 추정된다.

2. SSL 인증서 분석

Kakao SDK 파일 다운로드 경로는 HTTPS 프로토콜로 연결되기 때문에 BGP Hijacking 공격을 수행하더라도 인증서가 일치하지 않아 정상적인 응답을 줄 수 없다. 공격자는 이를 위해 공격 직전, ZeroSSL이라는 해외 SSL 인증서 발급사에서 3개월 동안 무료로 제공하는 서비스를 통해 developers[.]kakao.com 도메인에 대한 인증서를 발급 및 등록하였다. BGP Hijacking으로 인해 라우팅 정책이 이미 오염된 상태이기 때문에 이러한 임의의 인증서 등록이 가능하다.

정상 인증서 정보공격자가 발행한 인증서 정보

공격자가 발급한 임의의 인증서에 대하여 사전 인증서(Precertificate)가 11:27:57에 로그에 추가되었고, 1초 뒤 위 도메인에 대한 인증서(Leaf certificate)가 정상적으로 발급되어 활성화되었다.

공격자가 등록한 인증서 관련 로그

ZeroSSL에서는 아래와 같이 무료로 3개월 동안 SSL 인증서를 유지해주는 서비스를 제공하고 있다.

ZeroSSL에서 제공 중인 서비스

3. 악성 JS 파일 분석 (kakao.min.js)

공격에 사용된 악성 kakao.min.js 파일은 정상 kakao.min.js 파일과 비교하여 파일 크기가 매우 크다. 분석 결과, 악성 kakao.min.js 파일은 웹 어플리케이션에 사용되는 다양한 모듈을 통합하여 하나의 파일로 생성하는 webpack 파일로 확인되었으며, 기존 정상 SDK 관련 코드 및 클레이스왑에서 실제로 사용하는 기존 가상자산 관련 코드들을 공격자가 수정하여 사용한 점이 확인되어 있다.

정상 kakao.min.js 파일과 악성 kakao.min.js 파일 비교악성 kakao.min.js 파일 구조 (webpack)

악성 kakao.min.js 파일의 마지막 부분에는 가상자산 탈취를 위해 공격자의 탈취용 Account 및 탈취용 Factory Contract 주소 정보가 명시되어있었으며, 악성코드를 다운로드 받은 피해 유저는 이로 인해 클레이스왑에서 가상자산 전송 시 의도된 주소가 아닌, 공격자의 주소로 전송되었다.

악성 kakao.min.js 파일 내 공격자 주소공격자 주소 별 역할

악성 kakao.min.js에서 전송과 관련되어 변조된 기능들은 아래와 같으며, 공격자의 탈취용 Account 주소 및 탈취용 Factory Contract 주소로 가상자산을 전송하는 기능을 수행한다.

수정된 함수명 및 기능정상 app.js 소스(좌) / 악성 kakao.min.js 소스(우)정상 app.js 소스(좌) / 악성 kakao.min.js 소스(우)

주소 변경 외에도 공격자는 Klayton API 주소를 조작하여 사용하였다. 정상 API 서버 주소가 아닌, 공격자가 설정한 주소로 변경하여 탐지 우회 및 별도의 처리를 수행하기 위한 것으로 추정된다.

정상 API 서버 주소와 악성 추정 API 서버 주소정상 app.js 소스 (좌) / 악성 kakao.min.js 소스 (우)

공격자가 설정한 API 주소를 질의해본 결과, 국내에 위치한 VPS 서버의 IP주소에 바인딩 되어 있는 점이 확인되었다. 해당 도메인의 등록 정보 및 인증서 정보는 아래와 같으며, 공격발생 한 달 전인 2022–01–06에 등록된 것을 확인할 수 있다. 인증서의 경우, Let’s Encrypt라는 무료로 SSL 인증서를 발행해주는 곳을 통해 발급을 받았다.

공격자 API 서버 도메인 정보도메인에 연결된 인증서 정보

4. Transaction 분석

4.1 피해 유저 Token 탈취

악성 kakao.min.js파일로 인해, 2022년 2월 3일 11:31:41 클레이스왑 82005544 Block에서 클레이튼 기반 토큰이 공격자의 지갑으로 전송되는 첫 거래 이후 약 6시간 30분 동안 18:01:07까지 해당 지갑으로 토큰이 지속적으로 전송되었다. 현재까지 확인된 피해 추정 사고 기간은 82005468 ~ 82028787이다.

피해자의 자산이 공격자의 탈취용 Factory Contract (0x3f31)를 거쳐 탈취용 Account (0xdfcb)로 전송됨

4.2 공격자의 클레이스왑 해킹을 위한 사전 준비 과정

주요 타임라인 : 2021.06.29 08:31 ~ 2022.02.03 11:31

사전 준비 과정 Timeline

악성 kakao.min.js 파일에 명시된 공격자의 탈취용 Factory Contract (0x3f31)는 약 1개월 전인 2022년 1월 7일 02:49:35에 공격자 Account (0x648c)에 의해 생성되었다.

탈취용 Factory Contract (0x3f31) 생성 Transaction

클레이스왑에서 사용자가 토큰 스왑 등의 기능을 수행할 때는 Factory Contract가 토큰 컨트랙트에게 사용 승인을 부여받는 과정이 필요하다. 권한이 승인되면 Factory Contract는 해당 토큰에 대한 권한을 위임 받아 사용할 수 있다. 이로 인해 아래와 같이 악성 JS로 인해 최초 피해자의 자산 유출에 대하여 공격자의 탈취용 Factory Contract (0x3f31)에 먼저 거래 승인이 요청되었고, 이후 토큰 Contract로부터 정상적으로 승인되어 공격자의 탈취용 Account (0xdfcb)로 강제로 토큰이 전송되었다. 유동성 풀 제거 등과 같은 기능을 수행할 때는 공격자의 탈취용 Account (0xdfcb)로 직접 토큰이 전송된다.

  • (2022년 2월 3일 11:30:24) 공격자의 탈취용 Factory Contract (0x3f31)에서 거래 승인 요청 트랜잭션 발생 (82005468 Block)
  • (2022년 2월 3일 11:31:41) 거래가 승인되어 공격자의 탈취용 Account (0xdfcb)로 강제 전송 (82005544 Block)
최초 탈취 관련 트랜잭션 (S2W 블록체인 분석 솔루션 eyez 이용)

이처럼 탈취용 Factory Contract (0x3f31)는 실제 공격이 발생한 2022–02–03 11:30:24부터 피해자들로부터 토큰을 탈취하기 위한 거래 승인에 사용되었고, 탈취된 토큰은 모두 공격자의 탈취용 Account (0xdfcb)로 전송되었다.

탈취용 Account(0xdfcb)에 처음 실행된 탈취 관련 Transaction

탈취용 Factory Contract (0x3f31)를 생성한 공격자 Account (0x648c)는 약 7개월 전인 2021년 6월 29일 08:31:29부터 2022년 1월 7일 02:49:35까지의 기간 동안 테스트를 위한 트랜잭션을 다수 수행하였으며, 실제 공격 발생 약 1달 전인 2022년 1월 5일 08:49:07에도 트랜잭션 테스트를 위해 마지막 테스트용 Factory Contract (0xc72c)를 생성하였다. 이후, 공격자 Account (0x648c)에서 테스트용 가상 피해자 Account (0x13cf)에 40클레이를 전송하였으며, 이 자금을 테스트용 Factory Contract (0xc72c)와 지속적으로 거래하며 Factory Contract를 통한 거래 테스트를 수행하였다.

공격 사전 준비에 사용된 Contract 목록

공격 사전 준비 과정

따라서, 사전 준비에 사용된 공격자 Account (0x648c)의 트랜잭션 내역을 보아 최소 7개월 전부터 해킹을 위한 준비 작업에 들어갔으며, 실제 공격 한 달전인 2022년 1월 5일에 마지막 테스트 및 공격을 위한 사전 준비를 마친 것으로 추정된다.

4.3 자금 인출 내역 분석

공격자는 공격 발생 직후인 22년 2월 3일 11:31:41의 최초 입금을 시작으로(82005544 Block), 2022년 2월 3일 12:42:14까지 자금 이동을 수행하지 않다가 2월 3일 12:42:17에 클레이스왑을 통해 탈취한 자금의 일부를 최초로 스왑하였다.

주요 타임라인 : 2022.02.03 11:31 ~ 2022.02.06 10:44

탈취한 자금 인출 Timeline

이후 공격자는 KLAY 기반 토큰 (KETH, KUSDT, KXRP 등)으로 변환하는 작업을 추가로 수행하였으며, 최종적으로 FixedFloat* 거래소에 Tether, Dai Stablecoin, USD coin 등 의 코인으로 전송했음을 확인하였다. 이후 거래소에서 어떠한 코인으로 다시 스왑되었는지는 확인이 불가능하였다.

* FixedFloat: ZCash, Monero 를 포함하여 다양한 DeFi 코인들의 swap을 지원하는 중국의 라이트닝 거래소
탈취 자금 스왑 및 인출 과정

클레이스왑 측에서 공지한 22억원이라는 피해 금액 규모는 각 코인 및 토큰들에서 전송된 수량을 모두 계산하여 산출된 것으로 추정된다. 이 규모를 모두 합치면 $1,910,172.95로, 2022년 2월 10일 환율로 약 22억 8천만원이라는 금액이 산출된다.

  • 총 가치 (달러) : $1,910,172.95
  • 총 가치 (원화) : 2,284,566,848.20원 (약 22억 8천5백만원)
공격자가 스왑한 Klay 기반 Token 목록 (S2W 블록체인 분석 솔루션 eyez 이용)

공격자가 오르빗 서비스를 통해 스왑을 시도한 전체 토큰 목록 및 수량은 아래와 같다. 빨간색으로 표시된 수량은 오르빗의 대응으로 인해 취소된 공격자의 스왑 시도로 추정된다. 공격자가 스왑을 시도한 토큰들의 가치를 모두 합하면 $1,396,861.24이고, 이 중 오르빗에 의해 거부된 거래를 제외하면 $900,137.85의 가치가 산정된다. 총 가치의 경우 클레이튼의 발표보다 약 6억원의 차이가 존재하는데, 이는 Klay코인이 다른 토큰으로 스왑되어 거래 된 경우의 금액까지 중복으로 더해진 것으로 추정된다.

피해 추정 금액 및 실제 공격자가 보유 한 금액실제 공격자가 스왑한 Token 별 가치 (Klay 제외, 빨간색 표시는 거부된 스왑)
  • 총 가치 (달러): $1,396,861.24
  • 총 가치 (원화): 1,670,646,043.04원 (약 16억 7천만원)
  • 스왑 성공 거래 가치 (달러): $900,137.85
  • 스왑 성공 거래 가치 (원화): 1,076,564,868.60원 (약 10억 7천만원)
  • 이후 KUSDT, KUSDC, KETH, KDAI, KXRP, KBNB로 변환한 코인들은 공격자 소유 추정 주소들을 통해 Tether, Dai Stablecoin, USD Coin, BSC, XRP, ETH 코인으로 스왑되어 FixedFloat 거래소로 전송되어짐을 확인하였다. 거래소로 전송된 코인들의 모든 가치를 더하면 $898,886.2로, 스왑 성공 금액에서 수수료로 $125,165의 차이가 존재한다.
  • FixedFloat 거래소로 전송된 총 가치 (달러): $898,886.2
  • FixedFloat 거래소로 전송된 총 가치 (달러): 1,075,067,895.20원 (약 10억 7천만원)
  • 공격자 추정 이더리움 Address: 0x41e83eb962085b9212839447ff4e26ddd5284055
  • 공격자 추정 XRP Address: rw5ei3vpasG7tirE4ZnfH1CXts94JCHJcx
FixedFloat 거래소로 전송된 최종 코인 내역

4.4 공격자 XRP 지갑 내 의심 트랜잭션

공격자가 탈취한 토큰을 KXRP로 스왑 후 XRP로 다시 한번 스왑한 뒤 FixedFloat 거래소로 전송하는 과정에서, 공격자의 XRP 지갑에 이번 해킹 이슈와 관련이 없는 트랜잭션이 확인되었다. 이 트랜잭션은 탈취 토큰 스왑 후 약 15시간 이후에 발생하였으며, 2번에 걸쳐 싱가포르 기반의 암호화폐 거래소인 바이비트(ByBit)를 통해 76,910.92만큼의 XRP를 받은 뒤, 동일한 FixedFloat 거래소로 다시 전송하였다.

의심 트랜잭션 흐름

4.5 해킹에 관여된 공격자의 주소 전체 목록

공격에 사용된 전체 주소 목록

5. DARKODE 관련 위협 그룹 및 포럼 현황

악성 kakao.min.js 파일에서 언급된 “DARKODE”라는 키워드와 관련된 위협 그룹에 대한 조사 결과, 위협 그룹보다는 과거 딥웹에서 DARKODE라는 이름으로 운영된 언더그라운드 포럼이 발견되었다. 하지만, 이번 공격과의 연관성은 명확히 확인되지 않았다.

kakao.min.js(악성) 파일에서 언급된 DARKODE 키워드

5.1 DARKODE 포럼 소개

과거 DARKODE 라고 알려진 Dark0de 언더그라운드 포럼은 2007년부터 2015년까지 darkode[.]com 도메인으로 가입한 회원만 활동을 할 수 있는 딥웹 형태로 운영되었다. 해당 포럼에는 해킹 서비스, 봇넷, 악성코드, 개인정보, 신용카드, 크리덴셜, 마약 등이 주로 판매되었다.

DARKODE 포럼 내 MARKET(LEVEL 2) 게시판 (좌) / Offline PoS 판매글 (우)

2015년 7월에 발표된 FBI의 공식 입장에 따르면, Dark0de 언더그라운드 포럼의 도메인은 FBI와 EUROPOL에 의해 압수되었으며, 이들의 활동을 중단시킨 사실을 공개하였다.

압수 당시 홈페이지 모습

하지만 6년의 시간이 흐른 뒤 2021년 1월, 다크웹 포럼인 Dread와 일반 커뮤니티인 Reddit에 예고없이 Dark0de Reborn 마켓에 제품을 판매할 벤더를 모집한다는 글이 업로드되었다. Dark0de는 이때부터 본격적으로 사이버 범죄 마켓 운영을 다시 시작한 것으로 확인되었으며, 기존 포럼을 운영하던 운영자인지 또는 새로운 운영자인지는 확인되지 않았다.

Dread 게시글 (좌) / reddit 게시글 (우)개편된 DARKODE 사이버 범죄 마켓 메인 페이지

5.2 DARKODE 포럼 내 키워드 검색 결과

DARKODE 포럼에 이번 클레이스왑 대상 BGP Hijacking 공격 관련 키워드를 검색한 결과, 이슈와 직접적으로 관련된 판매글 및 의심스러운 활동은 발견되지 않았다.

  • BGP 검색 결과 0건
  • klay 검색 결과 0건
  • kakao 검색 결과 1건 (단, 검색 결과는 이번 이슈와 관련 없는 점이 확인됨)
  • korea 검색 결과 10건 (단, 검색 결과는 이번 이슈와 관련 없는 점이 확인됨)
  • dreamline 검색 결과 4건 (단, 검색 결과는 이번 이슈와 관련 없는 점이 확인됨)
  • Zerossl 검색 결과 0건
DARKODE 내에 관련 키워드 검색 시 의미있는 결과가 발견되지 않음

6. 주요 사례

6.1 해외 사례

마이닝 풀 서버 하이재킹 (2014.08)

공격자가 2014년 2월 3일부터 꾸준하게 공격을 시도한 것으로 확인 됐으며, Amazon, Digital Ocean 등 19개의 ISP로부터 총 51개의 네트워크가 손상되었다. 공격자는 정상 가상자산 채굴자의 마이닝 풀을 자신의 마이닝 풀로 리다이렉트하여 보상을 갈취했으며, 4개월이 넘는 기간 동안 약 83,000달러를 획득한 것으로 추정된다. 아래는 당시 마이닝 풀 하이재킹의 공격과정을 나타낸 것이다.

마이닝 풀 하이재킹의 공격 과정 (출처: Secureworks)
1. 공격자는 BGP Hijacking을 통해 ISP에 자신의 라우터 경로 정보에 대한 Announcement를 수행
2. 채굴자가 정상적인 마이닝 풀에 연결 시도
3. 채굴자는 악성 마이닝 풀에 연결
4. 채굴자는 가상자산을 채굴하지만 보상 획득 불가

마이이더월렛 해킹사고 (2018.04)

2018년 4월 25일 11:00~13:00(UTC)에 이더리움을 보관하는 지갑인 마이이더월렛이 해킹당하는 사고가 발생하였다. 공격자는 myetherwallet.com와 똑같은 사이트를 제작한 후, ISP업체인 eNET을 대상으로 BGP Hijacking을 시도하여 마이이더월렛에서 사용하는 Amazon의 Route53이라는 DNS 웹 서비스로 가는 트래픽을 시카고의 다른 DNS 서비스로 리다이렉트하여 피싱 사이트로 연결시켰다.

이로 인해 사용자들이 공격자가 만들어 둔 피싱 사이트에서 로그인하게 되면 계정 정보가 공격자의 서버로 전송되며, 공격자는 수집한 로그인 정보로 약 15만 달러의 이더리움을 탈취하였다. 아래는 마이이더월렛에 대한 공격과정을 나타낸다.

마이이더월렛의 공격 과정 (출처: Cloudflare)
1. 마이이더월렛 사용자는 myetherwallet.com에 접속
2. 공격자는 ISP인 eNET(AS10297)에게 announcement를 하여 Amazon(AS16509)의 트래픽을 시카고의 가짜 DNS서버로 리다이렉트
3. 가짜 DNS서버에서 마이이더월렛 관련 DNS를 피싱사이트로 연결
4. 마이이더월렛 사용자는 피싱 사이트에서 계정정보를 입력하고, 공격자는 이 정보로 이더리움 탈취

6.2 국내 사례

국내 대상 BGP Hijacking 관련으로 알려진 공격 사례는 이번 클레이스왑 해킹 이슈가 유일하며, 이 외에 2021년 10월에 일어난 K사 장애 사고가 존재한다. 당시 라우팅 설정 명령 과정에서 K사 내부 네트워크 경로 구성 프로토콜인 IS-IS을 마무리 하는 처리 과정에서 exit 명령어를 미처리하여 BGP 프로토콜로 처리되어야 할 데이터가 IS-IS 프로토콜로 처리되어 발생하였다.

대응 방안

1. 모니터링

  • 동료 Peer 중, 자주 사용하는 IP Prefix의 대역에 맞지 않는 IP Prefix를 announcement 받아 네트워크에 딜레이나 이상이 생기는지 확인
  • 특정 시간 대에 갑자기 양방향 또는 응답 패킷의 양이 현저히 적어지거나, 잘못 연결되어 리다이렉트되는 트래픽이 있는지 주기적으로 모니터링

2. IP Prefix Filtering

  • 불법적인 경로 생성을 막기 위해 IP Prefix Filtering 사용
  • 특정 IP Prefix만 허용하는 화이트리스트를 생성하여 새로운 경로 생성을 위한 announcement를 예방

3. RPKI

  • RPKI(Resource Public Key Infrastructure)는 AS Number와 IP Prefix등의 인터넷주소 자원을 PKI표준 기반을 사용하여 해당 라우팅 정보의 무결성을 보장하는 인증서를 발행하는 기술
  • RPKI를 지원 방식에는 각 주소 관리 기관에서 각각의 인증서버(CA)를 구축해서 리소스 및 ROA 인증서를 관리하는 위임(Delegation) 방식과 대륙별 인터넷주소 관리기구(RIR, Regional Internet Registry)에서 RPKI 시스템을 구축하고 소속된 하위 인터넷주소 관리기구에서 이 시스템에 접근하는 방식인 통합(Hosted) 방식이 존재
인터넷주소자원 할당과 RPKI 지원 방식 (출처: 한국인터넷진흥원)
  • 이처럼 RPKI 시스템의 도입은 인터넷주소 관리기구 마다 다르므로 어떤 방식으로 시스템을 운영할진ㄷㄴ 사전에 상위 관리기구나 RIR에 문의가 필요
  • RPKI 를 통해 비정상 경로를 탐지하는 동작은 다음과 같이 진행
RPKI 시스템 동작 과정 (출처: 한국인터넷진흥원)
1. AS4745의 IP 주소와 동일한 IP Prefix를 AS3357이 악의적으로 Announcement
2. AS4745로 가는 경로보다 AS3357로 가는 경로가 더 짧기 때문에 AS3357로 라우팅
3. AS9695가 RPKI를 활성화하면 RPKI 서버로부터 받은 ROA 정보와 BGP 정보의 결과인 ROV를 서로 비교하며 비정상 경로를 탐지 및 차단
  • RPKI 도입을 통해 BGP Peer에 대한 announcement가 신뢰성이 있는지 RPKI 시스템을 통해 검증하여 비정상 경로를 사전에 탐지 및 차단할 것으로 기대
  • CloudFlare는 통합(Hosted) 방식으로 RPKI를 구현하였으며, OctoRPKI라는 검증기와 goRTR라는 로컬 캐시 기능을 하는 2개의 도구를 개발하여 구현한 사례가 있음
  • 현재까지 국내 AS 사업자와 ISP 사업자들의 RPKI 도입이 미흡한 상황

결론

BGP 프로토콜의 취약점을 이용한 BGP Hijacking이라는 공격의 위험성에 대해서 해외에서는 이미 인지가 되어있고 그에 대한 대비도 비교적 잘 갖추어져 있지만, 아직 국내는 사실상 이러한 공격에 대한 대비가 미흡한 실정이다. 특히, 보안에 대해 투자가 잘 이루어지는 조직이더라도 고려하기 쉽지 않은 AS 악용으로 인한 네트워크 경로 변경이기 때문에 대비 및 대응도 쉽지 않다.

전 세계의 IPv4 경로 중 약 33.85%만이 RPKI로 서명됨 (출처: NIST RPKI Monitor)한국이 소속된 APNIC의 상위 25개 RPKI 적용 AS 목록

하지만, 이번 클레이스왑 대상 공격과 같은 BGP Hijacking 공격이 국내에도 실제로 발생하였고, 이같은 사실은 전 세계의 공격자들에게 알려져 추후 동일한 공격자 또는 다른 공격자에 의해 재발될 가능성이 높다. 그렇기 때문에 일반 기업과 ISP 및 서버 호스팅 업체들은 이번 사건의 위험성을 인지하고, 재발 방지를 위한 협업 및 논의가 필요할 것으로 판단된다.

참고자료

Post Mortem of KlaySwap Incident through BGP Hijacking was originally published in S2W BLOG on Medium, where people are continuing the conversation by highlighting and responding to this story.

Article Link: Post Mortem of KlaySwap Incident through BGP Hijacking | by S2W | S2W BLOG | Medium