Vivaldi
Browsersv1.1
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
KAPE, PowerShell, Batch, WSL
# 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 GreenSave as .ps1 and run as Administrator. Use: powershell -ExecutionPolicy Bypass -File script.ps1
Included in collections: SANS_Triage · KapeTriage · WebBrowsers