RSS Google 온라인 보안 블로그

베어-메탈 펌웨어를 위한 주소 정제기

Follow
안드로이드 펌웨어는 안드로이드 사용자 공간 및 커널에 비해 낮은 검사 수준으로 인해 공격에 점점 더 취약해지고 있습니다. 커널 주소 Sanitizer(KASan)는 실행 중에 잘못된 메모리 액세스 작업을 식별하여 펌웨어 취약성을 예방적으로 감지할 수 있는 도구입니다. KASan은 다양한 펌웨어 대상에 사용할 수 있으며 힙 및 스택 메모리에 모두 적용할 수 있습니다. 베어-메탈 펌웨어에 KASan을 활성화하려면 KASan이 커버하는 메모리 영역의 상태를 추적하는 전용 메모리 영역인 그림자 메모리를 관리하고 메모리 액세스 작업을 확인하는 사용자 지정 런타임을 구현해야 합니다. 그림자 메모리는 KASan이 커버하는 각 바이트당 8바이트 메모리 영역에 해당하고 그 상태를 인코딩합니다. KASan 런타임에는 메모리 액세스 확인, 그림자 메모리 관리 및 힙 메모리 할당 루틴 후킹을 수행하는 함수들이 포함되어 있습니다. 이러한 함수로 메모리 액세스 작업을 기기화하면 KASan은 메모리 훼손 취약성, 즉 경계 밖 메모리 액세스, 반환 후 사용, 이중/잘못된 반환 및 반환 후 사용을 감지할 수 있습니다. false positive를 피하기 위해 noreturn 함수에 대한 __asan_handle_no_return 루틴이 사용됩니다. KASan은 컴파일 중에 특정 컴파일러 옵션을 사용하여 힙, 스택 및 전역 변수에 활성화할 수 있습니다. QEMU 시스템 에뮬레이터를 사용하여 베어-메탈 대상에 대한 KASan 구현을 보여주는 작은 프로젝트가 제공됩니다. 이 구현은 기술 세부 사항에 대한 참조로 사용할 수 있습니다. KASan은 펌웨어 대상에서 40개 이상의 메모리 안전 버그 및 취약성을 예방적으로 찾아 수정하는 데 사용되었습니다. 일부는 치명적인 심각도였습니다. 펌웨어 개발에서 KASan을 활용하면 디바이스 보안을 크게 개선할 수 있습니다.
favicon
security.googleblog.com
Address Sanitizer for Bare-metal Firmware