Проверка vnode подписи от kext - PullRequest
       68

Проверка vnode подписи от kext

0 голосов
/ 04 сентября 2018

Я использую ядро ​​kauth для получения событий о файлах, которые открываются в системе.

после фильтрации исполняемых мачо-файлов, я хотел бы проверить проверку подписи для каждого такого файла, в котором его vnode представлен в vp = (vnode_t) arg1

Глядя в исходный код xnu, я обнаружил mac_vnode_check_signature в mac_framework.h Однако это не является частью общедоступного API ядра ... возможно, есть какие-то альтернативы?

в пользовательском пространстве я нашел хороший API для этого, который называется MOLCodesignChecker, который активируется следующим образом

MOLCodesignChecker *molChecker = [[MOLCodesignChecker alloc] initWithBinaryPath:filePath error:&error];
NSArray *certificates  = molChecker.certificates;
MOLCertificate *cert = [certificates objectAtIndex:i];
// print organization name e.g: "Apple Inc."
printf("signing name = %s", cert.orgName);

ОБНОВЛЕНИЕ:

Следуя совету pmdj, приведенному ниже, я нашел способ извлечь сигнатуру запущенного процесса, используя csproc_get_blob и csproc_get_teamid, чтобы извлечь конкретное поле, которое может представлять поставщика (также существуют синонимы для vnode вместо процесса ).

Однако, после вызова этого метода на /usr/sbin/spindump я получил нулевой указатель (вместо допустимой строки), и он совпадает с выводом команды пользовательского пространства code sign:

codesign -dvvv /usr/sbin/spindump 
Executable=/usr/sbin/spindump
Identifier=com.apple.spindump
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=3267 flags=0x0(none) hashes=95+5  location=embedded
Platform identifier=4
Hash type=sha256 size=32
CandidateCDHash sha256=d5bfa6a2a2ad8ffa377c6ef7f7b94c81821821fb
Hash choices=sha256
CDHash=d5bfa6a2a2ad8ffa377c6ef7f7b94c81821821fb
Signature size=4485
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=68

Как видите, TeamIdentifier равен not set. Я хотел бы как-то извлечь Authority из cs_blob, чтобы получить имя поставщика (Apple в данном случае)

...