Tsunami는 Kaiten이라고도 불리는 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) 포트를 사용하는 프로세스를 종료시키는 것으로써, 외부에서 장치에 접속할 수 없도록 하는 것이 목적으로 보인다.
원본 Mirai에서는 현재 실행 중인 프로세스의 메모리 즉 /proc/$pid/exe 에서 특정 문자열을 검색하여 현재 다른 악성코드가 실행 중인지 검사하고, 매칭될 경우 종료시킨다. AK-47은 관련 루틴을 그대로 사용하지 않고, 커스터마이징하여 사용하였지만 제작자의 실수로 메모리 액세스 오류가 발생하여 정상적으로 동작하지 않고 종료된다. 물론 Killer 함수는 fork()한 프로세스에서 실행되기 때문에 메인 프로세스에 영향은 없으며, 단지 다른 다른 악성코드들을 강제 종료시키는 루틴이 동작하지 않을 뿐이다.
다음으로는 TCP 패킷 스니퍼를 동작시킨다. TCP 통신을 모니터링하면서 HTTP(80, 8080), FTP(21),SMTP(25) 포트를 이용한 통신이 확인되면 패킷의 내용을 Sniffer 서버로 전송한다. Sniffer 서버 주소는 인코딩되어 있으며, 디코딩 과정이 필요하다.
- Sniffer 서버 : 83.97.20[.]90:1337
이후 C&C 서버에 접속하는데, C&C 서버는 IRC 즉 6667번 포트가 사용된다. 참고로 포트 번호만 다르고 서버 주소 자체는 Sniffer 서버와 동일하다. 또한 뒤에서 다룰 SERVER 명령을 통해 C&C 서버 주소 변경이 가능하다.
- C&C 서버 (IRC) : 83.97.20[.]90:6667
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 서버에 정상적으로 참여한 후에는 공격자의 명령을 기다린다.
명령
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이 동작한다.
참고로 Spoofing은 DDoS 공격 시 봇의 소스 IP 주소를 숨기기 위해 설정하는 것이 목적이지만, 현재 악성코드에는 관련 명령이 지정되지 않아 실질적으로는 없는 기능이라고 할 수 있다.
공격 명령
앞에서 언급한 Kaiten에서는 DDoS 공격 방식이 4개밖에 되지 않았다. 하지만 AK-47은 13개의 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 connection을 Hold하는 방식의 공격 ) |
JUNK |
JUNK Flood ( 랜덤한 쓰레기 문자열들을 전송하는 TCP Flood의 한 종류 ) |
BLACKNURSE |
BlackNurse Flood ( ICMP Flood의 한 종류 ) |
DNS |
DNS amplification Flood |
다음은 DDoS 공격 함수들 중 하나인 SYN Flood 공격 관련 코드이다. TCP 플래그들 중 SYN 플래그를 설정하는 것을 확인할 수 있다.
IRC 서버에 접속하여 확인해 보면 여러 아키텍처를 갖는 다양한 봇들이 감염되어 IRC 채널에 가입되어 있는 것을 확인할 수 있다. 또한 공격자로 추정되는 계정이 채널에 입장하여 특정 사이트에 DDoS 공격 명령들을 내리는 것도 확인할 수 있다.
전파
원본 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 항목들을 랜덤하게 선택하여 사전 공격한다.
만약 로그인까지 성공적으로 마쳤다면, Report 서버에 주소 및 계정 정보를 전송한다. Report 서버 또한 Sniffer, C&C 서버와 주소가 동일하며 포트 주소는 8080 이다. 보내는 메시지를 보면 [Ak-47]이라는 공격자 지정 시그니처 문자열을 확인할 수 있다.
- Report 서버 : 83.97.20[.]90:8080
Telnet 사전 공격 2 (Mirai)
두 번째 전파 방식은 Mirai의 코드에서 가져온 사전 공격이다. 다른 악성코드에서 코드를 가져왔을 뿐이지 기능 자체는 Gafgyt의 사전 공격과 동일하다. 차이점이 있다면 Mirai와 같이 계정 정보를 인코딩해서 가지고 있다가 디코딩해서 사용한다는 점이 있다. Report 서버 또한 동일하다.
Huawei 라우터 원격 명령 실행 취약점
세 번째 전파 방식은 Huawei 라우터의 원격 명령 실행 취약점인 CVE-2017-17215를 이용하는 것이다. 아래와 같은 패킷을 취약한 장비에 보내는 것 만으로도 명령을 실행할 수 있는데, 패킷의 내용을 보면 외부에서 바이너리를 다운로드 받아 실행하는 것이 목적이며 이는 mips 아키텍처의 AK-47 바이너리로 추정된다.
GPON 라우터 인증 우회 / 원격 명령 실행 취약점
네 번째 전파 방식은 GPON 라우터의 인증 우회 취약점 CVE-2018-10561과 원격 명령 실행 취약점 CVE-2018-10562를 이용하는 것이다. 이 2가지 취약점을 이용해 취약한 라우터 장비에 패킷을 보내 원하는 명령을 실행할 수 있다. 명령의 내용은 위의 사례와 같이 전파 목적으로 외부에서 바이너리를 다운로드 받아 실행하는 것이다.
최근 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
'악성코드 정보' 카테고리의 다른 글
ASEC 주간 악성코드 통계 ( 20201012 ~ 20201018 ) (0) | 2020.10.19 |
---|---|
‘배송 실패’ DHL 사칭 악성메일 유포 중 (0) | 2020.10.16 |
Gafgyt 변종 악성코드 분석 - Yakuza Bot (0) | 2020.10.14 |
ASEC 주간 악성코드 통계 ( 20201005 ~ 20201011 ) (0) | 2020.10.13 |
급여명세서로 유포 중인 Qakbot 악성코드 (*.xlsb) (0) | 2020.10.13 |
댓글