/ proc / cpuinfo의“버그”섹션은 실제로 무엇을 보여줍니까?


23

현재 커널이 설치되어 있고 마이크로 코드가 설치된 데비안 스트레치 및 테스트 / 버스터 시스템에서 여전히 멜트 다운과 스펙터가 버그로 표시됩니다 /proc/cpuinfo.

그러나 spectre-meltdown-checker쇼를 실행하는 것은 취약하지 않습니다.

그래서 나는 무엇을 /proc/cpuinfo보여줄지 궁금합니다 . 이 CPU에 대한 취약점 일 뿐이며 패치 된 시스템에도 불구하고 항상 나열됩니까?

답변:


22

"bugs"필드의 의도는이 를 도입/proc/cpuinfo 한 커밋 메시지에 설명되어 있습니다 .

x86/cpufeature:에 버그 플래그 추가 /proc/cpuinfo

기능 플래그와 유사한 방식으로 실행중인 CPU에 버그 해결 방법을 감지했거나 적용했음을 나타내는 플래그를 덤프합니다.

장점은 CPU 기능과 같이 시간이 지남에 따라 누적되지 않는다는 것입니다.

이전에는 커널에서 감지 한 하드웨어 버그가 별도의 기능 ( 예 : 32 비트 x86 시스템 f00f_bug에서 자체 항목 이있는 악명 높은 F00F 버그) 으로 나열되었습니다 /proc/cpuinfo. "bugs"항목은 x86 CPU flags 와 같은 스타일로 앞으로 단일 기능으로이를 유지하기 위해 도입되었습니다 .

메시지에서 볼 수 있듯이 실제로 항목이 의미하는 바는 커널 이 하드웨어 버그를 감지 한 것입니다. 문제가 처리되는지 확인하려면 다른 곳 (부팅 메시지 또는 파일과 같은 특정 /proc항목 또는 /sys항목) 을 찾아야 합니다 /sys/devices/system/cpu/vulnerabilities/.

"버그"항목의 유용성은 두 가지 방식으로 제한됩니다. 첫 번째는 진정한 네거티브를 알 수없는 것과 구별 할 수 없다는 것입니다. 필드가 "cpu_meltdown"을 지정하지 않으면 커널이 Meltdown에 대해 알지 못한다는 것을 의미하는지 (필드에서만) 알 수 없습니다. CPU는 Meltdown의 영향을받지 않습니다. 두 번째는 탐지가 너무 단순 할 수 있다는 것입니다. 주의를 기울여야하기 때문에 CPU가 취약하지 않은 경우 CPU가 취약하다고보고 할 수 있습니다. "감지"는 테이블 중심이므로 정확도는 실행중인 커널 버전에 따라 다릅니다.

Meltdown 및 Spectre 버그의 경우 x86에서 /proc/cpuinfo 다음과 같이 작동합니다 .

  • CPU 가 추측 (486- 클래스, 일부 펜티엄-클래스, 일부 아톰)을 수행하지 않으면 Meltdown 또는 Spectre의 영향을받는 것으로 플래그가 지정되지 않습니다.
  • 남아있는 모든 CPU는 스펙터 변형 1과 2의 영향을받는 것으로 플래그가 지정됩니다 (마이크로 코드 개정 등에 관계없이).
  • CPU 가 추론 저장소 우회에 취약하지 않은 것으로 나열되지 않은 경우, 마이크로 코드가 SSB를 완화한다고 주장하지 않거나 CPU가 SSB를 완화한다고 주장하지 않으면 SSB의 영향을받는 것으로 플래그가 지정됩니다.
  • CPU 가 Meltdown (AMD)에 취약 하지 않은 것으로 표시되지 않고 마이크로 코드가 Meltdown을 완화한다고 주장하지 않으면 Meltdown의 영향을받는 것으로 플래그가 지정됩니다.

2
스펙터 및 멜트 다운의 경우에는 감지되지 않고 그냥 가정 됩니다. 순서대로 x86도 영향을받지 않지만 커널은 기본적으로 "마이크로 코드 패치가 적용되지 않은 X보다 오래된 Intel CPU는 멜트 다운에 취약하다"고 말하는 하드 코딩 된 규칙 때문이라고보고합니다.
R ..

2
@R .. CPU가 커널의 순서 테이블에 포함되어 있습니까? 최신 테이블을 보려면 여기 에서 "cpu_no_speculation"을 찾으십시오 . 이는 실제로 "bugs"항목 wrt의 문제점 중 하나입니다. Meltdown, Spectre 및 co.의 정확성은 실제로 "감지"가 테이블 중심이기 때문에 커널의 최신 상태에 따라 다릅니다.
Stephen Kitt

아니요, Centerton Bonnell 이며 여기서 누락되었습니다. 패치 제출에 대해 살펴 보겠습니다.
R ..

부팅하는 동안이나 커널을로드 한 후 마이크로 코드 업데이트가 적용되었을 때 이것이 여전히 올바른지 아는 사람이 있습니까?
Bachsau

12

Meltdown / Spectre 취약점은 CPU 칩셋 디자인 / 아키텍처에 있으며, 향후 새로운 하드웨어 구매가 부족하여 패치는 장기적 으로 보안에 대한 좋은 환상입니다 . 결함을 악용하는 새로운 방법은 현재 패치를 우회 할 수있는 시간이 지남에 따라 나타날 수 있습니다.

요컨대, 현재 소프트웨어 패치 / 마이크로 코드 는 Spectre / Meltdown 익스플로잇의 알려진 방법에 대한 문제를 완화 시키지만, 처음부터이를 허용하는 기본 CPU 설계 문제를 해결하지는 않습니다. 영향을받는 (여러 세대) CPU는 장기적으로 취약성을 멈추지 않았으며 (아마도 그렇지 않을 것입니다).

그러나 @Gilles가 올바르게 말했듯이 경고가 있다고해서 현재 알려진 익스플로이 트 스펙터 / 멜트 다운 방법이 작동하지는 않습니다. 패치가 설치되어 있으면 작동하지 않습니다.

질문에서 언급 한 경우, 커널은 Spectre / Meltdown의 영향을받는 것으로 알려진 CPU 모델 (x86에 대해서만 이야기하는 경우 모든 x86 CPU) 만 검사하므로 cpu-insecure여전히 버그 섹션에 나열됩니다 / 라인 /proc/cpuinfo.

가서 확인하십시오 /proc/cpuinfo. 커널에 KPTI 패치가 있으면 cpu_insecure를 포함합니다

KPTI 패치에 다음 코드가 있음을 발견했습니다.

   /* Assume for now that ALL x86 CPUs are insecure */
   setup_force_cpu_bug(X86_BUG_CPU_INSECURE);

커널 업데이트 후 다음과 같은 결과가 나타납니다.

bugs      : cpu_insecure

추신. Spectre / Meltdown "버그"를 이용하는 새로운 방법에 대한 업데이트가 이미있었습니다. 아마 마지막이 아닐 것입니다.


2
예를 들어 hw 구매를 잠시 중단 할 수 있다면 새로운 세대의 CPU를 기다리십시오. 내 수정 구슬은 중기 적으로 땅콩을 판매하는 많은 양손 서버를 가질 것이라고 말합니다.
Rui F Ribeiro

CPU 버그는 /proc/cpuinfo소프트웨어 패치로 완전히 완화 된 경우에도 나열됩니다 . 존재 한다고해서 시스템이 특정 버그에 취약하다는 의미 는 아닙니다 .
Gilles 'SO- 악 그만

@Gilles는 알려진 악용을 적용 할 수 없습니다. 그러나 우리는 이미 1 세대 패치를 둘러싼 일련의 익스플로잇을 이미 수행했으며, 이것이 중요한 CPU 재 설계를 강요 할 근본적인 디자인 결함이라는 비판을 침묵시키는 많은 상업적 이익이 있다고 말하고 싶습니다.
Rui F Ribeiro

1
Spectre / Meltdown 형 익스플로잇의 경우에도 계속해서 근본적인 디자인 문제입니다. 그러나 당신은 이것이 bugs라인 쇼의 사실 이며 이것이 잘못되었음을 썼습니다 . 대부분의 CPU 디자인 버그에는 약간의 성능만으로도 완전한 소프트웨어 해결 방법이 있습니다. 커널이 해결 방법을 적용하면 버그는 무해합니다.
Gilles 'SO- 악의를 그만두십시오'

1
@Rui oh 나는 나 자신을 명확하게 표현하지 못했다고 생각한다. 나는 그 기사가 제목에 대한 질문에 대답하지 않았고이 질문에 대답하지 않았다는 것을 의미했다 ;-). (이 기사의 제목은 "업계의 스펙터 버그가 7 개월 동안 비밀을 유지 한 방법"이지만 기사는 IMO의 방법을 설명하지 않습니다 .)
Stephen Kitt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.