有什么方法可以检查当前文件(计算机/用户/硬盘/NAS 的文件)是否已被第三方使用勒索软件加密?
是否可以根据文件扩展名打开所有文件(例如使用 Python)并从而得出有关可能的加密的一些结论?
在对所有数据进行更多备份之前,我想验证所有文件是否正常。
答案1
是的,尝试打开文件后,您将知道文件是否已加密。如果可以打开,则表示文件未被第三方加密。
如果文件无法打开,比如说只是普通.txt
文件,那么它很可能已被加密。我说很可能,是因为我假设你有理由相信勒索软件在你的机器或网络上。
最好的恢复方法是从外部备份恢复后清理恶意软件/勒索软件。请记住,如果数据对你很重要,总是进行备份!
答案2
也许更自动化的方法是计算所有文件的熵,如果熵水平普遍较高则发出警报。
我没有加密系统可以测试,所以我真的猜不出合适的阈值是多少,但这里有一个草图。简短的实验表明,zip 文件的熵略低于 8.0(例如 7.99),而我看到各种类型的常规文件的熵值从接近 0 到略高于 7。一些 PDF 似乎接近 7.9(可能它们包含压缩的成员结构?)并且各种流媒体格式(如 MP4)也非常接近 8.0。但重要的问题是您是否在某处拥有值较低的文件。我测试过的各种 JSON 和日志文件的值都在 5 左右。
import os
# v v v from http://blog.dkbza.org/2007/05/scanning-data-for-entropy-anomalies.html
# with a very minor tweak for Python 3
import math
def H(data):
if not data:
return 0
entropy = 0
for x in range(256):
p_x = float(data.count(bytes([x])))/len(data)
if p_x > 0:
entropy += - p_x*math.log(p_x, 2)
return entropy
# ^ ^ end copy/pasted entropy code
maxent, minent = 0.0, 8.0
maxfile, minfile = None, None
for curdir, dirs, files in os.walk("/"): # or "C:/" for Windows victims
for filename in files:
curfile = os.path.join(curdir, filename)
try:
with open(curfile, "rb") as contents:
entropy = H(contents.read())
if entropy > maxent:
maxent = entropy
maxfile = curfile
if entropy < minent:
minent = entropy
minfile = curfile
except (FileNotFoundError, PermissionError, OSError) as exc:
print(f"{curfile}: skipped: {exc}")
print(f"max entropy {maxent} ({maxfile})")
print(f"min entroy {minent} ({minfile})")
熵计算函数来自优秀的http://blog.dkbza.org/2007/05/scanning-data-for-entropy-anomalies.html并针对 Python 3 进行了更新。
对于全盘扫描,您可能需要以 root 或管理员权限运行它。
答案3
方法 1. 使用专业的病毒攻击数据恢复软件
在数据恢复之前,我们先来看一下大部分勒索病毒的工作流程。从图中可以看出,勒索病毒加密后生成的文件并不是真正的文件,而只是副本而已。原始文件并没有直接被加密,而是被病毒删除了。因此,可以使用数据恢复工具来恢复被删除的源文件。只要数据恢复软件找到了被删除的源文件,那么数据恢复就非常有可能了。
尝试使用 EaseUS Data Recovery Wizard 作为首次尝试。这款领先的文件恢复软件能够恢复被 Locky 病毒(如 CryptoLocker 和其他勒索病毒)感染的文件。
方法 2. 从系统备份恢复数据
如果数据恢复程序不起作用,而您恰好进行了系统备份,那么您可以尝试使用 Windows 备份恢复受病毒感染的文件。这样,您就可以从更糟糕的情况下恢复数据。因此,设置自动 Windows 备份是防止数据丢失的一种非常有用的方法。
打开控制面板,点击“系统和安全”>“备份和还原”>“从备份还原文件”。在备份和还原屏幕上,点击“还原我的文件”,然后按照向导还原您的文件。