← Back to SOC feed Coverage →

GitHub Inactive or New Account Access or Usage

kql MEDIUM Azure-Sentinel
T1136
huntingmicrosoftofficial
This rule was pulled from an open-source repository and enriched with AI. Validate in a test environment before deploying to production.
View original rule at Azure-Sentinel →
Retrieved: 2026-04-24T09:00:00Z · Confidence: medium

Hunt Hypothesis

Unusual access to GitHub by new or inactive accounts may indicate compromised credentials or adversary reconnaissance. SOC teams should proactively hunt for this behavior to identify potential credential theft or lateral movement in their Azure Sentinel environment.

KQL Query


let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let LearningPeriod = 7d;
let EndLearningTime = starttime - LearningPeriod;
let GitHubActorLogin = (GitHubAudit
| where Actor != "");
let GitHubUser = (GitHubAudit
| where ImpactedUser != "");
let GitHubNewActorLogin = (GitHubActorLogin
| where TimeGenerated between (EndLearningTime .. starttime)
| summarize makeset(Actor)
| extend Dummy = 1
| join kind=innerunique (
  GitHubActorLogin
  | where TimeGenerated between (starttime .. endtime)
  | distinct Actor
  | extend Dummy = 1
) on Dummy
| project-away Dummy
| where set_Actor  !contains Actor);
let GitHubNewUser = ( GitHubUser
| where TimeGenerated between (EndLearningTime .. starttime)
| summarize makeset(ImpactedUser)
| extend Dummy = 1
| join kind=innerunique (
  GitHubUser
  | where TimeGenerated between (starttime .. endtime)
  | distinct ImpactedUser
  | extend Dummy = 1
) on Dummy
| project-away Dummy
| where set_ImpactedUser !contains ImpactedUser);
union GitHubNewActorLogin, GitHubNewUser

Analytic Rule Definition

id: b8508e24-47a6-4f8e-9066-3cc937197e7f
name: GitHub Inactive or New Account Access or Usage
description: |
  'This hunting query identifies Accounts that are new or inactive and have accessed or used GitHub that may be a sign of compromise.'
requiredDataConnectors: []
tactics:
  - Persistence
relevantTechniques:
  - T1136
query: |

  let starttime = todatetime('{{StartTimeISO}}');
  let endtime = todatetime('{{EndTimeISO}}');
  let LearningPeriod = 7d;
  let EndLearningTime = starttime - LearningPeriod;
  let GitHubActorLogin = (GitHubAudit
  | where Actor != "");
  let GitHubUser = (GitHubAudit
  | where ImpactedUser != "");
  let GitHubNewActorLogin = (GitHubActorLogin
  | where TimeGenerated between (EndLearningTime .. starttime)
  | summarize makeset(Actor)
  | extend Dummy = 1
  | join kind=innerunique (
    GitHubActorLogin
    | where TimeGenerated between (starttime .. endtime)
    | distinct Actor
    | extend Dummy = 1
  ) on Dummy
  | project-away Dummy
  | where set_Actor  !contains Actor);
  let GitHubNewUser = ( GitHubUser
  | where TimeGenerated between (EndLearningTime .. starttime)
  | summarize makeset(ImpactedUser)
  | extend Dummy = 1
  | join kind=innerunique (
    GitHubUser
    | where TimeGenerated between (starttime .. endtime)
    | distinct ImpactedUser
    | extend Dummy = 1
  ) on Dummy
  | project-away Dummy
  | where set_ImpactedUser !contains ImpactedUser);
  union GitHubNewActorLogin, GitHubNewUser

MITRE ATT&CK Context

References

False Positive Guidance

Original source: https://github.com/Azure/Azure-Sentinel/blob/main/Hunting Queries/GitHub/Inactive or New Account Usage.yaml