Podpisywanie sterowników
Czasem zdarzy sie, ze ktos ma system w wersji x64. Jezeli to serwer Windows 2008R2, to nie bardzo mial wybór, a jezeli to inny system – prawdowpodobnie ktos swiadomie sie na 64 bity zdecydowal. I bardzo dobrze, obiema rekami popieram taka decyzje. Slyszy sie jednak czesto (a w zasadzie, czyta na forach), ze 64 bity to same klopoty. Aplikacje jakos dadza sobie rade, ale bedzie ogromny problem ze sterownikami. W praktyce ten problem wcale nie okazuje sie taki wielki, co nie oznacza jednak, ze nie istnieje. I staje taki odwazny i glodny nowosci uzytkownik wersji x64 przed sytuacja: system x64, sterownik udalo sie znalezc (Microsoft uzywa zwykle wdziecznego przykladu sterownika do tostera) tyle, ze wbudowane w systemy x64 mechanizmy nie pozwalaja na uzycie sterownika, który nie jest podpisany.
Typowa rada na wszelkich forach brzmi: wylacz weryfikacje podpisywania sterowników.
Chcac taka rade szczerze skomentowac, musialbym ograniczyc siedo zdania "ta rada jest glupia". Tak jak glupia rada jest sugestia, zeby zrezygnowac z zamykania drzwi od mieszkania, gdy mamy tylko dwa klucze a z wejscia potrzebuja skorzystac trzy osoby. Nie rozwalajmy systemowych mechanizmów zabezpieczen, tylko dlatego ze sterownik nie spelnia ich wymagan. Nie rezygnujmy z systemu przepustek dlatego, ze do firmy przyszedl nowy pracownik, który przepustki nie ma! Przeciez w takiej sytuacji, w normalnym zyciu pierwszym odruchem jest wystawienie przepustki dla nowego. A nie "równianie w dól". Jezeli trzy osoby musza skorzystac z drzwi – dorobimy trzeciej klucz. Normalne, naturalne i zwykle calkiem proste.
W systemach x64 nie jest wcale trudniej. Mamy kilkadziesiat podpisanych cyfrowo sterowników i jeden, który podpisany nie jest. Skad bierze sie w takiej sytuacji chory pomysl, zeby wylaczyc kontrole podpisów!? Nie prosciej podpisac ten jeden sterownik i nadal cieszyc sie bezpiecznym systemem?
Wbrew obiegowej opinii, podpisanie sterownika nie jest wcale trudne i moze to zrobic kazdy, a nie tylko jego twórca. Majac pobrany sterownik, wystarczy:
- Utworzyc certyfikat. Na przyklad narzedziem makecert z parametrami –r –pe –ss –n
- Dodac certyfikat. Do root i do trustedpublisher. Certmgr z parametrami –add –s –r zrobi to idealnie.
- Utworzyc plik *.cat dla sterownika. Mozna uzyc do tego narzedzia Inf2cat. Jezeli sterownik ma dzialac w systemie Windows 7, jako parametr trzeba podac /os:7_X64. Operacja ta moze wymagac pooszukiwania z data w pliku inf, ale inf2cat wyraznie o tym napisze.
- Podpisac plik *.cat. Tutaj najlepiej sprawdzi sie signtool.exe w polaczeniu z certyfikatem wygenerowanym na poczatku prac. Udane podpisanie sprawi, ze we wlasciwosciach pliku *.cat pojawi sie dodatkowa zakladka z informacjami na temat podpisu.
Gotowe! Sterownik zostal podpisany cyfrowo i w tym momencie, jakakolwiek próba jego podmienienia zostanie natychmiast przez system wykryta i zasygnalizowana.
Wszystkie uzyte narzedzia sa w systemie albo w bezplatnym pakiecie WinDDK. Nic tylko uzywac.
Oczywiscie instalacja tak podpisanego sterownika przebiega bez zadnego problemu i po zainstalowaniu widac, ze jest on podpisany.
A tak swoja droga, do szanownych programistów mam dwie uwagi:
- Powinniscie nauczyc sie uzywac UMDF, zamiast z kazdym drobiazgiem pchac sie do jadra systemu. Prosciej, bezpieczniej, klienci beda szczesliwsi a problem podpisywania przestanie byc tak dotkliwy.
- Jezeli juz musicie do jadra, to podpisujcie swoje sterowniki, zamiast kazac robic to userom, albo sugerowac im, ze powinni wylaczyc kontrole podpisów w calym systemie.
Autor: Grzegorz Tworek [MVP]
PS. Powyzszy przepis powinien byc nieco inny dla sterowników ustawionych na start w trybie boot (Start Type = 0) ale to tylko formalna uwaga, bo nie takich przypadków dotycza troski typowego uzytkownika.
Comments
- Anonymous
January 01, 2003
@mgrzeg: Nie znam... brzmi ciekawie, ale:
- chętnie usłyszałbym jak to działa... bo z opisu wcale nie brzmi jak grzeczna aplikacja.
- ostatnie zdanie na stronie dyskwalifikuje dla mnie ten produkt.
Anonymous
January 01, 2003
Nauczą się... I nawet nie chodzi mi o userów, tylko o programistów. Gdyby niektórzy programiści nie zatrzymali się w rozwoju na etapie Win95, zwykły user nawet nie widziałby, że ma UAC, nie mówiąc już o tym, że odczuwałby z tego powodu jakiś dyskomfort.Anonymous
April 22, 2010
Dobry post, najwyższy czas rozwiać wątpliwości ZU związane ze sterwnikami. Jakby jeszcze tak wpoić, że UAC to nie jest zuo:)Anonymous
April 22, 2010
A znasz to: http://www.ngohq.com/home.php?page=dseo Nie uzywalem, ale wiele osob to poleca...Anonymous
October 07, 2010
nigdzie nie mogę znaleźć WinDKK do pobrania... czego certyfikat trzeba zrobić? Jakiego pliku??Anonymous
September 19, 2011
Zrobiłem jak piszesz i niestety sterownik nie jest podpisany. Próbowałem na XP jak i WIN7 x64. W siódemce wyskakuje ze to podpisany sterownik ale nie można potwierdzić jego autentyczności czy zweryfikować - nie jest zaufany. I co teraz?Anonymous
December 14, 2011
i pewnie teraz trzeba dodac CA który podpisywałeś do magazynu zaufanych certyfikatów CA i powinien być zaufany.Anonymous
January 05, 2012
W tekście brak istotnej informacji - sterowniki podpisane testowo ładowane są przez system w trybie testsigining, który można włączyć korzystając z bcdedit: bcdedit /set TESTSIGNING ON Po włączeniu tego trybu, restarcie systemu i ponownym zalogowaniu, w prawym dolnym rogu pulpitu wyświetlać się będzie odpowiednia informacja