Forum Discussion
Why there is no Signature status for the new process in the DeviceProcessEvent table?
Thank you.
when I tried to match the data, I stumbled upon a problem - the binaries for IntiatingProcess (parent) reported with Signature Status of "Unsigned", when matched by file path and SHA1 to the DeviceFileCertificateInfo seem to be properly signed... Maybe my KQL logic is wrong.
Please post your solution.
DeviceProcessEvents
| where InitiatingProcessSignatureStatus == "Unsigned"
| summarize by ParentFile=tolower(InitiatingProcessFolderPath), InitiatingProcessSignatureStatus, InitiatingProcessSignerType, InitiatingProcessSHA1
| join DeviceFileCertificateInfo on $left.InitiatingProcessSHA1 == $right.SHA1
| project Filename=ParentFile, IsReportedSigned=InitiatingProcessSignatureStatus, SHA1, IsSigned, Signer
give this a try:
DeviceProcessEvents
| where InitiatingProcessSignatureStatus == "Unsigned"
| project
ParentFile = tolower(InitiatingProcessFolderPath),
InitiatingProcessSignatureStatus,
InitiatingProcessSignerType,
InitiatingProcessSHA1
| join kind=leftouter (
DeviceFileCertificateInfo
| project SHA1, IsSigned, IsTrusted, Signer, SignatureType
) on $left.InitiatingProcessSHA1 == $right.SHA1
| project
Filename = ParentFile,
ReportedByKernel = InitiatingProcessSignatureStatus,
SignerType = InitiatingProcessSignerType,
IsSigned,
IsTrusted,
Signer,
SignatureTypeYour original query used a plain join without specifying the join kind. In KQL, the default is innerunique, which drops all rows from the left side that have no match in DeviceFileCertificateInfo. That means any process with no certificate verification record gets silently discarded - exactly the binaries you want to investigate. Changing to kind=leftouter keeps all rows and only enriches those where a cert record exists.