[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71ESXGAFS618FASBWVHGDT3":3,"skill-same:01M71ESXGAFS618FASBWVHGDT3":90},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":63,"commitSha":64,"skillDirectory":65,"forksCount":14,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":6,"ownerDescription":68,"updatedAt":69,"install":70,"resources":83},"01M71ESXGAFS618FASBWVHGDT3","logging-sysartifacts-persist",null,"Examine Linux system artifacts including auth logs, cron jobs, shell history, and system configuration to uncover evidence of compromise or unauthorized activity.","DCx7C5\u002Fai-marketplace","DCx7C5","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F42419559?v=4","01M71C01G2AZV3NTNGWAWSHJPP","DC","01M71C01GQW6G50S2BYMS7PP3E",0,"MIT","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Flinux\u002Flogging\u002Fsysartifacts\u002Fpersist\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"logging sysartifacts persist","logging","persist","digital-forensics","activity","read","de","uncover","log","logs","incident-investigation","persistence-detection","analysis","log-analysis","Bash","system-artifacts","linux-forensics","cybersecurity","incident","auth","2026-11-10 10:12:30",false,"---\nname: logging-sysartifacts-persist\ndescription: Examine Linux system artifacts including auth logs, cron jobs, shell history, and system configuration to uncover evidence of compromise or unauthorized activity.\ndomain: cybersecurity\nsubdomain: digital-forensics\ntags:\n- forensics\n- linux-forensics\n- system-artifacts\n- log-analysis\n- persistence-detection\n- incident-investigation\nnist_csf:\n- RS.AN-01\n- RS.AN-03\n- DE.AE-02\n- RS.MA-01\nmodel: sonnet\nmaxTurns: 20\ntools: [Read, Bash, Glob, Grep]\nmitre_attack:\n- T1053.003\n- T1059\n- T1070\n- T1547\ncapec: []\n---\n\n# Analyzing Linux System Artifacts\n\n## When to Use\n- When investigating a compromised Linux server or workstation\n- For identifying persistence mechanisms (cron, systemd, SSH keys)\n- When tracing user activity through shell history and authentication logs\n- During incident response to determine the scope of a Linux-based breach\n- For detecting rootkits, backdoors, and unauthorized modifications\n\n## Prerequisites\n- Forensic image or live access to the Linux system (read-only)\n- Understanding of Linux file system hierarchy (FHS)\n- Knowledge of common Linux logging locations (\u002Fvar\u002Flog\u002F)\n- Tools: chkrootkit, rkhunter, AIDE, auditd logs\n- Familiarity with systemd, cron, and PAM configurations\n- Root access for complete artifact collection\n\n## Workflow\n\n### Step 1: Mount and Collect System Artifacts\n\n```bash\n# Mount forensic image read-only\nmount -o ro,loop,offset=$((2048*512)) \u002Fcases\u002Fcase-2024-001\u002Fimages\u002Flinux_evidence.dd \u002Fmnt\u002Fevidence\n\n# Create collection directories\nmkdir -p \u002Fcases\u002Fcase-2024-001\u002Flinux\u002F{logs,config,users,persistence,network}\n\n# Collect authentication logs\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fauth.log* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fsecure* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fsyslog* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fkern.log* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Faudit\u002Faudit.log* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fwtmp \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fbtmp \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Flastlog \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Ffaillog \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\n\n# Collect user artifacts\nfor user_dir in \u002Fmnt\u002Fevidence\u002Fhome\u002F*\u002F; do\n    username=$(basename \"$user_dir\")\n    mkdir -p \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\n    cp \"$user_dir\"\u002F.bash_history \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.zsh_history \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp -r \"$user_dir\"\u002F.ssh\u002F \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.bashrc \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.profile \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.viminfo \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.wget-hsts \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.python_history \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\ndone\n\n# Collect root user artifacts\ncp \u002Fmnt\u002Fevidence\u002Froot\u002F.bash_history \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002Froot\u002F 2>\u002Fdev\u002Fnull\ncp -r \u002Fmnt\u002Fevidence\u002Froot\u002F.ssh\u002F \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002Froot\u002F 2>\u002Fdev\u002Fnull\n\n# Collect system configuration\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fpasswd \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fshadow \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fgroup \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fsudoers \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp -r \u002Fmnt\u002Fevidence\u002Fetc\u002Fsudoers.d\u002F \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fhosts \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fresolv.conf \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp -r \u002Fmnt\u002Fevidence\u002Fetc\u002Fssh\u002F \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\n```\n\n### Step 2: Analyze User Accounts and Authentication\n\n```bash\n# Analyze user accounts for anomalies\npython3 \u003C\u003C 'PYEOF'\nprint(\"=== USER ACCOUNT ANALYSIS ===\\n\")\n\n# Parse \u002Fetc\u002Fpasswd\nwith open('\u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002Fpasswd') as f:\n    for line in f:\n        parts = line.strip().split(':')\n        if len(parts) >= 7:\n            username, _, uid, gid, comment, home, shell = parts[0], parts[1], int(parts[2]), int(parts[3]), parts[4], parts[5], parts[6]\n\n            # Flag accounts with UID 0 (root equivalent)\n            if uid == 0 and username != 'root':\n                print(f\"  ALERT: UID 0 account: {username} (shell: {shell})\")\n\n            # Flag accounts with login shells that shouldn't have them\n            if shell not in ('\u002Fbin\u002Ffalse', '\u002Fusr\u002Fsbin\u002Fnologin', '\u002Fbin\u002Fsync') and uid >= 1000:\n                print(f\"  User: {username} (UID:{uid}, Shell:{shell}, Home:{home})\")\n\n            # Flag system accounts with login shells\n            if uid \u003C 1000 and uid > 0 and shell in ('\u002Fbin\u002Fbash', '\u002Fbin\u002Fsh', '\u002Fbin\u002Fzsh'):\n                print(f\"  WARNING: System account with shell: {username} (UID:{uid}, Shell:{shell})\")\n\n# Parse \u002Fetc\u002Fshadow for account status\nprint(\"\\n=== PASSWORD STATUS ===\")\nwith open('\u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002Fshadow') as f:\n    for line in f:\n        parts = line.strip().split(':')\n        if len(parts) >= 3:\n            username = parts[0]\n            pwd_hash = parts[1]\n            last_change = parts[2]\n\n            if pwd_hash and pwd_hash not in ('*', '!', '!!', ''):\n                hash_type = 'Unknown'\n                if pwd_hash.startswith('$6$'): hash_type = 'SHA-512'\n                elif pwd_hash.startswith('$5$'): hash_type = 'SHA-256'\n                elif pwd_hash.startswith('$y$'): hash_type = 'yescrypt'\n                elif pwd_hash.startswith('$1$'): hash_type = 'MD5 (WEAK)'\n                print(f\"  {username}: {hash_type} hash, last changed: day {last_change}\")\nPYEOF\n\n# Analyze login history\nlast -f \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002Fwtmp > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Flogin_history.txt\nlastb -f \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002Fbtmp > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Ffailed_logins.txt 2>\u002Fdev\u002Fnull\n```\n\n### Step 3: Examine Persistence Mechanisms\n\n```bash\n# Check cron jobs for all users\necho \"=== CRON JOBS ===\" > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n\n# System cron\nfor cronfile in \u002Fmnt\u002Fevidence\u002Fetc\u002Fcrontab \u002Fmnt\u002Fevidence\u002Fetc\u002Fcron.d\u002F*; do\n    echo \"--- $cronfile ---\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n    cat \"$cronfile\" 2>\u002Fdev\u002Fnull >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n    echo \"\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\ndone\n\n# User cron tabs\nfor cronfile in \u002Fmnt\u002Fevidence\u002Fvar\u002Fspool\u002Fcron\u002Fcrontabs\u002F*; do\n    echo \"--- User crontab: $(basename $cronfile) ---\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n    cat \"$cronfile\" 2>\u002Fdev\u002Fnull >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n    echo \"\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\ndone\n\n# Check systemd services for persistence\necho \"=== SYSTEMD SERVICES ===\" > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\nfind \u002Fmnt\u002Fevidence\u002Fetc\u002Fsystemd\u002Fsystem\u002F -name \"*.service\" -newer \u002Fmnt\u002Fevidence\u002Fetc\u002Fos-release \\\n   >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\n\nfor svc in \u002Fmnt\u002Fevidence\u002Fetc\u002Fsystemd\u002Fsystem\u002F*.service; do\n    echo \"--- $(basename $svc) ---\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\n    cat \"$svc\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\n    echo \"\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\ndone\n\n# Check authorized SSH keys (backdoor detection)\necho \"=== SSH AUTHORIZED KEYS ===\" > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fssh_keys.txt\nfind \u002Fmnt\u002Fevidence\u002Fhome\u002F \u002Fmnt\u002Fevidence\u002Froot\u002F -name \"authorized_keys\" -exec sh -c \\\n   'echo \"--- {} ---\"; cat {}; echo \"\"' \\; >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fssh_keys.txt\n\n# Check rc.local and init scripts\ncat \u002Fmnt\u002Fevidence\u002Fetc\u002Frc.local 2>\u002Fdev\u002Fnull > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Frc_local.txt\n\n# Check \u002Fetc\u002Fprofile.d\u002F for login-triggered scripts\nls -la \u002Fmnt\u002Fevidence\u002Fetc\u002Fprofile.d\u002F > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fprofile_scripts.txt\n\n# Check for LD_PRELOAD hijacking\ngrep -r \"LD_PRELOAD\" \u002Fmnt\u002Fevidence\u002Fetc\u002F 2>\u002Fdev\u002Fnull > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fld_preload.txt\ncat \u002Fmnt\u002Fevidence\u002Fetc\u002Fld.so.preload 2>\u002Fdev\u002Fnull >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fld_preload.txt\n```\n\n### Step 4: Analyze Shell History and Command Execution\n\n```bash\n# Analyze bash history for each user\npython3 \u003C\u003C 'PYEOF'\nimport os, glob\n\nprint(\"=== SHELL HISTORY ANALYSIS ===\\n\")\n\nsuspicious_commands = [\n    'wget', 'curl', 'nc ', 'ncat', 'netcat', 'python -c', 'python3 -c',\n    'perl -e', 'base64', 'chmod 777', 'chmod +s', '\u002Fdev\u002Ftcp', '\u002Fdev\u002Fudp',\n    'nmap', 'masscan', 'hydra', 'john', 'hashcat', 'passwd', 'useradd',\n    'iptables -F', 'ufw disable', 'history -c', 'rm -rf \u002F', 'dd if=',\n    'crontab', 'at ', 'systemctl enable', 'ssh-keygen', 'scp ', 'rsync',\n    'tar czf', 'zip -r', 'openssl enc', 'gpg --encrypt', 'shred',\n    'chattr', 'setfacl', 'awk', '\u002Ftmp\u002F', '\u002Fdev\u002Fshm\u002F'\n]\n\nfor hist_file in glob.glob('\u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F*\u002F.bash_history'):\n    username = hist_file.split('\u002F')[-2]\n    print(f\"User: {username}\")\n\n    with open(hist_file, 'r', errors='ignore') as f:\n        lines = f.readlines()\n\n    print(f\"  Total commands: {len(lines)}\")\n    flagged = []\n    for i, line in enumerate(lines):\n        line = line.strip()\n        for cmd in suspicious_commands:\n            if cmd in line.lower():\n                flagged.append((i+1, line))\n                break\n\n    if flagged:\n        print(f\"  Suspicious commands: {len(flagged)}\")\n        for lineno, cmd in flagged:\n            print(f\"    Line {lineno}: {cmd[:120]}\")\n    print()\nPYEOF\n```\n\n### Step 5: Check for Rootkits and Modified Binaries\n\n```bash\n# Check for known rootkit indicators\n# Compare system binary hashes against known-good\nfind \u002Fmnt\u002Fevidence\u002Fusr\u002Fbin\u002F \u002Fmnt\u002Fevidence\u002Fusr\u002Fsbin\u002F \u002Fmnt\u002Fevidence\u002Fbin\u002F \u002Fmnt\u002Fevidence\u002Fsbin\u002F \\\n   -type f -executable -exec sha256sum {} \\; > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fbinary_hashes.txt\n\n# Check for SUID\u002FSGID binaries (potential privilege escalation)\nfind \u002Fmnt\u002Fevidence\u002F -perm -4000 -type f 2>\u002Fdev\u002Fnull > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fsuid_files.txt\nfind \u002Fmnt\u002Fevidence\u002F -perm -2000 -type f 2>\u002Fdev\u002Fnull > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fsgid_files.txt\n\n# Check for suspicious files in \u002Ftmp and \u002Fdev\u002Fshm\nfind \u002Fmnt\u002Fevidence\u002Ftmp\u002F \u002Fmnt\u002Fevidence\u002Fdev\u002Fshm\u002F -type f 2>\u002Fdev\u002Fnull \\\n   -exec file {} \\; > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Ftmp_files.txt\n\n# Check for hidden files and directories\nfind \u002Fmnt\u002Fevidence\u002F -name \".*\" -not -path \"*\u002F\\.\" -type f 2>\u002Fdev\u002Fnull | \\\n   head -100 > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fhidden_files.txt\n\n# Check kernel modules\nls -la \u002Fmnt\u002Fevidence\u002Flibs\u002Fmodules\u002F$(ls \u002Fmnt\u002Fevidence\u002Flibs\u002Fmodules\u002F | head -1)\u002Fextra\u002F 2>\u002Fdev\u002Fnull \\\n   > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fextra_modules.txt\n\n# Check for modified PAM configuration (authentication backdoors)\ndiff \u002Fmnt\u002Fevidence\u002Fetc\u002Fpam.d\u002F \u002Fcases\u002Fbaseline\u002Fpam.d\u002F 2>\u002Fdev\u002Fnull \\\n   > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fpam_changes.txt\n```\n\n## Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| \u002Fvar\u002Flog\u002Fauth.log | Primary authentication log on Debian\u002FUbuntu systems |\n| \u002Fvar\u002Flog\u002Fsecure | Primary authentication log on RHEL\u002FCentOS systems |\n| wtmp\u002Fbtmp | Binary logs recording successful and failed login sessions |\n| .bash_history | User command history file (can be cleared by attackers) |\n| crontab | Scheduled task system commonly used for persistence |\n| authorized_keys | SSH public keys granting passwordless access to an account |\n| SUID bit | File permission allowing execution as the file owner (privilege escalation vector) |\n| LD_PRELOAD | Environment variable that loads a shared library before all others (hooking technique) |\n\n## Tools & Systems\n\n| Tool | Purpose |\n|------|---------|\n| chkrootkit | Rootkit detection scanner for Linux systems |\n| rkhunter | Rootkit Hunter - checks for rootkits, backdoors, and local exploits |\n| AIDE | Advanced Intrusion Detection Environment - file integrity monitor |\n| auditd | Linux audit framework for system call and file access monitoring |\n| last\u002Flastb | Parse wtmp\u002Fbtmp for login and failed login history |\n| Plaso\u002Flog2timeline | Super-timeline creation including Linux artifacts |\n| osquery | SQL-based system querying for live forensic investigation |\n| Velociraptor | Endpoint agent with Linux artifact collection capabilities |\n\n## Common Scenarios\n\n**Scenario 1: SSH Brute Force Followed by Compromise**\nAnalyze auth.log for failed SSH attempts followed by success, identify the attacking IP, check .bash_history for post-compromise commands, examine authorized_keys for added backdoor keys, check crontab for persistence, review network connections.\n\n**Scenario 2: Web Server Compromise via Application Vulnerability**\nExamine web server access and error logs for exploitation attempts, check \u002Ftmp and \u002Fdev\u002Fshm for webshells, analyze the web server user's activity (www-data), check for privilege escalation via SUID binaries or kernel exploits, review outbound connections.\n\n**Scenario 3: Insider Threat on Database Server**\nAnalyze the suspect user's bash_history for database dump commands, check for large tar\u002Fzip files in home directory or \u002Ftmp, examine scp\u002Frsync commands for data transfer, review cron jobs for automated exfiltration, check USB device logs.\n\n**Scenario 4: Crypto-Miner on Cloud Instance**\nCheck for high-CPU processes in \u002Fproc (live) or systemd service files, examine crontab entries for miner restart scripts, check \u002Ftmp for mining binaries, analyze network connections for mining pool communications, review authorized_keys for attacker access.\n\n## Output Format\n\n```\nLinux Forensics Summary:\n  System: webserver01 (Ubuntu 22.04 LTS)\n  Hostname: webserver01.corp.local\n  Kernel: 5.15.0-91-generic\n\n  User Accounts:\n    Total: 25 (3 with UID 0 - 1 ANOMALOUS)\n    Interactive shells: 8 users\n    Recently created: admin2 (created 2024-01-15)\n\n  Authentication Events:\n    Successful SSH logins: 456\n    Failed SSH attempts: 12,345 (from 23 unique IPs)\n    Sudo executions: 89\n\n  Persistence Mechanisms Found:\n    Cron jobs: 3 suspicious (reverse shell, miner restart)\n    Systemd services: 1 unknown (update-checker.service)\n    SSH keys: 2 unauthorized keys in root authorized_keys\n    rc.local: Modified with download cradle\n\n  Suspicious Activity:\n    - bash_history contains wget to pastebin URL\n    - SUID binary \u002Ftmp\u002F.hidden\u002Fescalate found\n    - \u002Fdev\u002Fshm\u002F contains compiled ELF binary\n    - LD_PRELOAD in \u002Fetc\u002Fld.so.preload pointing to \u002Flib\u002F.hidden.so\n\n  Report: \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002F\n```\n","# Analyzing Linux System Artifacts\n\n## When to Use\n- When investigating a compromised Linux server or workstation\n- For identifying persistence mechanisms (cron, systemd, SSH keys)\n- When tracing user activity through shell history and authentication logs\n- During incident response to determine the scope of a Linux-based breach\n- For detecting rootkits, backdoors, and unauthorized modifications\n\n## Prerequisites\n- Forensic image or live access to the Linux system (read-only)\n- Understanding of Linux file system hierarchy (FHS)\n- Knowledge of common Linux logging locations (\u002Fvar\u002Flog\u002F)\n- Tools: chkrootkit, rkhunter, AIDE, auditd logs\n- Familiarity with systemd, cron, and PAM configurations\n- Root access for complete artifact collection\n\n## Workflow\n\n### Step 1: Mount and Collect System Artifacts\n\n```bash\n# Mount forensic image read-only\nmount -o ro,loop,offset=$((2048*512)) \u002Fcases\u002Fcase-2024-001\u002Fimages\u002Flinux_evidence.dd \u002Fmnt\u002Fevidence\n\n# Create collection directories\nmkdir -p \u002Fcases\u002Fcase-2024-001\u002Flinux\u002F{logs,config,users,persistence,network}\n\n# Collect authentication logs\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fauth.log* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fsecure* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fsyslog* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fkern.log* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Faudit\u002Faudit.log* \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fwtmp \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Fbtmp \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Flastlog \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\ncp \u002Fmnt\u002Fevidence\u002Fvar\u002Flog\u002Ffaillog \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002F\n\n# Collect user artifacts\nfor user_dir in \u002Fmnt\u002Fevidence\u002Fhome\u002F*\u002F; do\n    username=$(basename \"$user_dir\")\n    mkdir -p \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\n    cp \"$user_dir\"\u002F.bash_history \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.zsh_history \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp -r \"$user_dir\"\u002F.ssh\u002F \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.bashrc \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.profile \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.viminfo \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.wget-hsts \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\n    cp \"$user_dir\"\u002F.python_history \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F$username\u002F 2>\u002Fdev\u002Fnull\ndone\n\n# Collect root user artifacts\ncp \u002Fmnt\u002Fevidence\u002Froot\u002F.bash_history \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002Froot\u002F 2>\u002Fdev\u002Fnull\ncp -r \u002Fmnt\u002Fevidence\u002Froot\u002F.ssh\u002F \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002Froot\u002F 2>\u002Fdev\u002Fnull\n\n# Collect system configuration\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fpasswd \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fshadow \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fgroup \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fsudoers \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp -r \u002Fmnt\u002Fevidence\u002Fetc\u002Fsudoers.d\u002F \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fhosts \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp \u002Fmnt\u002Fevidence\u002Fetc\u002Fresolv.conf \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\ncp -r \u002Fmnt\u002Fevidence\u002Fetc\u002Fssh\u002F \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002F\n```\n\n### Step 2: Analyze User Accounts and Authentication\n\n```bash\n# Analyze user accounts for anomalies\npython3 \u003C\u003C 'PYEOF'\nprint(\"=== USER ACCOUNT ANALYSIS ===\\n\")\n\n# Parse \u002Fetc\u002Fpasswd\nwith open('\u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002Fpasswd') as f:\n    for line in f:\n        parts = line.strip().split(':')\n        if len(parts) >= 7:\n            username, _, uid, gid, comment, home, shell = parts[0], parts[1], int(parts[2]), int(parts[3]), parts[4], parts[5], parts[6]\n\n            # Flag accounts with UID 0 (root equivalent)\n            if uid == 0 and username != 'root':\n                print(f\"  ALERT: UID 0 account: {username} (shell: {shell})\")\n\n            # Flag accounts with login shells that shouldn't have them\n            if shell not in ('\u002Fbin\u002Ffalse', '\u002Fusr\u002Fsbin\u002Fnologin', '\u002Fbin\u002Fsync') and uid >= 1000:\n                print(f\"  User: {username} (UID:{uid}, Shell:{shell}, Home:{home})\")\n\n            # Flag system accounts with login shells\n            if uid \u003C 1000 and uid > 0 and shell in ('\u002Fbin\u002Fbash', '\u002Fbin\u002Fsh', '\u002Fbin\u002Fzsh'):\n                print(f\"  WARNING: System account with shell: {username} (UID:{uid}, Shell:{shell})\")\n\n# Parse \u002Fetc\u002Fshadow for account status\nprint(\"\\n=== PASSWORD STATUS ===\")\nwith open('\u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fconfig\u002Fshadow') as f:\n    for line in f:\n        parts = line.strip().split(':')\n        if len(parts) >= 3:\n            username = parts[0]\n            pwd_hash = parts[1]\n            last_change = parts[2]\n\n            if pwd_hash and pwd_hash not in ('*', '!', '!!', ''):\n                hash_type = 'Unknown'\n                if pwd_hash.startswith('$6$'): hash_type = 'SHA-512'\n                elif pwd_hash.startswith('$5$'): hash_type = 'SHA-256'\n                elif pwd_hash.startswith('$y$'): hash_type = 'yescrypt'\n                elif pwd_hash.startswith('$1$'): hash_type = 'MD5 (WEAK)'\n                print(f\"  {username}: {hash_type} hash, last changed: day {last_change}\")\nPYEOF\n\n# Analyze login history\nlast -f \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002Fwtmp > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Flogin_history.txt\nlastb -f \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Flogs\u002Fbtmp > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Ffailed_logins.txt 2>\u002Fdev\u002Fnull\n```\n\n### Step 3: Examine Persistence Mechanisms\n\n```bash\n# Check cron jobs for all users\necho \"=== CRON JOBS ===\" > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n\n# System cron\nfor cronfile in \u002Fmnt\u002Fevidence\u002Fetc\u002Fcrontab \u002Fmnt\u002Fevidence\u002Fetc\u002Fcron.d\u002F*; do\n    echo \"--- $cronfile ---\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n    cat \"$cronfile\" 2>\u002Fdev\u002Fnull >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n    echo \"\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\ndone\n\n# User cron tabs\nfor cronfile in \u002Fmnt\u002Fevidence\u002Fvar\u002Fspool\u002Fcron\u002Fcrontabs\u002F*; do\n    echo \"--- User crontab: $(basename $cronfile) ---\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n    cat \"$cronfile\" 2>\u002Fdev\u002Fnull >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\n    echo \"\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fcron_analysis.txt\ndone\n\n# Check systemd services for persistence\necho \"=== SYSTEMD SERVICES ===\" > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\nfind \u002Fmnt\u002Fevidence\u002Fetc\u002Fsystemd\u002Fsystem\u002F -name \"*.service\" -newer \u002Fmnt\u002Fevidence\u002Fetc\u002Fos-release \\\n   >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\n\nfor svc in \u002Fmnt\u002Fevidence\u002Fetc\u002Fsystemd\u002Fsystem\u002F*.service; do\n    echo \"--- $(basename $svc) ---\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\n    cat \"$svc\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\n    echo \"\" >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fsystemd_analysis.txt\ndone\n\n# Check authorized SSH keys (backdoor detection)\necho \"=== SSH AUTHORIZED KEYS ===\" > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fssh_keys.txt\nfind \u002Fmnt\u002Fevidence\u002Fhome\u002F \u002Fmnt\u002Fevidence\u002Froot\u002F -name \"authorized_keys\" -exec sh -c \\\n   'echo \"--- {} ---\"; cat {}; echo \"\"' \\; >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fssh_keys.txt\n\n# Check rc.local and init scripts\ncat \u002Fmnt\u002Fevidence\u002Fetc\u002Frc.local 2>\u002Fdev\u002Fnull > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Frc_local.txt\n\n# Check \u002Fetc\u002Fprofile.d\u002F for login-triggered scripts\nls -la \u002Fmnt\u002Fevidence\u002Fetc\u002Fprofile.d\u002F > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fprofile_scripts.txt\n\n# Check for LD_PRELOAD hijacking\ngrep -r \"LD_PRELOAD\" \u002Fmnt\u002Fevidence\u002Fetc\u002F 2>\u002Fdev\u002Fnull > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fld_preload.txt\ncat \u002Fmnt\u002Fevidence\u002Fetc\u002Fld.so.preload 2>\u002Fdev\u002Fnull >> \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fpersistence\u002Fld_preload.txt\n```\n\n### Step 4: Analyze Shell History and Command Execution\n\n```bash\n# Analyze bash history for each user\npython3 \u003C\u003C 'PYEOF'\nimport os, glob\n\nprint(\"=== SHELL HISTORY ANALYSIS ===\\n\")\n\nsuspicious_commands = [\n    'wget', 'curl', 'nc ', 'ncat', 'netcat', 'python -c', 'python3 -c',\n    'perl -e', 'base64', 'chmod 777', 'chmod +s', '\u002Fdev\u002Ftcp', '\u002Fdev\u002Fudp',\n    'nmap', 'masscan', 'hydra', 'john', 'hashcat', 'passwd', 'useradd',\n    'iptables -F', 'ufw disable', 'history -c', 'rm -rf \u002F', 'dd if=',\n    'crontab', 'at ', 'systemctl enable', 'ssh-keygen', 'scp ', 'rsync',\n    'tar czf', 'zip -r', 'openssl enc', 'gpg --encrypt', 'shred',\n    'chattr', 'setfacl', 'awk', '\u002Ftmp\u002F', '\u002Fdev\u002Fshm\u002F'\n]\n\nfor hist_file in glob.glob('\u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fusers\u002F*\u002F.bash_history'):\n    username = hist_file.split('\u002F')[-2]\n    print(f\"User: {username}\")\n\n    with open(hist_file, 'r', errors='ignore') as f:\n        lines = f.readlines()\n\n    print(f\"  Total commands: {len(lines)}\")\n    flagged = []\n    for i, line in enumerate(lines):\n        line = line.strip()\n        for cmd in suspicious_commands:\n            if cmd in line.lower():\n                flagged.append((i+1, line))\n                break\n\n    if flagged:\n        print(f\"  Suspicious commands: {len(flagged)}\")\n        for lineno, cmd in flagged:\n            print(f\"    Line {lineno}: {cmd[:120]}\")\n    print()\nPYEOF\n```\n\n### Step 5: Check for Rootkits and Modified Binaries\n\n```bash\n# Check for known rootkit indicators\n# Compare system binary hashes against known-good\nfind \u002Fmnt\u002Fevidence\u002Fusr\u002Fbin\u002F \u002Fmnt\u002Fevidence\u002Fusr\u002Fsbin\u002F \u002Fmnt\u002Fevidence\u002Fbin\u002F \u002Fmnt\u002Fevidence\u002Fsbin\u002F \\\n   -type f -executable -exec sha256sum {} \\; > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fbinary_hashes.txt\n\n# Check for SUID\u002FSGID binaries (potential privilege escalation)\nfind \u002Fmnt\u002Fevidence\u002F -perm -4000 -type f 2>\u002Fdev\u002Fnull > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fsuid_files.txt\nfind \u002Fmnt\u002Fevidence\u002F -perm -2000 -type f 2>\u002Fdev\u002Fnull > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fsgid_files.txt\n\n# Check for suspicious files in \u002Ftmp and \u002Fdev\u002Fshm\nfind \u002Fmnt\u002Fevidence\u002Ftmp\u002F \u002Fmnt\u002Fevidence\u002Fdev\u002Fshm\u002F -type f 2>\u002Fdev\u002Fnull \\\n   -exec file {} \\; > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Ftmp_files.txt\n\n# Check for hidden files and directories\nfind \u002Fmnt\u002Fevidence\u002F -name \".*\" -not -path \"*\u002F\\.\" -type f 2>\u002Fdev\u002Fnull | \\\n   head -100 > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fhidden_files.txt\n\n# Check kernel modules\nls -la \u002Fmnt\u002Fevidence\u002Flibs\u002Fmodules\u002F$(ls \u002Fmnt\u002Fevidence\u002Flibs\u002Fmodules\u002F | head -1)\u002Fextra\u002F 2>\u002Fdev\u002Fnull \\\n   > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fextra_modules.txt\n\n# Check for modified PAM configuration (authentication backdoors)\ndiff \u002Fmnt\u002Fevidence\u002Fetc\u002Fpam.d\u002F \u002Fcases\u002Fbaseline\u002Fpam.d\u002F 2>\u002Fdev\u002Fnull \\\n   > \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002Fpam_changes.txt\n```\n\n## Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| \u002Fvar\u002Flog\u002Fauth.log | Primary authentication log on Debian\u002FUbuntu systems |\n| \u002Fvar\u002Flog\u002Fsecure | Primary authentication log on RHEL\u002FCentOS systems |\n| wtmp\u002Fbtmp | Binary logs recording successful and failed login sessions |\n| .bash_history | User command history file (can be cleared by attackers) |\n| crontab | Scheduled task system commonly used for persistence |\n| authorized_keys | SSH public keys granting passwordless access to an account |\n| SUID bit | File permission allowing execution as the file owner (privilege escalation vector) |\n| LD_PRELOAD | Environment variable that loads a shared library before all others (hooking technique) |\n\n## Tools & Systems\n\n| Tool | Purpose |\n|------|---------|\n| chkrootkit | Rootkit detection scanner for Linux systems |\n| rkhunter | Rootkit Hunter - checks for rootkits, backdoors, and local exploits |\n| AIDE | Advanced Intrusion Detection Environment - file integrity monitor |\n| auditd | Linux audit framework for system call and file access monitoring |\n| last\u002Flastb | Parse wtmp\u002Fbtmp for login and failed login history |\n| Plaso\u002Flog2timeline | Super-timeline creation including Linux artifacts |\n| osquery | SQL-based system querying for live forensic investigation |\n| Velociraptor | Endpoint agent with Linux artifact collection capabilities |\n\n## Common Scenarios\n\n**Scenario 1: SSH Brute Force Followed by Compromise**\nAnalyze auth.log for failed SSH attempts followed by success, identify the attacking IP, check .bash_history for post-compromise commands, examine authorized_keys for added backdoor keys, check crontab for persistence, review network connections.\n\n**Scenario 2: Web Server Compromise via Application Vulnerability**\nExamine web server access and error logs for exploitation attempts, check \u002Ftmp and \u002Fdev\u002Fshm for webshells, analyze the web server user's activity (www-data), check for privilege escalation via SUID binaries or kernel exploits, review outbound connections.\n\n**Scenario 3: Insider Threat on Database Server**\nAnalyze the suspect user's bash_history for database dump commands, check for large tar\u002Fzip files in home directory or \u002Ftmp, examine scp\u002Frsync commands for data transfer, review cron jobs for automated exfiltration, check USB device logs.\n\n**Scenario 4: Crypto-Miner on Cloud Instance**\nCheck for high-CPU processes in \u002Fproc (live) or systemd service files, examine crontab entries for miner restart scripts, check \u002Ftmp for mining binaries, analyze network connections for mining pool communications, review authorized_keys for attacker access.\n\n## Output Format\n\n```\nLinux Forensics Summary:\n  System: webserver01 (Ubuntu 22.04 LTS)\n  Hostname: webserver01.corp.local\n  Kernel: 5.15.0-91-generic\n\n  User Accounts:\n    Total: 25 (3 with UID 0 - 1 ANOMALOUS)\n    Interactive shells: 8 users\n    Recently created: admin2 (created 2024-01-15)\n\n  Authentication Events:\n    Successful SSH logins: 456\n    Failed SSH attempts: 12,345 (from 23 unique IPs)\n    Sudo executions: 89\n\n  Persistence Mechanisms Found:\n    Cron jobs: 3 suspicious (reverse shell, miner restart)\n    Systemd services: 1 unknown (update-checker.service)\n    SSH keys: 2 unauthorized keys in root authorized_keys\n    rc.local: Modified with download cradle\n\n  Suspicious Activity:\n    - bash_history contains wget to pastebin URL\n    - SUID binary \u002Ftmp\u002F.hidden\u002Fescalate found\n    - \u002Fdev\u002Fshm\u002F contains compiled ELF binary\n    - LD_PRELOAD in \u002Fetc\u002Fld.so.preload pointing to \u002Flib\u002F.hidden.so\n\n  Report: \u002Fcases\u002Fcase-2024-001\u002Flinux\u002Fanalysis\u002F\n```\n",{"name":5,"tags":44,"capec":46,"model":47,"tools":48,"domain":36,"maxTurns":52,"nist_csf":53,"subdomain":22,"description":7,"mitre_attack":58},[45,35,34,32,30,29],"forensics",[],"sonnet",[49,33,50,51],"Read","Glob","Grep",20,[54,55,56,57],"RS.AN-01","RS.AN-03","DE.AE-02","RS.MA-01",[59,60,61,62],"T1053.003","T1059","T1070","T1547","main","a91f1293287ffa9f4f1b8f486cd6e835a1568c84","skills\u002Flinux\u002Flogging\u002Fsysartifacts\u002Fpersist","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace","https:\u002F\u002Fgithub.com\u002FDCx7C5","#Python","2026-09-01 11:21:00",{"source":8,"skillName":5,"commands":71,"prompt":81,"zipAvailable":82},[72,75,78],{"tool":73,"command":74},"npx","npx skills add DCx7C5\u002Fai-marketplace --skill logging-sysartifacts-persist",{"tool":76,"command":77},"bunx","bunx skills add DCx7C5\u002Fai-marketplace --skill logging-sysartifacts-persist",{"tool":79,"command":80},"pnpm","pnpm dlx skills add DCx7C5\u002Fai-marketplace --skill logging-sysartifacts-persist","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Flinux\u002Flogging\u002Fsysartifacts\u002Fpersist\u002FSKILL.md",true,[84],{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"index.json","REFERENCE","参考文档",657,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Flinux\u002Flogging\u002Fsysartifacts\u002Fpersist\u002Findex.json",[91,114,134,152,174,190],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":39},"01M71HAPZ01KQ30RKTB0FFSQ05","services-wmi-persistence-detect","Detect WMI event subscription persistence by enumerating ActiveScriptEventConsumer, CommandLineEventConsumer, and permanent subscriptions in the WMI repository.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fpersistence\u002Fdetect\u002FSKILL.md",[],[98,99,100,101,102,25,103,104,105,106,107,108,109,110,111,112,45,36,113],"services","detect","services wmi persistence detect","wmi","persistence","cm","process","activescript","event","subscriptions","commandline-consumer","repository","subscription","event-subscription","t1546.003","process-forensics",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":39},"01M71HAK6JTTTS229T17WJMMCG","services-wmi-exec-exploit","Perform lateral movement across Windows networks using WMI-based remote execution techniques including Impacket wmiexec.py, CrackMapExec, and native WMI commands for stealthy post-exploitation during red team engagements.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fexec\u002Fexploit\u002FSKILL.md",[],[121,98,122,101,123,124,125,36,33,31,126,127,128,129,25,130,131,24,132,133],"exploit","services wmi exec exploit","exec","remote","traffic","team","across","crackmapexec","native","command","lateral movement","lateral-movement","Impacket",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":39},"01M71HAG6MHKNQV8KDZKMT4886","registry-artifact-extract","Extract and analyze Windows Registry hives to uncover user activity, installed software, autostart entries, and evidence of system compromise.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fregistry\u002Fartifact\u002Fextract\u002FSKILL.md",[],[141,142,143,144,145,146,36,33,147,31,148,26,25,24,149,23,22,150,151,47],"artifact","registry","registry artifact extract","extract","evidence-collection","artifact-analysis","collection","analyze","software","windows-registry","regripper",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":39},"01M71HACR4A8XTWTTSXK4124AA","processes-token-impersonate-detect","Detect Windows token impersonation and privilege abuse including SeImpersonatePrivilege exploitation via Potato attacks and token stealing techniques.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Ftoken\u002Fimpersonate\u002Fdetect\u002FSKILL.md",[],[99,159,160,161,162,163,164,103,165,36,113,166,167,168,169,170,171,172,173,25],"processes token impersonate detect","token","processes","attacks","windows","escalation","techniques","privilege-escalation","seimpersonate","token-impersonation","printspoofer","exploitation","potato","impersonation","via",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":180,"publishedAt":39},"01M71HAABSB4Z6QFSXEG00R4RK","processes-thread-injection-detect","Detect Windows thread injection techniques including CreateRemoteThread, QueueUserAPC, NtCreateThreadEx, and thread hijacking via process memory analysis.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fthread\u002Finjection\u002Fdetect\u002FSKILL.md",[],[181,182,99,183,161,163,184,103,185,165,36,113,31,186,187,188,189,173,25,104],"thread","processes thread injection detect","injection","memory","process-injection","api","apc-injection","thread-injection","nt-api",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":196,"publishedAt":39},"01M71HA7H311V5G14WMX58HQSS","processes-hollow-technique-detect","Detect process hollowing (RunPE) by identifying processes with mismatched image paths between PEB and VAD tree, or unmapped PE headers in memory.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fhollow\u002Ftechnique\u002Fdetect\u002FSKILL.md",[],[197,99,161,198,184,103,199,200,36,113,201,202,203,204,205,206,25,104,207,208],"processes hollow technique detect","tree","memory-forensics","process-hollow","peb","runpe","image","pe-header","in memory","with","mismatched","headers"]