Stamattina notizia di mezzo mondo down “a causa di un aggiornamento Microsoft”.
Cerco info e scopro che MS non c’entra, è un update di una cosa che si chiama crowdstrike (che già il nome promette bene) che manda i Windows 10 in loop al boot.
Sarebbe da mettere anche nel thread del giornalismo sgombro, ma magari poi correggono il tiro, chissà.
Intanto su reddit qualcuno ha scritto come far partire windows 10 lo stesso:
Workaround Steps:
Boot Windows into Safe Mode or the Windows Recovery Environment
Navigate to the C:\Windows\System32\drivers\CrowdStrike directory
Locate the file matching “C-00000291*.sys”, and delete it.
Il problema è che in molti contesti si usa bitlocker, e devi ottenere la chiave bitlocker dal reparto IT, sperando che ne abbia una copia fredda.
Comunque pensate a quei poveri admin che dovranno recuperare manualmente tutte le macchine aziendali. Su reddit c’è gente disperata che prevede mesi per recuperare tutti e 700k sistemi bloccati.
L’errore non era nella programmazione, ma nei template che definiscono cos’è virus.
In pratica pratica visto che gli ultimi 3 template aggiornati funzionavano, su quello di luglio hanno passato il template nel content validator, quindi invece di effettuare lo stress test lo hanno messo in produzione … Ovviamente c’era un bug nel content validator.
Dico, ma non conoscono la Legge di Murphy?
Senza contare che lo sanno tutti che vale non che non c’è due senza tre, mica non c’è tre senza quattro
The Content Interpreter on the sensor reads the Channel File and interprets the Rapid Response Content, enabling the Sensor Detection Engine to observe, detect or prevent malicious activity, depending on the customer’s policy configuration. The Content Interpreter is designed to gracefully handle exceptions from potentially problematic content.
When received by the sensor and loaded into the Content Interpreter, problematic content in Channel File 291 resulted in an out-of-bounds memory read triggering an exception. This unexpected exception could not be gracefully handled, resulting in a Windows operating system crash (BSOD).
Insomma, l’intelligentissimo Content Interpreter, che con grazia gestisce le eccezioni non gestite, s’è beccato un out-of-bounds error lì dove non si aspettava, e non è riuscito a gestirlo con garbo, quindi ha rimbalzato l’eccezione al SO, che non avendo la sua leggiadria è crashato come gli avessero tirato un sasso in faccia.
Vabbé, gli out-of-bound memory sono cattivelli, si sa[1].
Di base capita con letture col puntatore sbagliato, o anche con quello giusto, ma aspettandosi di trovare per certo un dato che non è detto ci sia.
Ho un collega che ,in operazioni simili, è un mito: lui carica dati in memoria (da db, da file, da array o da dove ti pare) e poi legge il primo record (o la prima cella o quel che ti pare) dando per scontato che un contenuto ci sia sempre, tanto la chiave del record è mandatoria, no?
Ecco, poi quando il record non c’è proprio, stranamente, sbomba tutto. Però noi lavoriamo a più alto livello, per cui è un po’ difficile far crashare il sistema operativo, ci crasha solo il nostro programma, ma il concetto è quello: dato che non c’è (o dato garbage) e nessun controllo di quello che hai letto prima di usarlo.
Abbiamo provato anche coi ferri roventi, ma niente: non recepisce.
a type of memory access error that occurs when a program reads data from a memory address outside of the bounds of a buffer . This can result in the program reading data that does not belong to it, which can cause crashes, incorrect behavior, or even security vulnerabilities. ↩︎
In Ring0 non esistono eccezioni non gestite, anzi, non esistono proprio eccezioni, tranne quelle proprie della CPU che sono in realtà interrupt, e sono sempre gestite, nel senso che le gestisce quella parte del kernel che appunto blocca tutto se il frame di provenienza è a ring0.
Attenzione perché lì è usato in senso lato. Il kernel di Windows è scritto in puro C il quale non ha supporto per le eccezioni nel senso del C++ o dei moderni linguaggi, né può essere portato per questioni di ABI, ovvero di convenzione di struttura dello stack.