OnePlus 8 Pro용 Kirisakura 맞춤형 커널은 더 나은 보안을 위해 CFI(제어 흐름 무결성)를 활성화합니다.

제어 흐름 무결성에 대한 기술 세부정보

"커널에 엄청난 수의 함수 포인터가 있다는 것은 이 공격 패턴의 인기를 높이는 데 도움이 됩니다. 공격자가 자체 실행 코드를 삽입할 수 없더라도 기존 커널 코드의 임의 부분을 실행하여 공격을 완료할 수 있습니다.

LLVM의 CFI는 유효한 호출 대상을 제한하고 CFI 위반을 감지할 때 커널 패닉을 강제로 발생시켜 이러한 공격을 완화하려고 시도합니다. 각 간접 분기 앞에 검사가 추가되어 대상 주소가 올바른 서명이 있는 유효한 함수를 가리키는지 확인합니다. 이는 간접 분기가 임의의 코드 위치로 점프하는 것을 방지하고 호출할 수 있는 함수를 제한하기도 합니다. 버그로 인해 액세스가 허용되는 경우 공격자는 여전히 함수 포인터를 변경할 수 있습니다. 그러나 LLVM의 CFI는 간접 호출의 55%를 최대 5개의 가능한 대상으로 제한하고 80%를 최대 20개의 대상으로 제한합니다. 각 간접 분기에 대한 유효한 호출 대상을 모두 결정하려면 컴파일러는 모든 커널 코드를 한 번에 확인해야 합니다.

LTO의 사용법(링크 시간 최적화)이 이를 가능하게 합니다. LLVM의 CFI에는 컴파일러가 모든 C에 대해 LLVM 관련 비트코드를 생성하는 LTO의 사용이 필요합니다. 컴파일 단위 및 LTO 인식 링커는 LLVM 백엔드를 사용하여 비트코드를 결합하고 이를 네이티브 코드.

CFI 사용을 허용하는 것 외에도 LTO는 전체 프로그램 분석 및 모듈 간 최적화를 통해 더 나은 런타임 성능을 달성합니다.

ThinLTO LTO의 성능 향상을 거의 따라잡았습니다. ThinLTO 모드에서는 일반 LTO와 마찬가지로 그 소리 컴파일 단계 후에 LLVM 비트코드를 내보냅니다. ThinLTO 비트코드는 모듈의 간략한 요약으로 보강됩니다. 링크 단계에서는 요약만 읽고 결합된 요약 색인으로 병합됩니다. 여기에는 나중에 교차 모듈 기능 가져오기를 위한 기능 위치 색인이 포함됩니다. 그 후 결합된 요약 지수에 대해 빠르고 효율적인 전체 프로그램 분석이 수행됩니다. ThinLTO는 다중 스레드 연결 프로세스를 허용하므로 컴파일 시간이 단축됩니다.

특정 버그 클래스에 도달할 때 CFI가 프로그램 실행을 중단하기 때문에 허용 모드에서 사용될 때 앞서 언급한 것처럼 버그 찾기 도구로 분류되기도 합니다. 허용 CFI는 커널 패닉을 발생시키지 않고 커널 로그에 CFI 위반을 표시합니다. 코어 4.9(Pixel 3세대 장치) 및 4.14(Pixel 4세대 장치) 커널에는 여러 가지 기능 유형이 있었습니다. 커널/공통에서 사용 가능한 패치 세트에서 Google이 해결한 CFI 위반으로 인한 불일치 저장소.

그러나 Android 생태계의 특성으로 인해 이러한 불일치는 SoC 제조업체(이 경우 Qualcomm) 또는 OEM(OnePlus) 특정 코드에서도 발견될 가능성이 높습니다. 4.19 커널과 별개인 Qualcomm 코드의 여러 CFI 위반이 OnePlus 8 Pro용 Kirisakura 커널에서 수정되었습니다(예: 1, 2, 3).

허용된 CFI에서 커널을 실행하면 OnePlus 드라이버와 관련된 코드에서도 CFI 위반이 드러났습니다(관련 커밋을 찾을 수 있음) 여기 그리고 여기). OnePlus 8 Pro용 Kirisakura 커널은 CFI가 적용된 상태로 실행되어 이러한 종류의 코드 재사용 공격으로부터 사용자를 보호합니다."

더 읽어보세요

DIY 매니아(예: 오래된 PC 부품 회수업자). Eclair 시절부터 열렬한 Android 사용자였던 Skanda는 단일 보드 컴퓨팅 세계의 최근 개발 동향을 따르는 것을 좋아합니다.