常用软件分析

远控软件日志分析

ToDesk 日志分析

ToDesk 是一款多平台远程控制软件,支持主流操作系统Windows、Linux、Mac、Android、iOS跨平台协同操作。

默认情况下todesk日志文件保存在安装目录同级目录Logs下,在4.7以前的版本中,目录下有以service为首的文件以及以client为首的文件。其中service文件表示是被别人远控的日志。client文件表示是远控别人的日志。在4.7后的版本含4.7中,目录下不再存在以client为首的文件。

1688272261_64a0fd851f4801732a6ce.png!small

在应急响应过程中不可避免的要分析操作系统日志、数据库日志、应用系统日志,近期在应急过程中需要对远程工具todesk进行分析,现将todesk日志分析结果同步给大家,希望能给大家一些帮助。

todesk、向日葵、anydesk目前都是大家日常办公使用的远程软件,在方便大家办公的同时也方便了攻击者,攻击者可以直接利用todesk类的远程软件直接操作目标主机,绕过防护软件的策略。

向日葵日志分析

向日葵远程控制软件是一款拥有多年远控技术经验的远程控制软件,可远程控制手机,远程桌面连接,远程开机,远程管理等,并深入各行各业提供企业远程办公、企业IT运维、技术支持等企业远程解决方案。

控制端日志分析

1688288456_64a13cc8d2e590b6b19ec.png!small

上图分别是本机控制端日志和被控端日志文件目录结构。首先对本机控制端日志(以sunlogin_service.+时间命名)文件进行分析:

首先是当前主机的IP信息、MAC地址、操作系统信息等。

1688288568_64a13d38e68d87228d841.png!small

其次登录成功:

1688288686_64a13daea28a7db4b5686.png!small

本机控制端日志中也存在一些网络连接行为,如443端口,多为向日葵的一些网站域名解析地址。在本机控制端日志中我并没有发现什么有价值的信息,如果你有更多的发现,也可私信我。

被控端日志分析

与控制端日志相比,被控端日志比较丰富,首先是目录结构,如下:

1688290910_64a1465ea8438fe915346.png!small

可以重点关注以sunlogin_service.+时间命名的文件、history文件。首先看history文件,记录了被远程连接的时间以及连接方式(识别码),在日常分析过程中,定位时间节点较为关键。

1688291119_64a1472f493b31577f5da.png!small

接下来是以sunlogin_service.+时间命名的文件,同样也是获取本地的IP、MAC、主机名等信息:

1688294749_64a1555d3283e2ff02549.png!small

直接在原始日志中日志匹配“remote ip”,可以看到控制端的主机出口IP地址。

1688294873_64a155d91809214f60460.png!small

端口为4118的IP地址则为向日葵相关域名的解析地址,可忽略。如果不放心,可以使用情报平台的IP解析域名功能进行确认。

1688295127_64a156d738f9da818181e.png!small

TeamViewer 日志分析

控制端日志分析

1. 路径

获取有效的日志文件首先要找到正确的路径,即名为”TeamViewer15_Logfile.log”的文本文档。

如果不在默认路径中,可以通过桌面的TeamViewer图标,【右键】点击图标,选择【打开文件所在位置】,然后找到名为”TeamViewer15_Logfile.log”的文本文档,如图1所示。

ad7a669d991f4d049672a1797dd4c651.png

2. 确定有效时间

通过查看文件的”创建时间”可以判断日志是否被修改过,因为文件被编辑后”修改日期”也会随之变化。【右键】点击文件,选择【属性】,即可查看”创建时间”(目的是查看日志是否被嫌疑人编辑过)。

54952853ebc448e8b2c24c4a7f9dee54.png

3. 通过 IP 或者关键词找到特征点

“主控端”日志文件:

dfb7e36d8b5848fbbf157dd5e49b4149.png

60c9839ecb444d14989721dc28ef3509.png

被控端日志分析

97488ff9b58b4692a92cf0bab2644f19.png

VPN软件分析

VPN/代理软件取证的核心目标:找到 VPN 服务器地址(IP/域名)、账号凭据、连接时间线。通用检查点先过一遍,再按具体软件深挖。

通用取证点

  • 安装目录与配置:C:\Program Files\、%AppData%\、%ProgramData%\ 下按软件名找配置文件
  • 虚拟网卡:设备管理器 / ipconfig /all 看 TAP-Windows、Wintun、TUN 适配器——装了虚拟网卡基本说明用过 VPN
  • 系统代理设置(代理类软件): HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings 的 ProxyEnable、ProxyServer(如 127.0.0.1:7890)
  • 事件日志:
    • Microsoft-Windows-RasClient/Operational:Windows 自带 VPN 的连接/断开记录
    • 网卡创建、服务安装(Event 7045)时间可定位 VPN 首次使用时间
  • 进程与服务列表:正在运行的 OpenVPN、EasyConnect 等服务进程

OpenVPN

  • 配置文件 *.ovpn:内含 remote <服务器> <端口>、CA/客户端证书、有的直接内嵌私钥
  • 位置:C:\Program Files\OpenVPN\config\、%USERPROFILE%\OpenVPN\config\
  • 日志:log 目录下的连接日志,含连接时间与对端 IP
  • 注册表:HKLM\SOFTWARE\OpenVPN 记录安装路径与配置目录

WireGuard

  • 配置文件 *.conf(C:\Program Files\WireGuard\Data\Configurations\): [Interface] 含本机私钥,[Peer] 含对端公钥、Endpoint(服务器 IP:端口)、AllowedIPs
  • 注册表:HKLM\SOFTWARE\WireGuard
  • WireGuard 本身不写连接日志,时间线靠事件日志与配置文件修改时间

代理类(Clash / v2rayN / Shadowsocks 等)

比赛和内网取证中高频,本质是本地代理 + 境外/跳板节点:

  • Clash 系:config.yaml(~/.config/clash/ 或软件目录)——proxies 段列出全部节点的服务器、端口、密码/UUID、协议(ss/vmess/trojan);proxy-providers 里的订阅 URL 可拉取完整节点列表
  • v2rayN:guiConfigs\guiNConfig.json 保存节点与本地端口(默认 10808)
  • SSR:gui-config.json,明文存服务器地址、端口、密码、加密方式
  • 本地监听端口特征:Clash 7890、v2rayN 10808、SSR 1080——在 netstat 记录或内存取证中见到即高度可疑
  • 日志目录记录访问过的域名/IP,可直接还原通过代理访问过哪些目标

企业 VPN

  • 深信服 EasyConnect:安装目录与 %AppData%\Sangfor\ 下有配置与日志;登录日志含账号、接入 IP、时间
  • Cisco AnyConnect:%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\ 下 preferences.xml 记录默认网关地址;完整日志用 DART 工具收集
  • Windows 自带 VPN:连接配置在 %AppData%\Microsoft\Network\Connections\Pbk\rasphone.pbk(含服务器地址、认证方式),连接记录看 RasClient 事件日志

分析思路

  1. 从配置/注册表提取服务器 IP/域名 → 反查归属(机房/IDC/境外),判断是商业 VPN、自建跳板还是违规外联
  2. 用日志 + 事件日志 + 配置文件 MAC 时间拼连接时间线(首次安装、每次连接起止)
  3. 代理类软件重点看访问日志,判断流量去向;企业 VPN 重点核对接入账号与源 IP

密码保护软件

这类软件把凭据集中存放或用主密码统一保护,取证目标是:拿到存密码的数据文件/注册表 → 离线爆破主密码或直接解密还原。分两类——专门的密码管理器,和内置”记住密码”功能的软件。

通用思路

按成本从低到高选择路径:

  1. 活机直接导出:软件处于已解锁/已登录状态,直接跑导出工具(HackBrowserData、SharpXDecrypt)或 dump 进程内存拿主密钥,不用破任何密码
  2. 弱加密直接还原:固定密钥/混淆存储的(Navicat、VNC、FinalShell),公开脚本秒解,不要浪费时间去爆破
  3. 找辅助解锁材料:KeePass 的 keyfile、BitLocker 的恢复密钥、微软账户云备份——找到就跳过爆破
  4. 提取 hash 离线爆破:*2john 提取 → hashcat/john 选对应模式 → 字典 + 规则 + 掩码
  5. 爆破时字典优先用目标机器上已还原的其他密码(Xshell/Navicat/浏览器)做密码画像,复用率很高

密码管理器

1Password

以 1Password 8(2022 起改为 Electron + 账户制)为分界,新旧两代的存储形态和破解路径完全不同。

老版(1Password 4–7):本地保险库文件

保险库是磁盘上的独立目录,可整个拷走离线处理:

  • 1Password 4 及更早:.agilekeychain
  • 1Password 6/7 本地保险库:.opvault 破解步骤(有现成公开工具链):
# 1. 提取 hash(john jumbo 自带这两个脚本)
agilekeychain2john vault.agilekeychain > 1p.hash
opvault2john vault.opvault > 1p.hash
 
# 2. 爆破
hashcat -m 6600 -a 0 1p.hash wordlist.txt   # agilekeychain
hashcat -m 8200 -a 0 1p.hash wordlist.txt   # opvault / cloudkeychain
  • 老版只认主密码一个因素,提到 hash 就是纯离线爆破问题

也可以用 Passware Kit / Elcomsoft 直接导入保险库,省去提 hash 步骤

  • 将profile,js提取出来
  • 爆破
新版(1Password 8+):无独立保险库文件
  • 不再有本地保险库目录;数据以账户为中心存云端,本地只有 %LocalAppData%\1Password\ 下的加密 SQLite 缓存
  • 解锁强制要求主密码 + Secret Key(128 位账户密钥)双重因素,缺一不可
  • 没有公开的 2john/hashcat 提取器,旧工具链到此为止

可行路径:

  1. 商用工具:Passware Kit / Elcomsoft 对新版本地缓存的支持以官网版本说明为准,这是目前最现实的爆破途径
  2. 软件已解锁时 dump 1Password.exe(Electron 进程)内存,提取会话密钥直接解本地缓存
  3. 先找 Secret Key:它常以 1Password Emergency Kit PDF 形式被用户打印/存文档目录,或存在于已登录的其他设备——拿到 Secret Key 后主密码爆破才有意义

KeePass / KeePassXC

比赛高频,数据库即一切:

  • 数据库文件 .kdbx,常见位置:文档、桌面、同步盘(Dropbox/OneDrive)

破解步骤:

# 1. 提取 hash(keyfile 参与解锁时用 -k 指定,否则提取的 hash 解不开)
keepass2john db.kdbx > keepass.hash
keepass2john -k db.key db.kdbx > keepass.hash
 
# 2. 爆破(模式 13400 同时覆盖 KeePass 1/2)
hashcat -m 13400 -a 0 keepass.hash wordlist.txt
john --format=KeePass --wordlist=wordlist.txt keepass.hash

免爆破路径(优先试):

  • keyfile:找 .key/.keyx 文件(XML 格式,常在数据库同目录或 U 盘),拿到后配合任意主密码尝试或直接作为解锁凭证
  • 内存残留:KeePass 2.x(< 2.54)存在 CVE-2023-32784,主密码以明文形态残留在进程内存/pagefile/休眠文件中,用 keepass-password-dumper 对 dump 文件跑一遍即可还原除首字符外的完整密码:
    python keepass_password_dumper.py keepass.DMP
  • 注意 KeePass 支持组合解锁:主密码 + 密钥文件 + Windows 用户账户,缺一个都解不开——先确认解锁组合再决定爆破对象
  • KDF 用 Argon2 且迭代拉高时爆破极慢,此时 keyfile 和内存是突破口

Bitwarden

  • 桌面端本地缓存:%AppData%\Bitwarden\data.json,内含 AES 加密的完整 vault 副本
  • KDF 参数(PBKDF2-SHA256 迭代次数 / Argon2id 参数)明文写在 data.json 里,先读出来评估爆破成本
  • john/hashcat 无官方格式,用社区 bitwarden2john 脚本把 data.json 转成可爆破格式,或直接交给 Passware/Elcomsoft
  • 活机上 CLI 已解锁时 bw export --format json 直接导出全量

LastPass

  • 数据主要在浏览器扩展存储(Local Extension Settings\<扩展ID>\ 下的 leveldb)和 %AppData% 本地缓存
  • hashcat 有现成模式 -m 6800(LastPass / LastPass sniffed)
  • PBKDF2 迭代次数随数据存储,低迭代(<100k)的旧账户爆破成本低
  • 2022 年 LastPass 泄露事件后大量公开 writeup,爆破流程可直接参考

浏览器内置密码管理器

数据位置(Chrome/Edge 同构,Edge 把路径换成 Microsoft\Edge):

  • 密码库:%LocalAppData%\Google\Chrome\User Data\Default\Login Data(SQLite,logins 表)
  • 密钥:User Data\Local State 里 os_crypt.encrypted_key,AES-256-GCM 主密钥本身由 DPAPI 加密

活机导出(最省事):以目标用户身份运行其一即可全量导出密码/Cookie/历史:

  • HackBrowserData(跨平台,直接出明文表格)
  • SharpChrome logins / mimikatz dpapi::chrome

离线解密链(拿到整个 User Data 目录时):

  1. 解 DPAPI masterkey:需要用户 SID + 登录密码(或域备份密钥)
    mimikatz dpapi::masterkey /in:"Protect\<SID>\<GUID>" /sid:<SID> /password:<登录密码> 
    
  2. 用 masterkey 解 Local State 中的 encrypted_key(DPAPI blob)→ 得到 AES-256-GCM 密钥
  3. 用该密钥逐个解密 Login Data 中 password_value(v10 前缀,AES-GCM)
    • impacket dpapi.py / pypykatz 可把 1~2 步串起来自动化

Chrome 127+ 的坑:启用 App-Bound Encryption(密文 v20 前缀),密钥改由 SYSTEM 权限的 ABE 服务加密且校验调用方路径,离线解密基本失效——只能活机提权到 SYSTEM 后借助公开 PoC 或 HackBrowserData 新版导出。

内置密码保存模块的软件

这类软件把密码”加密”存本地,但很多用的是固定密钥或弱混淆,等于白给——一律先找公开解密脚本,不要爆破。

Xshell / Xftp

应急和比赛都高频,拿到运维机的 Xshell 等于拿到整个服务器列表:

  • 会话文件:文档\NetSarang Computer\<版本号>\Xshell\Sessions\*.xsh,内含主机、端口、用户名、加密后的密码

解密步骤(未设主密码):

  1. 拿目标用户 SID:注册表 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 或 wmic useraccount where name='xxx' get sid
  2. 活机上目标用户上下文直接跑 SharpXDecrypt,自动遍历会话目录还原全部明文
  3. 离线场景:SID + *.xsh 文件交给 SharpXDecrypt / XshellDecryptor 离线模式(加密密钥由 SID + 用户名派生,不需要登录密码)
  • 设了主密码(Master Password)则必须先破主密码,无现成 hashcat 模式,优先活机导出

FinalShell

  • 连接配置在安装目录下 conn 文件夹的 json 中,密码 DES 加密且密钥硬编码在程序 jar 里
  • GitHub 搜 FinalShell 密码解密(FinalShellDecrypt 等公开脚本),粘贴密文直接还原
  • 等于明文存储,搜到配置 = 拿到全部 SSH 凭据
  • 数据库连接密码存注册表:HKCU\Software\PremiumSoft\Navicat\Servers\<连接名> 的 Pwd 值

解密步骤:

:: 1. 导出注册表(离线取证则直接加载 NTUSER.DAT  hive 读同路径)
reg export "HKCU\Software\PremiumSoft\Navicat\Servers" navicat.reg
  1. 用公开脚本解密(GitHub:how-does-navicat-encrypt-password 的 NavicatCrypto):
    • Navicat ≤ 11:Blowfish,固定 key libcckeylibcckey、IV libcciv libcciv
    • Navicat 12+:key/IV 改由 SHA-1("3DC5CA39") 派生,同样固定
  2. 解密结果是明文数据库密码,连带拿到内网数据库地址/端口/账号

VNC 系(TightVNC / RealVNC / UltraVNC)

  • 密码以 DES 混淆存放,密钥全网固定 e84ad660c4721ae0

解密步骤:

:: TightVNC
reg query "HKLM\SOFTWARE\TightVNC\Server" /v Password
:: UltraVNC 读安装目录 ultravnc.ini 的 passwd= 字段
  • 拿到的 8 字节 hex 交给 vncpwd / vncdec / Cain,或任意搜”VNC 密码在线解密”,秒出明文
  • 注意 VNC 密码最长 8 字符(DES 块长限制),超长的会被截断

Bandizip

Bandizip 内部也包含一个保存密码的模块(密码管理器),有的时候需要注意一下:

  • 密码管理器内容随配置保存在注册表 HKCU\Software\Bandisoft\Bandizip,保护强度低,存在公开还原方法
  • 还原出的压缩包密码可用来开加密压缩包,或作为字典投喂其他爆破(用户有复用密码习惯)

速查表

软件数据位置破解方式hashcat 模式
1Password 4–7.agilekeychain / .opvault 保险库目录agilekeychain2john / opvault2john 提取后爆破-m 6600 / -m 8200
1Password 8+%LocalAppData%\1Password\ 加密缓存无公开提取器;Passware/Elcomsoft、内存 dump、先找 Emergency Kit 拿 Secret Key无
KeePass*.kdbxkeepass2john 提取;优先找 keyfile、内存 dump(CVE-2023-32784)-m 13400
Bitwarden%AppData%\Bitwarden\data.json社区 bitwarden2john / Passware;KDF 参数在文件内无官方模式
LastPass扩展存储 / %AppData%提取后爆破-m 6800
Chrome/EdgeLogin Data + Local State活机 HackBrowserData;离线 DPAPI 链;v20 只能活机—
Xshell文档\NetSarang Computer\...\Sessions\*.xshSharpXDecrypt(SID 派生密钥,无主密码直接还原)—
FinalShell安装目录 conn\*.jsonDES 硬编码密钥,公开脚本还原—
NavicatHKCU\Software\PremiumSoft\Navicat\ServersBlowfish 固定密钥,NavicatCrypto 直接解密—
VNC注册表 / ultravnc.ini固定 DES 密钥 e84ad660c4721ae0,vncpwd 秒解—
BandizipHKCU\Software\Bandisoft\Bandizip弱保护可还原,产物投喂字典—

关联