Linux Python / Virtualization/Sandbox Evasion: User Activity Based Checks

Author Issac Briones (1d8)
Platform Linux
Language Python
Technique Virtualization/Sandbox Evasion: User Activity Based Checks

Description:

This code snippet examines artifacts of typical human activity, focusing on Linux systems with Firefox installed. It checks for browser add-ons presence and browsing history to distinguish real users from sandbox or VM environments.

Code

import json, sys, getpass, os, sqlite3

def parseExtensionsFile(path):
    with open(path) as f:
        data = json.load(f)

    uniqueExts = []
    for (i, x) in enumerate(data["addons"]):
        if x["name"] not in uniqueExts:
            uniqueExts.append(x["name"])

    if len(uniqueExts) > 0:
        print("[+] Extensions found! Possibly not a sandbox, continuing with checks...")
        print(f"[+] Discovered extensions: {uniqueExts}")
    else:
        print(f"[!] No extensions found! Possible sandbox: {uniqueExts}")

def findExtensionsFile():
    baseDir = "/home/" + getpass.getuser() + "/.mozilla/firefox/"
    print(f"[+] Searching {baseDir}")
    files = os.listdir(baseDir)
    for file in files:
        # "default-release" is typically the directory with all the juicy json & sqlite files
        if "default-release" in file: 
            print(f"[+] Searching {baseDir}{file} for addons json file...")
            fullDir = baseDir + file + "/addons.json"
            return fullDir

def checkSearchbarHistory(path):
    print(f"[+] Grabbing searchbar history from {path}...")
    conn = sqlite3.connect(path)
    cursor = conn.execute('''
    SELECT * FROM moz_formhistory
    ''')
    rows = cursor.fetchall()
    typedHist = []
    for row in rows:
        if "searchbar-history" in row:
            typedHist.append(row[2])

    if len(typedHist) > 0:
        print(f"[+] Typed searchbar history found! Potential user activity, possibly not a sandbox: {typedHist}")
    else:
        print(f"[!] No searchbar history found! Possible sandbox: {typedHist}")



if __name__ == '__main__':
    path = findExtensionsFile()
    parseExtensionsFile(path)

    # Building path to formhistory.sqlite file
    formPath = path.strip("addons.json") + "formhistory.sqlite"
    checkSearchbarHistory(formPath)

Created

December 6, 2024

Last Revised

December 6, 2024