Skip to content
Please update to the latest release 0.77.3 to address Multiple CVEs.
Linux.Forensics.EnvironmentVariables

Linux.Forensics.EnvironmentVariables

This artifact detects potential persistence mechanisms on Linux systems by analyzing environment variable files and login scripts.

MITRE ATT&CK: T1546.004


name: Linux.Forensics.EnvironmentVariables
author: Idan Beit-Yosef @ ibyf0r3ns1cs
description: |
  This artifact detects potential persistence mechanisms on Linux systems by analyzing environment variable files and login scripts.  
  
  **MITRE ATT&CK**: [T1546.004](https://attack.mitre.org/techniques/T1546/004/)

reference:
  - https://unit42.paloaltonetworks.com/unit42-new-iotlinux-malware-targets-dvrs-forms-botnet/
  - https://intezer.com/blog/research/kaiji-new-chinese-linux-malware-turning-to-golang/
  - https://www.anomali.com/blog/illicit-cryptomining-threat-actor-rocke-changes-tactics-now-more-difficult-to-detect
  - https://www.anomali.com/blog/pulling-linux-rabbit-rabbot-malware-out-of-a-hat
  - https://blog.sucuri.net/2018/05/shell-logins-as-a-magento-reinfection-vector.html

parameters:
  - name: LinuxEnvGlobs
    type: csv
    default: |
      Glob
      /home/*/.bashrc
      /home/*/.bash_profile
      /home/*/.bash_login
      /home/*/.profile
      /home/*/.zshrc
      /etc/profile
      /etc/environment
      /home/*/.bash_logout
    
  - name: LoginScriptGlobs
    type: csv
    default: |
        Glob
        /etc/profile.d/*.sh
    
  - name: LinuxEnvModifiers
    default: ^(export|alias)
    type: regex
    
  - name: LinuxEnvNetworkUtils
    default: wget|curl|scp|ssh|nc\s|/usr/bin/nc\s|/bin/nc\s|https?://[^\s]*
    type: regex
    
  - name: LinuxEnvScripting
    default: python|perl|ruby|php|base64
    type: regex
    
precondition: SELECT OS From info() where OS = 'linux'

sources:
    - name: ModifierDetection
      query: |
        LET EnvFiles = SELECT OSPath FROM glob(globs=LinuxEnvGlobs.Glob)
        SELECT * FROM foreach(row=EnvFiles,
            query={
                SELECT Line, OSPath FROM parse_lines(filename=OSPath)
                WHERE
                    Line =~ LinuxEnvModifiers
            })

    - name: NetworkUtilsDetection
      query: |
        LET EnvFiles = SELECT OSPath FROM glob(globs=LinuxEnvGlobs.Glob)
        SELECT * FROM foreach(row=EnvFiles,
            query={
                SELECT Line, OSPath FROM parse_lines(filename=OSPath)
                WHERE
                    Line =~ LinuxEnvNetworkUtils
            })
    
    - name: ScriptingDetection
      query: |
        LET EnvFiles = SELECT OSPath FROM glob(globs=LinuxEnvGlobs.Glob)
        SELECT * FROM foreach(row=EnvFiles,
            query={
                SELECT Line, OSPath FROM parse_lines(filename=OSPath)
                WHERE
                    Line =~ LinuxEnvScripting
            })
            
    - name: LoginScriptsDetection
      query: |
        SELECT OSPath,upload(file=OSPath) AS Upload FROM glob(globs=LoginScriptGlobs.Glob)

        
column_types:
- name: Upload
  type: preview_upload