Podpisywanie sterowników

Podpisywanie sterowników

  • Comments 8
  • Likes

Czasem zdarzy się, że ktoś ma system w wersji x64. Jeżeli to serwer Windows 2008R2, to nie bardzo miał wybór, a jeżeli to inny system – prawdowpodobnie ktoś świadomie się na 64 bity zdecydował. I bardzo dobrze, obiema rękami popieram taką decyzję. Słyszy się jednak często (a w zasadzie, czyta na forach), że 64 bity to same kłopoty. Aplikacje jakoś dadzą sobie radę, ale będzie ogromny problem ze sterownikami. W praktyce ten problem wcale nie okazuje się taki wielki, co nie oznacza jednak, że nie istnieje. I staje taki odważny i głodny nowości użytkownik wersji x64 przed sytuacją: system x64, sterownik udało się znaleźć (Microsoft używa zwykle wdzięcznego przykładu sterownika do tostera) tyle, że wbudowane w systemy x64 mechanizmy nie pozwalają na użycie sterownika, który nie jest podpisany.

_sign2a

Typowa rada na wszelkich forach brzmi: wyłącz weryfikację podpisywania sterowników.

Chcąc taką radę szczerze skomentować, musiałbym ograniczyć siędo zdania "ta rada jest głupia". Tak jak głupią radą jest sugestia, żeby zrezygnować z zamykania drzwi od mieszkania, gdy mamy tylko dwa klucze a z wejścia potrzebują skorzystać trzy osoby. Nie rozwalajmy systemowych mechanizmów zabezpieczeń, tylko dlatego że sterownik nie spełnia ich wymagań. Nie rezygnujmy z systemu przepustek dlatego, że do firmy przyszedł nowy pracownik, który przepustki nie ma! Przecież w takiej sytuacji, w normalnym życiu pierwszym odruchem jest wystawienie przepustki dla nowego. A nie "równianie w dół". Jeżeli trzy osoby muszą skorzystać z drzwi – dorobimy trzeciej klucz. Normalne, naturalne i zwykle całkiem proste.

W systemach x64 nie jest wcale trudniej. Mamy kilkadziesiąt podpisanych cyfrowo sterowników i jeden, który podpisany nie jest. Skąd bierze się w takiej sytuacji chory pomysł, żeby wyłączyć kontrolę podpisów!? Nie prościej podpisać ten jeden sterownik i nadal cieszyć się bezpiecznym systemem?

Wbrew obiegowej opinii, podpisanie sterownika nie jest wcale trudne i może to zrobić każdy, a nie tylko jego twórca. Mając pobrany sterownik, wystarczy:

  • Utworzyć certyfikat. Na przykład narzędziem makecert z parametrami –r –pe –ss –n
  • Dodać certyfikat. Do root i do trustedpublisher. Certmgr z parametrami –add –s –r zrobi to idealnie.
  • Utworzyć plik *.cat dla sterownika. Można użyć do tego narzędzia Inf2cat. Jeżeli sterownik ma działać w systemie Windows 7, jako parametr trzeba podać /os:7_X64. Operacja ta może wymagać pooszukiwania z datą w pliku inf, ale inf2cat wyraźnie o tym napisze.
  • Podpisać plik *.cat. Tutaj najlepiej sprawdzi się signtool.exe w połączeniu z certyfikatem wygenerowanym na początku prac. Udane podpisanie sprawi, że we właściwościach pliku *.cat pojawi się dodatkowa zakładka z informacjami na temat podpisu.

 _sign1

Gotowe! Sterownik został podpisany cyfrowo i w tym momencie, jakakolwiek próba jego podmienienia zostanie natychmiast przez system wykryta i zasygnalizowana.
Wszystkie użyte narzędzia są w systemie albo w bezpłatnym pakiecie WinDDK. Nic tylko używać.

Oczywiście instalacja tak podpisanego sterownika przebiega bez żadnego problemu i po zainstalowaniu widać, że jest on podpisany.

_sign4

A tak swoją drogą, do szanownych programistów mam dwie uwagi:

  1. Powinniście nauczyć się używać UMDF, zamiast z każdym drobiazgiem pchać się do jądra systemu. Prościej, bezpieczniej, klienci będą szczęśliwsi a problem podpisywania przestanie być tak dotkliwy.
  2. Jeżeli już musicie do jądra, to podpisujcie swoje sterowniki, zamiast kazać robić to userom, albo sugerować im, że powinni wyłączyć kontrolę podpisów w całym systemie.

Autor: Grzegorz Tworek [MVP]

PS. Powyższy przepis powinien być nieco inny dla sterowników ustawionych na start w trybie boot (Start Type = 0) ale to tylko formalna uwaga, bo nie takich przypadków dotyczą troski typowego użytkownika.

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

  • 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.

  • A znasz to:

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

    Nie uzywalem, ale wiele osob to poleca...

  • @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.

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

  • 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?

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

  • 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

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment