{
  "technique_id": "T1070",
  "name": "Indicator Removal",
  "priority": "high",
  "status": "complete",
  "version": "0.1.0",
  "last_reviewed": "2026-07-23",
  "generated_by": "SOC Response Atlas by Basyrix",
  "tactics": [
    "Stealth"
  ],
  "platforms": [
    "Containers",
    "ESXi",
    "Linux",
    "macOS",
    "Network Devices",
    "Office Suite",
    "Windows"
  ],
  "summary": "Adversaries may selectively delete or modify artifacts generated to reduce indications of their presence and blend in with legitimate activity. Rather than broadly removing evidence, adversaries may target specific artifacts that appear anomalous or are likely to draw scrutiny, while leaving sufficient data intact to maintain the appearance of normal system behavior...",
  "soc_recommendation": "Investigate Indicator Removal activity in the context of Stealth: confirm scope, affected host/identity, and whether it matches expected administrative behaviour before deciding this is benign.",
  "d3fend_mappings": [
    {
      "id": "D3-AEM",
      "name": "Application Exception Monitoring",
      "relationship": "detect",
      "practical_action": "Monitor for Application Exception Monitoring indicators relevant to this technique.",
      "tooling": [
        "Defender for Endpoint"
      ]
    },
    {
      "id": "D3-FE",
      "name": "File Encryption",
      "relationship": "harden",
      "practical_action": "Apply File Encryption to reduce this technique's viability before an incident occurs.",
      "tooling": [
        "Defender for Endpoint"
      ]
    },
    {
      "id": "D3-FEV",
      "name": "File Eviction",
      "relationship": "evict",
      "practical_action": "Use File Eviction to remove the adversary's foothold once this technique is confirmed.",
      "tooling": [
        "Defender for Endpoint"
      ]
    },
    {
      "id": "D3-NRAM",
      "name": "Network Resource Access Mediation",
      "relationship": "isolate",
      "practical_action": "Apply Network Resource Access Mediation to contain the blast radius once this technique is observed.",
      "tooling": [
        "Sentinel",
        "Defender for Endpoint"
      ]
    }
  ],
  "investigation_steps": {
    "microsoft": [
      "Review Defender for Endpoint / Defender XDR alerts and timeline for the affected host or identity.",
      "Check Sentinel analytics rules and incidents correlated with this technique.",
      "Review Entra ID sign-in and audit logs if the technique involves an identity or cloud resource."
    ],
    "generic": [
      "Confirm whether the observed indicator removal activity matches expected administrative or application behaviour.",
      "Identify the host, account, or resource where the activity occurred and its business criticality.",
      "Check for related alerts before and after this activity to reconstruct the broader intrusion timeline.",
      "Real detection reference: \"Windows Event Log Cleared\" -- Flags the Security (Event 1102) or System (Event 104) log being cleared. Legitimate log clearing is extremely rare - attackers clear logs after compromise to destroy evidence."
    ]
  },
  "evidence_to_collect": [
    "Host or resource affected",
    "Account or identity involved",
    "Timestamp of the activity",
    "Related process, file, or network artifact",
    "Any preceding or follow-on alerts"
  ],
  "response_actions": [
    {
      "name": "Treat as P1 — notify SOC Manager and customer",
      "category": "Response",
      "risk": "Low",
      "automation_safe": true,
      "approval_required": false,
      "tool": "See investigation guide"
    },
    {
      "name": "MDE telemetry is now the primary forensic source — pull all",
      "category": "Response",
      "risk": "Low",
      "automation_safe": false,
      "approval_required": true,
      "tool": "Defender for Endpoint",
      "notes": "MDE telemetry is now the primary forensic source — pull all available data immediately"
    },
    {
      "name": "Isolate device for forensic imaging",
      "category": "Response",
      "risk": "Medium",
      "automation_safe": false,
      "approval_required": true,
      "tool": "See investigation guide"
    },
    {
      "name": "Open full IR investigation — assume compromise preceded the",
      "category": "Response",
      "risk": "Low",
      "automation_safe": true,
      "approval_required": false,
      "tool": "See investigation guide",
      "notes": "Open full IR investigation — assume compromise preceded the log clear"
    }
  ],
  "queries": {
    "kql": [
      {
        "name": "GEN-DE-002 — Windows Event Log Cleared",
        "description": "Flags the Security (Event 1102) or System (Event 104) log being cleared. Legitimate log clearing is extremely rare - attackers clear logs after compromise to destroy evidence. (Source: Bell Integration baseline detection library, mapped via sub-technique T1070.001.)",
        "query": "SecurityEvent\n| where TimeGenerated >= ago(5m)\n| where EventID in (1102, 104)\n| project TimeGenerated, Computer, Account, Activity, EventID\n| extend timestamp = TimeGenerated,\n         HostCustomEntity = Computer,\n         AccountCustomEntity = Account\n| order by TimeGenerated desc"
      },
      {
        "name": "30206b45-75d2-4c6a-87c5-f0861c1f2870 — CYFIRMA - Attack Surface - Configuration High Rule",
        "description": "This alert is generated when CYFIRMA detects a critical misconfiguration in a public-facing asset or service. Such misconfigurations may include exposed admin interfaces, default credentials, open directory listings, or insecure protocols, which significantly increase the attack surface.\" (Source: Microsoft's official Azure-Sentinel Detections (MIT licensed).)",
        "query": "// High Severity - Attack Surface - Misconfiguration Detected\nlet timeFrame = 5m;\nCyfirmaASConfigurationAlerts_CL\n| where severity == 'Critical' and TimeGenerated between (ago(timeFrame) .. now())\n| extend\n    Description=description,\n    FirstSeen=first_seen,\n    LastSeen=last_seen,\n    RiskScore=risk_score,\n    Domain=sub_domain,\n    TopDomain=top_domain,\n    NetworkIP=ip,\n    AlertUID=alert_uid,\n    UID=uid,\n    Softwares=software,\n    WebAppFirewall=web_app_firewall,\n    ClickJackingDefence=click_jacking_defence,\n    ContentSecurityPolicy=content_security_policy,\n    CookieXssProtection=cookie_xss_protection,\n    DataInjectionDefence=data_injection_defence,\n    DomainStatus=domain_status,\n    MissingEPPCodes=missing_epp_codes,\n    SecureCookie=secure_cookie,\n    SetCookieHttpsOnly=set_cookie_https_only,\n    XFrameOptions=x_frame_options,\n    X_XssProtection=x_xss_protection,\n    ProviderName='CYFIRMA',\n    ProductName='DeCYFIR/DeTCT'\n| project\n    TimeGenerated,\n    Description,\n    Domain,\n    TopDomain,\n    RiskScore,\n    FirstSeen,\n    LastSeen,\n    NetworkIP,\n    AlertUID,\n    UID,\n    Softwares,\n    WebAppFirewall,\n    ClickJackingDefence,\n    ContentSecurityPolicy,\n    CookieXssProtection,\n    DataInjectionDefence,\n    DomainStatus,\n    MissingEPPCodes,\n    SecureCookie,\n    SetCookieHttpsOnly,\n    XFrameOptions,\n    X_XssProtection,\n    ProviderName,\n    ProductName"
      },
      {
        "name": "6d70a26a-c119-45b7-b4c6-44ac4fd1bcb7 — McAfee ePO - Threat was not blocked",
        "description": "Detects when a threat was not blocked on a host.' (Source: Microsoft's official Azure-Sentinel Detections (MIT licensed).)",
        "query": "McAfeeEPOEvent\n| where ThreatActionTaken in~ ('none', 'IDS_ACTION_WOULD_BLOCK')\n| extend IPCustomEntity = DvcIpAddr"
      }
    ],
    "spl": [],
    "esql": [
      {
        "name": "0ef5d3eb-67ef-43ab-93b7-305cfa5a21f6 — Sensitive Audit Policy Sub-Category Disabled",
        "description": "(ESQL) Identifies attempts to disable auditing for some security sensitive audit policy sub-categories. This is often done by attackers in an attempt to evade detection and forensics on a system. (Source: Elastic's official detection-rules repository (Elastic License v2).)",
        "query": "from logs-windows.forwarded*, logs-system.security* metadata _id, _version, _index\n| where host.os.type == \"windows\" and event.code == \"4719\" and\n  winlog.event_data.AuditPolicyChangesDescription in (\"Success removed\", \"Success Added\") and\n  winlog.event_data.SubCategory in (\n    \"Logon\",\n    \"Audit Policy Change\",\n    \"Process Creation\",\n    \"Other System Events\",\n    \"Security Group Management\",\n    \"User Account Management\"\n  )\n| eval Esql.time_window = DATE_TRUNC(5m, @timestamp)\n\n// Aggregate policy changes within each 5m window per host and sub-category,\n// then keep only removals that were not re-enabled in the same window\n| inline stats\n    Esql.winlog_AuditPolicyChangesDescription_values = VALUES(winlog.event_data.AuditPolicyChangesDescription)\n  by host.id, winlog.event_data.SubCategory, Esql.time_window\n| where winlog.event_data.AuditPolicyChangesDescription == \"Success removed\" and not MV_CONTAINS(Esql.winlog_AuditPolicyChangesDescription_values, \"Success Added\")\n\n// Wait 5m for a potential \"Success Added\" to arrive before alerting\n| where @timestamp < NOW() - 5m\n| keep *"
      },
      {
        "name": "cebabc1e-1145-4e39-b04b-34d621ee1e2c — Shell Command-Line History Deletion Detected via Defend for Containers",
        "description": "(EQL) This rule detects the deletion of shell command-line history files inside a container. The shell command-line history files are used to store the command-line history for the shell. Adversaries may delete these files to cover their tracks or evade detection. (Source: Elastic's official detection-rules repository (Elastic License v2).)",
        "query": "any where host.os.type == \"linux\" and event.category in (\"file\", \"process\") and process.interactive == true and container.id like \"?*\" and (\n  (event.category == \"file\" and event.type == \"deletion\" and file.name in (\".bash_history\", \".sh_history\",  \".zsh_history\")) or\n  (event.category == \"process\" and event.type == \"start\" and event.action == \"exec\" and (\n    (\n      (\n        process.args in (\n          \"rm\", \"/bin/rm\", \"/usr/bin/rm\", \"/usr/local/bin/rm\",\n          \"echo\", \"/bin/echo\", \"/usr/bin/echo\", \"/usr/local/bin/echo\"\n        ) or\n        (process.args in (\"ln\", \"/bin/ln\", \"/usr/bin/ln\", \"/usr/local/bin/ln\") and process.args == \"-sf\" and process.args == \"/dev/null\") or\n        (process.args in (\"truncate\", \"/bin/truncate\", \"/usr/bin/truncate\", \"/usr/local/bin/truncate\") and process.args == \"-s0\")\n      ) and process.args like (\"*.bash_history*\", \"*.sh_history*\", \"*.zsh_history*\")\n    ) or\n    (process.name == \"history\" and process.args == \"-c\") or\n    (process.args == \"export\" and process.args in (\"HISTFILE=/dev/null\", \"HISTFILESIZE=0\")) or\n    (process.args == \"unset\" and process.args == \"HISTFILE\") or\n    (process.args == \"set\" and process.args == \"history\" and process.args == \"+o\")\n  )\n )\n)"
      }
    ]
  },
  "automation": {
    "safe": [
      "Add recommendation as Sentinel incident comment.",
      "Run enrichment queries.",
      "Create ServiceNow SecOps task."
    ],
    "approval_required": [
      "Contain or disable the affected host/account.",
      "Any change to production configuration."
    ]
  },
  "escalation_criteria": [
    "Indicator Removal activity observed on a privileged account or critical system.",
    "Activity follows or precedes other suspicious behaviour in the same investigation.",
    "Automated triage cannot confidently rule out malicious intent."
  ],
  "false_positive_considerations": [
    "Legitimate administrative or maintenance activity matching this pattern.",
    "Approved security testing or red team exercise.",
    "Known benign software producing similar telemetry."
  ],
  "confluence": {
    "title": "T1070 - Indicator Removal Response Guidance",
    "labels": [
      "mitre",
      "attack",
      "d3fend",
      "secops",
      "basyrix"
    ],
    "sections": [
      "summary",
      "d3fend_mappings",
      "investigation_steps",
      "response_actions",
      "queries",
      "automation",
      "escalation_criteria",
      "false_positive_considerations"
    ]
  }
}