OS RHEL7.9 RHEL8.8 커널 업데이트 후 성능 이슈가 발생했습니다.
페이지 정보
작성자 OSworker 아이디로 검색 전체게시물 댓글 0건 조회 47회 좋아요 0회 작성일 24-12-14 21:09본문
안녕하세요.
오늘은 고객에게 있던 이슈를 공유하고자 합니다.
RHEL7.4를 사용하다가 RHEL7.9로 업데이트를 한후 APP의 성능 이슈가 발생하였는데, 그 원인을 알 수 없었던 것이였습니다.
그래서 그것을 찾다가, 비슷한 사례가 있어서 아래와 같이 안내하였습니다.
1. 문제점
RHEL7. 4를 사용하다가 최근 ELS 지원을 받기 위해 RHEL7.9로 업데이트 하였는데, APP 성능이 떨어진 것을 확인할수있었습니다.
커널에 어떠한 변화가 있는지 확인 부탁드립니다.
내부적으로 확인했을때는 다른 RHEL7.9와의 차이점은 grub 에 보안취약점이 비활성화를 안해놨다는 것입니다.
(spectre_v2=off nopti spec_store_bypass_disable=off l1tf=off mds=off nospectre_v1 tsx_async_abort=off mmio_stale_data=off retbleed=off)
2. 원인 분석
저희가 찾아보니 아래와 같이 보안취약점이 적용되는 시점이 있었습니다.
1)RHEL 7버전에서는 커널 "kernel-3.10.0-1160.76.1" 부터 보안취약점 완화가 적용되었고,
RHEL8 에서 mmio_stale_data 완화는 8.7 부터 적용되었습니다.
Errata 패치 커널 발표일자
RHEL7 : RHSA-2022:5937 / kernel-3.10.0-1160.76.1.el7.x86_64.rpm / 2022년 8월 9일
RHEL8 : RHSA-2022:6460 / kernel-4.18.0-372.26.1.el8_6.x86_64.rpm / 2022년 9월 13일
2) RHEL7는 커널 "kernel-3.10.0-1160.80.1" 부터 보안취약점 완화가 적용되었고,
RHEL8는 8.7 커널 부터 retbleed 보안취약점 완화가 적용되었습니다.
Errata 패치 커널 발표일자
RHEL7 : RHSA-2022:7337 / kernel-3.10.0-1160.80.1.el7.x86_64.rpm / 2022년 11월 3일
RHEL8 : RHSA-2022:7110 / kernel-4.18.0-372.32.1.el8_6.x86_64.rpm / 2022년 10월 25일
이말은 "mmio_stale_data"와 " retbleed " 의 보안취약점이 위 커널 부터 자동적으로 완화되어져서 커널이 나왔다는 것입니다.
그리고 이 완화로 인해 성능에 영향을 줄수있다고 KCS에서도 있습니다.
- Is there kernel parameter to control the optional mitigations for CPU vulnerabilities that is architecture independent?
. https://access.redhat.com/solutions/4155131
- Performance impact observed after Red Hat Enterprise Linux upgrade due to Retbleed CVE vulnerability mitigations
. https://access.redhat.com/solutions/7011413
3. 해결 방안
그럼 이문제를 해결 하기 위해서는 고객분께서 힌트를 준것과 같이 grub에 보안취약점 을 비활성화 하는 내용을 넣어보는것입니다.
1) spectre_v2=off nopti spec_store_bypass_disable=off l1tf=off mds=off nospectre_v1 tsx_async_abort=off mmio_stale_data=off retbleed=off
or
2) mitigations=off
------------------------------------------------------------------
> mitigations 에 대한 설명
mitigations = [X86,PPC,S390,ARM64]
이 매개변수를 사용하면 CPU 취약점에 대한 선택적 완화 기능을 제어할 수 있습니다. 이는 각각 기존 아키텍처별 옵션 집계입니다.
off: 모든 선택적 CPU 완화를 비활성화합니다. 이로 인해 시스템 성능이 향상되지만 사용자를 여러 CPU 취약점에 노출할 수도 있습니다.
다음과 같습니다. nopti [X86,PPC], kpti=0 [ARM64], nospectre_v1 [X86,PPC], nobp=0 [S390], nospectre_v2 [X86,PPC,S390,ARM64],, spectre_v2_user=off [X86], spec_store_bypass_disable=off [X86,PPC], ssbd=force-off [ARM64], l1tf=off [X86], mds=off [X86], tsx_async_abort=off [X86], kvm.nx_huge_pages=off [X86], no_entry_flush [PPC], no_uaccess_flush [PPC], mmio_stale_data=off [X86].
예외: kvm.nx_huge_pages =force 옵션이 지정된 경우 kvm.nx_huge_pages에는 적용되지 않습니다.
------------------------------------------------------------------
4. 테스트 및 확인
- 위에서 설명한대로 mitigations=off 할경우 대부분의 보안취약점이 노출. 즉 비활성화 되어 보안취약점에 약해지게 표현이됩니다.
> mitigations=off 할경우
# cat /sys/devices/system/cpu/vulnerabilities/*
Not affected
KVM: Vulnerable
Mitigation: PTE Inversion; VMX: vulnerable, SMT disabled
Vulnerable; SMT disabled
Vulnerable
Vulnerable
Not affected
Vulnerable
Vulnerable: Load fences, __user pointer sanitization and usercopy barriers only; no swapgs barriers
Vulnerable
Not affected
Vulnerable
5. 결과
고객분은 서버가 폐쇄망이라, 보안취약점 적용도 중요하지만, 성능에 이슈가 있어 mitigations=off 을 적용하였고, 커널업데이트후에
생겼던 성능이슈는 해결 되었다고 합니다.
만약 커널 업데이트 후에 성능 이슈가 있었다면 위 사례를 적용해보시는것을 추천드립니다.
감사합니다.
>>>>>>> 추가 설명 글
1. mmio_stale_data = [X86,INTEL]
이 매개변수를 사용하여 Processor Memory-mapped I/O (MMIO)usrle Data 취약점의 완화 조치를 제어할 수 있습니다.
프로세서 MMIOusrle Data는 MMIO 작업 후에 데이터를 노출할 수 있는 취약점의 클래스입니다. 노출된 데이터는 메타데이터 서버(MDS) 및 TAM(Transactional Asynchronous Abort)의 영향을 받는 것과 동일한 CPU 버퍼에서 시작되거나 종료될 수 있습니다. 따라서 MDS 및 TAA와 유사하게 완화 조치는 영향을 받는 CPU 버퍼를 지우는 것입니다.
사용 가능한 옵션은 다음과 같습니다.
full: 취약한 CPU에서 완화 기능을 활성화
full,nosmt: 완화 기능을 활성화하고 취약한 CPU에서 SMT를 비활성화합니다.
off: 무조건 완화를 비활성화합니다.
MDS 또는 TAA 영향을 받는 시스템에서 mmio_stale_data=off 는 동일한 메커니즘으로 이러한 취약점이 완화되므로 활성 MDS 또는 TAA 완화 방법으로 방지할 수 있습니다. 따라서 이 완화 기능을 비활성화하려면 mds=off 및 tsx_async_abort=off 를 지정해야 합니다.
이 옵션을 지정하지 않으면 mmio_stale_data=full 과 동일합니다
2. retbleed = [X86]
이 매개변수를 사용하면 반환 지침(RETBleed) 취약점을 사용하여 Arbitrary Speculative Code Execution의 완화 기능을 제어할 수 있습니다. 사용 가능한 옵션은 다음과 같습니다.
Off: no mitigation
auto: 완화 기능을 자동으로 선택합니다.
auto,nosmt: 전체 완화 (STIBP없이 1 이상 만)에 필요한 경우 완화 기능을 자동으로 선택합니다.
ibpb: 기본 블록 경계에 대한 짧은 추측 창도 완화합니다. 안전성, 가장 높은 성능 영향
unret: 강제로 교육되지 않은 반환 thunks를 활성화하며 AMD f15h-f17h 기반 시스템에서만 유효합니다.
unret,nosmt:ret 옵션과 마찬가지로 STIBP를 사용할 수 없을 때 SMT를 비활성화합니다.
auto 옵션을 선택하면 런타임에 CPU에 따라 완화 방법이 선택됩니다.
이 옵션을 지정하지 않으면 retbleed=auto 와 동일합니다.
댓글목록
등록된 댓글이 없습니다.