Detection rules › Sigma

Python Initiated Connection

Status
test
Severity
medium
Log source
product windows, category network_connection
Author
frack113
Source
github.com/SigmaHQ/sigma

Detects a Python process initiating a network connection. While this often relates to package installation, it can also indicate a potential malicious script communicating with a C&C server.

MITRE ATT&CK coverage

TacticTechniques
DiscoveryT1046 Network Service Discovery

Event coverage

ProviderEventTitle
SysmonEvent ID 3Network connection

Rule body yaml

title: Python Initiated Connection
id: bef0bc5a-b9ae-425d-85c6-7b2d705980c6
status: test
description: Detects a Python process initiating a network connection. While this often relates to package installation, it can also indicate a potential malicious script communicating with a C&C server.
references:
    - https://github.com/redcanaryco/atomic-red-team/blob/f339e7da7d05f6057fdfcdd3742bfcf365fee2a9/atomics/T1046/T1046.md#atomic-test-4---port-scan-using-python
    - https://pypi.org/project/scapy/
author: frack113
date: 2021-12-10
modified: 2025-03-05
tags:
    - attack.discovery
    - attack.t1046
logsource:
    category: network_connection
    product: windows
    definition: 'Requirements: Field enrichment is required for the filters to work. As field such as CommandLine and ParentImage are not available by default on this event type'
detection:
    selection:
        Initiated: 'true'
        Image|contains|all:
            - '\python'
            - '.exe'
    filter_optional_conda:
        # Related to anaconda updates. Command example: "conda update conda"
        # This filter will only work with aurora agent enriched data as Sysmon EID 3 doesn't contain CommandLine nor ParentImage
        ParentImage: C:\ProgramData\Anaconda3\Scripts\conda.exe
        CommandLine|contains|all:
            - ':\ProgramData\Anaconda3\Scripts\conda-script.py'
            - 'update'
    filter_optional_conda_jupyter_notebook:
        # Related to anaconda opening an instance of Jupyter Notebook
        # This filter will only work with aurora agent enriched data as Sysmon EID 3 doesn't contain CommandLine nor ParentImage
        ParentImage: C:\ProgramData\Anaconda3\python.exe
        CommandLine|contains: 'C:\ProgramData\Anaconda3\Scripts\jupyter-notebook-script.py'
    filter_main_local_communication:
        # This could be caused when launching an instance of Jupyter Notebook locally for example but can also be caused by other instances of python opening sockets locally etc. So comment this out if you want to monitor for those instances
        DestinationIp: 127.0.0.1
        SourceIp: 127.0.0.1
    filter_main_pip:
        CommandLine|contains|all:
            - 'pip.exe'
            - 'install'
    condition: selection and not 1 of filter_main_* and not 1 of filter_optional_*
falsepositives:
    - Legitimate python scripts using the socket library or similar will trigger this. Apply additional filters and perform an initial baseline before deploying.
level: medium

Stages and Predicates

Stage 0: condition

selection and not 1 of filter_main_* and not 1 of filter_optional_*

Stage 1: selection

selection:
    Initiated: 'true'
    Image|contains|all:
        - '\python'
        - '.exe'

Stage 2: not filter_main_*

filter_main_local_communication:
    DestinationIp: 127.0.0.1
    SourceIp: 127.0.0.1
filter_main_pip:
    CommandLine|contains|all:
        - 'pip.exe'
        - 'install'

Stage 3: not filter_optional_*

filter_optional_conda:
    ParentImage: C:\ProgramData\Anaconda3\Scripts\conda.exe
    CommandLine|contains|all:
        - ':\ProgramData\Anaconda3\Scripts\conda-script.py'
        - 'update'
filter_optional_conda_jupyter_notebook:
    ParentImage: C:\ProgramData\Anaconda3\python.exe
    CommandLine|contains: 'C:\ProgramData\Anaconda3\Scripts\jupyter-notebook-script.py'

Exclusions

Top-level NOT(...) conjuncts: predicates this rule actively suppresses.

FieldKindExcluded values
CommandLinematchinstall
CommandLinematchpip.exe
DestinationIpeq127.0.0.1
SourceIpeq127.0.0.1
CommandLinematch:\ProgramData\Anaconda3\Scripts\conda-script.py
CommandLinematchupdate
ParentImageeqC:\ProgramData\Anaconda3\Scripts\conda.exe
CommandLinematchC:\ProgramData\Anaconda3\Scripts\jupyter-notebook-script.py
ParentImageeqC:\ProgramData\Anaconda3\python.exe

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
Imagematch
  • .exe
  • \python corpus 3 (sigma 3)
Initiatedeq
  • true corpus 50 (sigma 50)