HALucinator: Firmware Re-hosting Through Abstraction Layer Emulation

두비니

·

2022. 5. 11. 01:40

 

 

 


HALucinator

Firmware Re-hosting Through Abstraction Layer Emulation


 

 

 

  

0. 개요

 

  펌웨어를 동적분석하는데에 있어서는 많은 어려움이 있습니다. 기본적으로 펌웨어는 하드웨어와 밀접한 연관이 있기 때문에 다양한 임베디드 시스템에 의하여 분석하는데 다양한 어려움이 생깁니다. 이 가운데 HALucinator는 하드웨어 없이 펌웨어 리호스팅을 가능하게 한다고 합니다. 오늘은 HALucinator에 대해서 알아보도록 합시다.

 

 

1. Background Knowledge

 

[0] Firmware Re-hosting

  우선 Firmware Re-hosting이 무엇인지 알아야 합니다. 이에 대해서는 글을 작성한 적이 있기 때문에 생략하도록 하겠습니다. Link : https://dokhakdubini.tistory.com/560

 

임베디드, 펌웨어, 펌웨어 리호스팅 용어정리

임베디드, 펌웨어, 펌웨어 리호스팅 용어정리 1. Abstract 갑자기 정확한 개념을 모르겠어서 쓰는 글입니다. 나중에 또 까먹을까봐! 혹시나 틀린 부분이 있다면 지적 부탁드립니다. 이런저런 공부

dokhakdubini.tistory.com

 

 

[1] HAL(Hardware Abstraction Layer)

  본 연구팀은 펌웨어 개발자들이 업데이트 및 개발을 할 때 어떤 방법을 택하는지에 대해서 알아보았습니다. 개발자들도 이런 어려움을 어느정도 최소화하기 위해 특정 소프트웨어/드라이버 및 하드웨어를 추상화한 라이브러리(Hardware Abstraction Layer)를 배포합니다. 

  그리고 이런 HAL들은 대부분 공개되어있고 우리가 사용할 수 있습니다. NXP, STM, ATMEL 등 이를 무료로 공개하고 있으며, 이는 하드웨어에 구현되어있는 바와 같습니다. 

 

[2] 기존 펌웨어 동적분석의 어려움 - Peripherals

  기존에 펌웨어를 동적분석하거나 리호스팅을 함에 있어서 가장 어려운 점은 Peripherals의 구현입니다. QEMU같은 에뮬레이터를 사용할 경우 다양한 CPU와 peripherals의 instruction들을 실행시켜 줍니다. 그러나 최근 사용되는 기기들의 구조를 보면 최소 20~30개의 peripherals가 부착되어있으며, 펌웨어는 이들과 직접적으로 interact하기 때문에 하나라도 구현되어있기 않으면 작동하지 않게 됩니다.

  그리고 논문에 따르면, 44520개의 microcontrollers, 3502개의 datasheet, 그리고 26개의 배급사가 있습니다. 이를 고려하였을 때, 이 모든 것을 구현해야 한다는 어려움이 있습니다.

 

 

 

2. About HALucinator

 

How It Works

 

  HALucinator는 HAL들과 다른 라이브러리들을 high-level implementation으로 바꾸는 역할을 합니다. 이를 수행함으로써 특별한 하드웨어 없이도 펌웨어를 리호스팅할 수 있게끔 합니다. 기본적으로 리호스팅하는 것은 다음과 같은 과정을 거칩니다. 

 

  QEMU가 기본적인 Hardware를 에뮬레이션해주며, HAL 및 Middleware는 HALucinator가 High-Level Replacement를 통해 대체하게 됩니다. 이 과정을 더 자세하게 나타낸 것은 다음과 같습니다.

 

  

  우선 Firmware를 LibMatch라는 프로그램을 통해 분석합니다. 이를 통해 필요한 HAL들이 무엇인지 파악하고, HALucinator는 이를 구현합니다. 사진에도 보이듯이 각종 Hander, Peripheral Models, 그리고 IO Server등을 high-level단에서 구현하게 됩니다.

 

Example

  

  다음은 i2c_read_buf라는 핸들러를 python으로 구현한 예시입니다. 보이다시피 핸들러가 python의 형태로 바뀐 것을 볼 수 있고, 펌웨어가 해당 핸들러를 호출할 경우 다음 함수가 실행되게 됩니다.

 

 

Evaluation

 

  본 연구팀은 HALucinator를 평가하기 위해 총 16개의 펌웨어를 리호스팅 시도하였고, 성공적으로 진행하였으며 잘 안된경우는 HAL 라이브러리 자체가 제대로 구현되지 않은 경우였다고 합니다. 본 리호스팅을 기반으로 연구팀이 따로 개발한 HAL-fuzz또한 사용하여 2개의 CVE도 발급받았다고 합니다. 또한 이뿐만 아니라 CSAW ESC 2019에서도 HALucinator를 통해서 좋은 결과를 얻었다고 하네요. 

 

 

Conclusion

 

  Peripheral을 따로 구현할 필요가 없다는 것이 HALucinator의 가장 강력한 요소라고 생각합니다. 또한 단순히 리호스팅을 할 뿐아니라 fuzzing까지 병행하여 취약점을 발견해낸 것이 인상적이라고 생각합니다. 시간이 된다면 나중에 HAL-fuzz에 대해서도 포스팅하고 싶네용

 

Reference

 

논문 본문: https://www.usenix.org/system/files/sec20-clements.pdf

발표 영상: https://www.youtube.com/watch?v=7mFqTjfLuEM