Skip to content

חתימת קובצי EXE ו־DLL עם SignTool: תעודה, חותמת זמן ואימות

פרסום המקור: . עדכון המקור: . תרגום ובדיקה: .

חתימת קוד מאפשרת לבדוק מי חתום על קובץ, ואם התוכן המוגן בחתימה השתנה, בכפוף למדיניות האמון של המערכת. היא אינה מוכיחה שהתוכנה בטוחה ואינה מבטיחה שלא יופיעו אזהרות SmartScreen: מנגנון זה בודק גם מידע על קבצים ועל המוניטין שלהם. ראו את הסבר Microsoft על SmartScreen.

המדריך עוסק בחתימת Authenticode של Windows באמצעות signtool.exe, עבור קובצי הרצה וספריות כגון .exe ו־.dll. ההנחה היא שאתם מורשים לחתום על הקבצים ומשתמשים בתשתית חתימה שכבר אושרה אצלכם.

איור מהמקור: קובצי EXE, DLL ו־MSI עם סימון חתימה, מגן ושורת פקודת SignTool כללית.
האיור המקורי, באנגלית, מציג חתימת קוד, חותמת זמן, קובץ תעודה ומאגר תעודות. שורת הפקודה באיור היא המחשה כללית, לא הוראה להעתקה: בדוגמאות המעודכנות להלן בוחרים תעודה מפורשת וקבצים שנבדקו, ולא חותמים אוטומטית על כל קובץ בתיקייה.

1. מה צריך לפני החתימה?

  • תעודה מתאימה לחתימת קוד, יחד עם גישה מורשית למפתח הפרטי שלה דרך ספק המפתחות שהוגדר. תעודה ציבורית לבדה אינה מאפשרת לחתום.
  • הכלי signtool.exe, שמגיע עם ערכת הפיתוח של Windows, ‏Windows SDK, בסביבת עבודה מאושרת.
  • רשימה מוגדרת של הקבצים שברצונכם להפיץ ולחתום, למשל .exe, ‏.dll או .msi, לאחר בדיקתם.

בתעודות חתימת קוד חדשות שמיועדות לאמון ציבורי, המפתח הפרטי מוגן כיום בדרך כלל בחומרה, כגון התקן חתימה או מודול אבטחה חומרתי (HSM). לא נכון להניח שכל תהליך הנפקה מספק קובץ PFX להורדה. בדקו את דרישות המנפיק ואת ספק המפתחות שאושר בארגון; תיעוד DigiCert מסביר את דרישות האחסון שהוחלו מ־2023. אין כאן בקשה לרכוש תעודה או שירות חדש.

2. פקודת חתימה בסיסית

בדוגמה בוחרים תעודה מתוך המאגר האישי של המשתמש, עם מפתח נגיש דרך הספק המתאים. החליפו את CERTIFICATE_THUMBPRINT בטביעת האצבע של התעודה שאימתם מראש, ואת שם הקובץ בקובץ המאושר שלכם. הפקודה מוצגת בשורה אחת:

signtool.exe sign /sha1 "CERTIFICATE_THUMBPRINT" /fd SHA256 /tr http://timestamp.sectigo.com /td SHA256 filename.dll
  • /sha1 בוחר תעודה לפי טביעת האצבע שלה. למרות שם האפשרות, זה אינו האלגוריתם שמשמש לחתימת הקובץ.
  • /fd SHA256 בוחר את אלגוריתם הגיבוב של הקובץ.
  • /tr מציין שרת חותמת זמן בפרוטוקול RFC 3161; ‏/td SHA256 בוחר את אלגוריתם הגיבוב המבוקש לחותמת הזמן.
  • האפשרות המקורית /n בוחרת לפי שם נושא התעודה, ויכולה להתאים גם לחלק מהשם. לכן היא עלולה להיות עמומה כשכמה תעודות מתאימות. כאן נבחרה טביעת אצבע מפורשת במקום שם חלקי.

אפשרויות הבחירה והחתימה מתועדות בתיעוד SignTool של Microsoft. בדקו מראש גם את המאגר, את זהות התעודה ואת הרשאתכם להשתמש במפתח; שם או טביעת אצבע אינם מעניקים הרשאה.

3. חותמת זמן עם SHA-256

להלן אותה גישה עבור קובץ הרצה:

signtool.exe sign /sha1 "CERTIFICATE_THUMBPRINT" /fd SHA256 /tr http://timestamp.sectigo.com /td SHA256 filename.exe

חשוב להבחין בין שתי אפשרויות: /t משמשת לחותמת הזמן הוותיקה של Authenticode; ‏/tr משמשת ל־RFC 3161. אין להשתמש בשתיהן יחד. ההבחנה הזו מתקנת טעות במאמר המקורי.

חותמת זמן מהימנה יכולה לאפשר אימות חתימה גם לאחר פקיעת תוקף תעודת החותם, בכפוף לאמון, לביטול תעודות ולמדיניות האימות. היא אינה מאריכה את תוקף התעודה ואינה מבטיחה שהחתימה תתקבל לנצח. ראו את תיעוד חותמות הזמן של Microsoft.

4. כשהתעודה נמצאת בקובץ PFX

בתרחישים מתאימים של תשתית אמון פרטית או מערכות ותיקות, תעודה ומפתח עשויים להיות זמינים בקובץ .pfx. ב־SignTool, האפשרות /f מציינת קובץ כזה, ו־/p מציינת סיסמה לפתיחתו.

תיקון אבטחה: דוגמת המקור כללה סיסמה בתוך פקודת החתימה. היא אינה מובאת כאן כדוגמה להעתקה, משום שארגומנטים עלולים להיחשף בהיסטוריית פקודות, בלוגים ובכלי ניטור. אין להוציא מפתח מוגן מחומרה כדי להתאים אותו לדוגמת PFX.

לכן הדוגמה המעשית נשארת במסלול המאגר והספק המאושרים, אחרי שהוגדרו לפי נהלי הארגון:

signtool.exe sign /sha1 "CERTIFICATE_THUMBPRINT" /fd SHA256 /tr http://timestamp.sectigo.com /td SHA256 filename.exe

אם תהליך קיים מחייב קובץ PFX, נדרש מנגנון ייעודי ומאושר להגנת הקובץ והסוד. עצם שמירת הסיסמה במנהל סודות אינה מספיקה אם לאחר מכן היא מודפסת ללוג או מועברת באופן גלוי בשורת הפקודה.

5. חתימה על כמה קבצים

העדיפו רשימה מפורשת של תוצרי בנייה שבדקתם:

signtool.exe sign /sha1 "CERTIFICATE_THUMBPRINT" /fd SHA256 /tr http://timestamp.sectigo.com /td SHA256 app.exe helper.dll

החליפו את שמות הדוגמה בשמות הקבצים המאושרים. תווי הכללה כגון *.exe ו־*.dll, שהופיעו במקור ובאיור, מתאימים רק לתיקיית תוצרי בנייה מבוקרת שכל תוכנה בה נבדקה לחתימה. אל תשתמשו בהם מתוך תיקיית עבודה כללית.

6. אימות החתימה

אחרי חתימה מורשית, בדקו את התוצאה בהתאם למדיניות האימות המתאימה:

signtool.exe verify /pa /v filename.exe

/pa בוחר את מדיניות האימות הרגילה של Authenticode, ו־/v מוסיף פירוט. אם הבדיקה מצליחה, עשויה להופיע הודעה כגון Successfully verified: filename.exe — כלומר, הקובץ אומת בהצלחה בבדיקה הזו. זהו פלט צפוי לדוגמה, לא תוצאה שנצפתה במסגרת הכנת המאמר. בדקו גם אזהרות ושגיאות, ובפרט את מצב חותמת הזמן.

7. דוגמאות לשרתי חותמת זמן

אלה הכתובות שהופיעו במקור. הרשימה נשמרת לצורך ההקשר ההיסטורי, ללא המלצה על ספק וללא טענה שכולן זמינות או נבדקו כעת:

  • Sectigo: ‏http://timestamp.sectigo.com — הכתובת שמופיעה גם בתיעוד הספק ושמשמשת בדוגמאות לעיל.
  • DigiCert: ‏http://timestamp.digicert.com.
  • Comodo, כתובת ותיקה: http://timestamp.comodoca.com/authenticode.

לפני שימוש, בחרו את הכתובת והפרוטוקול הנתמכים לפי תיעוד מנפיק התעודה ותשתית החתימה שלכם. אל תחליפו פרוטוקול או תוסיפו כתובת ישנה רק מפני שהיא מופיעה במדריך.

8. סיכום ושילוב בתהליך הבנייה

הקפידו על תעודה מתאימה, גישה מורשית למפתח מוגן, בחירה מדויקת של הקבצים, גיבוב SHA-256 וחותמת זמן מתאימה. חתימה היא שלב בתהליך הפצה מבוקר, לא תחליף לבדיקת התוכנה.

בתהליכי בנייה ופריסה אוטומטיים, CI/CD, הגבילו את הרשאות החתימה ואת הגישה לספק המפתחות, ואפשרו חתימה רק על תוצרים שנבדקו ואושרו. הגנו על סודות גם בזמן ההעברה וההרצה, ומנעו הופעתם בלוגים ובארגומנטים גלויים. אוטומציה אינה סיבה להרחיב הרשאות או לעקוף את מדיניות החתימה.

Post a Comment

Previous Post Next Post