리눅스 SSH 서버 대상 cShell DDoS Bot 공격 사례 (screen, hping3)
AhnLab Security intelligence Center(ASEC)에서는 다수의 허니팟을 활용해 부적절하게 관리되고 있는 리눅스 서버를 대상으로 한 공격을 모니터링하고 있다. 대표적인 허니팟 중에는 취약한 자격 증명 정보를 사용하는 SSH 서비스가 있으며 많은 수의 DDoS 및 코인 마이너 공격자들이 이를 대상으로 공격을 수행하고 있다.
ASEC에서는 외부에서 유입되는 다수의 공격을 모니터링하던 중 최근 리눅스 서버를 대상으로 하는 새로운 DDoS 악성코드를 확인하였다. 공격자는 초기 침투 과정에서 부적절하게 관리되는 SSH 서비스를 대상으로 하였으며 최종적으로 cShell이라는 이름의 DDoS Bot을 설치하였다. cShell은 Go 언어로 개발되었으며 screen과 hping3라고 하는 리눅스 도구들을 악용해 DDoS 공격을 수행하는 것이 특징이다.
1. 초기 침투 과정
공격자는 외부에 공개된 SSH 서비스들을 스캐닝 한 후 무차별 대입 공격을 통해 로그인을 시도하였다. 로그인에 성공한 이후에는 아래의 명령을 실행하였는데 이를 통해 curl 및 “cARM”이라는 이름의 악성코드를 설치하였다. 참고로 리눅스 배포판에 따라 “apt”, “yum”, “dnf”, “pacman”, “zipper”, “apk”를 사용하여 설치하며 에러 메시지가 독일어로 작성된 것이 특징이다.

Figure 1. 초기 침투 이후 악성코드를 설치하는 루틴
악성코드는 “/etc/de/cARM” 경로에 설치되며 추가적으로 다운로드한 설정 파일인 “sshell.service”를 이용해 systemctl 명령으로 서비스에 등록하여 지속성을 유지시킨다.

Figure 2. 지속성 유지에 사용되는 서비스 파일
2. 악용 도구 (screen, hping3)
cShell은 일반적인 DDoS Bot과 달리 리눅스에서 제공하는 유틸리티들을 악용해 DDoS 공격을 수행하는 것이 특징이다. cShell은 다음 명령을 통해 초기 루틴에서 screen과 hping3를 설치한다.
# bash -c apt -y install curl && apt -y install hping3 && apt -y install screen
리눅스의 screen은 단일 터미널에서 여러 가상 터미널 세션을 실행하고 관리하는데 사용되는 유틸리티로서 이를 통해 터미널을 닫아도 실행 중인 작업이 종료되지 않도록 유지할 수 있다. cShell은 다음과 같은 명령을 통해 hping3를 백그라운드에서 “concurrent”라는 이름으로 실행한다.
# screen -dms concurrent timeout <가변> hping3 <hping3 인자>
| 인자 | 설명 |
|---|---|
| -d | 세션을 백그라운드로 시작 |
| -m | 주어진 명령 실행 (hping3) |
| -s | 세션 이름 지정 (concurrent) |
| timeout | 명령 실행 제한 시간 (초) |
Table 1. 공격에 사용된 screen 옵션
리눅스의 hping3는 TCP/IP 패킷 생성 및 분석 도구로서 주로 보안 테스트 및 네트워크 진단에서 사용한다. TCP, UDP, ICMP 등 다양한 패킷을 생성하고 응답을 분석하여 네트워크 상태를 파악하거나 보안 문제를 점검할 수 있다. 즉 ping과 유사한데 ICMP 패킷만 전송 가능한 ping과 달리 hping3는 TCP, UDP 패킷을 전송할 수 있으며 이를 통해 포트 스캐닝 및 DDoS 테스트 등을 지원한다.
다음은 cShell이 사용하는 hping3 명령들 중 하나이다. cShell은 SYN, ACK, UDP 등 다양한 DDoS 명령을 지원하는데 패킷 전송은 screen을 통해 실행된 hping3가 담당하며 각 명령에 따라 서로 다른 옵션을 지원한다.
# hping3 -FXYAP -d <데이터 사이즈> -p <포트 번호> –flood <공격 대상 IP 주소>
| 대분류 | 옵션 | 설명 |
|---|---|---|
| 프로토콜 | -2 | UDP 프로토콜 |
| 플래그 | -A | ACK |
| -S | SYN | |
| -P | PSH | |
| -F | FIN | |
| -X | Xmas | |
| -Y | Ymas | |
| 기타 | -p | Destination Port |
| -s | Source Port | |
| -d | Data Size | |
| -c | Count | |
| –flood | 가능한 최고 속도로 패킷 전송 | |
| –faster | 초당 10개의 패킷 정송 |
Table 2. 공격에 사용된 hping3 옵션
3. cShell DDoS Bot
Go 언어로 개발된 cShell은 위에서 다룬 바와 같이 이미 존재하는 screen 및 hping3 도구를 사용하기 때문에 상대적으로 단순한 형태이다. 다음과 같이 6개의 DDoS 명령 및 업데이트 기능을 포함한다. 이외에도 소스 코드 정보가 포함되어 있으며 Test라는 이름을 통해 아직 초기 버전인 것을 추정할 수 있다.
- 소스 코드 정보 : C:/Users/Nick6/OneDrive/Desktop/Content/ForceNet/cShell/Test11/Test.go

Figure 3. cShell의 Main 함수 목록
cShell이 실행되면 위에서 다룬 명령과 같이 apt 명령을 통해 curl, screen, hping3를 설치한다. 이후 C&C 주소에 접속하고 “1”을 전송하며 대기 상태에서는 “2”라는 패킷을 전달받는다.

Figure 4. C&C 통신 패킷
C&C 서버로부터 전달받을 수 있는 명령은 다음과 같으며 대부분 DDoS 공격이다.
| 명령 | 기능 | Hping3 명령 |
|---|---|---|
| 2 | 대기 | N/A |
| UPDATE | 업데이트 | N/A |
| syn | SYN Flood | hping3 -S -d <Data Size> -p <Destination Port> –flood <Target IP> |
| ack | ACK Flood | hping3 -A -d <Data Size> -p <Destination Port> –flood <Target IP> |
| psh | PSH Flood | hping3 -P -d <Data Size> -p <Destination Port> –flood <Target IP> |
| udp | UDP Flood | hping3 -2 -d <Data Size> -p <Destination Port> –flood <Target IP> |
| fxyap | DDoS #1 | hping3 -FXYAP -d <Data Size> -p <Destination Port> –flood <Target IP> |
| ovh | DDoS #2 | hping3 -S -p <Destination Port> -s <Source Port> <Target IP> -c 1 hping3 -A -d <Data Size> -p <Destination Port> –faster <Target IP> |
Table 3. cShell이 지원하는 명령 목록
참고로 “UPDATE” 명령은 단순하게 해당 문자열만 C&C 서버로부터 전달받지만 DDoS 명령의 경우 띄어쓰기를 구분 문자로 5개를 전달받는다. DDoS 명령 포맷은 다음과 같다.
| 순서 | 데이터 | 예시 |
|---|---|---|
| 1 | DDoS 명령 | syn |
| 2 | 공격 대상 IP 주소 | 192.168.123.132 |
| 3 | 공격 대상 Port 번호 | 80 |
| 4 | Screen 명령의 Timeout 옵션 | 60 |
| 5 | 데이터 사이트 | 100 |
Table 4. DDoS 명령 포맷
cShell은 하드코딩되어 있는 C&C 서버의 주소 외에도 4개의 추가적인 다운로드 주소를 지원한다. 해당 주소는 Pastebin을 악용하는데 업데이트 과정에서 각각의 Pastebin에 접속하여 주소를 구한 후 curl으로 최신 버전의 cShell을 다운로드한다.

Figure 5. C&C 및 다운로드 주소
4. 결론
최근 부적절하게 관리되고 있는 리눅스 SSH 서버를 대상으로 cShell DDoS Bot이 설치되고 있다. cShell이 설치될 경우 리눅스 서버는 공격자의 명령을 받아 DDoS Bot으로 악용될 수 있다.
이에 따라 관리자들은 계정의 비밀번호를 추측하기 어려운 형태로 사용하고 주기적으로 변경하여 무차별 대입 공격과 사전 공격으로부터 리눅스 서버를 보호해야 하며, 최신 버전으로 패치하여 취약점 공격을 방지해야 한다. 또한 외부에 공개되어 접근 가능한 서버에 대해 방화벽과 같은 보안 제품을 이용해 공격자로부터의 접근을 통제해야 한다. 마지막으로 V3를 최신 버전으로 업데이트하여 악성코드의 감염을 사전에 차단할 수 있도록 신경 써야 한다.
진단명
– Trojan/Linux.Cshell.7736270 (2024.12.09.02)
– Trojan/Script.Agent (2024.12.09.02)