Fascination
article thumbnail

[firmadyne/Firm-AFL] firmadyne & FirmAFL 사용을 위한 지식


본격적으로 Firm-AFL을 사용해보기 전 이와 관련된 지식들을 정리해보고자 한다

 

 

1. firmadyne

  • Linux 기반 임베디드 펌웨어의 에뮬레이션 및 동적 분석을 수행하기 위한 확장 가능한 자동화 시스템
  • 구성요소
    • 펌웨어 실행 계측을 위한 수정된 커널
    • 하드웨어 NVRAM 주변기기를 에뮬레이트하기 위한 사용자 공간
    • 다운로드된 펌웨어에서 파일 시스템 및 커널을 추출하는 extractor
    • 디버깅을 위한 추가 셸을 생성하는 작은 console
    • 42개 이상의 다른 공급업체에서 펌웨어를 다운로드하는 scraper
  • firmadyne 시스템을 사용하여 다음 세 가지 기본 자동화 분석 가능
    • Accessible Webpages: 해당 스크립트는 웹 서버에서 제공하는 것으로 보이는 펌웨어 이미지 파일 시스템 내의 각 파일을 반복하고 필요한 인증으로 나타나는지 여부에 따라 결과를 집계
    • SNMP 정보: 이 스크립트는 자격 증명 없이 public 혹은 private한 SNMP v2c 커뮤니티의 내용을 디스크에 덤프함
    • Vunlerability check: 해당 스크립트는 Metasploit의 익스플로잇을 사용하여 알려진 60개의 취약점이 있는지 테스트함. 또한 이전에 발견되지 않았던 14개의 취약점에 대해서도 확인(해당 시스템을 제작한 사람들이 발견한 취약점)
  • NVRAM library
    • key-value 쌍을 tmpfs 마운트된 위치 MOUNT_POINT(기본값: /firmadyne/libnvram)에 저장하여 NVRAM 주변 장치의 동작을 에뮬레이트하는 라이브러리
    • NVRAM  관련 기능에 처음 액세스할 경우 에뮬레이트된 주변 장치가 다음과 같이 초기화됨
      1. NVRAM 파일 시스템이 마운트 됨
      2. 기본 제공 기본값은 NVRAM_DEFALUTS 매크로에서 로드됨
      3. NVRAM_DEFAULTS_PATH 매크로에 의해 정의된 시스템 고유의 기본 값 소스의 기본 제공 목록은 반복적으로 확인되고 로드됨. 여기에는 기본 함수(NATIVE() 매크로), 파일 시스템의 텍스트 파일(PATH() 매크로), 로드된 유형의 기호 char *[](TABLE() 매크로)가 포함됨
      4. 시스템별 재정의 값은 OVERRIDE_POINT(기본값: /firmadyne/libnvram.override)에 있는 키에서 로드됨
    • 다양한 펌웨어의 C 런타임 라이브러리의 차이로 인해 해당 라이브러리는 동적으로 연결된 공유 라이브러리로 컴파일됨
    • LINUX 시스템의 ELF 동적 로더는 지연 연결 및 전역 기호 확인 범위를 지원하므로 이 라이브러리에서 사용하는 외부 기호의 확인은 호출 프로세스가 시스템 C 런타임 라이브러리를 이미 로드할 때까지 효과적으로 지연됨
    • 결과적으로 이 라이브러리는 정적으로 연결된 공유 라이브러리처럼 작동하는 동시에 표준 C 런타임 라이브러리의 함수를 포함하여 호출 프로세스에 의해 로드된 함수를 동적으로 사용
    • 해당 라이브러리는 문자열 연산의 메모리 안전성이 확인되지 않았으며, 동시성 버그가 있을 수 있으며 일부 악성 해킹을 사용함
    • 다양한 펌웨어는 이 라이브러리에서 지원하지 않거나 다른 장치와 상호 호환되지 않을 수 있는 NVRAM 관련 기능에 대해 서로 다른 호출 의미를 가지고 있을 수 있음
    • 직접 시스템 호출하는 것은 시스템 호출 인터페이스의 변경으로 인해 예측할 수 없음 → 일반적으로 init 시스템 시작 중에 프로세스가 충돌하고 잠재적으로 NULL 포인터 역참조를 발생시킴
    • 이러한 문제 해결을 위해서는 일반적으로 충돌 기능을 식별하기 위해 수동 리버스 엔지니어링이 필요하고, 기본값을 정의하거나, 기본값 소스를 추가하거나, NVRAM 관련 잡억을 수행하기 위해 이 라이브러리를 호출하는 shim 함수를 작성하여 NVRAM 라이브러리를 수정해야 함
  • extractor
    • Linux 기반 펌웨어 이미지에서 커널 이미지 및 압축 파일 시스템을 추출하는 것을 목표로 하는 재귀적 펌웨어 추출기
    • 특정 블랙리스트 파일 유형의 추출과 비생산적인 추출을 방지하기 위한 다양한 경험적 방법이 포함되어 있음
    • 여러 파일 시스템이 있는 펌웨어 이미지는 완전히 지원되지 않음
    • 이 도구는 이들을 재조립할 수 없으며 대신 UNIX와 유사한 로트 디렉토리가 충분한 첫 번째 파일 시스템을 추출함 (e.g. /bin, /etc/, etc.)
  • console
    • 시스템 시작 시 /firmadyne/ttyS1 특수 문자 장치에 콘솔을 생성하는 작은 바이너리
    • 패치된 파일 시스템 및 계측 커널과 함께 일부 펌웨어 이미지는 기본 직렬 콘솔에서 생성하지 않기 때문에 분석하는 사람은 QEMU를 통해 에뮬레이트 된 펌웨어 이미지와 상호 작용할 수 있음
  • scraper
    • 지원되는 장치 공급업체 웹사이트에서 펌웨어 이미지 및 관련 메타데이터를 다운로드하는 것을 목표로 하는 펌웨어 스크레이퍼

 

 

2. FirmAFL

  • FirmAFL은 IoT 펌웨어를 위한 최초의 고처리량 그레이 박스 퍼저임
  • IoT 퍼징의 두 가지 근본적인 문제를 해결
    1. 시스템 에뮬레이터에서 에뮬레이트 할 수 있는 POSIX 호환 펌웨어에 대해 퍼징을 활성화하여 호환성 문제를 해결
    2. 증강 프로세스 에뮬레이션이라는 새로운 기술을 사용하여 시스템 모드 에뮬레이션으로 인한 성능 병목 현상을 해결
  • 시스템 모드 에뮬레이션과 사용자 모드 에뮬레이션을 새로운 방식으로 결합함으로써 증강 프로세스 에뮬레이션은 시스템 모드 에뮬레이션으로 높은 호환성을 제공하고 사용자 모드 애뮬레이션으로 높은 처리량을 제공

증강 프로세스 에뮬레이션 개요

  • AFL의 작업 흐름을 그대로 유지하고 사용자 모드 QEMU를 증강 프로세스 에뮬레이션으로 대체하며 나머지 구성 요소는 변경되지 않은 상태로 유지됨

FIRM-AFL 개요

'Hacking Tech > Fuzzer' 카테고리의 다른 글

[AFL fuzzer] AFL fuzzer 원리  (0) 2022.11.08
[Fuzzer] What the Fuzz  (0) 2022.11.08
[Firm-AFL] FirmAFL 환경 셋팅 및 오류 해결  (3) 2022.11.05
profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!