fbpx
Wikipedia

Code signing

Code signing is the process of digitally signing executables and scripts to confirm the software author and guarantee that the code has not been altered or corrupted since it was signed. The process employs the use of a cryptographic hash to validate authenticity and integrity.[1] Code signing was invented in 1995 by Michael Doyle, as part of the Eolas WebWish browser plug-in, which enabled the use of public-key cryptography to sign downloadable Web app program code using a secret key, so the plug-in code interpreter could then use the corresponding public key to authenticate the code before allowing it access to the code interpreter’s APIs. [2]

Code signing can provide several valuable features. The most common use of code signing is to provide security when deploying; in some programming languages, it can also be used to help prevent namespace conflicts. Almost every code signing implementation will provide some sort of digital signature mechanism to verify the identity of the author or build system, and a checksum to verify that the object has not been modified. It can also be used to provide versioning information about an object or to store other metadata about an object.[3]

The efficacy of code signing as an authentication mechanism for software depends on the security of underpinning signing keys. As with other public key infrastructure (PKI) technologies, the integrity of the system relies on publishers securing their private keys against unauthorized access. Keys stored in software on general-purpose computers are susceptible to compromise. Therefore, it is more secure, and best practice, to store keys in secure, tamper-proof, cryptographic hardware devices known as hardware security modules or HSMs.[4]

Providing security edit

Many code signing implementations will provide a way to sign the code using a system involving a pair of keys, one public and one private, similar to the process employed by TLS or SSH. For example, in the case of .NET, the developer uses a private key to sign their libraries or executables each time they build. This key will be unique to a developer or group or sometimes per application or object. The developer can either generate this key on their own or obtain one from a trusted certificate authority (CA).[5]

Code signing is particularly valuable in distributed environments, where the source of a given piece of code may not be immediately evident - for example Java applets, ActiveX controls and other active web and browser scripting code. Another important usage is to safely provide updates and patches to existing software.[6] Windows, Mac OS X, and most Linux distributions provide updates using code signing to ensure that it is not possible for others to maliciously distribute code via the patch system. It allows the receiving operating system to verify that the update is legitimate, even if the update was delivered by third parties or physical media (disks).[7]

Code signing is used on Windows and Mac OS X to authenticate software on first run, ensuring that the software has not been maliciously tampered with by a third-party distributor or download site. This form of code signing is not used on Linux because of that platform's decentralized nature, the package manager being the predominant mode of distribution for all forms of software (not just updates and patches), as well as the open-source model allowing direct inspection of the source code if desired. Debian-based Linux distributions (among others) validate downloaded packages using public key cryptography.[8]

Trusted identification using a certificate authority (CA) edit

The public key used to authenticate the code signature should be traceable back to a trusted root authority CA, preferably using a secure public key infrastructure (PKI). This does not ensure that the code itself can be trusted, only that it comes from the stated source (or more explicitly, from a particular private key).[9] A CA provides a root trust level and is able to assign trust to others by proxy. If a user trusts a CA, then the user can presumably trust the legitimacy of code that is signed with a key generated by that CA or one of its proxies. Many operating systems and frameworks contain built-in trust for one or more certification authorities. It is also commonplace for large organizations to implement a private CA, internal to the organization, which provides the same features as public CAs, but it is only trusted within the organization.

Extended validation (EV) code signing edit

Extended validation (EV) code signing certificates are subject to additional validation and technical requirements. These guidelines are based on the CA/B Forum's Baseline Requirements and Extended Validation Guidelines. In addition to validation requirements specific to EV, the EV code signing guidelines stipulate that "the Subscriber’s private key is generated, stored and used in a crypto module that meets or exceeds the requirements of FIPS 140-2 level 2."[10]

Certain applications, such as signing Windows 10 kernel-mode drivers, require an EV code signing certificate.[11] Additionally, Microsoft's IEBlog states that Windows programs "signed by an EV code signing certificate can immediately establish reputation with SmartScreen reputation services even if no prior reputation exists for that file or publisher."[12]

Sample EV code signing certificate edit

This is an example of a decoded EV code signing certificate used by SSL.com to sign software. SSL.com EV Code Signing Intermediate CA RSA R3 is shown as the Issuer's commonName, identifying this as an EV code signing certificate. The certificate's Subject field describes SSL Corp as an organization. Code Signing is shown as the sole X509v3 Extended Key Usage.

Certificate: Data: Version: 3 (0x2) Serial Number: 59:4e:2d:88:5a:2c:b0:1a:5e:d6:4c:7b:df:35:59:7d Signature Algorithm: sha256WithRSAEncryption Issuer: commonName = SSL.com EV Code Signing Intermediate CA RSA R3 organizationName = SSL Corp localityName = Houston stateOrProvinceName = Texas countryName = US Validity Not Before: Aug 30 20:29:13 2019 GMT Not After : Nov 12 20:29:13 2022 GMT Subject: 1.3.6.1.4.1.311.60.2.1.3 = US 1.3.6.1.4.1.311.60.2.1.2 = Nevada streetAddress = 3100 Richmond Ave Ste 503 businessCategory = Private Organization postalCode = 77098 commonName = SSL Corp serialNumber = NV20081614243 organizationName = SSL Corp localityName = Houston stateOrProvinceName = Texas countryName = US Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c3:e9:ae:be:d7:a2:6f:2f:24 ... Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:36:BD:49:FF:31:2C:EB:AF:6A:40:FE:99:C0:16:ED:BA:FC:48:DD:5F Authority Information Access: CA Issuers - URI:http://www.ssl.com/repository/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crt OCSP - URI:http://ocsps.ssl.com X509v3 Certificate Policies: Policy: 2.23.140.1.3 Policy: 1.2.616.1.113527.2.5.1.7 Policy: 1.3.6.1.4.1.38064.1.3.3.2 CPS: https://www.ssl.com/repository X509v3 Extended Key Usage: Code Signing X509v3 CRL Distribution Points: Full Name: URI:http://crls.ssl.com/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crl X509v3 Subject Key Identifier: EC:6A:64:06:26:A7:7A:69:E8:CC:06:D5:6F:FA:E1:C2:9A:29:79:DE X509v3 Key Usage: critical Digital Signature Signature Algorithm: sha256WithRSAEncryption 17:d7:a1:26:58:31:14:2b:9f:3b ... 

Alternative to CAs edit

The other model is the trust on first use model, in which developers can choose to provide their own self-generated key. In this scenario, the user would normally have to obtain the public key in some fashion directly from the developer to verify the object is from them for the first time. Many code signing systems will store the public key inside the signature. Some software frameworks and OSs that check the code's signature before executing will allow you to choose to trust that developer from that point on after the first run. An application developer can provide a similar system by including the public keys with the installer. The key can then be used to ensure that any subsequent objects that need to run, such as upgrades, plugins, or another application, are all verified as coming from that same developer.

Time-stamping edit

Time-stamping was designed to circumvent the trust warning that will appear in the case of an expired certificate. In effect, time-stamping extends the code trust beyond the validity period of a certificate.[13]

In the event that a certificate has to be revoked due to a compromise, a specific date and time of the compromising event will become part of the revocation record. In this case, time-stamping helps establish whether the code was signed before or after the certificate was compromised.[13]

Code signing in Xcode edit

Developers need to sign their iOS and tvOS apps before running them on any real device and before uploading them to the App Store. This is needed to prove that the developer owns a valid Apple Developer ID. An application needs a valid profile or certificate so that it can run on the devices.

Problems edit

Like any security measure, code signing can be defeated. Users can be tricked into running unsigned code, or even into running code that refuses to validate, and the system only remains secure as long as the private key remains private.[14][15]

It is also important to note that code signing does not protect the end user from any malicious activity or unintentional software bugs by the software author — it merely ensures that the software has not been modified by anyone other than the author. Sometimes, sandbox systems do not accept certificates, because of a false time-stamp or because of an excess usage of RAM.

Implementations edit

Microsoft implements a form of code signing (based on Authenticode) provided for Microsoft tested drivers. Since drivers run in the kernel, they can destabilize the system or open the system to security holes. For this reason, Microsoft tests drivers submitted to its WHQL program. After the driver has passed, Microsoft signs that version of the driver as being safe. On 32-bit systems only, installing drivers that are not validated with Microsoft is possible after agreeing to allow the installation at a prompt warning the user that the code is unsigned. For .NET (managed) code, there is an additional mechanism called Strong Name Signing that uses Public/Private keys and SHA-1 hash as opposed to certificates. However, Microsoft discourages reliance on Strong Name Signing as a replacement for Authenticode.[16]

Unsigned code in gaming and consumer devices edit

In the context of consumer devices such as games consoles, the term "unsigned code" is often used to refer to an application which has not been signed with the cryptographic key normally required for software to be accepted and executed. Most console games have to be signed with a secret key designed by the console maker or the game will not load on the console. There are several methods to get unsigned code to execute which include software exploits, the use of a modchip, a technique known as the swap trick or running a softmod.

It may not initially seem obvious why simply copying a signed application onto another DVD does not allow it to boot. On the Xbox, the reason for this is that the Xbox executable file (XBE) contains a media-type flag, which specifies the type of media that the XBE is bootable from. On nearly all Xbox software, this is set such that the executable will only boot from factory-produced discs, so simply copying the executable to burnable media is enough to stop the execution of the software.

However, since the executable is signed, simply changing the value of the flag is not possible as this alters the signature of the executable, causing it to fail validation when checked.

See also edit

References edit

  1. ^ "Introduction to Code Signing".
  2. ^ "WebWish: Our Wish is Your Command".
  3. ^ Hendric, William (2015). "A Complete overview of Trusted Certificates - CABForum" (PDF). Retrieved 2015-02-26.
  4. ^ "Securing your Private Keys as Best Practice for Code Signing Certificates" (PDF).
  5. ^ Hendric, William (17 June 2011). "What is Code Signing?". Retrieved 26 February 2015.
  6. ^ "Digital Signatures and Windows Installer".
  7. ^ windows-driver-content (2022-05-18). "Windows Secure Boot Key Creation and Management Guidance". learn.microsoft.com. Retrieved 2023-09-22.
  8. ^ "SecureApt - Debian Wiki".
  9. ^ https://casecurity.org/wp-content/uploads/2013/10/CASC-Code-Signing.pdf[bare URL PDF]
  10. ^ "Guidelines For The Issuance And Management Of Extended Validation Code Signing Certificates" (PDF). CA/Browser Forum. Retrieved 4 December 2019.
  11. ^ "Driver Signing Policy". Microsoft. Retrieved 9 December 2019.
  12. ^ "Microsoft SmartScreen & Extended Validation (EV) Code Signing Certificates". Microsoft. Retrieved 9 December 2019.
  13. ^ a b Morton, Bruce. "Code Signing" (PDF). CASC. Retrieved 21 February 2014.
  14. ^ "Fake antivirus solutions increasingly have stolen code-signing certificates". 9 January 2014.
  15. ^ http://www.eweek.com/c/a/Security/Theres-A-Racket-Brewing-In-the-Code-Signing-Cert-Business/[dead link]
  16. ^ Strong Name Bypass: .NET Security Blog

External links edit

  • Apple Code Signing Guide
  • Microsoft Introduction to Code Signing
  • Debian Security Infrastructure

code, signing, this, article, needs, additional, citations, verification, please, help, improve, this, article, adding, citations, reliable, sources, unsourced, material, challenged, removed, find, sources, news, newspapers, books, scholar, jstor, january, 201. This article needs additional citations for verification Please help improve this article by adding citations to reliable sources Unsourced material may be challenged and removed Find sources Code signing news newspapers books scholar JSTOR January 2012 Learn how and when to remove this template message Code signing is the process of digitally signing executables and scripts to confirm the software author and guarantee that the code has not been altered or corrupted since it was signed The process employs the use of a cryptographic hash to validate authenticity and integrity 1 Code signing was invented in 1995 by Michael Doyle as part of the Eolas WebWish browser plug in which enabled the use of public key cryptography to sign downloadable Web app program code using a secret key so the plug in code interpreter could then use the corresponding public key to authenticate the code before allowing it access to the code interpreter s APIs 2 Code signing can provide several valuable features The most common use of code signing is to provide security when deploying in some programming languages it can also be used to help prevent namespace conflicts Almost every code signing implementation will provide some sort of digital signature mechanism to verify the identity of the author or build system and a checksum to verify that the object has not been modified It can also be used to provide versioning information about an object or to store other metadata about an object 3 The efficacy of code signing as an authentication mechanism for software depends on the security of underpinning signing keys As with other public key infrastructure PKI technologies the integrity of the system relies on publishers securing their private keys against unauthorized access Keys stored in software on general purpose computers are susceptible to compromise Therefore it is more secure and best practice to store keys in secure tamper proof cryptographic hardware devices known as hardware security modules or HSMs 4 Contents 1 Providing security 1 1 Trusted identification using a certificate authority CA 1 2 Extended validation EV code signing 1 2 1 Sample EV code signing certificate 1 3 Alternative to CAs 1 4 Time stamping 1 5 Code signing in Xcode 1 6 Problems 2 Implementations 3 Unsigned code in gaming and consumer devices 4 See also 5 References 6 External linksProviding security editMany code signing implementations will provide a way to sign the code using a system involving a pair of keys one public and one private similar to the process employed by TLS or SSH For example in the case of NET the developer uses a private key to sign their libraries or executables each time they build This key will be unique to a developer or group or sometimes per application or object The developer can either generate this key on their own or obtain one from a trusted certificate authority CA 5 Code signing is particularly valuable in distributed environments where the source of a given piece of code may not be immediately evident for example Java applets ActiveX controls and other active web and browser scripting code Another important usage is to safely provide updates and patches to existing software 6 Windows Mac OS X and most Linux distributions provide updates using code signing to ensure that it is not possible for others to maliciously distribute code via the patch system It allows the receiving operating system to verify that the update is legitimate even if the update was delivered by third parties or physical media disks 7 Code signing is used on Windows and Mac OS X to authenticate software on first run ensuring that the software has not been maliciously tampered with by a third party distributor or download site This form of code signing is not used on Linux because of that platform s decentralized nature the package manager being the predominant mode of distribution for all forms of software not just updates and patches as well as the open source model allowing direct inspection of the source code if desired Debian based Linux distributions among others validate downloaded packages using public key cryptography 8 Trusted identification using a certificate authority CA edit The public key used to authenticate the code signature should be traceable back to a trusted root authority CA preferably using a secure public key infrastructure PKI This does not ensure that the code itself can be trusted only that it comes from the stated source or more explicitly from a particular private key 9 A CA provides a root trust level and is able to assign trust to others by proxy If a user trusts a CA then the user can presumably trust the legitimacy of code that is signed with a key generated by that CA or one of its proxies Many operating systems and frameworks contain built in trust for one or more certification authorities It is also commonplace for large organizations to implement a private CA internal to the organization which provides the same features as public CAs but it is only trusted within the organization Extended validation EV code signing edit Extended validation EV code signing certificates are subject to additional validation and technical requirements These guidelines are based on the CA B Forum s Baseline Requirements and Extended Validation Guidelines In addition to validation requirements specific to EV the EV code signing guidelines stipulate that the Subscriber s private key is generated stored and used in a crypto module that meets or exceeds the requirements of FIPS 140 2 level 2 10 Certain applications such as signing Windows 10 kernel mode drivers require an EV code signing certificate 11 Additionally Microsoft s IEBlog states that Windows programs signed by an EV code signing certificate can immediately establish reputation with SmartScreen reputation services even if no prior reputation exists for that file or publisher 12 Sample EV code signing certificate edit This is an example of a decoded EV code signing certificate used by SSL com to sign software SSL com EV Code Signing Intermediate CA RSA R3 is shown as the Issuer s commonName identifying this as an EV code signing certificate The certificate s Subject field describes SSL Corp as an organization Code Signing is shown as the sole X509v3 Extended Key Usage Certificate Data Version 3 0x2 Serial Number 59 4e 2d 88 5a 2c b0 1a 5e d6 4c 7b df 35 59 7d Signature Algorithm sha256WithRSAEncryption Issuer commonName SSL com EV Code Signing Intermediate CA RSA R3 organizationName SSL Corp localityName Houston stateOrProvinceName Texas countryName US Validity Not Before Aug 30 20 29 13 2019 GMT Not After Nov 12 20 29 13 2022 GMT Subject 1 3 6 1 4 1 311 60 2 1 3 US 1 3 6 1 4 1 311 60 2 1 2 Nevada streetAddress 3100 Richmond Ave Ste 503 businessCategory Private Organization postalCode 77098 commonName SSL Corp serialNumber NV20081614243 organizationName SSL Corp localityName Houston stateOrProvinceName Texas countryName US Subject Public Key Info Public Key Algorithm rsaEncryption Public Key 2048 bit Modulus 00 c3 e9 ae be d7 a2 6f 2f 24 Exponent 65537 0x10001 X509v3 extensions X509v3 Authority Key Identifier keyid 36 BD 49 FF 31 2C EB AF 6A 40 FE 99 C0 16 ED BA FC 48 DD 5F Authority Information Access CA Issuers URI http www ssl com repository SSLcom SubCA EV CodeSigning RSA 4096 R3 crt OCSP URI http ocsps ssl com X509v3 Certificate Policies Policy 2 23 140 1 3 Policy 1 2 616 1 113527 2 5 1 7 Policy 1 3 6 1 4 1 38064 1 3 3 2 CPS https www ssl com repository X509v3 Extended Key Usage Code Signing X509v3 CRL Distribution Points Full Name URI http crls ssl com SSLcom SubCA EV CodeSigning RSA 4096 R3 crl X509v3 Subject Key Identifier EC 6A 64 06 26 A7 7A 69 E8 CC 06 D5 6F FA E1 C2 9A 29 79 DE X509v3 Key Usage critical Digital Signature Signature Algorithm sha256WithRSAEncryption 17 d7 a1 26 58 31 14 2b 9f 3b Alternative to CAs edit The other model is the trust on first use model in which developers can choose to provide their own self generated key In this scenario the user would normally have to obtain the public key in some fashion directly from the developer to verify the object is from them for the first time Many code signing systems will store the public key inside the signature Some software frameworks and OSs that check the code s signature before executing will allow you to choose to trust that developer from that point on after the first run An application developer can provide a similar system by including the public keys with the installer The key can then be used to ensure that any subsequent objects that need to run such as upgrades plugins or another application are all verified as coming from that same developer Time stamping edit Time stamping was designed to circumvent the trust warning that will appear in the case of an expired certificate In effect time stamping extends the code trust beyond the validity period of a certificate 13 In the event that a certificate has to be revoked due to a compromise a specific date and time of the compromising event will become part of the revocation record In this case time stamping helps establish whether the code was signed before or after the certificate was compromised 13 Code signing in Xcode edit Developers need to sign their iOS and tvOS apps before running them on any real device and before uploading them to the App Store This is needed to prove that the developer owns a valid Apple Developer ID An application needs a valid profile or certificate so that it can run on the devices Problems edit Like any security measure code signing can be defeated Users can be tricked into running unsigned code or even into running code that refuses to validate and the system only remains secure as long as the private key remains private 14 15 It is also important to note that code signing does not protect the end user from any malicious activity or unintentional software bugs by the software author it merely ensures that the software has not been modified by anyone other than the author Sometimes sandbox systems do not accept certificates because of a false time stamp or because of an excess usage of RAM Implementations editMicrosoft implements a form of code signing based on Authenticode provided for Microsoft tested drivers Since drivers run in the kernel they can destabilize the system or open the system to security holes For this reason Microsoft tests drivers submitted to its WHQL program After the driver has passed Microsoft signs that version of the driver as being safe On 32 bit systems only installing drivers that are not validated with Microsoft is possible after agreeing to allow the installation at a prompt warning the user that the code is unsigned For NET managed code there is an additional mechanism called Strong Name Signing that uses Public Private keys and SHA 1 hash as opposed to certificates However Microsoft discourages reliance on Strong Name Signing as a replacement for Authenticode 16 Unsigned code in gaming and consumer devices editIn the context of consumer devices such as games consoles the term unsigned code is often used to refer to an application which has not been signed with the cryptographic key normally required for software to be accepted and executed Most console games have to be signed with a secret key designed by the console maker or the game will not load on the console There are several methods to get unsigned code to execute which include software exploits the use of a modchip a technique known as the swap trick or running a softmod It may not initially seem obvious why simply copying a signed application onto another DVD does not allow it to boot On the Xbox the reason for this is that the Xbox executable file XBE contains a media type flag which specifies the type of media that the XBE is bootable from On nearly all Xbox software this is set such that the executable will only boot from factory produced discs so simply copying the executable to burnable media is enough to stop the execution of the software However since the executable is signed simply changing the value of the flag is not possible as this alters the signature of the executable causing it to fail validation when checked See also editDigital signature iOS jailbreaking PlayStation Portable homebrew Privilege escalation Rooting Android OS Symbian OS Security bypassReferences edit Introduction to Code Signing WebWish Our Wish is Your Command Hendric William 2015 A Complete overview of Trusted Certificates CABForum PDF Retrieved 2015 02 26 Securing your Private Keys as Best Practice for Code Signing Certificates PDF Hendric William 17 June 2011 What is Code Signing Retrieved 26 February 2015 Digital Signatures and Windows Installer windows driver content 2022 05 18 Windows Secure Boot Key Creation and Management Guidance learn microsoft com Retrieved 2023 09 22 SecureApt Debian Wiki https casecurity org wp content uploads 2013 10 CASC Code Signing pdf bare URL PDF Guidelines For The Issuance And Management Of Extended Validation Code Signing Certificates PDF CA Browser Forum Retrieved 4 December 2019 Driver Signing Policy Microsoft Retrieved 9 December 2019 Microsoft SmartScreen amp Extended Validation EV Code Signing Certificates Microsoft Retrieved 9 December 2019 a b Morton Bruce Code Signing PDF CASC Retrieved 21 February 2014 Fake antivirus solutions increasingly have stolen code signing certificates 9 January 2014 http www eweek com c a Security Theres A Racket Brewing In the Code Signing Cert Business dead link Strong Name Bypass NET Security BlogExternal links editApple Code Signing Guide Microsoft Introduction to Code Signing Debian Security Infrastructure Strong Distribution HOWTO Retrieved from https en wikipedia org w index php title Code signing amp oldid 1179159386, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.