从kext检查vnode签名

时间:2018-09-04 11:47:10

标签: macos kernel digital-signature kernel-extension xnu

我正在使用kauth内核框架,以获取有关系统中正在打开的文件的事件。

在滤除可执行的男子气概文件之后,我想检查每个此类文件的签名验证,以证明其vnode以vp = (vnode_t) arg1

表示。

在xnu源代码中,我在mac_vnode_check_signature中发现了mac_framework.h,但是它不是内核公共api的一部分……也许有其他选择吗?

在用户空间中,我找到了一个名为MOLCodesignChecker的良好API,可以通过以下方式激活

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_blobcsproc_get_teamid提取正在运行的进程的签名,以提取可以表示供应商的特定字段(也存在用于vnode而不是进程)。

但是,在/usr/sbin/spindump上调用此方法后,我得到了NULL指针(而不是有效的字符串),并且它与用户空间命令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。我想以某种方式从cs_blob中提取授权以获取供应商名称(在这种情况下为Apple

0 个答案:

没有答案