본문 바로가기
악성코드 정보

Tsunami 변종 악성코드 분석 - AK-47

by 분석팀 2020. 10. 15.

TsunamiKaiten이라고도 불리는 DDoS 봇이며, Mirai Gafgyt와 함께 꾸준히 유포되고 있는 악성코드들 중 하나이다. 모두 DDoS 봇이라는 공통점이 있지만, Tsunami는 다른 것들과 달리 IRC를 이용해 공격자와 통신하는 형태의 IRC 봇이라는 점이 특징이다.

 

초기 Kaiten의 소스 코드가 공개된 후로 기존의 소스 코드에 다양한 기능을 더한 여러 악성코드가 만들어졌으며, 그 소스 코드들 또한 공개됨에 따라 현재까지 다수의 Tsunami 변종 악성코드들이 확인되고 있다.

 

여기에서 다루는 악성코드는 제작자가 AK-47이라는 시그니처를 C&C 서버와의 통신에 사용함에 따라 간단하게 AK-47이라고 언급하도록 한다. 최근 유포되고 있는 다른 IoT 악성코드들처럼 이 악성코드 또한 Mirai Gafgyt의 소스 코드를 일정 부분 차용하고 있으며, 동시에 전파를 위한 취약점 공격 루틴이 추가되어 있다.

 

초기 루틴

AK-47은 먼저 Mirai의 소스 코드에서 가져온 Killer 함수를 호출한다. 이 함수의 목적은 텔넷(23)HTTP(80) 포트를 사용하는 프로세스를 종료시키는 것으로써, 외부에서 장치에 접속할 수 없도록 하는 것이 목적으로 보인다.

 

[그림 1] 특정 포트를 사용하는 프로세스 종료

 

원본 Mirai에서는 현재 실행 중인 프로세스의 메모리 즉 /proc/$pid/exe 에서 특정 문자열을 검색하여 현재 다른 악성코드가 실행 중인지 검사하고, 매칭될 경우 종료시킨다. AK-47은 관련 루틴을 그대로 사용하지 않고, 커스터마이징하여 사용하였지만 제작자의 실수로 메모리 액세스 오류가 발생하여 정상적으로 동작하지 않고 종료된다. 물론 Killer 함수는 fork()한 프로세스에서 실행되기 때문에 메인 프로세스에 영향은 없으며, 단지 다른 다른 악성코드들을 강제 종료시키는 루틴이 동작하지 않을 뿐이다.

 

[그림 2] 비정상적인 루틴

 

다음으로는 TCP 패킷 스니퍼를 동작시킨다. TCP 통신을 모니터링하면서 HTTP(80, 8080), FTP(21),SMTP(25) 포트를 이용한 통신이 확인되면 패킷의 내용을 Sniffer 서버로 전송한다. Sniffer 서버 주소는 인코딩되어 있으며, 디코딩 과정이 필요하다.

 

  • Sniffer 서버 : 83.97.20[.]90:1337

 

[그림 3] 스니핑한 데이터를 Sniffer 서버로 전송하는 루틴

 

이후 C&C 서버에 접속하는데, C&C 서버는 IRC 6667번 포트가 사용된다. 참고로 포트 번호만 다르고 서버 주소 자체는 Sniffer 서버와 동일하다. 또한 뒤에서 다룰 SERVER 명령을 통해 C&C 서버 주소 변경이 가능하다.

 

  • C&C 서버 (IRC) : 83.97.20[.]90:6667

[그림 4] C&C 서버 주소 디코딩 및 접속

 

C&C 서버와의 통신에 IRC 프로토콜이 사용되므로 IRC 연결 확립 과정에서 사용되는 376, 433, PING, NICK, PRIVMSG와 같은 기본 메시지들에 대한 함수가 지원된다.

 

메시지

설명

352

구현되어 있지 않음

376

IRC 서버와의 접속 후 받게 되는 MOTD (Message Of The Day)의 끝. 즉 서버와의 접속 성공 이후 받게 되는 메시지로써, Tsunami는 이 메시지를 받으면 지정한 채널로 참가한다.

433

Nickname(닉네임)이 이미 사용 중일 때 받는 메시지로, 해당 메시지를 받으면 랜덤한 Nickname을 다시 설정한다.

422

376과 동일

PRIVMSG

메시지 전송. 실제 명령을 보낼 때 사용된다.

PING

서버로부터 PING을 받으면 PONG을 보낸다.

NICK

Nick 재설정

 

Nickname은 랜덤한 문자열에 특정 키워드를 붙인 “[KEK|랜덤 문자열]” 형태로 생성되며, 채널은 바이너리에 하드코딩되어 있는 “#donks”이다. IRC 서버에 정상적으로 참여한 후에는 공격자의 명령을 기다린다.

 

[그림 5] 채널 및 Nick 설정

 

 

명령

PRIVMSG 메시지를 통해 공격자로부터 명령을 전달받는데, 그 명령은 DDoS 공격 외에도 다양하다. 공격 및 전파와 관련된 명령들은 뒤 항목에서 다루며, 여기에서는 나머지 명령들을 간략하게 정리한다.

 

명령

설명

IRC

서버로 지정한 메시지 전달

SH

셸 명령 실행

SHD

셸 명령 실행 (시그널 무시)

INSTALL

Wget을 이용해 /var/bin/ 경로로 추가 바이너리 다운로드 및 실행

BINUPDATE

악성코드 업데이트 (Wget을 이용)

LOCKUP

Telnet 종료. 그리고 추가 바이너리 다운로드 및 실행

BASH

Bash로 명령 실행

NICK

지정한 문자열로 Nick 변경

RNDNICK

랜덤한 문자열로 Nick 변경

CLEARHISTORY

History 제거

SERVER

지정한 주소로 C&C 서버 주소 변경

DISABLE

봇을 비활성화하며, 비밀번호가 필요하다. Enable되기 전까지 봇은 다른 명령을 받지 않는다.

ENABLE

봇을 다시 활성화 상태로 변경하며, Disable과 마찬가지로 비밀번호가 필요하다.

KILLMYEYEPEEUSINGHOIC

업데이트 시에 원본 악성코드 종료. 설정되지 않음

GET

웹 서버에서 파일 다운로드

GETSPOOFS

스푸핑 된 주소 반환. 설정되지 않음.

KILLALL

DDoS 공격 종료

 

ENABLE / DISABLE 시에는 비밀번호가 필요한데, 이 비밀번호는 악성코드에 포함되어 있으며 받은 명령과 비교해서 일치할 시에 ENABLE / DISABLE이 동작한다.

 

[그림 6] 봇 활성화 / 비활성화에 필요한 비밀번호

 

참고로 SpoofingDDoS 공격 시 봇의 소스 IP 주소를 숨기기 위해 설정하는 것이 목적이지만, 현재 악성코드에는 관련 명령이 지정되지 않아 실질적으로는 없는 기능이라고 할 수 있다.

 

 

공격 명령

앞에서 언급한 Kaiten에서는 DDoS 공격 방식이 4개밖에 되지 않았다. 하지만 AK-4713개의 DDoS 공격 함수를 가지고 있다. 아래에서는 각각의 DDoS 공격 기법들에 대한 간략한 내용을 정리한다.

 

명령

기능

UDP

UDP Flood

STD

STD Flooding ( 하드코딩된 쓰레기 문자열들을 랜덤하게 선택하여 전송하는 UDP Flooding의 한 종류 )

TCP

TCP Flood ( Flag 지정 가능 )

SYN

SYN Flood

NSYN

SYN Flood의 한 종류

ACK

ACK Flood

NSACK

ACK Flood의 한 종류

UNKNOWN

랜덤한 쓰레기 문자열들을 전송하는 UDP Flood의 한 종류

HTTP

HTTP Flood (Method 지정 가능)

HOLD

HOLD Flood ( TCP connectionHold하는 방식의 공격 )

JUNK

JUNK Flood ( 랜덤한 쓰레기 문자열들을 전송하는 TCP Flood의 한 종류 )

BLACKNURSE

BlackNurse Flood ( ICMP Flood의 한 종류 )

DNS

DNS amplification Flood

 

다음은 DDoS 공격 함수들 중 하나인 SYN Flood 공격 관련 코드이다. TCP 플래그들 중 SYN 플래그를 설정하는 것을 확인할 수 있다.

 

[그림 7] SYN Flood 공격 함수

 

IRC 서버에 접속하여 확인해 보면 여러 아키텍처를 갖는 다양한 봇들이 감염되어 IRC 채널에 가입되어 있는 것을 확인할 수 있다. 또한 공격자로 추정되는 계정이 채널에 입장하여 특정 사이트에 DDoS 공격 명령들을 내리는 것도 확인할 수 있다.

 

[그림 8] 공격자로 추정되는 인물이 보내는 공격 명령들 및 봇넷 목록

 

 

전파

원본 Kaiten에는 전파와 관련된 루틴이 존재하지 않는다. 하지만 최근 IoT 악성코드들처럼 AK-47은 전파 루틴이 추가되어 있다. 하나는 Gafgyt에서 가져온 Telnet 사전 공격이며, 다른 하나는 Mirai에서 가져온 Telnet 사전 공격이다. 이 루틴들은 취약한 계정 정보를 Report 서버에 전송하며, Report 서버에서 전파와 관련된 기능을 담당할 것으로 추정된다. 나머지 2개는 Huawei GPON 라우터의 원격 명령 실행 취약점으로써 취약점 발현 시 전파까지 진행된다.

 

C&C 서버의 명령들 중 전파와 관련된 명령은 다음과 같으며, 전파 기능을 활성화 / 비활성화 하는 옵션을 제공한다.

 

명령

설명

AK47SCAN

전파 기능을 활성화 / 비활성화 한다.

 

Telnet 사전 공격 1 (Gafgyt)

먼저 Raw Socket 생성의 성공 여부에 따라 분기가 달라진다. 만약 생성에 실패할 경우 Gafgyt에서 가져온 Telnet 사전 공격만 진행하며, Raw Socket이 정상적으로 생성 가능할 경우에는 아래 3가지 전파 방식이 모두 사용된다.

 

Ak-47은 랜덤한 네트워크에 Telnet 23번 포트가 열려 있는지 스캐닝하다가 원격 디바이스에 Telnet이 동작하는 것이 확인되면 취약한 ID / Password 항목들을 랜덤하게 선택하여 사전 공격한다.

 

[그림 9] Telnet 사전 공격에 사용되는 계정 정보 목록

 

만약 로그인까지 성공적으로 마쳤다면, Report 서버에 주소 및 계정 정보를 전송한다. Report 서버 또한 Sniffer, C&C 서버와 주소가 동일하며 포트 주소는 8080 이다. 보내는 메시지를 보면 [Ak-47]이라는 공격자 지정 시그니처 문자열을 확인할 수 있다.

 

  • Report 서버 : 83.97.20[.]90:8080

[그림 10] Report 서버로 취약한 디바이스 정보 전달

 

Telnet 사전 공격 2 (Mirai)

두 번째 전파 방식은 Mirai의 코드에서 가져온 사전 공격이다. 다른 악성코드에서 코드를 가져왔을 뿐이지 기능 자체는 Gafgyt의 사전 공격과 동일하다. 차이점이 있다면 Mirai와 같이 계정 정보를 인코딩해서 가지고 있다가 디코딩해서 사용한다는 점이 있다. Report 서버 또한 동일하다.

 

[그림 11] 인코딩되어 있는 ID / PW 항목들

 

Huawei 라우터 원격 명령 실행 취약점

세 번째 전파 방식은 Huawei 라우터의 원격 명령 실행 취약점인 CVE-2017-17215를 이용하는 것이다. 아래와 같은 패킷을 취약한 장비에 보내는 것 만으로도 명령을 실행할 수 있는데, 패킷의 내용을 보면 외부에서 바이너리를 다운로드 받아 실행하는 것이 목적이며 이는 mips 아키텍처의 AK-47 바이너리로 추정된다.

 

[그림 12] CVE-2017-17215 취약점 공격

 

GPON 라우터 인증 우회 / 원격 명령 실행 취약점

네 번째 전파 방식은 GPON 라우터의 인증 우회 취약점 CVE-2018-10561과 원격 명령 실행 취약점 CVE-2018-10562를 이용하는 것이다. 2가지 취약점을 이용해 취약한 라우터 장비에 패킷을 보내 원하는 명령을 실행할 수 있다. 명령의 내용은 위의 사례와 같이 전파 목적으로 외부에서 바이너리를 다운로드 받아 실행하는 것이다.

 

[그림 13] CVE-2018-10561 / CVE-2018-10562 취약점 공격

 

최근 IoT 산업이 발전해 가고 있음에 따라 DVR, 라우터, IP 카메라 등 IoT 장비들의 수 또한 늘어나고 있다. 이러한 장비들 중 상당수는 외부와 연결되어 있으며, 과거부터 현재까지 많은 수의 악성코드들이 보안에 취약한 장비들을 대상으로 감염을 시도하고 있다. 또한 이미 다수의 장비들이 감염되어 봇넷을 구성하고 있으며, 디도스(DDoS) 공격에 사용되어 또 다른 IT 인프라에 대한 치명적인 보안 위협으로 자리잡고 있다.

 

이와 같은 보안 위협을 방지하는 방법으로는 장비에 기본적으로 제공되는 ID와 비밀번호와 같은 자격 증명을 변경하고, 기존의 취약한 자격 증명을 안전한 자격 증명으로 바꾸는 것이 있다. 또한 기존 IoT 장비들을 항상 최신 버전으로 업데이트하여 취약점 공격으로부터 보호할 수 있다. V3 제품군에서는 해당 악성코드에 대해 다음과 같은 진단명으로 탐지하고 있다.

 

[파일 진단]

  • AK-47 : Linux/Mirai.Gen

 

[IOC 정보]

  • AK-47 : 92ce9cf93d8fc0769a6c3a17977ea4d7
  • AK-47 C&C 서버 : 83.97.20[.]90:6667
  • AK-47 Sniffer 서버 : 83.97.20[.]90:1337
  • AK-47 Report 서버 : 83.97.20[.]90:8080
  • 취약점 전파 주소 : http://83.97.20[.]90/bins/mirai.mips

 

 

댓글