Vivaldi

Author: Sebastian Søgaard, Yogesh Khatri

Vivaldi Artifacts

Paths

18 paths
Paths use Windows environment variable syntax
CyberChef recipes

Open in CyberChef to decode values extracted from this artifact.

Notes

For vivaldi user tracking, see here: https://vivaldi.com/blog/how-we-count-our-users/

Vivaldi is Chromium, so the same artifacts can be found, however Vivaldi has a few unique ones

Like "Notes"

Collection commands

# PowerShell Artifact Collection Script
# Target: Vivaldi
# Run as Administrator

#Requires -RunAsAdministrator

$ErrorActionPreference = "Continue"
$SourceRoot = "C:"
$DestBase   = "D:\Evidence"
$Summary = @{ Copied = 0; Missed = 0; Errors = 0 }

function Collect-Artifact {
    param(
        [Parameter(Mandatory)][string]$SourceDir,
        [Parameter(Mandatory)][string]$FolderName,
        [string]$FileMask = "*"
    )
    # Expand wildcards in any path segment (e.g. 'Program Files*',
    # 'ScreenConnect Client*'). robocopy itself does not glob the source.
    $sources = @(Get-Item -Path $SourceDir -ErrorAction SilentlyContinue |
        Where-Object { $_.PSIsContainer })
    if ($sources.Count -eq 0) {
        $Summary.Missed++
        return
    }
    $FullDest = Join-Path -Path $DestBase -ChildPath $FolderName
    $null = New-Item -ItemType Directory -Force -Path $FullDest -ErrorAction SilentlyContinue
    foreach ($src in $sources) {
        robocopy $src.FullName "$FullDest" "$FileMask" /E /COPY:DAT /R:0 /W:0 /NP /NFL /NDL /NJH /NJS 2>$null | Out-Null
        if ($LASTEXITCODE -le 7) { $Summary.Copied++ } else { $Summary.Errors++ }
    }
}

# Iterate every user profile under the source drive
Get-ChildItem "$SourceRoot\Users" -Directory -ErrorAction SilentlyContinue |
    Where-Object { $_.Name -notin @('All Users', 'Default', 'Default User', 'Public') } |
    ForEach-Object {
        $UserName = $_.Name
        # Vivaldi Cookies
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Cookies*" -FolderName "Vivaldi_Cookies_$UserName"
        # Vivaldi Network Persistent State
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Network Persistent State" -FolderName "Vivaldi_Network_Persistent_State_$UserName"
        # Vivaldi Favicons
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Favicons*" -FolderName "Vivaldi_Favicons_$UserName"
        # Vivaldi History
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "History*" -FolderName "Vivaldi_History_$UserName"
        # Vivaldi Sessions Folder
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*\Sessions"
        Collect-Artifact -SourceDir $UserPath -FolderName "Vivaldi_Sessions_Folder_$UserName"
        # Vivaldi Login Data
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Login Data" -FolderName "Vivaldi_Login_Data_$UserName"
        # Vivaldi Network Action Predictor
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Network Action Predictor" -FolderName "Vivaldi_Network_Action_Predictor_$UserName"
        # Vivaldi Preferences
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Preferences" -FolderName "Vivaldi_Preferences_$UserName"
        # Vivaldi Secure Preferences
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Secure Preferences" -FolderName "Vivaldi_Secure_Preferences_$UserName"
        # Vivaldi Top Sites
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Top Sites*" -FolderName "Vivaldi_Top_Sites_$UserName"
        # Vivaldi Bookmarks
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Bookmarks*" -FolderName "Vivaldi_Bookmarks_$UserName"
        # Vivaldi Visited Links
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Visited Links" -FolderName "Vivaldi_Visited_Links_$UserName"
        # Vivaldi Web Data
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Web Data*" -FolderName "Vivaldi_Web_Data_$UserName"
        # Vivaldi User Tracking
        $UserPath = $_.FullName
        Collect-Artifact -SourceDir $UserPath -FileMask ".vivaldi_reporting_data*" -FolderName "Vivaldi_User_Tracking_$UserName"
        # Vivaldi Calendar
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Calendar*" -FolderName "Vivaldi_Calendar_$UserName"
        # Vivaldi Contacts
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Contacts*" -FolderName "Vivaldi_Contacts_$UserName"
        # Vivaldi Notes
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "Notes*" -FolderName "Vivaldi_Notes_$UserName"
        # Vivaldi Download Metadata
        $UserPath = "$($_.FullName)\AppData\Local\Vivaldi\User Data\*"
        Collect-Artifact -SourceDir $UserPath -FileMask "DownloadMetadata*" -FolderName "Vivaldi_Download_Metadata_$UserName"
    }

Write-Host ("Collection complete. Copied: {0}  Missed: {1}  Errors: {2}" -f $Summary.Copied, $Summary.Missed, $Summary.Errors) -ForegroundColor Green

Save as .ps1 and run as Administrator. Use: powershell -ExecutionPolicy Bypass -File script.ps1

Included in collections: SANS_TriageKapeTriageWebBrowsers