본문 바로가기

5. 방학 활동/보고서 분석

[2021/02/16] 3회차 - 임베디드 리눅스 busybox 분석

[KISA 연구보고서] "임베디드 리눅스 기반 IoT 기기 악성코드 분석 기술 연구"

 

제 4절 악성코드 감염단계별 동작 정리

  1. IoT 디바이스 대상 공통 공격 특성
      디바이스를 감염시키는 단계는 총 6단계로 나눌 수 있다.

    1) Connect 공격자는 C&C 서버를 이용하여 공격 대상 및 서버를 제어하며 SCAN, Loader 서버를 사용하여 공격을 진행한다.
    2) Scan 서버는 IoT 디바이스를 검색하는데 사용된다. 이때 pw와 ID Port를 검색하게 되며, 알려진 취약한 정보를 수집한다.
    3) IoT 기기로부터 수집된 정보는 C&C 서버로 전달되게 된다. C&C 서버는 기기의 정보를 저장한다.
    4) C&C 서버는 Loader 서버를 이용하여 감염시킬 대상의 공격의 특성에 대한 공격을 지시한다.
    5) 공격 명령을 받은 Loader 서버는 bot에 Malware를 감염시킨다.
    6) 감염된 기기는 C&C 명령을 받아 공격을 실행한다.

  2. IoT Malware 공격 과정 분석
    가. botnet
        botnet은 일반적인 공격 시나리오와 동일하게 진행된다. 감염된 기기는 주변 기기를 감염시킨다.

    나. crytojacking
    bot과 동일한 방법으로 공격이 진행되지만 기기 내부의 동작은 약간 다르다.
    크립토재킹의 경우 감염된 이후 package를 설치한다. 이때 설치 방법은 URL을 이용하는 방법과 SSH를 이용한 방법으로 나뉜다. URL의 경우 Script기반으로 해당 초인을 마이닝 할 수 있게 환경을 구성한다. SSH의 경우 연산된 파일을 URL에 일정시간마다 전송한다.
      (1) SSH기반 : 하드웨어를 점령하는 공격이다. 감염 직후 CPU와 memory정보 사용량이 빠르게 증가한다.
      (2) Pooling기반 Mining 공격 : 이 경우 겸염되더라도 백그라운드에서 동작되며 하드웨어 CPU 사용량은 증가되지 않지만 Memory, 네트워크 사용량이 증가한다.

 

제 3장 IoT 기기 모니터링 기술 조사 및 분석

  • 제 1절 IoT 기기 모니터링 기술 조사

  1. RaspControl
    : 웹 기반 성능 측정 시스템으로 웹 환경에서 라즈베리파이의 상태를 확인할 수 있다. (웹 서버 설치 필수)

  2. Whatap
    : RaspControl의 실시간 확인 불가능의 문제를 해결하기 위해 개발됨.
    : 실시간으로 확인 가능하고, 알림 서비스를 제공

  3. Grafana
    : 시각화 도구의 한 종류로 시간에 따라 쌓여있는 데이터를 효과적으로 시각화할 수 있도록 해주는 오픈소스

  4. Telegraf
    : 시스템 모니터링 및 지표 수집 에이전트
      1) 단일 바이너리로 배포 가능
      2) 표준 StatsD프로토콜 지원
      3) 다양한 연동 기능 내장
      4) 시스템 모니터링 지원

  5. reids
    : Key-Value 캐쉬 & Store 소프트웨어
       (1) in memory 데이터베이스
       (2) Nosql 데이터베이스

  6. NMON
    : top보다 다양한 정보를 모니터링할 수 있도록 하는 시스템 명령어 기반의 도구

제 2절 임베디드 리눅스 busybox 분석

  1. busybox CPU 명령어 분석
    가. iostat (표 참고):
         평균 CPU 부하와 디스크 I/O의 세부적인 내용을 확인할 수 있다.
    나. top:
         유닉스계열 시스템에서 프로세스 목록을 CPU 사용률이 높은 것부터 보여주는 명령어이다.
    다. vmstat:
         시스템 작업, 하드웨어 및 시스템 정보를 확인하고, 메모리, 페이징
         블록장치의 I/O, CPU 상태 등을 확인하는 명령어이다.
         프로세스 메모리 시스템 CPU 사용률에 대한 모니터링이 가능하다.

  2. htop
    가. Htop 기능 : 프로세스 선택을 커서나 마우스를 통해, pstree와 top를 함께 사용가능
    나. lscpu : cpu 아키텍처에 대한 정보 표시.
                  sysfs를 하고 /proc 디렉터리 /cpuinfo로 cpu 정보 수집

  3. busybox Memory 명령어 분석
    가. free : 리눅스 시스템의 여유, 사용 메모리양을 보여줌.
                메모리에 대한 정보, 메모리와 swap에 대한 값의 총합 확인 가능

  4. busybox Network 명령어 분석
    가. arp : 시스템이 가지고 있는 arp 테이블을 확인하고 추가, 삭제하는 명령어
    나. ifconfig : 리눅스에서 NIC설정에 관련된 정보를 확인 할 때 사용하는 명령어
    다. netstat : 현재 시스템에 연결된 네트워크 상태, 라우팅 테이블, 인터페이스 상태 등을 볼 수 있고 2개의 영역으로 나누어져 있다.

  5. busybox Disk 명령어 분석
    가. du : disk usage의 약자로, 디렉터리와 파일의 용량을 출력
    나. df : 파일 시스템의 디스크 사용량 체크에 필수적으로 사용
    다. uptime : 서버관리자가 서버의 전체적인 부하율과 사용시간, 유저 수, 시스템 로드 등을 확인
    라. uname : 현재 작동 중인 머신과 운영체제에 대한 정보 출력

  6. /Proc 파일 시스템
    가. /proc/meminfo
    지금 사용하는 시스템의 메모리 정보를 출력한다. 전체 메모리는 커널이 사용할 수 있는 메모리 영역과 사용자가 사용할 수 있는 메모리 영역으로 나뉜다.

    (1) File-backed memory

    file에서 읽어왔거나 앞으로 다시 file로 저장될 것들을 file-backed memory 영역으로 해서 메모리 관리자가 관리한다.
    (2) Anonymous memory
    메모리에 있으나 file에서 오지 않았으며, 앞으로도 file에 쓰여지지 않을 것들을 Anonymous memory로 해서 관리한다.
    (3) swap
    어떤 프로세스가 활성화 되었을 때 메모리가 부족하면 비활성화(Inactive)로 된 것을 보조 저장장치에 메모리의 데이터를 일부 저장해 놓고, 실행할 프로세스가 사용할 메모리 공간을 확보한 후 실행하다. 
    (4) Dirty, writeback
    프로세스가 실행 중에 데이터가 처리되어 바뀌었다면, Dirty라고 메타 데이터에 표시한다. 보조 저장장치에 저장될 때 Writeback으로 바뀌어 저장 하는 과정을 따른다.
    (5)Shmem
    여러 프로세스가 공유하는 메모리 영역을 Shmem, 프로세스가 여러 개 실행되었다면 실행 코드는 동일, 각각의 프로세스가 사용하는 데이터만 다르게 하면 메모리 절약할 수 있다.
    (6)KernelStack
    커널에서 프로세스가 전환 등이 일어날 때 Stack에 현재 상태를 저장할 때 사용하는 메모리 영역이다.
    (7)PageTables
    메모리는 MMU로 관리하며, 실제 물리 메모리와 가상 메모리간 주소 변환을 하여서 사용한다. 
    (8)Vmalloc
    가상 메모리를 사용해서 프로세스가 실행, 가상 메모리를 할당/비할당한다.