해커, 도커도 뚫었다

지난 월간안 4월호 ‘클라우드 환경을 노리는 7가지 위협’를 통해 취약한 도커 환경을 노리는 공격이 증가하고 있음을 설명한 바 있다. 그리고 클라우드 도입과 함께 도커 활용이 계속 늘어남에 따라 해당 환경을 노리는 공격도 점점 다양해지고 있다.

 

이번 글에서는 도커를 타겟으로 한 주요 악성코드들에 대해 알아본다.

 

 

최근 클라우드 도입이 증가하면서 많은 시스템들이 가상화 기술을 사용하고 있다. 일반적으로 잘 알려진 가상화 기술 ‘하이퍼바이저(Hypervisor)’는 애플리케이션과 라이브러리를 격리시킬 수 있다. 하지만, 운영체제(OS) 뿐만 아니라 하드웨어 스택 부분도 가상화 시키기 때문에 메모리, CPU 등 자원을 많이 소모한다. 반면 ‘도커(Docker)’는 애플리케이션과 라이브러리를 패키지(컨테이너)로 묶어 리눅스 컨테이너(LinuX Containers: LXC)’로 리소스가 적게 드는 격리 환경을 만들 수 있다.

 

또한 도커는 애플리케이션을 쉽게 빌드(Build), 테스트(Test), 및 배포(Deploy) 할 수 있어 ‘데브옵스(Devops)’에 최적화되어 있는 오픈 소스 도구라 할 수 있다. 이에, 많은 기업들이 도커를 활용해 데브옵스 환경을 구축하고 있다.

 

도커를 타겟으로 한 악성코드

최근, 많은 서버들이 도커로 구성되면서 이를 타겟으로 한 공격도 증가하고 있다. 특히, 여러 공격 중에서도 ‘Docker REST API’를 이용한 공격이 급증하고 있다. 실제로 도커 관련 서버들의 침해 사례들을 보면 공격자들이 ‘Docker REST API’를 이용해 악성코드를 배포하고 있다. 그리고, 배포된 악성코드에는 취약한 Docker REST API 설정의 서버를 대상으로 측면 이동(Lateral Movement) 기능이 포함되어 기존 SSH 봇넷 악성코드처럼 공격이 확산되고 있다.

 

 

본 문서에서 언급하는 ‘취약한 Docker REST API 설정을 가진 서버’는 인증 및 접근 제한없이 원격 환경에서 ‘도커 이미지(Docker Image)’와 ‘도커 컨테이너(Docker Container)’를 관리하는 REST API를 사용할 수 있는 서버를 말한다.

 

취약한 Docker REST API 서버는 HTTP Request(Port:2375/2376)에 대한 HTTP Response({"message":"page not found"})를 통해 Docker REST API 서버를 탐지할 수 있다. 따라서, 격자는 [그림 2]와 같이 무작위 스캐닝을 수행해 취약한 Docker REST API 서버를 탐지한다.

 

 

공격자는 취약한 Docker REST API 서버를 알아낸 다음 Docker REST API를 통해 기존 도커 컨테이너에 악성코드를 실행시키거나 새로운 악성 도커 이미지를 다운로드 받아 실행시킨다.

 

 

특히, 공격자는 직접 포트 스캔을 하지 않고도 ‘쇼단(SHODAN)’과 같은 오신트(OSINT: 오픈소스 인텔리전스의 줄임말)를 이용해 Docker REST API 설정이 취약한 서버를 쉽게 찾을 수 있다. 이러한 방식으로 배포되는 악성코드는 대표적으로 6가지 종류가 있으며, 그 히스토리는 아래와 같다.

 

 

이번 글에서는 위 악성코드 6개 중 ‘Kinsing’, ‘Xanthe’, ‘KaijiDDoS’에 대해 소개한다.

 

1. Kinsing(H2miner)

도커를 타겟으로 하는 ‘Kinsing(H2Miner)’ 악성코드는 2019년 12월경에 처음 발견됐다. [그림 5]와 같이 공격자가 취약한 Docker REST API 서버를 대상으로 쉘 스크립트를 배포 및 실행시켰다. 그리고 최종적으로 Kinsing(H2Miner)가 다운로드 및 실행되어 암호화폐 채굴, 스캐닝, 정보 수집 등 악의적인 행위가 발현된다.

 

 

공격자가 취약한 Docker REST API 서버를 대상으로 사용한 명령어는 아래와 같으며, C&C 서버로부터 Kinsing 다운로더 스크립트인 d.sh 파일을 다운로드한다.

 

 

d.sh 파일에 대한 정보는 [표 1]과 같다.

 

 

d.sh가 실행되면 먼저 보안 관련 설정들을 비활성화 시키고 tencent 관련 클라우드 보안 서비스를 삭제한다. 이후 IP/URL(Ex. xmr.crypto-pool.fr), PORT(Ex. 7777, 8888), 파일명(Ex. xmr) 기반으로 마이닝 관련 악성코드들을 탐지 후 종료 및 삭제시킨다. 그리고, 다른 C&C 서버(194.40.243.61)에서 kinsing 악성코드를 다운로드하고 실행시킨다.

 

 

C&C 서버(194.40.243.61)에서 다운로드한 kinsing 악성코드는 ELF 파일이며, 파일에 대한 정보는 [표 2]와 같다.

 

 

Kinsing 악성코드는 ‘Golang’ 라이브러리를 사용했으며, 이를 볼 때 Golang 언어로 제작되었음을 알 수 있다. Kinsing 악성코드가 실행되면 암호화폐 채굴 악성코드를 드롭하고 실행시킨다. 그 다음 무한 루프를 돌며 암호화폐 채굴 악성코드가 정상적으로 동작하는지 검사한다. 이어서, C&C 서버로부터 명령어를 받아 파일 다운로드 및 실행, 포트 스캐닝, Redis 서버 스캐닝 등의 악성 행위를 일으킨다.

 

 

2. xanthe(LoggerMiner)

xanthe(LoggerMiner) 악성코드는 2020년 2월 처음 발견됐다. [그림 9]와 같이 공격자가 취약한 Docker REST API 서버를 대상으로 ‘xanthe’ 다운로드 스크립트’를 배포 및 실행시켰고, 최종적으로 xanthe 악성코드로 인해 스캐닝, 채굴 등의 악의적인 행위가 발생된다.

 

 

xanthe 다운로더 스크립트는 ‘Bash’ 스크립트의 유형이며, 본 문서에서 분석한 파일 정보는 아래와 같다.

 

 

xanthe 다운로더는 단순히 xanthe 악성코드를 다운로드하고 실행시키는 스크립트이다. 스크립트에 의해 다운로드된 xanthe 악성코드는 Bash 스크립트 유형이며, 악성코드에 대한 정보는 아래와 같다.

 

 

xanthe 악성코드에는 총 10가지 함수가 있다. 악성코드가 실행되면 [표 5]의 순서에 따라 함수가 실행된다.

 

 

xanthe 악성코드가 실행되면 먼저 initializego 함수가 실행된다. initializego 함수는 /tmp/.firstrun-update.pid 파일 존재 유무를 통해 xanthe 악성코드가 감염되어 있는지 확인한다. 만약 악성코드가 감염되어 있지 않다면 fczyo와 xeasa.txt라는 스크립트를 다운받고 실행시킨다.

 

fczyo 스크립트는 주로 문자열(예: xmr) 기반으로 악성으로 의심되는 도커들을 탐지 후 종료 및 삭제시킨다. xeasa.txt 스크립트는 tencent 관련 클라우드 보안 서비스 삭제하는 스크립트를 다운로드하고 실행시킨다.

 

filegetgo 함수는 /var/tmp/bbb/bbb, /var/tmp/bbb/config.json 파일 존재 유무 확인 후, /tmp 경로에 bbb, config.json을 다운로드한다. bbb는 암호화폐 채굴 악성코드, config.json는 암호화폐 채굴 시 사용되는 설정 파일이다

 

 

그리고 filesetupgo 함수로 파티션 설정을 통해 /var/tmp 경로에 있는 실행 파일을 실행 가능하도록 설정한다. 이후, filestartgo 함수로 ‘암호화폐 채굴 악성코드(/var/tmp/bbb/bbb)를 실행한다. 실행 후, sshdconfig 함수에서 공격자가 해당 도커에 추후 재접속 할 수 있도록 SSH 설정 파일(/etc/ssh/sshd_config)에 [표 6]과 같은 설정 내역을 추가한다.

 

 

마지막으로 스캐닝 관련 도구(masscan, jq, screen)를 통해 취약한 REST API 설정을 가진 도커 서버 대상으로 측면 이동(lateral movement)를 감행한다. 이어서, xanthe 악성코드를 전파하는 스크립트(mxutzh.sh, qiumb.sh) 실행하거나 SSH 자격 증명 관련 파일을 통해 측면 이동하여 xanthe 악성코드를 전파한다.

 

 

xanthe 악성코드와 연관된 모든 악성코드는 모두 Bash 쉘 스크립트이며, 코드 상단에 opsec_x12라는 로고와 함께 공격자의 모네로 지갑 주소가 기입되어 있는 것이 특징이다.

 

 

3. KaijiDDoS

KaijiDDoS 악성코드는 2020년 4월경 Docker REST API를 통해 배포됐다. [그림 13]과 같이 공격자가 취약한 Docker REST API 서버를 대상으로 KaijiDDoS 다운로더 스크립트를 배포 및 실행시켰다. 이후, 악성코드가 다운로드 및 실행되어 SSH 브루트포스, 디도스, 정보 수집 등 악의적인 행위가 발생된다.

 

 

먼저 KaijiDDoS 다운로더 스크립트 파일은 파일명이 대부분 ‘123.sh’ 또는 ‘arm.sh’으로 이루어져 있다. 스크립트 파일에 대한 정보는 아래와 같다.

 

 

KaijiDDoS 다운로더 스크립트가 실행되면 먼저 공격자 서버(62.171.160.189)로부터 악성코드를 다운받고 실행 권한을 부여해 실행한다. 실행 후 특정 파일을 종료를 시킨 후 ‘/etc/hosts’ 파일을 변조하여 특정 도메인에 대한 정보를 변경시킨다. 마지막으로 악의적인 명령어를 감추기 위해 ‘history -c’로 명령어 히스토리를 삭제했고, 기존 리눅스 시스템이 정상적으로 서비스를 구동하지 못하도록 기본적인 리눅스 프로그램들을 삭제했다.

 

KaijiDDoS 다운로더 스크립트에 의해 다운로드된 악성코드 정보는 [표 8]과 같다.

 

 

KaijiDDoS 악성코드 역시 Golang 전용 라이브러리를 사용한 것으로 보아 Golang으로 제작되었음을 알 수 있다. KaijiDDoS가 실행되면 [표 9]와 같이 다양한 방법으로 악성코드의 지속성을 유지시킨다.

 

 

지속성을 유지시킨 후에는 ‘SSH 관련 자격 증명’ 관련 파일을 통해 측면 이동을 수행한다. 또한, 측면 이동 뿐만 아니라 DoS 기능 및 임의 명령어 실행 기능도 포함되어 있다.

 

 

배포된 KaijiDDoS의 파일명(예: linux_386, linux_amd64)에는 아키텍처 명이 포함되어 있다. 이는 공격자가 악성코드를 배포할 때, 해당 시스템에 맞는 악성코드를 배포했던 것으로 추정된다.

 

 

참고로, 해당 악성코드가 KaijiDDoS로 불리게 된 배경은 [그림 15]와 같이 사용자가 만들어 놓은 함수들 중 ‘runKaiji’라는 함수에서의 ‘Kaiji’ 단어와 공격자가 만들어 놓은 함수 중 앞 단어인 ‘ddos’ 문자열을 조합한 것이다.

 

 

또한 ‘main_Getjiechi’, ‘main_Jiechixieru’, ‘main_Jiechigo’와 같이 함수명에 중국어로 추정되는 문자열이 포함되어 있다. 이를 볼 때 KaijiDDoS 악성코드는 중국에서 제작한 악성코드로 추정된다.

 

결론

도커를 활용하면 애플리케이션을 쉽게 빌드/테스트/배포할 수 있어 도커에 대한 관심과 활용도 증가하고 있는 추세다. 이와 같은 상황이 비트코인 가격 상승과 맞물려 많은 공격이 암호화폐 채굴로 연결되고 있다.

 

Docker REST API를 이용한 공격은 비교적 수행이 쉽고 암호화폐 채굴이 가능한 자원을 쉽게 얻을 수 있다. 이에, 많은 공격자들이 취약한 Docker REST API 서버를 대상으로 공격하고 악성코드를 배포하기 시작했다. 취약한 Docker REST API 서버를 대상으로 배포되는 악성코드는 본 보고서에서 다룬 3가지 외에도 수 없이 많다.

 

따라서 지속적인 모니터링을 통해 도커를 타겟으로 하는 악성코드에 대한 추적과 차단이 필요하다. 그리고, 인증 및 권한 없는 제3자로 인해 악성코드가 유입되지 않도록 도커의 ‘tlsverify’ 옵션과 ‘authorization-plugin’을 통해 인증과 권한에 대한 설정을 필수적으로 해야한다.

 

출처 : AhnLab

02-553-2331
견적 요청
카카오톡 문의