AoiAWD-轻量级系统环境搭建

简单介绍

这里直接贴官方介绍(官方地址):

AoiAWD 是一个由Aodzip(安恒信息 海特实验室研究员、HAC战队成员)维护的一个针对于CTF AWD模式的开源项目。专为比赛设计,便携性好,低权限运行的EDR系统。任何人都可以在 GNU AGPL-3.0 许可下使用该项目和分享该项目的源码。

应用场景

在常见的AWD比赛中,选手往往拥有一台(或若干台)开放了SSH服务和题目服务的“靶机”作为自己防守的阵地。

在实际比赛中,主办方往往会限制选手的SSH权限到一般用户/仅可管理题目的权限。并且针对一些常见的通用防火墙脚本(通防脚本)进行轮询式check。

AoiAWD是针对以上场景的限制和痛点设计的,组件间基于socket通信以便灵活部署,具有图形可视化界面。所有行为探针均支持在最低系统权限下运行,且默认不会干扰题目业务逻辑的正常运行,可以绕过绝大部分check脚本的行为检查。支持如下维度的行为捕获能力:

  • Web输入输出数据捕获、输出流量篡改(没错,你可以动态替换掉输出的flag为任意字符串)
  • PWN类题目输入输出交互流量包捕获、当次运行时内存结构捕获、输出流量篡改
  • 服务器进程UID、PID、父进程、启动参数、运行时间捕获
  • 服务器文件系统新建、删除、修改、权限变化行为捕获。

本系统还内置了生命周期钩子,可以针对某一次行为的产生编写特定的插件去实现流量层面的临时热补丁、增加大屏告警、替换输出字符等操作。系统默认内置了如下插件可供参考:

  • FlagBuster: 当检测到输出流量中包含了符合正则的flag字符串,产生大屏告警、标记触发规则的数据包、并将flag精准替换为看起来也像flag的随机数。
  • KingWatcher: KoH类比赛中,当有其他队伍替换掉了赛点文件时,产生大屏告警。
  • ZombieKiller: 当文件系统上出现了不死马行为,标记可疑文件并产生大屏告警。

系统简介

AoiAWD 分为六个组件,组件间互相配合实现系统的完整功能

  • MongoDB Server: 日志数据存储数据库
  • AoiAWD Core: 中心数据处理与插件后端服务器
  • Frontend: 数据可视化平台前端
  • Guardian: PWN行为探针
  • TapeWorm: Web行为探针
  • RoundWorm: 系统进程与文件系统行为探针

MongoDB Server

用于记录庞大的流量文件的数据库,是整个系统的核心存储。

  • 一般情况下建议和AoiAWD Core一起部署在选手自己可控的主机上。
  • 无需额外的配置,Ubuntu环境下开箱即用,apt一下即可搞定。

Frontend

Vue编写的Web前端,用来浏览日志,产生报警动画等可视化展示。

  • 使用npm编译打包。
  • 一般情况下编译后将与AoiAWD Core集成为一个可执行文件。
  • 无需单独的运行启动。

AoiAWD Core

是整个系统运行的核心,负责探针数据收集入库、插件生命周期管理、Web前端托管服务。

  • 运行compile.php即可打包为一个单独的二进制文件,方便携带。
  • 插件需要放到和aoiawd.phar同目录下的plugins文件夹,Web端有直接重载插件的按钮,可以实现热更新。
  • 一般情况下可直接无参数运行,如果需要特别的配置,可以增加-h参数查看帮助信息。
AoiAWD: Data Visualization Tool & Main Server
Usage: ./aoiawd.phar [OPTIONS]
-w [URI] HTTP server bind URI. Default: tcp://0.0.0.0:1337
-l [URI] Log recoard server bind URI. Default: tcp://0.0.0.0:8023
-m [URI] MongoDB server URI. Default: mongodb://127.0.0.1:27017
-t [STRING] Access token. Default: [RANDOM]
-h This help info

运行后会显示本次启动后的临时密钥,是访问Web前端的必要信息

[2020-09-24 15:21:21] MainServer.notice: AccessToken: 0de8d57b3e91dc66 [] [] #<-- Web访问密钥
…
[2020-09-24 15:21:21] Amp\Http\Server\Server.info: Listening on http://0.0.0.0:1337/ [] [] #<-- Web前端地址
[2020-09-24 15:21:21] aoicommon\socket\AsyncTCPServer.info: Listening on 0.0.0.0:8023 [] [] #<-- 探针上线地址

Guardian

一个二进制PWN的影子外壳,其原理是包裹在PWN题目外侧,在每次被启动的时候透明记录STDIN与STDOUT的流量,并快照PWN程序的内存结构(/proc/????/mem)上传回AoiAWD Core。

  • 在项目目录运行compile.php将会编译影子壳程序和捆绑程序: guardian.phar,一般是在选手电脑上进行捆绑后将生成文件上传到靶机。
  • 直接运行捆绑程序会输出帮助文本,其中比较重要的一些参数是:
    • -i: 输入需要套壳的PWN题目程序路径
    • -s: 输入可以从靶机访问到探针上线地址的URL,比如说192.168.???.???:8023
Guardian: AoiAWD ELF PWNMonitor Tool
Usage: ./guardian.phar [PATH]
-i [PATH] Original ELF.
-o [PATH] Path of patched ELF. Default: {$OriginalELF}.guardianed
-s [URI] Log recoard server URI. Default: 127.0.0.1:8023
-h This help info

TapeWorm

一个PHP Web的影子外壳,其原理是自动注入到所有PHP文件的头部,支持输入输出流量的抓取与上报,同时具有处理输出数据的能力,实现输出内容篡改。

  • 程序内部的代码已经实现了单实例启动,即便是层层include了多次,也只会运行最先触发的影子外壳。所以不用担心复杂的题目影响性能。
  • 自动注入程序会智能识别面向对象的文件(包含 namespace 关键字),和直接面向过程的PHP文件,一般情况下不会造成语法错误。
  • 自动注入程序会识别已经被注入的脚本并加以跳过,所以多次反复无脑对web根目录运行注入程序并不会造成什么太大的问题。
  • 运行compile.php就可以生成自动注入程序,一般情况下可以上传到靶机上直接对web根目录进行注入,或者在选手电脑上注入好之后再上传到靶机上。
  • 一时注入一时爽,忘记备份宕机慌
  • 直接运行注入程序会显示帮助文本,其中比较重要的一些参数是:
    • -d: 需要注入外壳的web根目录,会从此目录递归感染所有的PHP文件。
    • -s: 输入可以从靶机访问到探针上线地址的URL,比如说192.168.???.???:8023。
TapeWorm: AoiAWD PHP WebMonitor Tool
Usage: ./tapeworm.phar [PATH]
-d [PATH] WebMonitor inject dir.
-s [URI] Log recoard server URI. Default: 127.0.0.1:8023
-f [PATH] Inject file path. Default: {$dir}
-h This help info

RoundWorm

一个监控文件系统和进程的系统行为监视器,其原理是扫描/proc文件夹获取当前正在运行的所有进程的信息,以及利用Linux系统的inotify功能对指定文件夹的敏感文件操作进行全面的记录。

  • 直接运行make就可以编译生成
  • 一般来讲该程序在靶机上运行,选手电脑上没必要执行这玩意。
  • 添加-h参数即可看到帮助文档,其中比较重要的一些参数是:
    • -d: 后台运行,你当然不想关掉ssh的时候就把探针也给关了。
    • -s: 输入可以从靶机访问到探针上线地址的IP,比如说192.168.???.???。
    • -w: 需要监控文件变化的路径,如果有多个路径使用';'分割,比如: -w "/tmp;/var/www/html"
RoundWorm: AoiAWD Filesystem & Process Monitor Tool
Usage: ./roundworm [OPTIONS]
-d Running in daemon mode.
-s [HOST] AoiAWD Probe IP. Default: 127.0.0.1
-p [PORT] AoiAWD Probe PORT. Default: 8023
-w [PATH] Inotify watch dir, ';' as divider. Default: /tmp
-i [MSECOND] Process watch interval. Default: 100
-h This help info

搭建流程

这里我 使用的是内网机器kalilinux,不过我不推荐使用内网机器,因为还需要搭建代理。全程建议在root账户下进行,保证权限畅通。

首先更新一波,保证系统最新状态,顺便安装所需模块build-essential

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential

安装git和下载项目,当然也可以进入官网自行下载并copy到kali里

apt install git
git clone https://github.com.cnpmjs.org/DasSecurity-HatLab/AoiAWD.git

安装inotifywait,这里不需要在aoiawd文件里创建,跟aoiawd在同一文件下即可,最后一步的安装,如果不是用的root,则三个命令都需加上sudo

mkdir inotifywait   #新建文件夹
cd inotifywait      #进入文件夹
wget https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz   #下载
tar zxf inotify-tools-3.14.tar.gz   #解压
cd inotify-tools-3.14/
./configure && make && make install #安装

可用man inotifywait命令查看文档以确定是否安装正确,然后按q退出

安装mongdb需要的依赖

sudo apt install mongodb-server
sudo apt-get install php7.4-dev php-pear
sudo pecl install mongodb 

安装好后可顺便启动一下,我一开始就是没启动,导致后面连接不上,一直没找到原因

sudo service mongodb start
sudo service mongodb status #查看状态

如果出现了提示You should add "extension=mongodb.so" to php.ini说明成功了,接着我们去php的配置文件php.ini进行修改

路径一般为:/etc/php/8.1/cli/php.ini,接着我们去拓展处加上extension=mongodb.so

然后再把这两个开关改成Off,记住要把前面的分号去掉,不然会被注释掉

构建Fronted项目

apt install npm      #安装npm
cd AoiAWD  			#进入下载的项目
cd Frontend
npm install          #如有提示可继续敲npm fund命令
npm run build

这里最容易出错的地方是第三步npm install,我的出错点在npm与node的版本问题,可能会出现版本互不支持的情况,

如果有npm或node,先查看一下版本

node -v
npm -v

这里我的node版本是12.22.12,npm版本是6.14.16

不知道对应版本请点击

不知道怎么切换版本的话,就得问问度娘

执行成功会在dist/目录下得到index.html和static目录

构建AoiAWDcore

刚才是在Frontend目录下,现在往回退一下,cd ..,这步基本上没有问题,就不多说了,照着目录执行就完了。

cd AoiAWD
rm -rf src/public/*						#删除
cp -r ../Frontend/dist/* src/public/	  #复制静态资源
php compile.php

执行成功后得到aoiawd.phar,用于后续启动。

构建TapeWorm

cd TapeWorm
php compile.php

构建成功后得到tapeworm.phar #探针

构建Guardian

cd Guardian
php compile.php

构建成功后得到guardian.phar #探针

构建RoundWorm

cd RoundWorm
make

构建成功会得到roundworm #探针

启动AoiAWD

前面安装的MongoDB还没启动的话,现在还来得及(sudo service mongodb start),不然会报错

cd AoiAWD
sudo mongod
./aoiawd.phar

会提供一个随机token和开放三个端口,1337是web访问端口,8023是探针的接收端口,然后我们通过ip:1337去访问开启的AoiAWD界面

小提示:如果使用了代理,需要先开启aoiawd,否则代理那边也会报错,一直提示8023端口没有服务啥的。

使用方法

搭建完后把刚刚那些文件夹中的生成的文件例如xxx.phar等发送到提供给我们的靶机上去,然后记得赋予权限,ip是云服务器ip,端口就是默认8023,如果使用了代理,端口根据设置的端口进行修改

chmod +x tapeworm.phar
chmod +x roundworm
chmod +x guardian.phar
./tapeworm.phar -d 目录 -s ip:port
./roundworm  -w 目录 -s ip -p port
./guardian.phar -i 目录 -s ip:port

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余切66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值