Google은 KCSAN을 사용하여 Linux 커널에서 수백 개의 경쟁 조건을 발견했습니다.

리눅스 커널

Google 엔지니어 Linux 커널에 기여하는 KCSAN을 사용하는 커널에서 수백 개의 "경주 조건"을 발견했다고 발표했습니다. 이 회사는 오랫동안 AddressSanitizer를 사용하여 메모리 손상과 관련된 오류를 찾거나 코드에서 정의되지 않은 동작에 대한 UndefinedBehaviorSanitizer를 찾아 왔습니다.

이번에는 Google은 KCSAN이라는 Linux 커널 용 새로운 '경주 조건'감지기를 제공합니다. (Kernel Concurrency Sanitizer). 이러한 치명적인 취약점은 새로운 것이 아닙니다. 사실 경쟁 조건은 동일한 프로세스에있는 둘 이상의 스레드가 동일한 메모리 위치에 동시에 액세스 할 때 발생합니다., 적어도 하나의 액세스가 쓰기 용이고 스레드가이 메모리에 대한 액세스를 제어하기 위해 배타적 잠금을 사용하지 않는 경우.

이러한 조건이 충족되면 액세스 순서가 결정적이지 않으며 계산은이 순서에 따라 실행마다 다른 결과를 제공 할 수 있습니다.

경쟁 조건은 점점 더 동시 액세스 오류로 인식되고 복제하기 어렵습니다. 병렬 프로그램에서 진단합니다. Linux 커널은 스레드 집약적 병렬 처리 및 비 결정적 스레드 인터리빙이 경쟁 조건에 더 많이 영향을받는 대규모 소프트웨어 시스템입니다.

일부 경쟁 상황은 무해 할 수 있지만 지금까지 확인 된 많은 상황은 실수로 간주됩니다.

Linux 커널은 이러한 유형의 조건을 방지하고 관리하기위한 여러 메커니즘을 제공합니다. Linux Kernel에서 심각한 실행 오류를 감지하는 Thread Analyzer 또는 KTSAN (Kernel Thread Sanitizer)과 같은 도구가 있기 때문입니다.

그러나 리눅스 커널에도 기여하는 구글은 최근 KCSAN을 제안했다., KTSAN과 유사한 커널에 대한 새로운 경쟁 조건 감지기.

Google에 따르면 KCSAN은 커널 코드에서 경쟁 상황을 발견하는 데 중점을 둡니다.. 이 동적 치명적 적중 감지기는 KTSAN (Kernel Thread Sanitizer)의 대안입니다.

Google의 설명에 따라 KCSAN은 KTSAN 검출기와 달리 샘플링 모니터링 지점을 기반으로합니다. 이벤트 전에 중요한 스트로크 감지기입니다. KCSAN 설계의 주요 우선 순위는 오 탐지, 확장 성 및 단순성 부족입니다.

KCSAN은 컴파일 도구를 사용하여 메모리에 액세스합니다. KCSAN은 GCC 및 Clang 컴파일러와 호환됩니다. GCC에서는 버전 7.3.0 이상이 필요하고 Clang에서는 버전 7.0.0 이상이 필요합니다.

프로젝트의 GitHub 페이지에서Google의 Marco Elver는 지난달 테스트에서 KCSAN을 사용하여 단 300 일 만에 XNUMX 개 이상의 고유 한 핵심 경쟁 상황을 발견했다고 썼습니다. KCSAN은 동작을 사용자 정의 할 수있는 몇 가지 구성 옵션을 제공합니다.

“우리는 Syzkaller를 통해 몇 주 동안 KCSAN을 사용해 왔으며 많은 버그를 발견했습니다. 처음에 2019 년 300 월에 우리는 단 이틀 만에 XNUMX 개 이상의 독특한 경쟁 상황을 확인했습니다.”라고 그는 썼습니다.

Google은 전반적인 접근 방식이 DataCollider를 기반으로한다고 말했습니다. 커널 모듈의 경쟁 상황에 대한 또 다른 동적 탐지기. 그러나 DataCollider와 달리 KCSAN은 하드웨어 모니터링 지점을 사용하지 않고 대신 컴파일 도구에 의존합니다.

모니터링 지점은 유형, 크기 및 액세스 주소를 긴 파일에 저장하는 효율적인 인코딩을 사용하여 구현됩니다. 유연한 모니터링 지점을 사용하는 이점은 모니터링 지점이 활성화 할 수있는 액세스를 제한하는 데있어 이식성과 더 큰 유연성입니다.

다음은 KCSAN이 Google을 위해 만든 몇 가지 핵심 사항입니다.

  • 고성능 : KCSAN 런타임은 최소이며 각 액세스에 대해 공유 상태 잠금이 필요하지 않습니다. 그 결과 KTSAN보다 성능이 훨씬 뛰어납니다.
  • 추가 메모리 없음 : Google에 따르면 캐시가 필요하지 않습니다. 현재 구현에서는 모니터링 지점 정보를 인코딩하기 위해 적은 수의 길이를 사용하며 이는 무시해도 좋습니다.
  • 메모리 명령 : KCSAN은 Linux 커널 메모리 모델 (LKMM) 제어 규칙을 알지 못합니다. 이로 인해 KTSAN과 같은 사전 이벤트 경주 탐지기에 비해 중요한 경주가 손실 될 수 있습니다 (위음성).
  • 정확도 : Google에 따르면 KCSAN은 샘플링 전략을 사용하기 때문에 정확하지 않습니다.
  • 주석 필요 : KCSAN 런타임 외부에서 최소한의 주석이 필요합니다. 전제 조건 이벤트 리스너의 경우 누락이 오 탐지로 이어지며 이는 사용자 지정 타이밍 메커니즘을 포함하는 커널 컨텍스트에서 특히 중요합니다.
  • 장치에서 동적 쓰기 감지 : 워치 포인트 설정 중에 데이터 값을 확인하여 장치의 동적 쓰기도 감지 할 수 있습니다.

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자: AB Internet Networks 2008 SL
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.