Jak aktualizować sterowniki w (teoretycznie) bezpieczny sposób?
Powiedzmy to wprost. Szybka odpowiedź na pytanie "jak poprawnie aktualizować sterowniki?" brzmi "nie da się". Jest kilka sposobów, z czego większość jest błędna. Najbardziej oczywistą, a zarazem najmniej wydajną metodą jest wizyta na stronie internetowej producenta i ręczne pobranie paczki z instalatorem sterownika. Wadą tego podejścia jest oczywiście długotrwałość procesu. Ponadto, dostawcy sterowników w paczce EXE ze sterownikiem często serwują tonę dodatkowego śmiecia i nie dla każdego jest oczywiste, co jest "rozbudowanym sterownikiem" i aplikacją pomocniczą, a co jakąś zbędną aplikacją do wyświetlania obok zegarka ikony pełnej zbędnych skrótów do zbędnych czynności.
10.05.2020 00:50
Nie każdy opanował piwniczną umiejętność ekstrahowania z pakietów instalacyjnych wyłącznie potrzebnych plików, nie z każdym instalatorem jest to możliwe i nie wszyscy producenci dostarczają paczki "mini" (DPInst), zawierające tylko to, co trzeba. Potrzebny jest zatem plan B. Ponieważ nie można z czystym sumieniem polecić instalatorów oferowanych przez producentów (Lenovo Vantage, HP Support Assistant itd), bo one same są ciężkie i zawierają błędy, należy udać się w inne miejsce i jest nim Windows Update.
Mityczny "Single Point of Trust"
Już od ponad dwudziestu lat, Windows Update przechowuje poza aktualizacjami także sterowniki. Obecne w Katalogu Microsoft Update sterowniki pochodzą z programu certyfikacji WHQL i stanowią nie tyle "najnowszą dostępną" ale "najnowszą certyfikowaną przez OEMów" wersję oprogramowania dla danego sprzętu. Rozwój roli Windows Update w kwestii obsługi sprzętu był obraźliwie powolny, bo choć zadebiutowała już w systemie Windows 98, to przez wiele lat pożytek z niej był dość mizerny. Ostatnia dekada, szczególnie w czasach wzrostu popularności Windows 7, dokonała znaczącej zmiany tej tendencji, a nowe urządzenia z Windows 10 aktualizują przez WU nawet firmware chipsetów i UEFI.
Niestety, Windows bardzo rzadko bywa w pełni racjonalny. Podobnie jest i tym razem: nie wszystkie sterowniki są pobierane automatycznie. Na szczęście w większości przypadków, Windows Update pobiera zaktualizowane sterowniki (jeżeli sprzęt przeszedł w ogóle WHQL) gdy w systemie brakuje sterownika w ogóle lub gdy oznaczono obecną wersję jako niebezpieczną. Zakres scenariuszy, w których Aktualizacje Automatyczne jednak proszą Katalog o nową wersje sterownika wydaje się rosnąć, ale wciąż znajdujemy się na etapie, gdy mimo komunikatu "System jest aktualny", losowe kliknięcie w Menedżerze Urządzeń na "Zaktualizuj sterownik" pobierze coś nowego z internetu. Dlaczego? Trudno o jednoznaczną odpowiedź.
Przeklęte działy pobierania
Dlatego wariantem nieco mniej męczącym, niż wędrówka po stronie producenta, jest wyprawa do Menedżera Urządzeń i przeklikanie "Zaktualizuj sterownik". Ma to jedną, niezaprzeczalną zaletę: ta metoda dostarcza certyfikowane sterowniki dla instalatorów i sprzedawców. Powinny być najstabilniejsze. Ma jednak szereg wad. Mniej popularny sprzęt nie otrzyma aktualizacji tą drogą, a oferowane sterowniki rzadko bywają najnowsze i nie zawsze rozwiązują wszystkie problemy z zabezpieczeniami (tylko te najpoważniejsze). No i podobnie, jak przeprawa przez witrynę producenta, jest to ręczna robota.
Gdy producenci, celem rozwiązania tego problemu, oferują Menedżery Pobierania, system operacyjny dostarcza Windows Update. Oba te narzędzia są na swój sposób upośledzone. Menedżery - każdy na swój sposób, natomiast Windows Update musi być zmuszane do tego, gdy zaserwować użytkownikowi komplet opcji. Na Menedżery nie ma rady, ale czy da się coś zrobić z Windows Update? Tak. Programistycznie.
API Windows Update
Funkcjonalność Windows Update jest wyprowadzona do środowiska COM, więc można ją odpytać. Środowisko PowerShell umożliwia stworzenie prostego obiektu zawierającego metody odpytujące Katalog o brakujące w systemie sterowniki. Za pomocą skryptu:
$ss = New-Object -ComObject Microsoft.Update.Session
$sc = $ss.CreateUpdateSearcher()
$sc.ServiceID = "7971f918-a847-4430-9279-4a52d1efe18d"
$sc.SearchScope = 1
$sc.ServerSelection = 3
$sr = $sc.Search("IsInstalled=0 and Type='Driver' and ISHidden=0")
$sr.Updates
...zidentyfikujemy i pobierzemy sterowniki dostępne w Windows Update dla naszego sprzętu. Nie jest to bezpośrednia reimplementacja zachowania Menedżera Urządzeń, który korzysta z nieudokumentowanych wywołań RUNDLL32 i MMC, ale efektycznie powinno prowadzić do tego samego. Niestety, Windows Update nie pozwala definiować dodatkowych repozytoriów ze sterownikami. Jeżeli czegoś nie ma na Windows Update, musimy to upolować sami.
Niniejszą słabość próbują nierzadko pokonać same sterowniki, dorzucając do systemu własne narzędzia aktualizacji. Oprogramowanie wideo od Intela i NVidii (a także... niektóre drukarki i skanery HP) dorzucają do systemu własne aktualizatory, nierzadko pracujące z wysokimi uprawnieniami. Dbając o bezpieczeństwo (wszak dostarczają aktualizacje!), eksponują tak naprawdę nową powierzchnię ataku. Miewają bowiem te same problemy, co ich instalatory, o których mówiliśmy poprzednim razem.
Narzędzia "second party"
Znalezienie optymalnej ścieżki zapewniającej wysokie bezpieczeństwo jest trudne. W idealnym świecie istniałby pojedynczy dostawca zaufanych sterowników, pozwalający zawsze otrzymać najnowszą ich wersję bez dodatkowych narzędzi. Tym dostawcą powinien być, i nigdy w pełni nim nie będzie, Windows Update. Zamiast tego, żyjemy w rzeczywistości, gdzie system aktualizuje tylko kilka sterowników, pozostałe wymagają ręcznego polowania lub polegania na (także niebezpiecznych) menedżerach i aktualizatorach. Istnieją nakładki na Windows Update dodające mu sensu w kwestii sterowników, acz ludzie zazwyczaj i tak korzystają z magazynów sterowników utrzymywanych przez strony trzecie. Trudno z odpowiedzialnością stwierdzić, że można im bezgranicznie ufać.
W dodatku, dzisiejszy sprzęt jest obarczony "terminem przydatności do spożycia". Starsze urządzenia, które są na tyle nowoczesne, że zawierają rozbudowany i potencjalnie niebezpieczny firmware z czasem wypadają ze wsparcia producenta. Gdyby chodziło o system, można by go zmienić na inny. Ale co w przypadku dziesiątek tysięcy komputerów z dziurawym sprzętem, dla którego nikt już nie wyda poprawki? Nikt – czyli producent, bowiem oprogramowanie układowe jest niewolne, więc nie ma szans liczyć na powstanie alternatyw.