기사 전문
Arm, 차세대 보안 기술 PAC와 BTI로 소프트웨어 취약점 공략
기술이 일상생활 전반에 깊숙이 자리 잡으면서, 방대한 데이터와 연결성은 삶을 변화시키는 복잡한 디지털 솔루션을 제공하고 있습니다. 이러한 솔루션의 보안을 관리하는 것은 Arm의 컴퓨팅 아키텍트들에게 최우선 과제이며, 이는 업계 전반의 태도에서도 반영됩니다. PSA Certified 2023 Security Report에 따르면, 기술 의사 결정권자의 75%가 보안을 비즈니스 우선순위로 꼽았습니다. Arm은 이러한 보안 모범 사례와 기술을 어떻게 발전시키고 있을까요?
Arm은 실리콘 및 소프트웨어 파트너와 함께 보안 모범 사례와 기술을 발전시키기 위한 포괄적인 전략을 약속하고 있습니다. 특히 소프트웨어 보안 측면에서 Arm은 최근 아키텍처 릴리스에서 다양한 메모리 관련 보안 취약점을 겨냥해 왔습니다. 2019년, Armv8.5 명령어 세트의 일부로 메모리 태깅 확장(MTE)을 도입했습니다. 또한 Armv8.3-A에는 포인터 인증(PAC), Armv8.5-A에는 분기 대상 식별(BTI)을 도입했으며, Armv8.1-M에서는 PAC와 BTI를 통합 지원합니다. 이 모든 기술은 소프트웨어 신뢰성을 향상시키고, 대부분의 심각한 보안 버그를 차지하는 메모리 안전 위반 및 메모리 손상과 같은 특정 유형의 보안 취약점을 완화하는 데 중점을 두고 설계되었습니다.
Renesas의 새로운 마이크로컨트롤러, PACBTI로 보안 강화
지난 10월 31일, Renesas는 Arm의 가장 높은 성능과 보안성을 자랑하는 Cortex-M 프로세서인 Cortex-M85를 기반으로 한 새로운 RA8 시리즈 마이크로컨트롤러(MCU)를 발표했습니다. RA8 시리즈는 Arm Helium 기술을 탑재하여 DSP 및 ML 성능을 향상시키고, 혁신가들이 보안을 저해하지 않으면서 AI 기회를 활용할 수 있도록 지원합니다.
Renesas의 Daryl Khoo IoT Platform Division 부사장은 "Arm Cortex-M85와 Helium 기술을 RA8 시리즈에 적용하게 되어 기쁘게 생각합니다. 이는 까다로운 AI 구현 및 기타 사용 사례에 필요한 성능 향상을 제공합니다."라며, "또한, PSA Certified Level 3 RoT Component 인증을 목표로 하는 PACBTI와 새로운 RSIP-E51A 통합 보안 엔진은 개발자들에게 낮은 수준의 복잡성으로 높은 수준의 보안을 제공하여 다양한 산업 분야의 제품에 필수적인 복잡한 애플리케이션을 보호합니다."라고 덧붙였습니다. Arm 아키텍처와 Renesas의 보안 IP가 제공하는 성능 및 보안 강화 기능 목록과 더불어, RA8 시리즈는 PACBTI 보안 확장을 도입한 최초의 Cortex-M 기반 실리콘 제품입니다.
PAC와 BTI가 소프트웨어 개발자에게 제공하는 이점
PAC와 BTI는 소프트웨어 코드 변경 없이 보안 취약점을 완화할 수 있어, 개발자들이 애플리케이션의 보안 방어에 유용한 도구가 됩니다. 이 두 기술은 센서부터 스마트폰, 슈퍼컴퓨터에 이르기까지 기술 시장의 모든 영역을 아우르는 Arm IP의 광범위한 범위에서 활용 가능하며, 생태계 전반의 보안에 필수적입니다.
메모리 손상과 관련된 일반적인 위험은 무엇일까요?
실행 중인 프로그램에서 포인터를 손상시키면 공격자의 목표를 지원하는 다른 소프트웨어 조각, 즉 '가젯(gadgets)'으로 실행 흐름을 재지정할 수 있습니다. 가젯은 장치나 시스템에 피해를 입히려는 공격자의 목표를 지원하는 기능을 수행하는 소프트웨어 조각입니다. 이러한 기능에는 임의의 파일이나 메모리 위치 읽기, 소켓 열기, 다른 프로세스 실행, 권한 상승 등이 포함될 수 있습니다. 공격자는 이러한 기능을 조합하여 기존 소프트웨어를 재사용하여 악의적인 공격을 수행할 수 있습니다. 가젯은 거의 모든 프로그램과 라이브러리에서 발견될 수 있으며, 종종 기계를 더 정교한 원격 공격에 노출시키는 발판으로 사용됩니다.
Return-Oriented Programming(ROP)과 Jump-Oriented Programming(JOP)이란 무엇이며, 가젯과 어떤 관련이 있나요?
ROP와 JOP는 메모리 손상을 이용하여 프로그램 실행을 사용 가능한 가젯으로 재지정하는 두 가지 공격 기법입니다. ROP 공격에서는 소프트웨어 스택에서 가젯을 찾아 새로운 프로그램을 형성하도록 연결합니다. 반면 JOP 공격은 함수 포인터나 switch 문과 같이 공격자가 가젯을 연결하는 데 사용할 수 있는 다른 형태의 간접(절대) 분기로 끝나는 시퀀스를 대상으로 합니다.
PAC란 무엇이며, 이러한 공격으로부터 어떻게 보호하나요?
PAC는 주소 사용 전 주소가 수정되지 않았는지 확인하여 ROP 공격을 방지하는 방어 메커니즘입니다. Arm 명령어 세트 아키텍처(ISA)에 새로운 명령어가 추가되어, Cortex-A의 경우 64비트 포인터 반환 주소의 최상위 비트(상위 비트)에 인증 코드를 삽입합니다. 그런 다음 함수에서 반환할 때 주소를 사용하기 전에 인증 코드를 확인합니다. 결과적으로 공격자가 인증 코드나 주소를 수정하거나 스택의 반환 주소를 다른 반환 주소로 교체하는 것이 불가능해집니다. 이는 임의 코드 실행으로 이어지는 대신 예외를 발생시켜 프로그램을 중단시킵니다.
BTI란 무엇인가요?
BTI는 JOP 공격을 방지하는 방어 메커니즘입니다. BTI의 전반적인 목표는 분기를 원래 의도된 위치로만 제한함으로써 다양한 '분기'에 걸쳐 더 강력한 보안 보증을 제공하는 것입니다. 이는 공격자가 프로그램의 제어 흐름을 조작하기 어렵게 만듭니다. 분기는 점프 포인터를 수정하여 실행 스레드를 코드의 다른 위치(일반적으로 원하는 가젯)로 강제 점프시킴으로써 임의 코드 실행에 악용될 수 있습니다. BTI는 Arm ISA에 분기 대상 개념을 추가하여, 분기 대상이 아닌 명령어로 분기할 경우 예외가 발생하도록 합니다. 공격자가 메모리를 손상시켜 분기가 잘못된 위치로 재지정되면 실행이 중단됩니다.
PAC와 BTI가 제공하는 보호 수준은 어느 정도인가요?
PAC와 BTI는 반환 및 분기 주소에 엄격한 제어를 추가함으로써 사용 가능한 ROP 및 JOP 가젯의 수를 엄청나게 줄입니다. 미국 국가안보국(NSA)은 PAC와 BTI를 활용하는 Linux 배포판에서 사용 가능한 가젯이 50배 감소했다고 밝혔습니다. Arm 자체 연구에서는 Arm Cortex-A CPU의 glibc에서 PAC와 BTI 활성화 후 사용 가능한 가젯 수가 97% 이상 감소했습니다.
PAC와 BTI 활용 방법
PAC와 BTI는 최신 Armv9 아키텍처를 포함한 최근 아키텍처 전반에 걸쳐 Arm ISA의 일부로 추가되었습니다. 이러한 명령어는 코드를 컴파일할 때 바이너리에 자동으로 추가되어 사용 가능한 가젯 모음이 되지 않도록 합니다. 개발자는 빌드 지침에서 보안 보호 기능을 활성화하기만 하면 됩니다.
PAC와 BTI 명령어를 지원하는 프로세서는 무엇인가요?
모든 Armv9-A CPU에는 PAC와 BTI가 내장되어 있으며, 두 보안 기능에 대한 업데이트와 개선이 정기적으로 이루어지고 있습니다. 예를 들어, 최신 v9 세대 Cortex-A CPU에서는 Armv9 CPU 설계 전반에 걸쳐 보안 기능을 활성화할 때 성능 향상을 위한 새로운 QARMA3 PAC 알고리즘을 도입했습니다. Cortex-M 프로세서의 경우, Cortex-M85가 PAC와 BTI 명령어를 지원합니다.
Cortex-A와 Cortex-M의 PAC 및 BTI 차이점은 무엇인가요?
Cortex-A 운영 체제 및 애플리케이션은 거대한 생태계의 일부이므로, PAC 및 BTI와 같은 보안 기능을 모든 바이너리에 배포할 때 신중한 주의가 필요합니다. 올바른 옵션으로 모든 것을 다시 컴파일하는 것만으로는 충분하지 않으며, 다음과 같은 고려 사항이 필요합니다. 운영 체제에 지원이 포함되어야 하며, 수동으로 작성된 어셈블러 루틴과 BTI가 활성화된 코드를 혼합할 때 추가적인 주의가 필요합니다. Cortex-M 프로세서를 기반으로 구축된 장치는 펌웨어가 처음부터 컴파일되는 경우가 많아 PAC 및 BTI와 일관된 전체 소프트웨어 스택을 생성하기 쉬우므로 문제가 적은 경향이 있습니다. 최신 Cortex-M 프로세서는 성능 면에서 애플리케이션 CPU와의 격차를 좁히고 있습니다. 따라서 CPU 중심 위협에 대해 동일한 수준의 주의를 받는 것이 놀랍지 않을 것입니다.
PAC 및 BTI 명령어를 지원하는 컴파일러는 무엇인가요?
컴파일러 및 툴체인 기술 세트인 LLVM은 2018년 LLVM 버전 8 출시 이후 Cortex-A CPU 설계 전반에 걸쳐 PAC 및 BTI를 지원해 왔습니다. 한편, GNU 프로젝트에서 제작한 최적화 컴파일러인 GCC는 2022년 7월부터 Cortex-A CPU 설계 전반에 걸쳐 PAC 및 BTI를 지원해 왔습니다( -mbranch-protection=standard 사용). GCC 버전 13.1은 2023년 4월 Cortex-M85 프로세서에 대한 PAC 및 BTI 지원을 추가했습니다. Cortex-M 컴퓨팅 플랫폼의 경우, Arm Compiler 6 (AC6)은 PACBTI 명령어를 지원하며, IAR Embedded Workbench for Arm은 Arm Cortex-M85에서 PACBTI를 지원합니다. PAC 및 BTI에 대한 하드웨어 지원에 대한 자세한 내용은 이 블로그를 참조하십시오.
어떤 프로그래밍 언어가 PAC 및 BTI를 지원하나요?
이론적으로 LLVM 또는 GCC 백엔드를 가진 모든 컴파일 언어가 지원될 수 있지만, 이는 컴파일러가 컴파일러 인프라에 연결되는 방식에 따라 달라집니다. C 및 C++에 대한 PAC 및 BTI 지원은 두 컴파일러 제품군 모두에 포함되어 있습니다. Rust 및 Go와 같은 언어는 이미 실험적인 기능으로 PAC 및 BTI 지원을 포함하고 있습니다. Rust의 PAC 및 BTI 실험적 지원에 대한 자세한 내용은 여기를 참조하십시오.
PAC 및 BTI 명령어를 이미 사용하고 있는 실제 프로젝트 사례가 있나요?
Google의 Chromium 프로젝트와 Javascript V8 엔진은 이제 PAC 및 BTI 명령어가 컴파일되어 Arm64용으로 배포됩니다. Debian 및 RedHat과 같은 일부 Linux 배포판은 이미 PAC 및 BTI를 지원하는 호환 바이너리를 배포했습니다. 다른 배포판들도 다음 릴리스에서 이러한 보안 기능을 고려하고 있습니다. 예를 들어, SuSE의 Tumbleweed 프로젝트는 PAC, BTI 및 기타 Arm 관련 기능을 지원합니다.