首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手把手教你使用GitHub Actions进行安全开发

手把手教你使用GitHub Actions进行安全开发

作者头像
FB客服
发布2020-11-05 21:01:35
发布2020-11-05 21:01:35
98000
代码可运行
举报
文章被收录于专栏:FreeBufFreeBuf
运行总次数:0
代码可运行

GitHub Actions介绍

GitHub Actions是一个构建在GitHub中的CI/CD管道,并于2019年11月份正式上线运行。Actions允许开发人员基于类似check-ins和pull request等触发器来构建、测试和部署我们的代码,并自动化实现产品工作流。

在这篇文章中,我们将教会大家如何使用Actions API来下载并执行Cobalt Strike中的工具组件,并部署附带的脚本,这样我们就可以在任务中去使用这些工具组建了。

直奔主题

在我们开始对API动手之前,我们先来快速回顾一下如何配置Actions。在这篇文章中,我使用的是一个私有代码库,其中包含了大量常用工具,比如说GhostPack和SharpHound。这里我已经创建好了一个GitHub的私有代码库了,并将这些工具以子模块的形式添加了进去,使用的命令如下:

代码语言:javascript
代码运行次数:0
运行
复制
git submodule add https://github.com/BloodHoundAD/SharpHound3.git

添加好之后,做一个commit然后push,搞定!

这些子模块会相应的代码库版本进行映射连接,这样不仅方便我们进行后续的工具版本更新,而且也可以保证我们的私有代码库运行不会出现任何意外问题:

接下来,我们需要配置我们的工作流,这一步需要在“Actions”标签页中进行配置:

攻击性开发

首先,在如下图所示的GitHub UI界面中,选择我们需要的选项,并创建一个yml脚手架文件:

在这里,我们可以访问很多Actions功能,我们可以在这里整合我们的工作流。在这篇文章中,我们只会使用一些比较简单的东西,然后构建到我们的工具中并对外发布。

为了实现这个任务,我们需要检查我们的代码库,包括子模块在内,然后恢复需要用到的代码包,并以发布模式执行MSBuild:

代码语言:javascript
代码运行次数:0
运行
复制
name: Build
on: [push]
jobs:
  build:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/checkout@v2
      - name: Checkout submodules
        shell: bash
        run: |
          # If your submodules are configured to use SSH instead of HTTPS please uncomment the following line
          # git config --global url."https://github.com/".insteadOf "git@github.com:"
          auth_header="$(git config --local --get http.https://github.com/.extraheader)"
          git submodule sync --recursive
          git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
- name: Setup Nuget.exe
        uses: warrenbuckley/Setup-Nuget@v1
      - name: Nuget Restore
        run: nuget restore $Env:GITHUB_WORKSPACE\SharpHound3\SharpHound3.sln
      - name: Build SharpHound3
        run: |
          cd "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\"
          .\MSBuild.exe $Env:GITHUB_WORKSPACE\SharpHound3\SharpHound3\SharpHound3.csproj /property:Configuration=Release
      - uses: actions/upload-artifact@master
        with:
          name: SharpHound3
          path: SharpHound3\SharpHound3\bin\Release\SharpHound.exe

在这里,每一个Build都运行在一个临时容器上,这些容器具备了运行git命令和执行Build所需的工具链。针对这个Build,我们的目标是.NET代码,因此我们使用了一个Windows容器。

第一步,我们要检查我们的代码库,然后恢复我们的子模块。这里的命令稍微有点复杂,简单说来就是我们需要进入一个shell,然后直接运行git命令。在这里,我们可以获取到一个setuo-nuget Action,它将允许我们针对SharpHound3来运行nuget指令,这个命令可以获取构建SharpHound所需的依赖组件。

接下来,我们就可以通过shell来调用MSBuild,将路径传递给SharpHound的csproj文件并指定一个发布版本。MSBuild运行之后,将会在我们容器的磁盘空间生成一个已编译好的EXE文件。

为了访问我们已编译好的工具,我们首先需要上传工具,这样才能通过Actions API和GitHub UI界面来访问和使用。如果不上传的话,这些工具将会随着构建容器的销毁而销毁。针对我们的每一个工具,都进行相应的构建,这样就可以得到一个包含所有工具组件的工具列表了。

配置完成后,我们就可以开始研究API了。为了访问API,我们还需要准备好一个凭证。GitHub提供了大量认证方法,但好像只有Personal Access Tokens(PAT)符合我们的需求,因此这里我们选择使用一个PAT来代替密码。

令牌创建成功后,我们就可以通过cURL来发送API请求了:

代码语言:javascript
代码运行次数:0
运行
复制
curl -u two06:TryHarder ‘https://api.github.com/repos/two06/redteam-tooling/actions/artifacts’

该请求将返回我们代码库中可用工具组件的详细信息:

关于如何编写攻击脚本的问题,我在此就不进行赘述了,感兴趣的同学可以阅读这篇【文档】了解更多详情。重要的地方在于,我们如何使用Exec方法来调用GitHub API,比如说这样:

代码语言:javascript
代码运行次数:0
运行
复制
sub make_API_request{
    $cmd = @('curl', '-u ' . $username . ':' . $access_token, $api_url . $repo_url . $endpoint);
    $curl_command = exec($cmd);
    $data = readAll($curl_command);
    closef($curl_command);
    return $data;
}

在这里,我们可以传递用户名、访问令牌和构建的URL,然后读取数据并将其返回进行后续处理。

至此,我们就可以访问Cobalt Strike中的大量工具组件了:

通过使用工具组件名称,我们可以查询下载URL并获取包含了工具组件的ZIP文件。接下来,我们就可以提取文档并使用Execute-Assembly命令来执行工具了:

其他资源

GitHub Actions官网:

https://github.com/features/actions

PAT令牌:

https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line

攻击脚本文档:

https://www.cobaltstrike.com/aggressor-script/index.html

攻击脚本获取:

https://github.com/mdsecactivebreach/Execute-GithubAssembly-Aggressor/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GitHub Actions介绍
  • 直奔主题
  • 攻击性开发
  • 其他资源
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档