공격자가 리눅스 SSH 서버에 스캐너 악성코드를 설치하는 과정은?

공격자는 감염 대상 시스템에 디도스 봇(DDoS Bot)이나 코인 마이너(CoinMiner) 외에도 스캐닝 또는 무차별 대입 공격 및 사전 공격을 수행하는 악성코드를 설치한다. 이에 따라 부적절하게 관리되는 SSH 서버에 SSH 스캐너 악성코드가 설치되는 경우도 있다. 이번 글에서는 취약한 리눅스 SSH 서버에 SSH 스캐너 악성코드를 설치하는 공격 사례를 살펴본다.

 

 

 

공격자들은 악성코드를 설치하기 전에 아이디(ID)와 비밀번호(PW) 목록을 이용해 SSH 서비스가 활성화된 리눅스 서버를 대상으로 로그인을 시도하고, 로그인에 성공하면 악성코드를 설치한다. 이번 사례에서 공격자는 취약한 시스템을 확보하기 위해 또 다른 스캐너 악성코드를 설치했다.

[그림 1] 과거 쓰나미 디도스 봇(Tsunami DDoS Bot) 공격 캠페인에 사용된 ID/PW 목록

공격자는 스캐너를 이용해 22번 포트, 즉, SSH 서비스가 동작하는 시스템들을 스캐닝 한 후 SSH 사전 공격 툴과 획득한 계정 정보를 사용해 악성코드를 설치했다. 공격에 사용된 계정 정보는 [표 1]과 같다.

[표 1] 공격에 사용된 공격자 IP 주소 및 계정 정보

로그인한 이후에는 아래 명령을 먼저 실행해 전체 CPU 코어 개수를 확인했다. 해당 명령어는 공격자가 로그인에 성공한 다음 SSH 사전 공격 툴인 “prg”를 사용해 실행한다.

 

> grep -c ^processor /proc/cpuinfo

 

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

공격자가 사용한 악성코드를 정리하면 [표 2]와 같다.

 

[표 2] 공격에 사용된 악성코드 목록

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

[그림 3] go 스캐너 스크립트

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

[그림 3] 포트 스캐너 실행 루틴

“gob” 스크립트는 go 스크립트와 유사하지만, 인자로 IP B 클래스를 전달받는다는 점에서 차이가 있다. 공격자는 최근 공격에서 직접 IP A 클래스를 지정하고 go 스크립트를 실행했지만, IP B 클래스를 지정하고 gob 스크립트를 실행하거나, “rand” 스크립트를 실행할 수도 있다. rand 스크립트는 임의의 IP B 클래스를 지정해 gob 스크립트를 실행한다.

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

[그림 4] 포트 스캐너 사용법 (ps 및 ps2)​

 

이후에는 “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”이라는 파일에 저장된다.

[그림 5] SSH 사전 공격 결과 생성되는 파일들

 

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

[그림 6] 사전 공격에 성공한 이후 보여주는 결과​

 

 

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

[그림 7] 과거 공격에서 사용됐던 툴

해당 툴들은 PRG old Team에서 제작한 툴로 추정되며, 공격자가 조금씩 변형해 사용하고 있다. XMRig 코인 마이너를 설치하는 공격자가 추가적으로 포트 스캐너 및 SSH 사전 공격 악성코드들을 설치한 사례에도 사용된 것으로 알려졌다.

[그림 8] 공격에 사용된 go 스크립트​

 

정리하면, 최근 부적절하게 관리되고 있는 리눅스 SSH 서버에 포트 스캐너 및 SSH 사전 공격 악성코드가 설치되고 있으며, 공격자는 이 툴을 악용해 더 많은 SSH 서버를 확보하고 이후 디도스 봇이나 코인 마이너와 같은 악성코드를 추가적으로 설치할 수 있다.

 

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

 

안랩 분석팀은 리눅스 SSH 허니팟을 활용해 공격지(Attack Source) 주소들을 실시간으로 수집하고 있으며, 확인된 주소들은 AhnLab TIP를 통해 제공하고 있다. 

 

[그림 9] AhnLab TIP의 Threat IOCs 페이지

 

 

​출처 : AhnLab

02-553-2331
견적 요청
카카오톡 문의