하버드 아키텍처 센서의 코드 주입 공격
초록
이 논문은 Atmel AVR 기반 Mica 무선 센서에 대한 원격 코드 주입 기법을 제시한다. 기존에 불가능하다고 여겨졌던 영구적인 코드 삽입을 구현하고, 이를 이용한 웜 전파와 센서 봇넷 구축 가능성을 논의한다.
상세 분석
본 연구는 하버드 아키텍처의 근본적인 특징인 프로그램 메모리와 데이터 메모리의 물리적 분리를 전제로 한다. 전통적인 스택 기반 버퍼 오버플로우는 데이터 메모리(SRAM)에서만 동작하므로, 코드가 저장되는 플래시(프로그램 메모리) 영역에 직접적인 쓰기가 불가능하다는 것이 일반적인 인식이었다. 그러나 저자들은 AVR 마이크로컨트롤러가 제공하는 특수 명령인 “SPM (Store Program Memory)”와 “ELPM (Extended Load Program Memory)”를 악용함으로써 이 한계를 우회한다.
먼저, 공격자는 센서가 수신하는 작은 패킷(예: 28바이트 이하) 안에 정교하게 조작된 페이로드를 삽입한다. 이 페이로드는 취약한 함수의 반환 주소를 조작해 ROP (Return Oriented Programming) 체인을 구성하도록 설계된다. ROP 체인에는 SPM 명령을 실행할 수 있는 가젯(gadget)들이 포함되며, 이를 통해 공격자는 플래시 메모리의 특정 섹터에 임시 데이터를 기록한다.
다음 단계에서는 “가짜 스택(fake stack)” 기법을 사용한다. 공격자는 데이터 메모리 내에 가상의 스택 구조를 만들고, 이 스택에 실제 실행될 악성 코드를 저장한다. 이후 또 다른 ROP 체인을 통해 SPM 명령을 재차 호출, 가짜 스택에 저장된 바이트들을 플래시 메모리의 비워진 영역에 영구적으로 기록한다. 이 과정에서 페이지 경계와 워드 정렬 요구사항을 고려해 패딩을 삽입하고, 플래시 쓰기 제한(예: 10,000번 쓰기) 내에서 동작하도록 설계하였다.
코드가 플래시 메모리에 영구히 삽입되면, 공격자는 기존 부트로더 혹은 메인 루프의 초기화 단계에서 해당 주소를 점프하도록 또 다른 오버플로우를 유도한다. 이렇게 하면 센서는 재부팅 후에도 자동으로 악성 코드를 실행한다. 저자들은 이를 기반으로 네트워크 전파용 웜을 구현했으며, 웜은 인접한 노드에게 동일한 취약 패킷을 전파해 전체 네트워크를 빠르게 감염시킬 수 있음을 실험적으로 입증하였다.
보안 대책으로는 (1) SPM 명령을 제한하는 하드웨어 레벨 보호, (2) 스택 보호와 주소 무작위화(ASLR) 적용, (3) 입력 검증 강화와 패킷 크기 제한, (4) 플래시 쓰기 횟수 모니터링 및 제한 등이 제안된다. 특히, AVR의 경우 SPM을 실행하려면 Z 레지스터와 RAMPZ 설정이 필요하므로, 이러한 레지스터를 사용자 코드에서 직접 접근할 수 없도록 컴파일러 옵션을 조정하는 것이 실효성 있는 방어책이 될 수 있다.
전체적으로 이 논문은 하버드 아키텍처가 제공하는 메모리 격리 메커니즘이 절대적인 보안 보장을 제공하지 않으며, 마이크로컨트롤러 수준의 저수준 명령까지 고려한 공격 모델이 필요함을 강조한다.
댓글 및 학술 토론
Loading comments...
의견 남기기