Jest wyjaśnienie, dlaczego SmartScreen blokuje Google Chrome. To przez aktualizacje
Kilka dni temu okazało się, że oficjalny korporacyjny instalator Google Chrome w postaci paczki MSI zawiera nieprawidłowy podpis cyfrowy. Błąd sprawiał, że do akcji wkraczał Windows SmartScreen wyświetlający "okno-kłodę" (roadblock) ostrzegające przed niezweryfikowanym wydawcą. Reakcja narzędzia SmartScreen brała się z tego, że usługi kryptograficzne Windows zgłaszały taki sam błąd jak w przypadku sfałszowanych podpisów. Sfałszowany podpis to zazwyczaj działanie złośliwego oprogramowania.
Gdyby podpis Chrome był naprawdę sfałszowany, oznaczałoby to włamanie w Google i podmianę instalatorów na trojany. Podpis jest jednak po prostu wadliwy, a nie sfałszowany, a przestał przechodzić walidację dopiero niedawno. Wszystkiemu winna jest poprawka łatająca podatność CVE-2020-1464 w mechanizmie Authenticode i Crypto API (podsystemu weryfikacji podpisu cyfrowego dla oprogramowania). Od teraz, gdy plik został zmodyfikowany po dodaniu podpisu, nie przejdzie on walidacji kryptograficznej.
Pobłażliwe podpisy
Uważny czytelnik zwróci zapewne uwagę na to, że przecież właśnie tak działa podpis cyfrowy: gdy podpisana zawartość jest zmieniona, podpis się unieważnia, czyż nie? Otóż nie do końca. Podpis pliku PE EXE (oraz MSI) nie pokrywa bowiem całego pliku. Jest tak nie tylko dlatego, że podpis, będąc częścią MSI, nie może dotyczyć samego siebie (przed podpisywaniem wszak go tam nie było!). Podpis Authenticode jest rozpięty na większość zasobów pliku, jego sekcję danych i sekcję kodu, ale nie na wszystkie metadane.
Nie da się zatem dodać ani zmodyfikować kodu do podpisanego pliku bez jego "złamania". Ale da się do tego samego pliku nieco dopisać "między wierszami". A przynajmniej dało się, aż do załatania podatności CVE-2020-1464 (co dostarczono w najnowszym Windows 10 aktualizacją numer KB4566782). Instalator Google Chrome, jak możemy przeczytać w najnowszym raporcie Chromium Bugs, tagował pliki po ich podpisaniu. Robił to jednak na sekcjach niepokrytych podpisem, co miało sprawić, że nie staje się on nieważny.
Naprawa w toku
Niestety, okazało się, że do podpisanych plików dało się dopisać nieco za dużo. Możliwe było załadowanie pliku, którego podpis powinien był być unieważniony, ale Authenticode tego "nie zauważył". Dlatego Microsoft zdecydował się wprowadzić bardziej ścisłą weryfikacje podpisu. Teraz każda zmiana pliku po złożeniu podpisu unieważnia go. Ofiarą tej zmiany padł Google Chrome.
Błąd jest zgłoszony jako naruszenie bezpieczeństwa i dostępny tylko dla węższego grona inżynierów, ale zostanie naprawiony, oczywiście po stronie Google. SmartScreen zachowywał się zatem poprawnie, a podpis nie był sfałszowany. Blokada pliku nie miała też żadnego "spiskowego" wytłumaczenia, jakim byłoby zniechęcanie do instalowania Chrome celem promocji nowej wersji Edge.