Google a descoperit sute de condiții de rasă în nucleul Linux folosind KCSAN

Linux Kernel

Ingineri Google care contribuie la kernel-ul Linux au anunțat că au descoperit sute de „condiții de rasă”, în nucleu folosind KCSAN. Compania a lucrat mult timp la AddressSanitizer pentru a găsi erori legate de corupția memoriei sau UndefinedBehaviorSanitizer pentru un comportament nedefinit în cod.

De data aceasta Google oferă un nou detector „Race Conditions” pentru nucleul Linux numit KCSAN (Kernel Concurrency Sanitizer). Aceste vulnerabilități critice nu sunt noi. De fapt Condițiile de cursă apar atunci când două sau mai multe fire din același proces accesează simultan aceeași locație de memorie, unde cel puțin unul dintre accesuri este de a scrie și când firele nu folosesc nicio blocare exclusivă pentru a controla accesul la această memorie.

Când aceste condiții sunt îndeplinite, ordinea de acces nu este deterministă și calculul poate da rezultate diferite de la o rundă la alta, în funcție de această ordine.

Condițiile de cursă sunt văzute din ce în ce mai mult ca erori de acces simultane și sunt greu de duplicat și diagnosticați în programe paralele. Kernel-ul Linux este un sistem software la scară largă, în care paralelismul intens de fire și intercalarea firelor nedeterministe sunt mai supuse condițiilor concurențiale.

Unele situații competitive pot fi benigne, dar multe dintre ele identificate până acum sunt considerate greșeli.

Kernel-ul Linux oferă mai multe mecanisme pentru a evita și gestiona aceste tipuri de condiții Deoarece există instrumente precum Thread Analyzer sau KTSAN (Kernel Thread Sanitizer) pentru a detecta erorile critice de execuție în Kernel-ul Linux.

Cu toate acestea, Google, care contribuie și la kernel-ul Linux, a propus recent KCSAN, un nou detector Race Conditions pentru Kernel, similar cu KTSAN.

Potrivit Google, KCSAN se concentrează pe descoperirea unor situații competitive în codul nucleului. Acest detector de lovituri critice dinamic este o alternativă la Kernel Thread Sanitizer (KTSAN).

Conform explicației Google, KCSAN se bazează pe eșantionarea punctelor de monitorizare, spre deosebire de detectorul KTSAN, care este un detector de curse critic înainte de eveniment. Prioritățile cheie în proiectarea KCSAN sunt lipsa pozitivelor false, scalabilitatea și simplitatea.

KCSAN folosește instrumente de compilare pentru a accesa memoria. KCSAN este compatibil cu compilatoarele GCC și Clang. Cu GCC, necesită versiunea 7.3.0 sau o versiune ulterioară și cu Clang, necesită versiunea 7.0.0 sau o versiune ulterioară.

Pe pagina GitHub a proiectuluiMarco Elver de la Google a scris că folosind KCSAN în testele de luna trecută, au găsit în doar două zile peste 300 de situații de concurență unice. KCSAN oferă mai multe opțiuni de configurare pentru a-și personaliza comportamentul.

„Folosim KCSAN prin Syzkaller de câteva săptămâni și am găsit o mulțime de bug-uri. Inițial, în septembrie 2019, am identificat peste 300 de situații de concurență unice în doar două zile ”, a scris el.

Google a spus că abordarea generală se bazează pe DataCollider, un alt detector dinamic de situații competitive în modulele kernel. Dar, spre deosebire de DataCollider, KCSAN nu folosește puncte de monitorizare hardware, ci se bazează pe instrumente de compilare.

Punctele de monitorizare sunt implementate folosind o codificare eficientă care stochează tipul, dimensiunea și adresa de acces într-un fișier lung. Avantajele utilizării punctelor de monitorizare flexibile sunt portabilitatea și o mai mare flexibilitate în limitarea accesului pe care un punct de monitorizare îl poate activa.

Iată câteva dintre punctele cheie pe care KCSAN le-a făcut pentru Google:

  • Performanta ridicata: Runtime-ul KCSAN este minim și nu necesită blocare de stare partajată pentru fiecare acces. Rezultatul este o performanță mult mai bună decât KTSAN.
  • Nu există memorie suplimentară: conform Google, nu este necesară memoria cache. Implementarea curentă folosește un număr mic de lungimi pentru a codifica informațiile punctului de monitorizare, ceea ce este neglijabil.
  • Comandă de memorie: KCSAN nu cunoaște regulile de control ale modelului de memorie kernel Linux (LKMM). Acest lucru poate duce la pierderea curselor critice (negative negative) în comparație cu un detector de curse pre-eveniment precum KTSAN
  • precizia: Potrivit Google, KCSAN este imprecis, deoarece folosește o strategie de eșantionare;
  • Necesită adnotare: adnotarea minimă este necesară în afara runtime-ului KCSAN. În cazul unui ascultător de evenimente precondiționat, orice omisiune duce la fals pozitivi, ceea ce este deosebit de important în contextul nucleului care include mecanisme de sincronizare personalizate.
  • Detectarea scrierilor dinamice de pe dispozitive: Verificând valorile datelor în timpul configurării punctului de supraveghere, pot fi detectate și scrieri dinamice de pe dispozitive.

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.