操控流程完整性:给我们介绍一种“特殊”的Javascript反剖析技能

访客5年前黑客资讯1041


写在前面的话
了解歹意软件的实在代码对歹意软件剖析人员来说对错常有优势的,由于这样才干够实在了解歹意软件所要做的工作。但不幸的是,咱们并不总是能够得到“实在”的代码,有时歹意软件剖析人员或许需求相似反汇编东西或调试器之类的东西才干“估测”出歹意软件的实在行为。不过,当歹意软件运用的是“解说型言语”开发的话,例如Java、JavaScript、VBS或.NET等等,咱们就有许多种 *** 来检查它们实在的原始代码了。
不幸的是,进犯者相同知道这些剖析技能,并且为了躲避安全剖析,他们还会选用许多混杂技能来搅扰研究人员的剖析进程。进犯者能够运用反剖析技能来判别歹意代码是否在虚拟机环境中运转,或许让自己的代码只在特定环境中运转以避免调试以及逆向剖析环境(包含反混杂),而今日咱们要评论了便是一种依据JavaScript的新式反逆向剖析技能。
JavaScript正邪对垒
关于进犯者来说,JavaScript现已变成一种十分重要的进犯向量了。它一般用于进犯的Payload感染阶段,它的运用十分多样化,编码方式也不像其他言语那样遭到各种约束,并且简直一切的歹意JavaScript代码都会进行混杂处理。下图显现的是一个通过了混杂处理的JavaScriptPayload样本:

关于歹意软件剖析人员来说,之一步便是要对这种代码进行反混杂处理。从最简略的复制粘贴,到更强大一点的“脚本替换”(触及函数和变量的重命名),研究人员需求想方设法让代码愈加明晰。但是在JavaScript中,咱们能够依据函数名的调用状况来了解函数的运转机制。比如说函数arguments.callee.caller(),在这个函数的协助下,咱们能够创立一个仓库盯梢,并将履行过的函数依照次序存储在列表中。获取到函数名之后,咱们就能够将它们当作密钥来对处理过的JavaScript代码进行动态“解密”了。这项技能能够让咱们得到隐式的操控流完整性,由于假如一个函数被重命名或许函数运转次序发生了改变,那么“成果哈希”肯定是不同的。假如哈希不同,生成的密钥也就不同,这样就能够进行解密并运转通过特别加密的代码了。
为了让我们更清楚地了解我在说什么,请我们看看下面这段没有通过混杂处理的样本代码【检查原始代码】:
var _= require("underscore");
 
function keyCharAt(key, i) {
    return key.charCodeAt( Math.floor(i %key.length) );
  }
 
  function xor_encrypt(key, data) {
    return _.map(data, function(c, i) {
      return c.charCodeAt(0) ^ keyCharAt(key,i);
    });
  }
 
  function xor_decrypt(key, data) {
    return _.map(data, function(c, i) {
      return String.fromCharCode( c ^keyCharAt(key, i) );
    }).join("");
  }
 
 
function cow001(){
eval(xor_decrypt(arguments.callee.name,[0,0,25,67,95,93,6,65,27,95,87,25,68,34,22,92,89,82,10,0,2,67,16,114,12,1,3,85,94,69,67,59,5,89,87,86,6,29,4,16,120,84,17,10,87,17,23,24]));
}
 
function pyth001(){
eval(xor_decrypt(arguments.callee.name,[19,22,3,88,0,1,25,89,66]));
}
 
function pippo(){
pyth001();
}
 
pippo();
代码运转进程中会对“特定内容”进行核算(eval()函数),在代码的第21和25行,函数cow001()和pyth001()会核算XOR后的解密内容。xor_decrypt函数能够接纳两个参数:decoding_key和需求解密的Payload。接下来,代码会运用arguments.callee.name()函数来将内部阶段的每一个函数名当作解密密钥来运用,假如函数名是“原始函数名”(进犯者用来解密Payload的函数名),那么加密后的代码就会正常运转,不会报错。换句话说,假如函数名通过了重命名,那么eval()函数将得到过错的成果,并导致进犯者转化代码运转途径(运用简略的try catch句子)。
在运用JavaScript代码施行进犯之前,进犯者需求开发歹意JavaScript代码并对其进行混杂处理,这样才干准备好所谓的“进犯途径”。代码混杂的进程中,进犯者需求运用额定的脚本(比如说下面这段代码-【检查原始代码】)并依据混杂后的函数名来加密Payload,然后用新加密的Payload替换之前的代码(加密后的Payload便是加密函数名所运用的密钥)。
"use strict"; 
 
var _= require("underscore");
 
function keyCharAt(key, i) {
    return key.charCodeAt( Math.floor(i %key.length) );
  }
 
  function xor_encrypt(key, data) {
    return _.map(data, function(c, i) {
      return c.charCodeAt(0) ^ keyCharAt(key,i);
    });
  }
 
  function xor_decrypt(key, data) {
    return _.map(data, function(c, i) {
      return String.fromCharCode( c ^ keyCharAt(key,i) );
    }).join("");
  }
 
var final_payload = "console.log('Malicious Content Triggers Here !')";
var k_final = "cow001";

[1] [2]  黑客接单网

相关文章

一个登陆框引起的血案

客户给的测验规模,或许挖众测时,许多时分都只要一个简略的登陆框,想起最初的苦逼的我,只能去测测爆炸弱口令,并且仍是指定用户名爆炸暗码这种,当真是苦不堪言; 文章内容很简略,可是仍是想共享一波,送给向我...

使用osquery进行远程取证-黑客接单平台

Osquery是一个SQL驱动操作体系检测和剖析东西,它由Facebook创立,支撑像SQL句子相同查询体系的各项目标,能够用于OSX和Linux操作体系。别的,osquery是一个多渠道软件,能够安...

几个不错且免费的Web安全解决方案

朋友:有什么的免费的网站安全解决方案,或者说产品么? 黑客接单渠道:当然有啊!不光免费,还很好用呢! 朋友:那还不赶忙和我说说?我小网站买不起WAF,免费的好用的话我就用下啊! 黑客接单渠道:那等下,...

8个增强 PHP 程序安全的函数

 安满是编程十分重要的一个方面。在任何一种编程言语中,都供给了许多的函数或许模块来保证程序的安全性。在现代网站运用中,常常要获取来自世界各地用户的输入,可是,咱们都知道“永久不能信任那些用户输入的数据...

怎么脱节Google的影响,完成一个完全无Google要素的网络环境

本文我得先从我最近参加的一个安全检测项目开端谈起,本次的客户是一家企业,不得不说,本次咱们的客户的安全防护做得非常好。他们的安全运营中心(SOC)装备了许多先进的内部反常检测东西以及坚强的作业呼应团队...

阿里如此盾Web使用防火墙深度测评

在本年的WitAwards 2019互联网安全年度评选中,阿里如此盾Web运用防火墙(WAF)以其技能和服务赢得了群众和评委的认可,斩获「年度云安全产品及服务」奖项。实际上,WAF已经成为企业看护we...