코인 마이너와 함께 설치되는 PyBitmessage 백도어 악성코드
AhnLab SEcurity intelligence Center(ASEC)에서는 최근 모네로 코인마이너와 함께 배포되는 새로운 유형의 백도어 악성코드를 포착했다. 이번 블로그에서 다룰 악성코드는 전통적인 HTTP 통신 및 IP connect 방식 대신, PyBitmessgae 라이브러리를 활용해 P2P(Peer to Peer) 네트워크 상에서 통신을 수행하며, 통신 내용을 종단 간 암호화한다. 이를 통해 중앙 집중형 서버가 남기는 흔적을 은닉하여 기존 안티바이러스 제품과 네트워크 보안 솔루션의 탐지를 회피하고자 시도한다.
Bitmessage 프로토콜은 익명성과 분산화를 핵심으로 설계된 메시징 시스템으로, 중간자 감청 방지 및 메시지 송수진자의 익명화가 가능하다는 특징을 가진다. 이 프로토콜을 Python 환경에서 구현한 PyBitmessage 모듈을 악용함으로써, 공격자는 일반적인 웹 트래픽과 유사한 포맷으로 암호화된 패킷을 주고받는다. 특히 C2 명령과 제어 메시지는 Bitmessage 네트워크 상의 진짜 사용자 메시지 속에 은닉되므로, 탐지 제품이 이 통신을 악성 행위로 분류하기가 매우 까다롭다.
본 보고서에서는 해당 백도어 악성코드의 구조와 PyBitmessage 기반 C2 구현 방식을 분석한다. 악성코드가 모네로(Monero) 코인마이너 악성코드를 생성하는 방식, Fileless로 실행되는 악성 PowerShell 스크립트에서 BackDoor 기능을 수행하는 방식 등을 다룬다.
분석 내용

[그림 1] 공격 흐름도
Decrypt & Drop
해당 악성코드에서는 이번 단락에서 설명할 Monero CoinMiner 악성코드와 다음 단락에서 설명할 BackDoor는 모두 최상위 파일의 Resource에 암호화 저장되어있다. 해당 악성코드가 실행되면서 Resource에서 데이터를 가져와 XOR 연산하는 방식으로 복호화된다.

[그림 2] XOR Decrypt – RCDATA
Monero CoinMiner 악성코드
모네로(Monero) 코인마이너 악성코드는 익명성이 강한 모네로 암호화폐의 특성을 이용해, 감염된 시스템 자원을 몰래 채굴에 활용함으로써 공격자의 이익을 도모한다. Monero 악성코드의 유포 방식 등의 분석 정보는 이전 ASEC 블로그[1][2]에서도 확인할 수 있다.
마이닝 기능을 구현하기 위해 필요한 3가지 파일(config.json, WinRing0x64.sys, idle_maintenance.exe) 파일이 “%Temp%\3048491484896530841649” 경로에 생성된다.

[그림 3] Monero CoinMiner 악성코드가 생성되는 폴더
PyBitmessage BackDoor 악성코드
앞서 언급한 바와 같이, PyBitmessage는 P2P(Peer to Peer) 방식의 통신을 Python에서 구현한 것으로, 종단간에서 암호화되어 통신함으로써 네트워크에 중앙 서버 없이 메시지를 주고받을 수 있으며 발신자, 수신자 등의 정보를 은닉할 수 있다. 이러한 기법이 C2 통신에 활용될 경우, 정상적인 PyBitmessage 활용과 구분하기 힘들다는 점이 특징이다. PyBitmessage는 Github에 오픈소스[3]로 공개되어 있으며 아래와 같은 공식 홈페이지에서 그 기능을 살펴볼 수 있다.

[그림 4] PyBitmessage 공식 홈페이지
PowerShell로 제작된 해당 BackDoor 악성코드는 최초 실행 시 로컬의 8442포트로 들어오는 POST 요청을 처리할 PyBitmessage 파일을 설치한다. 기본적으로 GitHub의 Release 페이지에서 다운로드를 시도하며, 해당 URL에 접근 불가 시 개인 드라이브로 추정되는 URL에 접속하여 다운로드를 시도한다. 공격자가 설정한 개인 드라이브 페이지는 spcs.bio 사이트는 파일 호스팅 및 공유 사이트로, 러시아어 기반으로 구성되어 있다는 점을 보아 공격자는 러시아 계열의 인물로 추정된다.

[그림 5] 공격자가 드라이브(spcs.bio)에 업로드한 PyBitmessgae 파일
다운로드 된 PyBitmessage 파일은 PyInstaller로 제작된 파일로, 실행 시 “%TEMP%\_MEI~~” 경로에 .pyc 파일 및 .pyd 파일과 각종 모듈을 생성하며 실행되며 이 중 QtGui4.dll 파일이 존재한다. 공격자는 해당 QtGui4.dll 파일의 특정 Offset을 0x00으로 패치하여 정상적인 기능을 제거하여 은닉을 시도하는 것으로 추정된다.
이후 기능 동작에 필요한 몇 가지 파일과 경로를 생성한 후 바로 공격자의 명령을 기다린다. 여기서 알 수 있는 점은, 아래 이미지와 같이 공격자로부터 받은 메시지를 PowerShell 스크립트로 저장하고 실행한다는 것이다. 또한, 해당 스크립트는 .\s 경로에 저장된다.

[그림 6] 공격자의 메시지를 PowerShell Script로 저장후 실행하는 코드
이번 사례처럼, 정상 프로그램(PyBitmessage)의 네트워크 기능을 이용한 백도어는 탐지와 분석이 어렵고, 공격자 추적 또한 제한적이다. 따라서 P2P 기반 통신이 수반된 이상행위에 대해 보다 세심한 모니터링이 중요하다. 해당 악성코드가 어떻게 유포되는지 확인되지는 않으나, 기능 상 정상 파일로 위장하는 기능이 존재하는 것으로 보아 정상 파일이나 크랙 버전의 소프트웨어로 위장하여 유포될 가능성이 높다. 따라서 출처가 불분명한 파일이나 토렌트, 크랙 버전의 소프트웨어의 사용을 삼가고, 반드시 공식 웹사이트나 정식 유통 경로를 이용하는 것이 중요하며, 보안 제품의 최신 업데이트를 유지함으로써 유사 악성코드를 예방할 수 있다.