APIC/에픽! Intel 칩은 커널에서도 볼 수 없는 비밀을 누설합니다… PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

APIC/에픽! 인텔 칩, 커널에서도 볼 수 없는 비밀 유출…

이번 주 BWAIN은 다음과 같습니다. 인상적인 이름을 가진 버그.

BWAIN은 새로운 사이버 보안 결함이 흥미롭고 중요할 뿐만 아니라 자체 로고, 도메인 이름 및 웹사이트와 함께 나타날 때 우리가 수여하는 영예입니다.

이것은 더빙 ÆPIC 누출, 말장난 APICEPIC.

전자의 줄임말 고급 프로그래머블 인터럽트 컨트롤러, 후자는 단순히 "서사시"라는 단어입니다. 거대한, 거대한, 극단, 메가, 거대한.

문자 Æ는 색슨 시대 이후로 서면 영어로 사용되지 않았습니다. 그것의 이름은 이스크발음 애시 (나무에서와 같이) 현대 단어 ASH에서 A의 소리를 거의 나타냅니다. 그러나 우리는 당신이 단어를 발음해야한다고 가정합니다 에픽 여기에서 "APIC-slash-EPIC" 또는 "ah!-eh?-PIC"로 표시됩니다.

그게 다 뭐야?

이 모든 것은 다섯 가지 흥미로운 질문을 제기합니다.

  • APIC 란 무엇입니까?, 왜 필요합니까?
  • 어떻게 데이터를 가질 수 있습니까? 심지어 커널 엿볼 수 없다?
  • 이 대실패의 원인 APIC에서?
  • 가요 ÆPIC 누출 나에게 영향을?
  • 무엇을 그것에 대해?

APIC란 무엇입니까?

IBM PC가 처음 등장한 1981년으로 돌아가보자.

PC에는 인텔 8259A 프로그래밍 가능 인터럽트 컨트롤러, 또는 PIC. (PC AT 이후의 이후 모델에는 더 많은 인터럽트 이벤트를 지원하기 위해 함께 연결된 두 개의 PIC가 있습니다.)

PIC의 목적은 말 그대로 즉각적인 주의가 필요한 시간 결정적인 일이 발생할 때마다 PC의 중앙 프로세서(CPU)에서 실행 중인 프로그램을 중단시키는 것이었습니다.

이러한 하드웨어 인터럽트에는 다음과 같은 이벤트가 포함되었습니다. 문자를 수신하는 직렬 포트; 반복되는 하드웨어 타이머 똑딱.

이러한 종류의 하드웨어 인터럽트 시스템이 없으면 운영 체제는 들어오는 키 입력을 정기적으로 확인하기 위해 함수 호출로 가득 차 있어야 합니다. 이는 아무도 입력하지 않을 때 CPU 전력을 낭비하지만 응답하지 않을 것입니다. 그들이 할 때 충분합니다.

상상할 수 있듯이 PIC는 곧 PIC라고 불리는 업그레이드된 칩으로 이어졌습니다. APIC, 많은 CPU 자체에 내장된 일종의 PIC.

요즘 APIC는 키보드, 직렬 포트 및 시스템 타이머의 피드백 그 이상을 제공합니다.

APIC 이벤트는 과열과 같은 이벤트에 의해 트리거되고 이에 대한 실시간 데이터를 제공하며 최신 멀티코어 프로세서에서 서로 다른 코어 간의 하드웨어 상호 작용을 허용합니다.

그리고 오늘날의 인텔 칩은 크게 단순화하면 일반적으로 다음과 같은 두 가지 다른 방식으로 작동하도록 구성할 수 있습니다. xAPIC 모드x2APIC 모드.

여기 xAPIC 인터럽트 컨트롤러에서 데이터를 추출하는 "레거시" 방식이며, x2APIC 더 현대적인 방법입니다.

더 단순화하면 xAPIC는 미오, 짧은 메모리 매핑된 입력/출력, 관심 이벤트를 등록할 때 APIC에서 데이터를 읽기 위한 것입니다.

MMIO 모드에서는 APIC 칩 자체의 입/출력 레지스터를 미러링하는 특정 메모리 영역(RAM)을 읽어 APIC 이벤트를 트리거한 원인을 찾을 수 있습니다.

이 xAPIC 데이터는 컴퓨터의 물리적 RAM 어딘가에 있는 4096바이트 메모리 블록에 매핑됩니다.

이는 데이터 액세스를 단순화하지만 APIC 칩과 시스템 메모리 사이에 성가시고 복잡한(그리고 앞으로 보게 될 잠재적으로 위험한) 상호 작용이 필요합니다.

반대로 x2APIC에서는 다음을 수행해야 합니다. APIC 데이터 직접 읽기 로 알려진 것을 사용하여 칩 자체에서 모델별 레지스터 (MSR).

Intel에 따르면 프로세스의 MMIO 부분을 피합니다. "크게 향상된 프로세서 주소 지정 기능과 인터럽트 전달에 대한 몇 가지 개선 사항을 제공합니다."

특히, 온칩 레지스터에서 APIC 데이터를 직접 추출한다는 것은 지원되는 총 데이터 양과 동시에 관리할 수 있는 CPU 코어의 최대 수가 MMIO 모드에서 사용 가능한 4096바이트에 국한되지 않는다는 것을 의미합니다.

어떻게 커널도 엿볼 수 없는 데이터를 가질 수 있습니까?

xAPIC 모드를 사용할 때 MMIO 메모리 영역에서 끝나는 데이터가 항상 조심스럽게 관리되는 것은 아니라는 점을 이미 짐작하셨을 것입니다.

...따라서 해당 MMIO 영역으로의 일종의 "데이터 누출"이 이 문제의 핵심입니다.

하지만 당신이 주어진 이미 sysadmin 수준의 권한이 필요합니다. 처음에 MMIO 데이터를 읽는 것이므로 어쨌든 메모리의 모든 데이터를 거의 확실히 얻을 수 있습니다…

… APIC MMIO 데이터 영역에 실수로 다른 사람의 데이터가 표시되는 이유는 무엇입니까? 서사시 새는 곳?

실제로 일부 유형의 데이터 도용 또는 RAM 스크래핑 공격을 약간 더 쉽게 만들 수 있지만 이론적으로 이미 가지고 있던 메모리 스누핑 기능을 더 이상 제공하지 않을 것입니까?

불행히도 시스템의 소프트웨어가 Intel의 SGX를 사용하는 경우 그 가정은 사실이 아닙니다. 소프트웨어 가드 확장.


SGX에 대해 자세히 알아보기


SGX는 많은 최신 Intel CPU에서 지원되며 운영 체제 커널이 코드 및 데이터 청크를 RAM의 물리적 블록에 "봉인"하여 엔클레이브라고 알려진 것을 형성하는 방법을 제공합니다.

이것은 암호 해독 키와 같은 비밀을 저장하는 데 사용되는 휴대 전화의 특수 보안 칩과 매우 유사하게 일시적으로 동작합니다.

엔클레이브의 SGX "잠금"이 설정되면 봉인된 메모리 영역 내에서 실행되는 프로그램 코드만 해당 RAM의 내용을 읽고 쓸 수 있습니다.

결과적으로 엔클레이브가 활성화된 후 발생하는 계산의 내부 세부 정보는 시스템의 다른 코드, 스레드, 프로세스 또는 사용자에게 보이지 않습니다.

커널 자체를 포함합니다.

엔클레이브에 봉인된 코드를 호출하는 방법과 수행할 수 있는 계산의 출력을 반환하는 방법이 있지만 코드를 복구하거나 감시하거나 디버그할 방법이 없습니다. 실행되는 동안 관련 데이터.

엔클레이브는 개인 키로 서명할 데이터와 같은 입력을 제공하고 생성된 디지털 서명과 같은 출력을 추출할 수 있지만 암호화 키를 확인할 수 없는 블랙 박스로 효과적으로 변합니다. 서명 과정에서 사용됩니다.

상상할 수 있듯이, SGX 엔클레이브 내부에 봉인되어야 하는 데이터가 실수로 xAPIC "메모리 매핑" 모드를 사용할 때 APIC 데이터를 "미러링"하는 데 사용되는 MMIO RAM으로 복제되어야 하는 경우…

...그것은 SGX의 보안을 위반할 것입니다. 즉, SGX 자체 내부에서 이미 실행 중인 코드에서 의도적으로 내보내지 않는 한 SGX 엔클레이브가 생성된 후 데이터가 나오지 않아야 한다고 말합니다.

APIC에서 이 엄청난 실패의 원인은 무엇입니까?

뒤에 있는 연구원들 ÆPIC 누출지 교활하고 비정상적인 메모리 액세스 시퀀스를 통해 APIC 데이터를 읽도록 배열함으로써 ...

... APIC 자체에서 새로 수신한 데이터뿐만 아니라 최근에 CPU에서 다른 목적으로 사용했던 데이터로 프로세서를 속여 APIC MMIO 공간을 채울 수 있습니다.

이 동작은 APIC MMIO 메모리 페이지의 크기가 4096바이트이지만 xAPIC 모드의 APIC 칩이 실제로 4096바이트 분량의 데이터를 생성하지 않고 CPU가 항상 올바르게 중화하지 않는다는 사실의 부작용입니다. 먼저 XNUMX으로 채워서 MMIO 영역의 사용되지 않는 부분을 제거합니다.

대신 APIC 칩 자체에서 수신한 새 데이터와 함께 CPU 캐시에 남아 있는 오래된 데이터를 기록했습니다.

연구원들이 말했듯이 버그는 다음과 같이 요약됩니다. 초기화되지 않은 메모리 읽기, 다른 사람이나 당신이 이전 비밀을 먼저 플러시하지 않았기 때문에 RAM에 있는 다른 사람의 남은 데이터를 실수로 재사용하는 경우.

ÆPIC 누출이 나에게 영향을 줍니까?

영향을 받는 칩의 전체 목록은 다음을 참조하십시오. 인텔 자체 자문.

우리가 말할 수 있는 한, 10세대 또는 11세대 Intel 프로세서를 사용하는 경우 영향을 받을 수 있습니다.

그러나 완전히 새로운 12세대 CPU(작성 당시 최신)를 가지고 있다면 서버급 칩만 영향을 받는 것으로 보입니다.

아이러니하게도 12세대 노트북 칩에서 인텔은 SGX를 포기했기 때문에 누출될 수 있는 "밀봉된" SGX 엔클레이브를 갖는 것이 불가능하기 때문에 이 버그가 적용되지 않습니다.

물론 잠재적으로 취약한 칩에서도 SGX를 사용하는 소프트웨어에 의존하지 않는다면 버그도 적용되지 않습니다.

그리고 버그라고 불리는 CVE-2022-21233, 이미 컴퓨터에 대한 로컬 관리자 수준(루트) 액세스 권한이 있는 공격자만 악용할 수 있습니다.

일반 사용자 APIC MMIO 데이터 블록에 액세스할 수 없으므로 SGX 엔클레이브에서 유출되었을 수 있는 비밀 데이터는 고사하고 거기에 있는 어떤 것도 엿볼 수 없습니다.

또한, 게스트 가상 머신 HyperV, VMWare 또는 VirtualBox와 같은 하이퍼바이저에서 호스트 운영 체제의 제어 하에 실행되는 (VM)은 거의 확실히 이 트릭을 사용하여 다른 게스트나 호스트 자체의 비밀을 약탈할 수 없습니다.

게스트 VM은 일반적으로 호스트 프로세서의 실제 APIC 회로에 액세스하지 못하기 때문입니다. 대신 각 게스트는 해당 VM에 고유한 자체 시뮬레이션 APIC를 가져옵니다.

무엇을해야 하는가?

당황하지 마십시오.

랩톱이나 데스크톱 컴퓨터에서는 구형(또는 운이 좋게도 새 제품입니다!) 컴퓨터가 있거나 SGX에 의존하지 않기 때문에 전혀 위험하지 않을 수 있습니다.

그리고 당신이 위험에 처하더라도 관리자/루트로 노트북에 들어가는 사람은 이미 당신에게 문제의 세계를 일으킬 충분한 권한을 가지고 있을 것입니다.

취약한 서버가 있고 운영 보안의 일부로 SGX를 사용하는 경우 인텔 보안 권고를 확인하십시오. 인텔 SA-00657 보호 및 완화 정보를 제공합니다.

이것을 작성한 연구원에 따르면, "인텔은 문제를 해결하기 위해 마이크로코드 및 SGX 소프트웨어 개발 키트 업데이트를 출시했습니다."

Linux 커널 팀은 또한 항상 x2APIC(이전에 기억하겠지만 공유 메모리를 통해 APIC 데이터를 전송하지 않음)를 사용하도록 시스템을 구성할 수 있는 패치를 작업 중인 것으로 보입니다. 부팅 후 시스템이 강제로 xAPIC 모드로 돌아가는 것을 정상적으로 방지합니다.


타임 스탬프 :

더보기 노출 된 보안