Skip to content

Parse Zoom Team Chat Encrypted Databases #2708

@calilkhalil

Description

@calilkhalil

Summary

Proposing a new parser to decrypt and analyze Zoom Team Chat encrypted databases (zoomus.enc.db and zoomus.async.enksdb), enabling forensic investigators to extract chat messages, user contacts, file transfers, and meeting history from Zoom artifacts.

Motivation

Zoom has become one of the most widely used communication platforms globally, especially after 2020. Currently, IPED lacks native support for Zoom's encrypted database artifacts, which contain critical evidence in:

  • Corporate investigations (insider threats, data exfiltration)
  • Incident response (ransomware negotiations, threat actor communications)
  • Legal discovery and compliance audits
  • Criminal investigations

The encryption architecture makes manual analysis extremely complex, requiring specialized knowledge of DPAPI, SQLCipher, and Zoom's custom key derivation process.

Technical Background

Zoom uses a three-layer encryption architecture:

  1. Main key: 42-byte base64 key encrypted with Windows DPAPI (stored in zoom.us.ini)
  2. Key-wrapping key (kwk): 44-byte server-side key (requires runtime capture)
  3. User key: Derived from SHA256 operations on both keys

Databases use SQLCipher with non-standard parameters:

  • Page size: 1024 bytes (not default 4096)
  • KDF iterations: 4000 (not default 64000)
  • HMAC: SHA1 (legacy compatibility)
  • Cipher: AES-256-CBC

Proposed Implementation

Phase 1: Detection & Categorization

<!-- CustomSignatures.xml -->
<mime-type type="application/x-zoom-encrypted-db">
    <magic priority="50">
        <match value="SQLite format 3" type="string" offset="0"/>
        <!-- Check for SQLCipher encryption header -->
        <match value="\x00\x00\x00\x00" type="string" offset="16"/>
    </magic>
    <glob pattern="zoomus.enc.db"/>
    <glob pattern="zoomus.async.enksdb"/>
    <glob pattern="zoomus.tmp.enc.db"/>
</mime-type><mime-type type="application/x-zoom-config">
    <glob pattern="zoom.us.ini"/>
</mime-type><mime-type type="application/x-zoom-mmkv">
    <glob pattern="mmkv.db"/>
    <glob pattern="*.mmkv"/>
</mime-type>

Phase 2: Parser Architecture

public class ZoomChatParser extends AbstractParser {
    // Parse zoom.us.ini for encrypted key
    // Attempt DPAPI decryption (Windows)
    // Check for cached/stored kwk
    // Derive user key if possible
    // Decrypt SQLCipher database
    // Extract artifacts as subitems
}

Phase 3: Extracted Artifacts

The parser would create subitems for:

  • Chat messages (HTML formatted with timestamps, sender info)
  • Contact lists (CSV/Table format)
  • File transfer logs (with file hashes, paths)
  • Meeting history (participants, duration, IDs)
  • User account info (emails, profile data)

Phase 4: Handling Decryption Challenges

Scenarios:
1. Full decryption (both keys available) → Extract all data
2. Partial decryption (only main_key) → Extract account info
3. No decryption possible → Extract metadata, flag for manual analysis

Key Features

  1. Automatic DPAPI handling using JNI/JNA for Windows systems
  2. kwk recovery from memory dumps or cached sessions
  3. Cross-platform support (Windows primary, macOS/Linux when feasible)
  4. Report generation with timeline visualization
  5. Integration with existing parsers (correlation with browser history, Discord, etc.)

Implementation Approach

I plan to:

  1. Start with Windows implementation (most common in forensics)
  2. Use existing DPAPI libraries (dpapick/jdpapi)
  3. Integrate SQLCipher through existing Java bindings
  4. Create comprehensive test cases with sample databases

Dependencies

  • SQLCipher Java bindings (already used in other IPED parsers)
  • DPAPI library for Java (evaluate best option)
  • Standard Java crypto libraries

Questions for the Community

  1. Priority: Is Zoom artifact analysis a priority for IPED users?

  2. Scope: Should we focus only on Team Chat or include other Zoom artifacts (meeting recordings, logs)?

  3. Key Management: How should we handle the kwk challenge?

    • Option A: Manual input field for investigators who captured it
    • Option B: Integration with memory analysis tools
    • Option C: Dictionary of known test keys (for research)
  4. DPAPI Integration: What's the preferred approach for Windows DPAPI?

    • JNI/JNA calls to Windows API?
    • Pure Java implementation?
    • External tool integration?
  5. Similar Work: Has anyone attempted Zoom parsing before? Any code to build upon?

  6. Output Format: Preference for extracted data format?

    • Individual HTML reports per conversation?
    • Single consolidated timeline?
    • Export to standard formats (EML, CSV)?

Testing & Validation

I can provide:

  • Test databases from controlled environments
  • Validation against manual analysis results
  • Performance benchmarks with large databases
  • Documentation with forensic methodology

Timeline

If there's interest, I estimate:

  • 2-3 weeks for basic Windows implementation
  • 1-2 weeks for testing and refinement
  • 1 week for documentation

I'm willing to implement this feature and maintain it. Looking forward to community feedback on approach and priority.

References


Note: This would be my first major IPED contribution. Happy to adjust approach based on project standards and maintainer preferences.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions