클라우드를 노리는 해커들의 최신 공격법

그간 월간’안’을 통해 지속적으로 소개한 바와 같이, 클라우드 도입이 늘어남에 따라 클라우드 환경을 노리는 공격도 계속해서 고도화 및 조직화되고 있다. 지난해 4월부터 지속적으로 클라우드 대상 공격을 감행해온 공격 그룹 ‘TeamTNT’는 공격 대상을 도커부터 쿠버네티스 서버, 그리고 CSP까지 확장하며 클라우드 사용자들을 위협하고 있다.

 

이번 글에서는 TeamTNT 그룹을 소개하고 이들의 공격 방식을 TTPs(Tactics, Techniques, Procedures) 관점에서 살펴본다.

 

 

‘TeamTNT’ 그룹은 2020년 4월경 처음 활동하는 것으로 확인되었고, 계속해서 클라우드 환경을 공격하고 있는 그룹이다. TeamTNT라는 이름은 해당 공격에 사용되는 악성코드 및 URL에 ‘teamtnt’라는 문자열이 포함되어 있어 TeamTNT라 불리게 되었다. 해당 그룹의 주요 타겟은 도커(Docker), 쿠버네티스(Kubernetes) 서버 또는 AWS와 같은 클라우드 서비스 환경이며, 주요 목표는 암호화폐 채굴 또는 DoS(Denial of Service)에 사용되는 컴퓨팅 자원을 모으는 것이다.

 

추가적으로 [그림 1] 및 [그림 2]와 같이 TeamTNT 그룹의 트위터(Twitter) 계정으로 추정되는 ‘HildeGard@TeamTNT’라는 계정이 있다. 해당 트위터 계정의 정보와 글을 보면 공격자들은 영어와 독일어를 사용하는 인원들로 구성되어 있는 것으로 추정된다.

 

[그림 1] TeamTNT 그룹 트위터 계정 정보

 

[그림 2] TeamTNT 그룹 트위터 게시글

 

TeamTNT 그룹의 발전​

2020년 4월부터 올해 7월까지 파악한 ‘TeamTNT’의 공격 발전 흐름은 아래와 같다.

 

1. 공격 대상을 도커에서 쿠버네티스로 확장

TeamTNT 그룹이 처음 발견되었을 당시 공격 대상은 도커였다. 그리고 4개월 뒤인 2020년 8월경, 쿠버네티스를 대상으로 감행한 공격이 발견됐다. 쿠버네티스 공격은 도커를 대상으로 한 공격과 동일하게 취약한 REST API 서버를 노렸고, 침해 성공 후 쿠버네티스의 권한 상승 도구인 ‘Peirates’를 이용해 권한 상승을 시도했다.

 

[그림 3] TeamTNT의 공격 대상 확장

 

2. 침해된 도커 허브 계정을 활용한 악성 도커 이미지 업로드

기존 TeamTNT 그룹은 새로운 도커 허브(Docker Hub) 계정을 만들어 악성 도커 이미지(Docker Image)들을 업로드했다. 하지만 2021년 5월경 ‘megawebmaster’라는 도커 허브 계정을 탈취해 악성 도커 이미지를 업로드한 것이 확인됐다. 해당 계정은 Github에 실수로 잠시 업로드된 자격 증명 값으로 인해 탈취됐다. 도커 허브 공식 사이트는 해당 위협을 인지하여 megawebmaster 계정의 자격 증명 값과 악성 도커 이미지들을 삭제 조치했다.

 

[그림 4] megawebmaster 계정으로 업로드된 악성 도커 이미지

 

3. CSP에 대한 공격 확장

TeamTNT는 2020년 8월경, 측면 이동(Lateral Movement)을 더 확대하기 위해 CSP(Cloud Service Provider) 점유율 1위인 AWS(Amazon Web Services)에 대한 자격 증명 값 탈취를 시도했다. 그러다 2021년 6월경에는 AWS 뿐만 아니라 GCP(구글), QCloud(텐센트)의 자격 증명 값까지 탈취하려 한 것으로 확인됐다.

 

TeamTNT의 TTPs

다음은 TeamTNT 그룹이 수행했던 공격들의 TTPs(Tactics, Techniques, Procedures)를 정리한 것이다. 참고로 TTPs는 공격의 전술, 기법 및 절차를 의미한다.

 

1. 정찰(Reconnaissance) 및 최초 침투(Initial Access)

TeamTNT는 우선 침해된 시스템을 이용해 취약한 도커 REST API 및 쿠버네티스 API 설정을 가진 서버에 접근을 시도한다. 설정이 취약한 서버를 찾아내기 위해 ‘zgrap’ 및 ‘masscan’ 도구를 이용해 2375/2376(Docker REST API), 10250(Kubelet Control Plane) 포트가 열려 있는 서버를 탐색한다.

 

[그림 5] 공격자의 Docker REST API 및 Kubelet Control Plane 포트 스캐닝

 

[그림 6] masscan을 이용해 취약한 쿠버네티스 서버를 스캐닝하는 TeamTNT 스크립트

 

[그림 7] masscan을 이용해 취약한 도커 서버를 스캐닝하는 TeamTNT 스크립트

 

또는 도커 허브에 정상으로 위장한 악성 도커 이미지들을 업로드해 악성코드를 배포한다. [표 1]은 TeamTNT가 도커 허브에 업로드한 악성 도커 이미지 목록이다.

 

[표 1] TeamTNT가 업로드한 악성 도커 이미지

 

실제로 [그림 8]과 같이 ‘레딧(reddit)’ 포럼에 ‘portaienr’라는 도커 이미지로 인해 침해 사고가 발생했다는 게시글이 올라오기도 했다.

 

[그림 8] ‘portaienr’ 도커 이미지 침해 관련 레딧 게시글

 

2. 지속성 유지(Persistence) 및 권한 상승(Privilege Escalation)

TeamTNT는 침투에 성공하면, 악성코드를 설치하기 전에 먼저 기존 설치된 경쟁 마이너(Kinsing, redis-backup miner, ntpd miner, crux worm 등)가 있는지 확인하고, 설치되어 있다면 이를 제거한다.

 

[그림 9] 경쟁 마이너 설치를 확인해 제거하는 TeamTNT 스크립트

 

그 다음 주로 리눅스 부팅 시 데몬을 자동 시작할 때 사용되는 ‘systemd(=systemctl)’를 이용해 지속성을 유지시켰다. 이후 공격자가 후속 공격을 수월하게 할 수 있도록 주로 ‘Peirates’와 ‘BOtB(Break out the Box)’ 도구를 이용해 권한 상승을 시도한다. ‘Peirates’는 쿠버네티스 환경에서 실행되며 권한 상승 및 피봇(Pivot)에 활용된다. 해당 도구는 [그림 10]과 같이 오픈소스로 Github(https://github.com/inguardians/peirates)에서 공식적으로 다운로드 받을 수 있다.

 

[그림 10] 쿠버네티스 환경에서 권한 상승 및 피봇에 사용되는 ‘Peirates’ 도구

 

‘BOtB(Break out the Box)’는 도커 환경에서 CVE 취약점 및 취약한 설정을 이용해 호스트 권한을 획득할 수 있는 공격 도구다. 해당 도구 역시 [그림 11]과 같이 오픈소스로 Github(https://github.com/brompwnie/botb)에서 공식적으로 다운로드 받을 수 있다.

 

[그림 11] 도커 환경에서 호스트 권한 획득에 사용되는 ‘BOtB’ 도구

 

3. 방어 회피(Defense Evasion)

TeamTNT는 공격 성공 후 탐지와 방어를 회피하기 위해 악성코드 파일명을 리눅스 운영체제 관련 프로그램 파일명(Ex. bioset)으로 위장한다. 이후, LD_PRELOAD를 이용해 루트킷을 수행하는 ‘libprocesshider’ 도구로 악성 프로세스를 숨겼다.

 

[그림 12] 악성코드 파일명을 정상 프로세스 이름으로 위장

 

[그림 13] LD_PRELOAD를 이용하는 ‘libprocesshider’ 루트킷 도구

 

루트킷과 동시에 Aliyun(알리바바 클라우드) 및 QCloud(텐센트 클라우드)의 보안 모니터링 프로그램 종료를 시도한다.

 

[그림 14] Aliyun 클라우드 보안 모니터링 프로그램 종료 코드

 

[그림 15] qcloud 보안 모니터링 프로그램 종료 코드

 

추가적으로 클라우드 업체의 DNS(Domain Name System) 모니터링을 피하기 위해 기존 DNS를 구글의 정상 DNS로 변경시켰다.

 

[그림 16] DNS 모니터링을 피하기 위해 구글의 정상 DNS로 변경시키는 코드

 

4. 탐색(Discovery) & 측면 이동(Lateral Movement)

특정 시스템 침입 성공 후, 최초에 침투했던 방법처럼 ‘zgrap’ 및 ‘masscan’ 도구를 이용해 2375/2376(Docker REST API), 10250(Kubelet Control Plane) 포트를 대상으로 탐색 및 측면 이동을 시도한다. ‘zgrap’ 및 ‘masscan’ 도구 외에도 측면 이동을 수행하기 위해 ‘Weave Scope’ 도구를 이용했다. ‘Weave Scope’는 네트워크 연결 기반으로 여러 도커 & 쿠버네티스 시스템들을 서로 연결시켜 관리하고 시각화해주는 오픈소스 도구이다.

 

[그림 17] Weave Scope 오픈소스 도구 (참고: weave.works)

 

공격자는 ‘Weave Scope’ 도구를 이용해 네트워크 인프라에 있는 도커와 쿠버네티스 서버에 측면 이동을 시도한다.

 

[그림 18] ‘Weave Scope’를 이용한 TeamTNT의 측면 이동

 

추가적으로 침해된 시스템에서 탈취한 자격 증명(SSH, 도커, 쿠버네티스, AWS 등)을 이용해 다른 시스템에 접근을 시도했다.

 

5. 정보 유출(Exfiltration) & 영향(Impact)

TeamTNT는 공격을 성공시킨 후, 최종적으로 자격 증명 유출 및 악성코드 설치를 진행한다. 이 때 CSP에 대한 자격 증명뿐만 아니라 Github, Shodan, SMB, Jupyter 등에 대한 자격 증명 값들도 찾아내 탈취를 시도하는 것으로 나타났다.

 

[그림 19] 자격 증명 값 탈취 코드

 

또한, 공격자는 자격 증명 탈취 외에도 암호화폐 채굴을 위한 XMRig 마이너, DoS 공격을 위한 ‘TNTbotinger’(=‘Hildegard’) 악성코드를 설치했다. ‘TNTbotinger’ 악성코드는 ‘ziggystartux’ 라는 오픈소스 악성코드 기반으로 만들어졌으며, C&C 서버로부터 명령어를 받아 임의 명령어 실행 및 DoS를 유발한다.

 

[그림 20] ‘ziggystartux’ 오픈소스 악성코드

 

결론

이번 글에서는 TeamTNT가 수행해왔던 공격들을 TTPs 관점에서 살펴봤다. TeamTNT의 TTPs를 조사하면서 발견한 악성코드의 특징은 크게 네 가지로 종합할 수 있다.

 

먼저 악성코드 내용을 보면 독일어가 일부 사용되고 있다. 트위터 외에 악성코드에도 독일어가 포함되어 있는 것으로 보아 TeamTNT 그룹에 소속된 공격자는 독일어를 사용하는 것으로 추정된다.

 

[그림 21] 독일어가 포함되어 있는 악성코드

 

두 번째 특징은 공격에 사용된 악성코드에 그룹을 대외적으로 홍보하는듯한 ‘teamtnt’ 관련 문자열들이 포함되어 있다는 것이다.

 

[그림 22] TeamTNT 관련 문자열들이 포함되어 있는 악성코드

 

세 번째 특징은 ‘TeamTNT’가 공격을 수행할 때 오픈 소스 도구들을 자주 사용했다는 것이다. Peirates, BOtB, Weave Scope 등 공격에 사용된 도구들은 Github에 올라온 오픈 소스 도구였으며, 아직까지 자체적으로 개발한 도구는 없다. 이를 보아 아직 자체적으로 도구들을 개발하는 수준을 가진 공격 그룹은 아닌 것으로 파악된다.

 

마지막으로 TeamTNT 그룹은 텐센트, 구글, AWS 등 CSP의 자격 증명 값 탈취를 시도하고 있다. 아직까지 NAVER Cloud, KT Cloud, NHN Cloud 같은 국내 CSP의 자격 증명 값을 탈취하는 악성코드는 발견되지 않았다.

 

다만, 국내 클라우드 시장과 점유율이 커지게 된다면 추후에 국내 클라우드를 노리는 악성코드가 등장할 수 있어 주의를 기울여야 한다. 또한 클라우드 도입이 계속 확산되면서 공격 기술도 발전하고 있음을 인지하고, 클라우드에 대한 최신 위협 동향 모니터링 및 보안 기술 트렌드 습득을 꾸준히 병행해야 한다.

 

출처 : AhnLab

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