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.

_sign2a

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.

 _sign1

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.

_sign4

A tak swoja droga, do szanownych programistów mam dwie uwagi:

  1. 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.
  2. 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 (8)

  1. Anonymous says:

    @mgrzeg: Nie znam… brzmi ciekawie, ale:

    1. chętnie usłyszałbym jak to działa… bo z opisu wcale nie brzmi jak grzeczna aplikacja.

    2. ostatnie zdanie na stronie dyskwalifikuje dla mnie ten produkt.

  2. Anonymous says:

    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.

  3. Dobry post, najwyższy czas rozwiać wątpliwości ZU związane ze sterwnikami. Jakby jeszcze tak wpoić, że UAC to nie jest zuo:)

  4. mgrzeg says:

    A znasz to:

    http://www.ngohq.com/home.php?page=dseo

    Nie uzywalem, ale wiele osob to poleca…

  5. potrzebujący says:

    nigdzie nie mogę znaleźć WinDKK do pobrania… czego certyfikat trzeba zrobić? Jakiego pliku??

  6. Pablo says:

    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?

  7. somo says:

    i pewnie teraz trzeba dodac CA który podpisywałeś do magazynu zaufanych certyfikatów CA i powinien być zaufany.

  8. mgrzeg says:

    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

Skip to main content