VirtualBox

Changeset 74767 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Oct 11, 2018 12:16:21 PM (6 years ago)
Author:
vboxsync
Message:

RTSignTool,SUPR3: Implemented dev id / kext checks for verify-exe. bugref:9232

Location:
trunk/src/VBox
Files:
2 added
2 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/Makefile.kmk

    r73705 r74767  
    9191       NtRootMicrosoft7=NtRoot-MicrosoftCodeVerificationRoot-729404101f3e0ca347837fca175a8438.taf \
    9292       TimeRootMicrosoft0=Timestamp-CopyrightC1997MicrosoftCorp-01.taf \
    93        TrustedCertVBox0=Trusted-OracleCorporationVirtualBox-51ca009816fdbd80f120e015ee75823e.taf
     93       TrustedCertVBox0=Trusted-OracleCorporationVirtualBox-51ca009816fdbd80f120e015ee75823e.taf \
     94       AppleRoot0=AppleRoot-2bd06947947609fef46b8d2e40a6f7474d7f085e.taf \
     95       AppleRoot1=AppleRoot-G2-c499136c1803c27bc0a3a00d7f72807a1c77268d.taf
    9496VBOX_SUP_WIN_CERT_NAMES := $(foreach cert,$(VBOX_SUP_WIN_CERTS),$(firstword $(subst =,$(SPACE) ,$(cert))))
    95 VBOX_PATH_SUPR3_CERTIFICATES := $(PATH_SUB_CURRENT)/win/Certificates
     97VBOX_PATH_SUPR3_CERTIFICATES := $(PATH_SUB_CURRENT)/Certificates
    9698
    9799# 1=name, 2=filter, 3=buildcert?.
     
    129131# Generate certificate lists.
    130132        $(QUIET)$(APPEND) -n "$@" '' \
    131                $(call VBOX_SUP_GEN_CERT_MACRO,All,%,build) \
    132                $(call VBOX_SUP_GEN_CERT_MACRO,SpcRoot,SpcRoot%) \
    133                $(call VBOX_SUP_GEN_CERT_MACRO,NtKernelRoot,NtRoot%) \
    134                $(call VBOX_SUP_GEN_CERT_MACRO,Timestamp,TimeRoot%) \
    135                $(call VBOX_SUP_GEN_CERT_MACRO,Trusted,TrustedCert%,build)
     133                $(call VBOX_SUP_GEN_CERT_MACRO,All,%,build) \
     134                $(call VBOX_SUP_GEN_CERT_MACRO,SpcRoot,SpcRoot%) \
     135                $(call VBOX_SUP_GEN_CERT_MACRO,NtKernelRoot,NtRoot%) \
     136                $(call VBOX_SUP_GEN_CERT_MACRO,Timestamp,TimeRoot%) \
     137                $(call VBOX_SUP_GEN_CERT_MACRO,AppleRoot,AppleRoot%) \
     138                $(call VBOX_SUP_GEN_CERT_MACRO,Trusted,TrustedCert%,build)
    136139
    137140tst: $(VBOX_SUP_WIN_CERTS_FILE)
  • trunk/src/VBox/Runtime/tools/RTSignTool.cpp

    r74760 r74767  
    4646# include <iprt/formats/pecoff.h>
    4747#endif
     48#include <iprt/crypto/applecodesign.h>
    4849#include <iprt/crypto/digest.h>
    4950#include <iprt/crypto/x509.h>
     
    13121313    {
    13131314        /*
    1314          * If kernel signing, a valid certificate path must be anchored by the
    1315          * microsoft kernel signing root certificate.  The only alternative is
    1316          * test signing.
     1315         * If windows kernel signing, a valid certificate path must be anchored
     1316         * by the microsoft kernel signing root certificate.  The only
     1317         * alternative is test signing.
    13171318         */
    1318         if (pState->fKernel && hCertPaths != NIL_RTCRX509CERTPATHS)
     1319        if (   pState->fKernel
     1320            && hCertPaths != NIL_RTCRX509CERTPATHS
     1321            && pState->enmSignType == VERIFYEXESTATE::kSignType_Windows)
    13191322        {
    13201323            uint32_t cFound = 0;
     
    13621365                RTMsgWarning("%u valid paths, expected 2", cValid);
    13631366        }
     1367        /*
     1368         * For Mac OS X signing, check for special developer ID attributes.
     1369         */
     1370        else if (pState->enmSignType == VERIFYEXESTATE::kSignType_OSX)
     1371        {
     1372            uint32_t cDevIdApp  = 0;
     1373            uint32_t cDevIdKext = 0;
     1374            for (uint32_t i = 0; i < pCert->TbsCertificate.T3.Extensions.cItems; i++)
     1375            {
     1376                PCRTCRX509EXTENSION pExt = pCert->TbsCertificate.T3.Extensions.papItems[i];
     1377                if (RTAsn1ObjId_CompareWithString(&pExt->ExtnId, RTCR_APPLE_CS_DEVID_APPLICATION_OID) == 0)
     1378                {
     1379                    cDevIdApp++;
     1380                    if (!pExt->Critical.fValue)
     1381                        rc = RTErrInfoSetF(pErrInfo, VERR_GENERAL_FAILURE,
     1382                                           "Dev ID Application certificate extension is not flagged critical");
     1383                }
     1384                else if (RTAsn1ObjId_CompareWithString(&pExt->ExtnId, RTCR_APPLE_CS_DEVID_KEXT_OID) == 0)
     1385                {
     1386                    cDevIdKext++;
     1387                    if (!pExt->Critical.fValue)
     1388                        rc = RTErrInfoSetF(pErrInfo, VERR_GENERAL_FAILURE,
     1389                                           "Dev ID kext certificate extension is not flagged critical");
     1390                }
     1391            }
     1392            if (cDevIdApp == 0)
     1393                rc = RTErrInfoSetF(pErrInfo, VERR_GENERAL_FAILURE,
     1394                                   "Certificate is missing the 'Dev ID Application' extension");
     1395            if (cDevIdKext == 0 && pState->fKernel)
     1396                rc = RTErrInfoSetF(pErrInfo, VERR_GENERAL_FAILURE,
     1397                                   "Certificate is missing the 'Dev ID kext' extension");
     1398        }
    13641399    }
    13651400
     
    14181453}
    14191454
    1420 /** Worker for HandleVerifyExe. */
     1455/**
     1456 * Worker for HandleVerifyExe.
     1457 */
    14211458static RTEXITCODE HandleVerifyExeWorker(VERIFYEXESTATE *pState, const char *pszFilename, PRTERRINFOSTATIC pStaticErrInfo)
    14221459{
     
    15461583     * Populate the certificate stores according to the signing type.
    15471584     */
    1548 #ifdef VBOX
     1585# ifdef VBOX
    15491586    unsigned          cSets = 0;
    15501587    struct STSTORESET aSets[6];
    1551 #endif
    1552 
    15531588    switch (State.enmSignType)
    15541589    {
    15551590        case VERIFYEXESTATE::kSignType_Windows:
    1556 #ifdef VBOX
    15571591            aSets[cSets].hStore  = State.hRootStore;
    15581592            aSets[cSets].paTAs   = g_aSUPTimestampTAs;
     
    15711605            aSets[cSets].cTAs    = g_cSUPNtKernelRootTAs;
    15721606            cSets++;
    1573 #endif
    15741607            break;
    15751608
    15761609        case VERIFYEXESTATE::kSignType_OSX:
    1577             return RTMsgErrorExit(RTEXITCODE_FAILURE, "Mac OS X executable signing is not implemented.");
    1578     }
    1579 
    1580 #ifdef VBOX
     1610            aSets[cSets].hStore  = State.hRootStore;
     1611            aSets[cSets].paTAs   = g_aSUPAppleRootTAs;
     1612            aSets[cSets].cTAs    = g_cSUPAppleRootTAs;
     1613            cSets++;
     1614            break;
     1615    }
    15811616    for (unsigned i = 0; i < cSets; i++)
    15821617        for (unsigned j = 0; j < aSets[i].cTAs; j++)
     
    15881623                                      i, j, StaticErrInfo.szMsg);
    15891624        }
    1590 #endif
     1625# endif /* VBOX */
    15911626
    15921627    /*
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette