<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic XQL - Process Tree Analysis - Join Statements in Cortex XDR Discussions</title>
    <link>https://live.paloaltonetworks.com/t5/cortex-xdr-discussions/xql-process-tree-analysis-join-statements/m-p/577021#M6053</link>
    <description>&lt;P&gt;Hello,&lt;BR /&gt;I am currently trying to create a five depth process tree to perform long tail analysis on it.&lt;BR /&gt;The query in KQL language can be found &lt;A href="https://github.com/Cyb3r-Monk/Threat-Hunting-and-Detection/blob/main/Uncategorized/Process%20Tree%20Analysis.md" target="_self"&gt;here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The moment I perform the first join statement everything breaks&lt;BR /&gt;Here is the almost complete code but you can just test the first join.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;BR /&gt;dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS &lt;BR /&gt;| fields agent_hostname , agent_id ,&lt;BR /&gt;action_process_image_name as InitiatingProcessG3ParentFileName,action_process_image_sha256 as InitiatingProcessG3ParentSHA256 ,action_process_os_pid as InitiatingProcessG3ParentId, action_process_image_command_line as InitiatingProcessG3ParentCommandLine ,action_process_instance_execution_time as InitiatingProcessG3ParentCreationTime, actor_process_image_name as InitiatingProcessG4ParentFileName,actor_process_image_sha256 as InitiatingProcessG4ParentSHA256,actor_process_os_pid as InitiatingProcessG4ParentId,actor_process_command_line as InitiatingProcessG4ParentCommandLine, actor_process_execution_time as InitiatingProcessG4ParentCreationTime&lt;BR /&gt;| join type = left (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS &lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessG2ParentFileName,action_process_image_sha256 as InitiatingProcessG2ParentSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessG2ParentId, action_process_image_command_line as InitiatingProcessG2ParentCommandLine ,&lt;BR /&gt;action_process_instance_execution_time as InitiatingProcessG2ParentCreationTime, actor_process_image_name as InitiatingProcessG3ParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessG3ParentSHA256,actor_process_os_pid as InitiatingProcessG3ParentId,actor_process_command_line as InitiatingProcessG3ParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessG3ParentCreationTime&lt;BR /&gt;) as G3 G3.agent_id = agent_id and g3.InitiatingProcessG3ParentFileName = InitiatingProcessG3ParentFileName and G3.InitiatingProcessG3ParentId = InitiatingProcessG3ParentId and G3.InitiatingProcessG3ParentCreationTime = InitiatingProcessG3ParentCreationTime &lt;BR /&gt;| join type = left (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS &lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessG1ParentFileName,action_process_image_sha256 as InitiatingProcessG1ParentSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessG1ParentId, action_process_image_command_line as InitiatingProcessG1ParentCommandLine ,&lt;BR /&gt;action_process_instance_execution_time as InitiatingProcessG1ParentCreationTime, actor_process_image_name as InitiatingProcessG2ParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessG2ParentSHA256,actor_process_os_pid as InitiatingProcessG2ParentId,actor_process_command_line as InitiatingProcessG2ParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessG2ParentCreationTime&lt;BR /&gt;) as G2 g2.agent_id = agent_id and g2.InitiatingProcessG2ParentFileName = InitiatingProcessG2ParentFileName and g2.InitiatingProcessG2ParentId = InitiatingProcessG2ParentId and g2.InitiatingProcessG2ParentCreationTime = InitiatingProcessG2ParentCreationTime &lt;BR /&gt;| join type = left (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS &lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessParentFileName,action_process_image_sha256 as InitiatingProcessParentSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessParentId, action_process_image_command_line as InitiatingProcessParentCommandLine ,&lt;BR /&gt;action_process_instance_execution_time as InitiatingProcessParentCreationTime, actor_process_image_name as InitiatingProcessG1ParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessG1ParentSHA256,actor_process_os_pid as InitiatingProcessG1ParentId,actor_process_command_line as InitiatingProcessG1ParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessG1ParentCreationTime&lt;BR /&gt;) as G1 g1.agent_id = agent_id and g1.InitiatingProcessG1ParentFileName = InitiatingProcessG1ParentFileName and g1.InitiatingProcessG1ParentId = InitiatingProcessG1ParentId and g1.InitiatingProcessG1ParentCreationTime = InitiatingProcessG1ParentCreationTime &lt;BR /&gt;| join type = left (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS&lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessFileName,action_process_image_sha256 as InitiatingProcessSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessId, action_process_image_command_line as InitiatingProcessCommandLine ,&lt;BR /&gt;action_process_instance_execution_time as InitiatingProcessCreationTime, actor_process_image_name as InitiatingProcessParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessParentSHA256,actor_process_os_pid as InitiatingProcessParentId,actor_process_command_line as InitiatingProcessParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessParentCreationTime&lt;BR /&gt;) as P p.agent_id = agent_id and p.InitiatingProcessParentFileName = InitiatingProcessParentFileName and p.InitiatingProcessParentId = InitiatingProcessParentId and InitiatingProcessParentCreationTime = InitiatingProcessParentCreationTime &lt;BR /&gt;| comp count() by InitiatingProcessFileName ,InitiatingProcessParentFileName , InitiatingProcessG1ParentFileName , InitiatingProcessG2ParentFileName , InitiatingProcessG3ParentFileName , InitiatingProcessG4ParentFileName &lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;The above code is not complete but after testing for several hours with one single join I have now given up and came here for assistance.&lt;BR /&gt;&lt;BR /&gt;What is causing the process tree to break? because I am only getting null fields.&lt;BR /&gt;When adding and removing the actor (G4) the behaviour completely changes and I have no explanation on why.&lt;BR /&gt;Based on the document it seems that left gives you the left side and the inner so leftouter by default.&lt;BR /&gt;"Returns all records from the parent result set, plus any records from the join result set that intersect with the parent result set."&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 12 Feb 2024 12:49:31 GMT</pubDate>
    <dc:creator>AvesterFahimipour</dc:creator>
    <dc:date>2024-02-12T12:49:31Z</dc:date>
    <item>
      <title>XQL - Process Tree Analysis - Join Statements</title>
      <link>https://live.paloaltonetworks.com/t5/cortex-xdr-discussions/xql-process-tree-analysis-join-statements/m-p/577021#M6053</link>
      <description>&lt;P&gt;Hello,&lt;BR /&gt;I am currently trying to create a five depth process tree to perform long tail analysis on it.&lt;BR /&gt;The query in KQL language can be found &lt;A href="https://github.com/Cyb3r-Monk/Threat-Hunting-and-Detection/blob/main/Uncategorized/Process%20Tree%20Analysis.md" target="_self"&gt;here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The moment I perform the first join statement everything breaks&lt;BR /&gt;Here is the almost complete code but you can just test the first join.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;BR /&gt;dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS &lt;BR /&gt;| fields agent_hostname , agent_id ,&lt;BR /&gt;action_process_image_name as InitiatingProcessG3ParentFileName,action_process_image_sha256 as InitiatingProcessG3ParentSHA256 ,action_process_os_pid as InitiatingProcessG3ParentId, action_process_image_command_line as InitiatingProcessG3ParentCommandLine ,action_process_instance_execution_time as InitiatingProcessG3ParentCreationTime, actor_process_image_name as InitiatingProcessG4ParentFileName,actor_process_image_sha256 as InitiatingProcessG4ParentSHA256,actor_process_os_pid as InitiatingProcessG4ParentId,actor_process_command_line as InitiatingProcessG4ParentCommandLine, actor_process_execution_time as InitiatingProcessG4ParentCreationTime&lt;BR /&gt;| join type = left (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS &lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessG2ParentFileName,action_process_image_sha256 as InitiatingProcessG2ParentSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessG2ParentId, action_process_image_command_line as InitiatingProcessG2ParentCommandLine ,&lt;BR /&gt;action_process_instance_execution_time as InitiatingProcessG2ParentCreationTime, actor_process_image_name as InitiatingProcessG3ParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessG3ParentSHA256,actor_process_os_pid as InitiatingProcessG3ParentId,actor_process_command_line as InitiatingProcessG3ParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessG3ParentCreationTime&lt;BR /&gt;) as G3 G3.agent_id = agent_id and g3.InitiatingProcessG3ParentFileName = InitiatingProcessG3ParentFileName and G3.InitiatingProcessG3ParentId = InitiatingProcessG3ParentId and G3.InitiatingProcessG3ParentCreationTime = InitiatingProcessG3ParentCreationTime &lt;BR /&gt;| join type = left (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS &lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessG1ParentFileName,action_process_image_sha256 as InitiatingProcessG1ParentSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessG1ParentId, action_process_image_command_line as InitiatingProcessG1ParentCommandLine ,&lt;BR /&gt;action_process_instance_execution_time as InitiatingProcessG1ParentCreationTime, actor_process_image_name as InitiatingProcessG2ParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessG2ParentSHA256,actor_process_os_pid as InitiatingProcessG2ParentId,actor_process_command_line as InitiatingProcessG2ParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessG2ParentCreationTime&lt;BR /&gt;) as G2 g2.agent_id = agent_id and g2.InitiatingProcessG2ParentFileName = InitiatingProcessG2ParentFileName and g2.InitiatingProcessG2ParentId = InitiatingProcessG2ParentId and g2.InitiatingProcessG2ParentCreationTime = InitiatingProcessG2ParentCreationTime &lt;BR /&gt;| join type = left (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS &lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessParentFileName,action_process_image_sha256 as InitiatingProcessParentSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessParentId, action_process_image_command_line as InitiatingProcessParentCommandLine ,&lt;BR /&gt;action_process_instance_execution_time as InitiatingProcessParentCreationTime, actor_process_image_name as InitiatingProcessG1ParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessG1ParentSHA256,actor_process_os_pid as InitiatingProcessG1ParentId,actor_process_command_line as InitiatingProcessG1ParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessG1ParentCreationTime&lt;BR /&gt;) as G1 g1.agent_id = agent_id and g1.InitiatingProcessG1ParentFileName = InitiatingProcessG1ParentFileName and g1.InitiatingProcessG1ParentId = InitiatingProcessG1ParentId and g1.InitiatingProcessG1ParentCreationTime = InitiatingProcessG1ParentCreationTime &lt;BR /&gt;| join type = left (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS&lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessFileName,action_process_image_sha256 as InitiatingProcessSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessId, action_process_image_command_line as InitiatingProcessCommandLine ,&lt;BR /&gt;action_process_instance_execution_time as InitiatingProcessCreationTime, actor_process_image_name as InitiatingProcessParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessParentSHA256,actor_process_os_pid as InitiatingProcessParentId,actor_process_command_line as InitiatingProcessParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessParentCreationTime&lt;BR /&gt;) as P p.agent_id = agent_id and p.InitiatingProcessParentFileName = InitiatingProcessParentFileName and p.InitiatingProcessParentId = InitiatingProcessParentId and InitiatingProcessParentCreationTime = InitiatingProcessParentCreationTime &lt;BR /&gt;| comp count() by InitiatingProcessFileName ,InitiatingProcessParentFileName , InitiatingProcessG1ParentFileName , InitiatingProcessG2ParentFileName , InitiatingProcessG3ParentFileName , InitiatingProcessG4ParentFileName &lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;The above code is not complete but after testing for several hours with one single join I have now given up and came here for assistance.&lt;BR /&gt;&lt;BR /&gt;What is causing the process tree to break? because I am only getting null fields.&lt;BR /&gt;When adding and removing the actor (G4) the behaviour completely changes and I have no explanation on why.&lt;BR /&gt;Based on the document it seems that left gives you the left side and the inner so leftouter by default.&lt;BR /&gt;"Returns all records from the parent result set, plus any records from the join result set that intersect with the parent result set."&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 12 Feb 2024 12:49:31 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/cortex-xdr-discussions/xql-process-tree-analysis-join-statements/m-p/577021#M6053</guid>
      <dc:creator>AvesterFahimipour</dc:creator>
      <dc:date>2024-02-12T12:49:31Z</dc:date>
    </item>
    <item>
      <title>Re: XQL - Process Tree Analysis - Join Statements</title>
      <link>https://live.paloaltonetworks.com/t5/cortex-xdr-discussions/xql-process-tree-analysis-join-statements/m-p/577026#M6054</link>
      <description>&lt;P&gt;I made further updates it seems that I have to use sub type process start and&amp;nbsp; _time for action process creation time&lt;BR /&gt;I still don't know why the join does not work&lt;BR /&gt;You can use the query below to try to fix the join if possible.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;BR /&gt;dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS and event_sub_type = ENUM.PROCESS_START &lt;BR /&gt;| fields agent_hostname , agent_id ,&lt;BR /&gt;action_process_image_name as InitiatingProcessG3ParentFileName,action_process_image_sha256 as InitiatingProcessG3ParentSHA256 ,action_process_os_pid as InitiatingProcessG3ParentId, action_process_image_command_line as InitiatingProcessG3ParentCommandLine , _time as InitiatingProcessG3ParentCreationTime, actor_process_image_name as InitiatingProcessG4ParentFileName,actor_process_image_sha256 as InitiatingProcessG4ParentSHA256,actor_process_os_pid as InitiatingProcessG4ParentId,actor_process_command_line as InitiatingProcessG4ParentCommandLine, actor_process_execution_time as InitiatingProcessG4ParentCreationTime&lt;BR /&gt;| alter InitiatingProcessG3ParentCreationTime = to_epoch(InitiatingProcessG3ParentCreationTime, "MILLIS")&lt;BR /&gt;| join type = left conflict_strategy = both (dataset = xdr_data &lt;BR /&gt;| filter event_type = ENUM.PROCESS and event_sub_type = ENUM.PROCESS_START&lt;BR /&gt;| fields agent_id ,action_process_image_name as InitiatingProcessG2ParentFileName,action_process_image_sha256 as InitiatingProcessG2ParentSHA256 ,&lt;BR /&gt;action_process_os_pid as InitiatingProcessG2ParentId, action_process_image_command_line as InitiatingProcessG2ParentCommandLine ,&lt;BR /&gt;_time as InitiatingProcessG2ParentCreationTime, actor_process_image_name as InitiatingProcessG3ParentFileName,&lt;BR /&gt;actor_process_image_sha256 as InitiatingProcessG3ParentSHA256,actor_process_os_pid as InitiatingProcessG3ParentId,actor_process_command_line as InitiatingProcessG3ParentCommandLine,&lt;BR /&gt;actor_process_execution_time as InitiatingProcessG3ParentCreationTime&lt;BR /&gt;| alter InitiatingProcessG2ParentCreationTime = to_epoch(InitiatingProcessG2ParentCreationTime, "MILLIS")&lt;BR /&gt;) as G3 G3.agent_id = agent_id and G3.InitiatingProcessG3ParentFileName = InitiatingProcessG3ParentFileName and G3.InitiatingProcessG3ParentId = InitiatingProcessG3ParentId and G3.InitiatingProcessG3ParentCreationTime = InitiatingProcessG3ParentCreationTime &lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 12 Feb 2024 14:01:20 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/cortex-xdr-discussions/xql-process-tree-analysis-join-statements/m-p/577026#M6054</guid>
      <dc:creator>AvesterFahimipour</dc:creator>
      <dc:date>2024-02-12T14:01:20Z</dc:date>
    </item>
    <item>
      <title>Re: XQL - Process Tree Analysis - Join Statements</title>
      <link>https://live.paloaltonetworks.com/t5/cortex-xdr-discussions/xql-process-tree-analysis-join-statements/m-p/577029#M6056</link>
      <description>&lt;P&gt;I fixed it the execution times did not match so had to remove that&lt;/P&gt;</description>
      <pubDate>Mon, 12 Feb 2024 15:01:41 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/cortex-xdr-discussions/xql-process-tree-analysis-join-statements/m-p/577029#M6056</guid>
      <dc:creator>AvesterFahimipour</dc:creator>
      <dc:date>2024-02-12T15:01:41Z</dc:date>
    </item>
  </channel>
</rss>

