我正在使用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_blob
和csproc_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
)