- Windows Απαιτεί έγκυρες ψηφιακές υπογραφές για τα περισσότερα προγράμματα οδήγησης 64-bit, ειδικά για τα προγράμματα οδήγησης λειτουργίας πυρήνα, για να διασφαλιστεί η ακεραιότητα και η ασφάλεια.
- Η υπογραφή μπορεί να εφαρμοστεί τόσο σε δυαδικά αρχεία όσο και σε καταλόγους, χρησιμοποιώντας εργαλεία όπως το SignTool ή το Visual Studio και πιστοποιητικά που εκδίδονται από αξιόπιστες οντότητες.
- Τα αυτουπογεγραμμένα πιστοποιητικά διευκολύνουν την ανάπτυξη και τον έλεγχο οδηγοί ανυπόγραφο Windows 78.1 και 10 x64, αλλά δεν αντικαθιστούν την εμπορική υπογραφή για δημόσια διανομή.
- Η συμβατότητα μεταξύ των εκδόσεων των Windows εξαρτάται από τη χρήση κατάλληλων αλγορίθμων κατακερματισμού (όπως SHA2) και την τήρηση των οδηγιών της Microsoft και της WHQL.
Η υπογραφή ενός προγράμματος οδήγησης στα Windows μπορεί να φαίνεται, με την πρώτη ματιά, σαν κάτι που μπορούν να κάνουν μόνο οι πολύ προηγμένοι προγραμματιστές, αλλά αν εργάζεστε με συσκευές, προσαρμοσμένα προγράμματα οδήγησης ή περιβάλλοντα δοκιμώνΑργά ή γρήγορα, θα αντιμετωπίσετε αυτήν την απαίτηση. Στα σύγχρονα συστήματα, ειδικά στα συστήματα 64-bit, τα Windows δεν εμπιστεύονται πλέον οποιοδήποτε δυαδικό αρχείο προσπαθεί να εισχωρήσει στον πυρήνα: θέλουν έγκυρες ψηφιακές υπογραφές, σύγχρονους αλγόριθμους όπως το SHA2 και, σε πολλές περιπτώσεις, πιστοποίηση μέσω της Microsoft.
Στις επόμενες γραμμές θα εξετάσουμε με ψυχραιμία τι ακριβώς σημαίνει να υπογράφεις έναν υπεύθυνο επεξεργασίας, ποιες διαφορές υπάρχουν μεταξύ λειτουργία πυρήνα και λειτουργία χρήστηΠώς επηρεάζει τα 64-bit Windows 7, 8, 8.1 και 10, ποιος είναι ο ρόλος εργαλείων όπως το SignTool ή το Visual Studio και ποιες επιλογές έχετε τόσο για περιβάλλοντα ανάπτυξης (δοκιμαστικά ή αυτο-υπογεγραμμένα πιστοποιητικά) όσο και για δημόσιες εκδόσεις με πιστοποιητικά που εκδίδονται από αξιόπιστη αρχή.
Τι είναι η υπογραφή προγραμμάτων οδήγησης στα Windows και γιατί είναι υποχρεωτική;
Η υπογραφή προγράμματος οδήγησης στα Windows περιλαμβάνει τη συσχέτιση ενός ψηφιακή υπογραφή σε ένα πακέτο προγραμμάτων οδήγησης (δυαδικά αρχεία, αρχεία INF, κατάλογος κ.λπ.) προκειμένου να διασφαλιστούν δύο πράγματα: ότι κανείς δεν έχει χειραγωγήσει τα αρχεία από τότε που δημιουργήθηκαν και ότι προέρχονται πραγματικά από τον υποδεικνυόμενο εκδότη (τον πάροχο λογισμικού ή τον κατασκευαστή του υλικού).
Στην πράξη, κατά την εγκατάσταση μιας συσκευής Windows, αυτές οι ψηφιακές υπογραφές χρησιμοποιούνται για να επαληθεύστε την ακεραιότητα της συσκευασίας και την ταυτότητα του εκδότη. Εάν κάτι δεν ταιριάζει (κατεστραμμένη υπογραφή, μη αξιόπιστο πιστοποιητικό, εσφαλμένο hash κ.λπ.), το σύστημα θα εμφανίσει προειδοποιήσεις, θα μπλοκάρει την εγκατάσταση ή απλώς θα αρνηθεί να φορτώσει το πρόγραμμα οδήγησης.
Από τα Windows Vista 64-bit και μετά, και ειδικά στα Windows 7, 8, 8.1 και 10 x64, η πολιτική ασφαλείας σε λειτουργία πυρήνα είναι σαφής: οποιοδήποτε πρόγραμμα οδήγησης που πρόκειται να εκτελεστεί στον πυρήνα Πρέπει να είναι σωστά υπογεγραμμένο.Διαφορετικά, το πρόγραμμα οδήγησης δεν θα φορτωθεί, η συσκευή ενδέχεται να μην λειτουργεί και ενδέχεται να εμφανιστούν μπλε οθόνες ακόμη και εάν αναγκαστεί να φορτώσει μη έγκυρα δυαδικά αρχεία.
Όταν αποφασίσετε να πιστοποιήσετε το πρόγραμμα οδήγησης σας με τη Microsoft, μπορείτε να το υποβάλετε στη διαδικασία επικύρωσης των Εργαστηρίων Ποιότητας Υλικού των Windows (WHQL). Εάν το πακέτο προγράμματος οδήγησης περάσει με επιτυχία τις δοκιμές πιστοποίησης, η Microsoft χορηγεί την πιστοποίησή του. επίσημη υπογραφή WHQLΑυτό όχι μόνο βελτιώνει την αξιοπιστία και τη συμβατότητα, αλλά σας επιτρέπει επίσης να διανείμετε το πρόγραμμα οδήγησης μέσω Το windows Update και άλλα κανάλια διανομής που υποστηρίζονται από τη Microsoft.
Είναι σημαντικό να έχετε κατά νου ότι ξεκινώντας από την έκδοση 1507 των Windows 10, όλα τα προγράμματα οδήγησης που έχουν υπογραφεί μέσω του Κέντρου Ανάπτυξης Υλικού της Microsoft υπογράφονται χρησιμοποιώντας SHA2 ως αλγόριθμος κατακερματισμούΤο SHA1 έχει καταστεί παρωχημένο για αυτά τα σενάρια και η ανάμειξη παλιών πιστοποιητικών μπορεί να προκαλέσει προβλήματα, ειδικά σε νεότερα συστήματα.

Διαφορές μεταξύ της υπογραφής προγράμματος οδήγησης σε λειτουργία πυρήνα και λειτουργίας χρήστη
Τα Windows υποστηρίζουν προγράμματα οδήγησης που εκτελούνται σε λειτουργία πυρήνα και λειτουργία χρήστηΗ πολιτική υπογραφής δεν είναι ακριβώς η ίδια και στα δύο περιβάλλοντα, αν και τείνει να γίνεται αυστηρότερη με κάθε νέα έκδοση του λειτουργικού συστήματος.
Τα προγράμματα οδήγησης λειτουργίας πυρήνα είναι τα πιο ευαίσθητα επειδή εκτελούνται στον πυρήνα του συστήματος και έχουν προνομιακή πρόσβαση στη μνήμη και το υλικό. Σε εκδόσεις 64-bit των Windows Vista και νεότερες, αυτά τα προγράμματα οδήγησης Απαιτείται να υπογραφούν για να χρεωθείτε. Αυτός ο περιορισμός σχετίζεται άμεσα με τη σταθερότητα του συστήματος και την προστασία από malware ότι προσπαθεί να κάνει ένεση σε χαμηλό επίπεδο.
Από την άλλη πλευρά, τα προγράμματα οδήγησης που λειτουργούν σε λειτουργία χρήστη (για παράδειγμα, πολλά προγράμματα οδήγησης εκτυπωτή και πρόσθετα στοιχεία) δεν υπόκεινταν αρχικά σε τόσο αυστηρή υποχρέωση. Μάλιστα, σε παλαιότερες εκδόσεις των Windows Δεν ήταν απόλυτη απαίτηση ότι αυτά τα προγράμματα οδήγησης είναι υπογεγραμμένα. Ωστόσο, η Microsoft συνιστούσε πάντα την υπογραφή τους για λόγους ασφαλείας και από τα Windows 8 υπάρχουν σενάρια στα οποία απαιτείται υπογραφή για ορισμένους τύπους προγραμμάτων οδήγησης χρήστη.
Ένα τυπικό παράδειγμα: ένα πρόγραμμα οδήγησης εκτυπωτή που είναι εγκατεστημένο σε έναν υπολογιστή x64 συνήθως εμφανίζει ένα παράθυρο διαλόγου κατά τη διάρκεια της διαδικασίας εγκατάστασης που ζητά επιβεβαίωση από τον χρήστη. Στην πράξη, αυτό το πακέτο Πρέπει να είναι σωστά υπογεγραμμένο ώστε η εγκατάσταση να μπορεί να συνεχιστεί χωρίς μπλοκαρίσματα ή κρίσιμες ειδοποιήσεις ασφαλείας.
Η γενική ιδέα είναι ότι, αν και η απαίτηση δεν είναι καθολική στη λειτουργία χρήστη, η Microsoft πιέζει όλο και περισσότερο για να όλο το λογισμικό που σχετίζεται με το πρόγραμμα οδήγησης πρέπει να είναι υπογεγραμμένοΗ υπογραφή τους επιτρέπει την αξιόπιστη επαλήθευση του ποιος τα δημιούργησε, την ανίχνευση παραβίασης και τη μείωση του κινδύνου εισχώρησης κακόβουλων στοιχείων που μεταμφιέζονται σε νόμιμους ελεγκτές.
Απαιτήσεις υπογραφής και αλγόριθμοι SHA σε διαφορετικές εκδόσεις των Windows
Μία από τις πιο προβληματικές πτυχές είναι η συμβατότητα μεταξύ των εκδόσεων των Windows και των αλγορίθμων κατακερματισμού, όπως π.χ. SHA1 και SHA2Πολλοί προγραμματιστές συναντούν προγράμματα οδήγησης που λειτουργούν σε ένα σύστημα αλλά όχι σε ένα άλλο, και μεγάλο μέρος της ευθύνης οφείλεται στις αλλαγές στις πολιτικές υπογραφής.
Σε παλαιότερα συστήματα, όπως τα 64-bit Windows 7 ή 8, ήταν σύνηθες να εργάζεστε με πιστοποιητικά και υπογραφές που βασίζονται στο SHA1, αν και η Microsoft είχε ήδη προειδοποιήσει ότι Το SHA1 δεν είχε επαρκή ασφάλεια.Καθώς έχει σημειωθεί πρόοδος προς τα Windows 8.1 και 10, το SHA2 έχει γίνει το πρότυπο για υπογραφές κώδικα και προγραμμάτων οδήγησης.
Στην πράξη, ορισμένοι κατασκευαστές επέλεξαν να υπογράψουν δυαδικά αρχεία λειτουργίας πυρήνα ενσωματώνοντας διπλά πιστοποιητικά (SHA1 και SHA2) που εκδίδονται από οντότητες εκτός της Microsoft. Αυτά τα δυαδικά αρχεία διπλής υπογραφής, σε ορισμένες περιπτώσεις, Αποτυγχάνουν να φορτώσουν σε εκδόσεις πριν από τα Windows 10και σε ορισμένα συστήματα Windows 10 μπορούν ακόμη και να προκαλέσουν σοβαρά σφάλματα ή μπλε οθόνες.
Για να μετριάσει αυτά τα προβλήματα, η Microsoft κυκλοφόρησε συγκεκριμένες ενημερώσεις κώδικα, όπως την ενημέρωση KB 3081436. Η εγκατάσταση αυτής της ενημέρωσης σε επηρεαζόμενα συστήματα διορθώνει τις ασυμβατότητες με ορισμένα προγράμματα οδήγησης με υπογραφή SHA2 και παρέχει μια λίστα με τιμές κατακερματισμού SHA αναφοράς στην ενότητα "Περισσότερες πληροφορίες – Πληροφορίες κατακερματισμού αρχείου" αυτού του άρθρου υποστήριξης.
Εάν πρόκειται να διανείμετε προγράμματα οδήγησης που πρέπει να λειτουργούν σε πολλές εκδόσεις των Windows, είναι σημαντικό να ελέγξετε το απαιτήσεις υπογραφής ανά έκδοση λεπτομερώς από τη Microsoft. Εκεί καθορίζεται ποιοι αλγόριθμοι είναι έγκυροι, πώς αντιμετωπίζεται η συμβατότητα με παλαιότερες εκδόσεις και ποιοι συνδυασμοί υπογραφών (κατάλογος, ενσωματωμένο δυαδικό αρχείο, διασταυρούμενα πιστοποιητικά κ.λπ.) είναι επίσημα αποδεκτοί.
Υπογραφή προγράμματος οδήγησης λειτουργίας χρήστη: συστάσεις και πόροι
Αν και ο πυρήνας συχνά τραβάει την περισσότερη προσοχή, η υπογραφή προγραμμάτων οδήγησης σε λειτουργία χρήστη αξίζει επίσης προσοχή. Η Microsoft δεν την επέβαλε τόσο αυστηρά από την αρχή, αλλά το έκανε... συνιστά θερμά τη διατήρηση της ασφάλειας του συστήματος και να προσφέρουν εμπιστοσύνη στον τελικό χρήστη.
Η υπογραφή ενός προγράμματος οδήγησης λειτουργίας χρήστη ουσιαστικά εκτελεί τις ίδιες λειτουργίες όπως και στη λειτουργία πυρήνα: προσδιορίζει τον πάροχο ελεγκτή (κατασκευαστής, ISV, κ.λπ.) και επιβεβαιώνει ότι το πακέτο δεν έχει τροποποιηθεί από την υπογραφή του. Όταν ένας χρήστης εγκαθιστά, για παράδειγμα, έναν εκτυπωτή με προγράμματα οδήγησης λειτουργίας χρήστη σε έναν υπολογιστή x64, ο οδηγός εγκατάστασης ενδέχεται να εμφανίσει ένα παράθυρο διαλόγου που θα ρωτά εάν ο εκδότης είναι αξιόπιστος. Εάν η υπογραφή είναι έγκυρη και το πιστοποιητικό ανήκει σε μια αναγνωρισμένη οντότητα, η εγκατάσταση είναι πιο ομαλή και με πολύ λιγότερες προειδοποιήσεις.
Η Microsoft παρέχει μια σειρά από έγγραφα και εκπαιδευτικά βίντεο που εμβαθύνουν στη διαδικασία υπογραφής, πολλά από τα οποία σχεδιάστηκαν αρχικά για λειτουργία πυρήνα, αλλά εφαρμόσιμα και σε λειτουργία χρήστη. Το κύριο άρθρο αφορά υπογραφή οδηγού και το υποθέμα "Πώς να υπογράψετε μια έκδοση μιας ενότητας πυρήνα" στο σεμινάριο υπογραφής κώδικα σε λειτουργία πυρήνα είναι καλά σημεία εκκίνησης για την κατανόηση της γενικής λογικής της υπογραφής κώδικα στα Windows.
Επιπλέον, η εγκατάσταση του Windows Driver Kit (WDK) περιλαμβάνει ένα αρχείο βοήθειας που ονομάζεται selfsign_readme.htm, που βρίσκεται στον κατάλογο αυτο-υπογραφήΑυτό το έγγραφο εξηγεί τον τρόπο δημιουργίας πιστοποιητικών δοκιμών και τον τρόπο χρήσης τους κατά την ανάπτυξη, κάτι που είναι ιδιαίτερα χρήσιμο όταν δεν έχετε ακόμη εκδώσει πιστοποιητικό από μια αξιόπιστη αρχή ρίζας.
Συνοψίζοντας, παρόλο που ένα πρόγραμμα οδήγησης λειτουργίας χρήστη μπορεί τεχνικά να λειτουργήσει χωρίς υπογραφή σε ορισμένα σενάρια, θα πρέπει να αντιμετωπίζεται σαν να ήταν υποχρεωτικό. Αυτό οφείλεται στην ασφάλεια, την εικόνα της επωνυμίας και τη συμβατότητα με τους οδηγούς εγκατάστασης των Windows. Η υπογραφή του οδηγού είναι η πιο λογική κίνηση που μπορείτε να κάνετε..
Υπογραφή προγραμμάτων οδήγησης λειτουργίας πυρήνα στα Windows 7 και 8 χρησιμοποιώντας το SignTool
Όταν εργάζεστε με Windows 7 και 8 64-bit, μία από τις πιο συνηθισμένες προσεγγίσεις για την υπογραφή προγραμμάτων οδήγησης λειτουργίας πυρήνα είναι η χρήση του εργαλείου γραμμής εντολών. εντολές SignToolΑυτό το βοηθητικό πρόγραμμα, που περιλαμβάνεται στο SDK των Windows, σάς επιτρέπει να υπογράφετε αρχεία και να επαληθεύετε υπάρχουσες υπογραφές, και προσφέρει ένα ευρύ φάσμα επιλογών που ταιριάζουν σε διαφορετικά σενάρια.
Μερικές από τις πιο σημαντικές επιλογές Τα χαρακτηριστικά του SignTool είναι τα εξής:
- /ac: καθορίζει ένα πρόσθετο πιστοποιητικό, για παράδειγμα, ένα διασταυρούμενο πιστοποιητικό που συνδέει το πιστοποιητικό σας με μια αξιόπιστη αρχή ρίζας.
- /f: υποδεικνύει το αρχείο που περιέχει το πιστοποιητικό υπογραφής (συνήθως ένα .pfx).
- /p: παρέχει τον κωδικό πρόσβασης που σχετίζεται με το πιστοποιητικό υπογραφής που είναι αποθηκευμένο στο αρχείο .pfx.
- /fd: ορίζει τον αλγόριθμο κατακερματισμού που χρησιμοποιείται κατά τη δημιουργία της υπογραφής αρχείου, για παράδειγμα, /fd sha256 για να δημιουργήσετε μια υπογραφή με βάση το SHA256 (αν δεν έχει καθοριστεί τίποτα, το SHA1 είναι συνήθως η προεπιλεγμένη τιμή σε παλαιότερες εκδόσεις).
- /n «Κοινό όνομα του πιστοποιητικού»: σας επιτρέπει να επιλέξετε ένα συγκεκριμένο πιστοποιητικό από το χώρο αποθήκευσης πιστοποιητικών των Windows με βάση το κοινό του όνομα (CN).
- /t: καθορίζει έναν διακομιστή χρονικής σήμανσης συμβατό με το σχήμα Microsoft Authenticode.
- /tr: υποδεικνύει έναν διακομιστή χρονικής σήμανσης συμβατό με το RFC 3161, πιο σύγχρονο και συνιστώμενο για νέες υλοποιήσεις.
Όταν εργάζεστε στο έργο του προγράμματος οδήγησης, είναι σημαντικό να γνωρίζετε ποια αρχεία πρέπει να υπογραφούν. Για να εγκατασταθεί σωστά ένα πρόγραμμα οδήγησης στα Windows 7 ή 8, πρέπει να είναι υπογεγραμμένο. όλα τα σχετικά δυαδικά αρχεία του έργου (για παράδειγμα, αρχεία .sys) και επίσης το αρχείο καταλόγου (.cat) που ομαδοποιεί το σύνολο των αρχείων στο πακέτο.
Έχετε δύο κύριες επιλογές: μπορείτε να αντιγράψετε αυτά τα αρχεία σε έναν κατάλογο εργασίας όπου έχετε διαθέσιμο το SignTool ή απευθείας μετακινήστε τα στον φάκελο bin του SDK των Windows και εκτελέστε το εργαλείο από εκεί. Το σημαντικό είναι να έχετε πρόχειρα και τα δυαδικά αρχεία και τα πιστοποιητικά που θα χρησιμοποιήσετε για την υπογραφή.
Ένα τυπικό σενάριο περιλαμβάνει την απόκτηση του κατάλληλου πιστοποιητικού υπογραφής κώδικα, για παράδειγμα, ενός Πιστοποιητικό «Πιστοποιητικού Microsoft Cross» που εκδίδεται από την GlobalSign ή άλλη αξιόπιστη αρχή. Τοποθετείτε αυτό το διασταυρούμενο πιστοποιητικό (CrossCert.crt) στον κατάλογο εργασίας σας μαζί με το κύριο πιστοποιητικό υπογραφής κώδικα (για παράδειγμα, CodeSign.pfx) και εκτελείτε μια εντολή παρόμοια με αυτήν:
εργαλείο υπογραφής signtool /ac CrossCert.crt /f CodeSign.pfx /p password1234 /tr http://timestamp.globalsign.com/tsa/r6advanced1 filter.sys
Αυτή η εντολή δημιουργεί μια υπογραφή που περιλαμβάνει την διασταυρούμενη πιστοποίηση και λαμβάνει μια χρονική σήμανση από τον διακομιστή RFC 3161 της GlobalSign. Η χρονική σήμανση είναι καθοριστική επειδή αποδεικνύει ότι το αρχείο υπογράφηκε σε ημερομηνία κατά την οποία το πιστοποιητικό ήταν έγκυρο, ακόμη και αν λήξει αργότερα.
Αφού υπογράψετε το αρχείο, είναι ώρα να επαληθεύσετε ότι όλα είναι σωστά. Αυτό γίνεται συνήθως χρησιμοποιώντας μια εντολή επαλήθευσης όπως:
signtool verify -v -kp filename.sys
η επιλογή -v Επιβάλλει μια λεπτομερή έξοδο, εμφανίζοντας λεπτομερείς πληροφορίες σχετικά με την αλυσίδα πιστοποιητικών και την επιλογή -kp Επαληθεύει την υπογραφή σύμφωνα με τα συγκεκριμένα κριτήρια υπογραφής κώδικα του προγράμματος οδήγησης λειτουργίας πυρήνα. Εάν όλα πάνε καλά, θα δείτε ένα αποτέλεσμα που υποδεικνύει ότι η υπογραφή και η αλυσίδα πιστοποιητικών είναι σωστά.
Τέλος, συνιστάται Επαναλάβετε την ίδια διαδικασία υπογραφής και επαλήθευσης με το αρχείο .cat του πακέτου. Μόλις υπογραφούν σωστά τόσο τα δυαδικά αρχεία όσο και ο κατάλογος, το πρόγραμμα οδήγησης μπορεί να εγκατασταθεί στα Windows 7 και 8 x64 χωρίς προβλήματα ασφαλείας και, κατά τη διάρκεια του οδηγού εγκατάστασης, θα πρέπει να εμφανιστούν οι πληροφορίες του αξιόπιστου εκδότη και τα τυπικά παράθυρα του συστήματος.
Για να εμβαθύνει σε όλες τις παραλλαγές του εργαλείου, η Microsoft διατηρεί μια ολοκληρωμένη αναφορά εντολών SignTool, καθώς και ένα Συγκεκριμένο σεμινάριο για την υπογραφή κώδικα σε λειτουργία πυρήνα και τεκμηρίωση αφιερωμένη στις ψηφιακές υπογραφές των μονάδων πυρήνα στα Windows. Αυτοί οι πόροι εξηγούν ειδικές περιπτώσεις, προηγμένες παραμέτρους και ιδιαιτερότητες κάθε έκδοσης συστήματος.
Παθιασμένος συγγραφέας για τον κόσμο των byte και της τεχνολογίας γενικότερα. Μου αρέσει να μοιράζομαι τις γνώσεις μου μέσω της γραφής, και αυτό θα κάνω σε αυτό το blog, θα σας δείξω όλα τα πιο ενδιαφέροντα πράγματα σχετικά με τα gadget, το λογισμικό, το υλικό, τις τεχνολογικές τάσεις και πολλά άλλα. Στόχος μου είναι να σας βοηθήσω να περιηγηθείτε στον ψηφιακό κόσμο με απλό και διασκεδαστικό τρόπο.