본문 바로가기
악성코드 정보

Gafgyt 변종 악성코드 분석 - Yakuza Bot

by 분석팀 2020. 10. 14.

Gafgyt는 현재 Mirai와 함께 가장 많이 유포되고 있는 IoT 악성코드다. 그 목적도 동일하게 DDoS 공격이며 봇넷을 확보하기 위해 취약한 다른 IoT 장비들을 감염시킨다는 점도 동일하다.

 

Gafgyt Bashlite 또는 Qbot이라고도 불리며 Mirai 처럼 소스 코드가 공개되어 있어서 수많은 변종들이 지금까지 발견되고 있다. 원본 소스 코드뿐만 아니라 악성코드 제작자들이 기능을 더한 변종들의 소스 코드들도 다수 확인된다. 여기에서는 악성코드 제작자가 Yakuza라는 이름을 붙인 변종 악성코드를 다룬다.

 

 

초기 루틴

실행 시 먼저 현재 실행 중인 프로세스의 이름을 변경하는 형태의 분석 방해 기법 2가지가 사용된다.

 

[그림 1] 프로세스 이름 변경 루틴

 

첫 번째 방식은 현재 프로세스의 메모리 상에서 argv[0] 위치의 문자열을 NULL로 변경하는 것으로써, 이후 "ps" 명령이나 "cat /proc/$pid/cmdline"과 같은 명령의 결과로 보여지는 프로세스 이름이 빈 문자열로 변경된다.

 

다음은 prctl() 함수를 이용하는 방식이다. 해당 함수의 인자로 프로세스 이름 변경을 위한 옵션인 PR_SET_NAME, 앞의 설정과 같이 빈 문자열을 인자로 주고 호출한다. 이에 따라 "cat /proc/$pid/comm", "cat /proc/$pid/stat"과 같은 명령의 결과로 보여지는 프로세스 이름이 변경된 것을 확인할 수 있다.

 

[그림 2] 변경된 프로세스 이름

 

이외에도 경로 및 권한 설정, 이후 C&C 서버와의 소켓 통신을 위한 시그널 예외 처리 과정을 거친 후 initConnection() 함수를 통해 C&C 서버에 연결한다.

 

[그림 3] C&C 서버와의 연결

 

정상적으로 연결이 된 후에는 아키텍처 (x86 32비트 바이너리), 엔디안과 같은 기본적인 정보를 서버에 전달하고, UpdateNameSrvs() 함수에서 Name Server를 추가하는 과정을 거친다. "/etc/resolv.conf" 파일에 구글의 DNS 서버 주소인 "8.8.8.8" "8.8.4.4" nameserver에 추가하는데, 이는 추후 DDoS 공격 명령을 위한 과정으로 보인다.

 

[그림 4] DNS 설정 추가

 

이후 C&C 서버와 주기적으로 통신하며 명령을 받아 수행하는데 받을 수 있는 명령은 다음과 같이 전파와 DDoS 공격 명령이 있다.

 

C&C 명령 기능
TELNET ON Telnet 스캐닝 및 전파 활성화
TELNET OFF Telnet 스캐닝 및 전파 비활성화
TELNET FLOAD Telnet 스캐닝 및 전파 활성화 (FLoad Mode)
HTTP HTTP Flooding 공격 (Method 지정 가능)
WGET Wget 공격
UDP UDP Flooding 공격
TCP TCP Flooding 공격
STD STD Flooding 공격
STOP 공격 중지

 

 

DDoS 공격

DDoS 공격은 위의 C&C 명령과 같이 TCP Flooding, UDP Flooding, HTTP Flooding, STD Flooding, Wget 공격 5가지 존재한다. 명령은 공격 대상의 주소 및 포트 번호 외에도 여러 옵션을 받을 수 있는데, 아래와 같이 TCP Flooding의 경우에는 SYN, RST, FIN, ACK, PSH ALL과 같은 각각의 플래그 설정도 명령으로 받아 지정할 수 있다.

 

[그림 5] 여러 옵션을 지원하는 DDoS 공격 루틴

 

HTTP Flooding 공격에서는 다음과 같이 59개의 User-Agent 중 하나를 랜덤하게 선택하여 사용한다.

 

[그림 6] DDoS 공격에 사용되는 User-Agent 헤더

 

STD Flooding UDP Flooding의 일종으로 보이며 하드코딩된 특정 문자열을 반복적으로 보내는 것이 특징이다. Wget 공격은 명령으로 받은 주소에 대해 다음과 같은 wget 명령을 반복적으로 호출하는 방식의 공격이다.

 

[그림 7] Wget을 이용한 공격

 

 

전파

C&C 서버로부터 받을 수 있는 명령 중에서 TELNET ON TELNET FLOAD 가 있었다. FLoad Mode는 사용자 지정 모드로써 스캐닝 강도를 지정할 수 있다. 스캐닝 명령을 받을 시 랜덤한 주소의 TELNET 23번 포트에 접속을 시도하여 원격 대상에서 TELNET이 오픈되어 있는지 여부를 확인한다. 오픈되어 있을 시에는 현재 가지고 있는 ID / Password 목록을 통해 로그인을 시도한다.

 

[그림 8] Telnet 사전 공격에 사용되는 ID / PW 목록

 

로그인에 성공할 경우 TELNET을 통해 아래와 같은 명령을 보낸다. 이 명령은 wget 또는 tftp를 이용해 주소 207.154.239[.]50 에서 bash 셸을 다운로드 및 실행하게 해준다. 참고로 이 주소는 C&C 서버의 주소와 동일하다.

 

[그림 9] 원격 로그인 후 추가 악성코드 다운로드 및 실행

 

bash 셸의 내용은 아래와 같으며, 원격 디바이스에서 실행될 시에는 다양한 아키텍처의 elf 악성코드들을 차례대로 다운로드 받아 실행시킨다. x86 / x64 아키텍처 환경이 대부분인 일반적인 Windows 환경과는 달리, IoT 장비들의 경우 ARM, MIPS, PowerPC, M68K 등 다양한 아키텍처 환경일 수 있다. 그렇기 때문에 동일한 악성코드를 다양한 아키텍처로 빌드한 후 각각을 모두 다운로드 및 실행시켜 하나의 ELF 바이너리라도 일치할 경우 실행시키기 위한 것이다. 참고로 현재 분석 대상인 Yakuza x86 ELF 악성코드도 이 바이너리들 중 하나인 http://207.154.239[.]50/ysdfd.x32 에서 다운로드된 파일이다.

 

[그림 10] Bash 스크립트는 여러 아키텍처의 yakuza를 다운로드한다

 

이와 같은 과정이 모두 끝나면 C&C 서버에 성공 여부와 함께 전파 대상 장비의 IP 및 포트 주소 그리고 로그인에 성공 / 실패한 ID / PW를 보낸다. 이 과정이 계속 반복됨에 따라 공격자는 다수의 봇넷을 확보할 수 있고, 이러한 봇넷들을 이용해 피해자의 네트워크에 DDoS 공격을 수행할 수 있다.

 

[그림 11] C&C 서버에 감염 성공 / 실패 결과를 통보

 

결론

최근 IoT 산업이 발전해 가고 있음에 따라 DVR, 라우터, IP 카메라 등 IoT 장비들의 수 또한 늘어나고 있다. 이러한 장비들 중 상당수는 외부와 연결되어 있으며, 과거부터 현재까지 많은 수의 악성코드들이 보안에 취약한 장비들을 대상으로 감염을 시도하고 있다. 또한 이미 다수의 장비들이 감염되어 봇넷을 구성하고 있으며, DDoS 공격에 사용되어 또 다른 IT 인프라에 대한 보안 위협으로 자리잡고 있다.

 

위와 같은 보안 위협을 방지하는 방법으로는 장비에 기본적으로 제공되는 ID / PW와 같은 자격 증명 변경 및 기존의 취약한 자격 증명을 안전한 자격 증명으로 바꾸는 것이 있다. V3 제품군에서는 해당 악성코드에 대해 다음과 같은 진단명으로 탐지하고 있다.

 

 

[파일 진단]

  • Bash Script : Shell/ElfDownloader.S1
  • Yakuza (x86-32) : Linux/Gafgyt.Gen25

 

[IOC 정보]

 

- 파일

  • Bash Script : 10581ce787c00f10b8e956a76a67f496
  • Yakuza : 3f2031e8991bade48ed7969a57c4abf1 (x86-32) 등 다수의 아키텍처 별 바이너리 존재
  • Yakuza C&C 서버 : 207.154.239[.]50:23

 

- 다운로드 URL

  • Bash Shell : http://207.154.239[.]50/bins.sh
  • Yakuza : http://207.154.239[.]50/ysdfd.x32 (x86-32) 등 다수의 아키텍처 별 다운로드 주소 존재

 

 

댓글