Interactive Terminal Spawned via Python

edit

Identifies when a terminal (tty) is spawned via Python. Attackers may upgrade a simple reverse shell to a fully interactive tty after obtaining initial access to a host.

Rule type: query

Rule indices:

  • auditbeat-*
  • logs-endpoint.events.*

Severity: high

Risk score: 73

Runs every: 5 minutes

Searches indices from: now-9m (Date Math format, see also Additional look-back time)

Maximum alerts per execution: 100

Tags:

  • Elastic
  • Host
  • Linux
  • Threat Detection
  • Execution

Version: 10 (version history)

Added (Elastic Stack release): 7.8.0

Last modified (Elastic Stack release): 8.4.0

Rule authors: Elastic

Rule license: Elastic License v2

Rule query

edit
event.category:process and event.type:(start or process_started) and
process.name:python* and process.args:("import pty;
pty.spawn(\"/bin/sh\")" or "import pty;
pty.spawn(\"/bin/dash\")" or "import pty;
pty.spawn(\"/bin/bash\")")

Threat mapping

edit

Framework: MITRE ATT&CKTM

Rule version history

edit
Version 10 (8.4.0 release)
  • Formatting only
Version 9 (8.3.0 release)
  • Formatting only
Version 7 (8.2.0 release)
  • Updated query, changed from:

    event.category:process and event.type:(start or process_started) and
    process.name:python and process.args:("import pty;
    pty.spawn(\"/bin/sh\")" or "import pty;
    pty.spawn(\"/bin/dash\")" or "import pty;
    pty.spawn(\"/bin/bash\")")
Version 6 (7.12.0 release)
  • Formatting only
Version 5 (7.11.2 release)
  • Formatting only
Version 4 (7.10.0 release)
  • Formatting only
Version 3 (7.9.1 release)
  • Formatting only
Version 2 (7.9.0 release)
  • Updated query, changed from:

    event.action:executed and process.name:python and
    process.args:("import pty; pty.spawn(\"/bin/sh\")" or "import pty;
    pty.spawn(\"/bin/dash\")" or "import pty; pty.spawn(\"/bin/bash\")")