Introduction to Sweeper Bot

※ 해당 글은 박현재 연구원이 작성한 글입니다.

공격자들은 암호화폐를 탈취하기 위해 암호화폐 이용자들을 대상으로 다양한 공격을 시도하고 있다. 그 중에서 Sweeper Bot을 이용한 기법을 사례와 함께 다뤄보고자 한다.

1. Sweeper Bot 이란?

[그림 1] 네이버 어학사전

"sweep"이라는 단어는 쓸다, 쓸어담다 라는 뜻을 가진다. 그리고 "bot"이라는 단어는 특정 작업을 반복 수행하는 프로그램 이라는 뜻을 가진다. 그렇다면 "sweeper bot"은 "쓸어담는 행위를 반복 수행하는 프로그램"으로 해석할 수 있다.

💡
Sweeper Bot
암호화폐 주소에 자금이 유입되거나 특정 조건을 만족할 때 개발자가 의도한 주소로 자금을 전송하는 자동화된 프로그램

2. Sweeper Bot 피해 원인 및 증상

피해자가 소유한 암호화폐 주소와 관련된 키가 유출되었을 때 Sweeper Bot 공격이 가능하다. 키와 시드 값 같은 중요 정보는 다양한 경로를 통해 유출될 수 있다. 최근에는 암호화폐 유투브 스트리머가 생방송을 진행하던 도중 키를 노출해 거액을 탈취당한 사례가 있었다. 스캠 사이트에 접속해서 중요 정보를 제출하는 등 사용자의 부주의함으로 발생하는 피해 외에도 수탁형 서비스 업체가 해킹당해 키가 유출되는 경우도 있다. 여기서 키를 확보한 공격자는 다음과 같은 순서로 공격을 할 수 있다.

  1. 공격자는 Memory pool/Transaction Pool을 모니터링해서 피해자의 주소로 암호화폐가 유입되는 것을 확인한다.
  2. 사전에 확보한 피해자의 키를 이용해서 공격자의 주소로 암호화폐를 전송하는 새로운 트랜잭션을 생성한다.

이러한 동작과정은 자동화된 프로그램을 통해 진행되기 때문에 피해자가 손 쓸 틈 없이 암호화폐가 곧바로 이체된다.

[그림 2] Sweeper Bot 피해 주소 트랜잭션 정보

위 그림은 Sweeper Bot으로부터 공격받는 주소의 트랜잭션 내역을 캡처한 것이다. Coinone으로부터 0.025 ETH를 전송받은 뒤, 12초 만에 0x3BC2FaC06FdFF8D18D759544D935Ffdc2E978E23 주소로 수수료를 제외한 자금이 모두 전송된 것을 알 수 있다.

3. Sweeper Bot 공격 대응 방안

Ethereum Sweeper Bot 중 일부는 ETH만 탈취하고 토큰은 남겨두는 경우가 있다고 한다. 피해자는 Sweeper Bot으로부터 공격받는 주소에 보관되어 있는 토큰이라도 회수하기 위해 ETH를 일부 보내려고 시도할 수 있는데, 토큰을 전송하기 위해서는 소량의 ETH가 필요하다. 하지만 앞서 봤듯이 사람의 수작업으로는 대응하기 어려운 속도로 자금이 빠져나가기 때문에 토큰을 전송하려면 별도의 방법을 사용해야 한다.

Sweeper Bot의 감시망을 피하면서 잔여 토큰을 전송할 수 있는 방법이 몇 가지 있다.

3-1) 연속된 트랜잭션 제출

토큰 전송을 위한 ETH를 전송하면 Sweeper Bot은 이를 탐지하고 새 트랜잭션을 생성할 것이다. 여기서 Sweeper Bot이 새 트랜잭션을 생성하기 전에 ETH 입금과 토큰 전송 트랜잭션이 연속적으로 수행되도록 만드는 트랜잭션 Bundle을 생성하는 방법이다. Flashbot을 이용해 수행할 수 있다고 한다.

3-2) Internal Transaction 사용

대부분의 Sweeper Bot이 Mempool을 모니터링한다는 점에 착안해 Mempool을 거치지 않고 트랜잭션을 수행할 수 있는 Internal Transaction을 이용하는 방법이다. 일회용 스마트 컨트랙트를 생성해서 Internal Transaction을 통해 ETH를 퍼블릭 트랜잭션 풀을 거치지 않고 입금할 수 있다. 하지만 완성된 블록을 모니터링하는 Sweeper Bot이라면 유효하지 않을 수 있다.

자세한 내용은 여기에서 확인할 수 있다.

4. Sweeper Bot을 이용한 악의적인 Honey Pot

앞서 키가 노출되면 Sweeper Bot 공격이 가능하다고 했는데, 이런 관점을 역이용해서 Honey Pot으로 이용한 사례가 있다.

  1. 공격자가 ETH는 없지만 토큰이 가득 들어 있는 주소의 개인키를 SNS와 같이 공개적인 곳에 고의적으로 노출한다.
  2. 게시글을 본 사람들은 토큰을 가져오기 위해 공격자의 주소로 ETH를 보낸다.
  3. 모니터링 중인 Sweeper Bot이 해당 ETH를 탈취한다.

사람들은 노출된 개인키와 토큰의 잔액을 보고나서 본인의 소유로 만들기 위해 여러가지 방법을 시도하겠지만 Sweeper Bot에 의해 실패하게 된다.

[그림 3] 출처 : Reddit

2017년 Sweeper Bot을 활용한 Honey Pot으로 널리 알려진 사건이 발생했다. 온라인 커뮤니티에 똑같은 이더리움 주소의 개인키를 공개하는 비슷한 유형의 글이 다수 있는 것을 확인할 수 있다. 그 중 일부는 다음과 같다.

[그림 4] 출처 : warosu
[그림 5] 출처 : warosu
  • 주소 : 0xB7605ddc0327406A7aC225B9dE87865E22aC5927
  • 개인키 : 049bb603adbd99a8a00aeef83d2ceacc3f2958cd927f7295188ae43cbeb09df9
[그림 6] Honey Pot에 사용된 주소 정보

위 주소에는 보유한 ETH는 없지만 MINEREUM이라는 토큰을 다수 보유하고 있었다. 그래서 이 토큰을 노렸던 많은 사람들이 ETH를 전송했지만, Sweeper Bot에 의해 토큰 획득으로 이어지지는 못한 것으로 보인다.

[그림 7] GitHub에 업로드된 MINEREUM 토큰 스마트 컨트랙트 중 일부

공격자 주소는 깃허브에서 확인된 MINEREUM 스마트 컨트랙트 코드에서 GenesisAddress로 작성되어 있다. 그리고 주소에 속해 있는 MINEREUM 토큰의 개수(32,000)와 동일한 값을 코드에서 확인할 수 있다.

따라서 공격에 사용된 주소는 MINEREUM 토큰의 제네시스 주소 중 하나이며, 토큰 발행과 동시에 32,000 MNE를 지급받은 것으로 추측된다.

[그림 8] 블록체인에 등록된 MINEREUM 스마트 컨트랙트 코드 중 일부

주소에 탐나는 토큰이 있고 Sweeper Bot에 의해 감시되고 있다면 3절에서 언급한 Sweeper Bot 우회 방법을 이용해보고 싶은 생각이 들 수도 있다. 하지만 공격자는 쉽게 당하지 않을 것이라는 생각이 들었고, 실제로 토큰이 탈취되지 않은 것으로 보였기 때문에 코드를 찾아봤다. 위 코드를 보면 MINEREUM의 제네시스 주소 체계에 level 시스템이 적용되고 있는 것으로 보인다.

코드의 정확한 작동 원리는 파악하지 못했지만 주소 별로 책정되어 있는 level에 따라 토큰을 제어할 수 있는 권한이 다를 것으로 추측된다. 즉, Sweeper Bot을 우회하더라도 전송할 수 없는 토큰일 것이다.

[그림 9] 출처 : Quora

비슷한 예시로 MNEB(Minereum BSC) 토큰이 있다. 2021년 6월 출시된 것으로 알려진 Binance Smart Chain 기반 토큰으로, 레벨 정책이 적용되어 있으며 금액을 지불하고 3 level이 되어야 토큰을 교환할 수 있는데, 3 level을 달성해도 정상적으로 동작하지 않은 것으로 보인다. 결국 MNEB 토큰은 스캠 문제 등으로 인해 사장되었다.

Minereum (MNEB) - Scam or Other Issues | Coinopsy
Minereum was founded in 2021, it is not trading on any exchanges. Minereum was added to the dead coins list due to being Scam or Other Issues. Founder/CEO is Unknown.

MNEB 토큰의 레벨 별 기능은 여기에서 확인할 수 있다.

5. 결론

  1. Sweeper Bot은 피해를 입기 전까지는 공격받는다는 사실을 알기 어렵다는 점을 가장 큰 위험요소로 꼽을 수 있다. 소량의 금액을 받았을 때 공격 사실을 알아차린다면 큰 피해 없이 넘어갈 수 있겠지만, 큰 금액을 받은 뒤 공격 사실을 알아차린다면 이미 늦은 것이다.
  2. Sweeper Bot에 의해 공격받는 주소에 옮겨야 할 토큰이 남아있다면 Transaction Bundle을 생성하거나 Internal Transaction을 통해 토큰 회수를 시도해 볼 수 있다.
  3. 가장 중요한 것은 Key가 유출되어 공격받을 일이 없도록 하는 것이다.