산업용 IoT를 위한 컴파일러 기반 이동 표적 방어 Shakedown

산업용 IoT를 위한 컴파일러 기반 이동 표적 방어 Shakedown
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

Shakedown은 컴파일 시에 함수 순서, 정렬, 객체 링크 순서를 무작위로 바꾸어 동일한 소스 코드에서 메모리 레이아웃이 서로 다른 바이너리를 다수 생성한다. 각 IoT 디바이스에 고유한 바이너리를 배포함으로써 공격자는 하나의 디바이스에서 얻은 ROP 가젯 주소를 다른 디바이스에 적용할 수 없게 된다. 실험 결과, 정상 동작은 유지하면서 인위적으로 삽입한 버퍼 오버플로우 기반 ROP 공격을 성공적으로 차단하였다.

상세 분석

Shakedown은 기존 ASLR이 제공하는 주소 공간 무작위화와 달리, 컴파일 단계에서 코드 자체의 물리적 배치를 변형한다는 점에서 차별화된다. 구체적으로 세 가지 무작위화 기법을 적용한다. 첫 번째는 함수 순서 무작위화로, LLVM 패스를 이용해 모듈 내 함수들의 순서를 임의의 순열로 재배열한다. 이 과정은 기계어 생성 이전에 이루어지므로 함수 호출 그래프에는 영향을 주지 않으며, 실행 파일 내 각 함수의 시작 주소가 매번 달라진다. 두 번째는 함수 정렬 무작위화이다. 함수마다 요구되는 정렬값을 확대(예: 16→32 또는 64)함으로써 함수 사이에 가변적인 패딩을 삽입한다. 이는 함수 순서는 유지하면서도 실제 메모리 주소를 비선형적으로 이동시켜, 동일한 함수라도 빌드마다 다른 절대 주소를 갖게 만든다. 세 번째는 객체 파일 링크 순서 무작위화로, 링커 호출 시 객체 파일들의 전달 순서를 섞는다. 이는 다중 파일 프로젝트에서 각 객체가 차지하는 섹션 위치를 바꾸어 전체 바이너리 레이아웃을 크게 변형한다. 모든 무작위화는 외부에서 제공되는 정수 시드에 의해 결정되는 PRNG으로 제어되며, 시드를 바꾸면 완전히 다른 바이너리를 재생산한다.

보안 측면에서 Shakedown은 “이동 표적(Moving Target)” 개념을 구현한다. 공격자는 ROP 체인을 구성하기 위해 목표 프로그램의 가젯 주소를 사전에 수집해야 하는데, Shakedown이 적용된 디바이스마다 가젯 주소가 서로 다르므로 한 번 수집한 정보는 다른 디바이스에 전혀 유효하지 않다. 이는 특히 정적 바이너리를 배포하는 제한된 리소스의 IIoT 환경에서 효과적이다. 실험에서는 ARM926E‑JS 기반의 산업용 게이트웨이에 인위적인 버퍼 오버플로우 취약점을 삽입하고, Shakedown이 적용되지 않은 원본 바이너리에서는 공격 패킷이 정상적으로 비밀 함수(가젯)를 호출했다. 반면 Shakedown 적용 바이너리에서는 동일 패킷이 크래시를 일으키고 비밀 함수가 호출되지 않아 공격이 무력화되었다.

성능 부하 측면에서는 함수 순서와 정렬 변형이 컴파일 타임에만 발생하고 실행 시 추가적인 런타임 오버헤드가 거의 없으며, 링크 순서 변형도 링커 호출 비용 외에 별도 비용이 발생하지 않는다. 따라서 제한된 CPU와 전력 자원을 가진 IIoT 디바이스에 적합한 경량 방어 메커니즘으로 평가된다. 다만, 디바이스별 고유 바이너리 관리와 OTA 업데이트 시 버전 추적이 복잡해지는 운영상의 과제가 남아 있다.


댓글 및 학술 토론

Loading comments...

의견 남기기