Threat Report ATTCK Mapper(TRAM)安装与配置手册
最近再看关于威胁情报方面的内容,论文中常出现的一个工具,或者说对比方法,TRAM,引发好奇。本着对后续研究的需要,以及对文章中反复出现的“confidence level”等术语的探索,决定会会这位大名鼎鼎的TRAM。
在这里我不引用什么官方的定义,纯粹是个人理解。TRAM是研发团队针对网络威胁情报(CTI)而开发的一款开源网站,基于Django,可以通过docker部署,方便用户上传CTI文件,并基于机器学习、大语言模型等技术对CTI中出现的攻击技术对应到ATT&CK框架中。(大概理解,如有不准确的地方欢迎指正,此时此刻已经20:33分,一会要赶着去洗澡了,这个博客以安装过程为重点)。
项目链接
当你百度搜索TRAM时,大概率你会看到对Tram的翻译;当你在后面加上“github”的字眼,你会看到一个关于轨迹预测的项目;当你再加上“威胁情报”的字眼,你终于发现了他,然后他会告诉你,“TRAM 搬家了”。

所以在这里直接附上最新的项目链接,供大家找寻。
TRAM
https://github.com/center-for-threat-informed-defense/tram/
安装过程
1. Docker
首先要保证你的docker环境是有效的,在这里不过多赘述Docker的安装方法,请大家移步,,额,,移步哪以后再补,我想聪明的你一定能找到。
如何验证你的Docker安装成功了呢,很多教程都说来pull一个Hello镜像,那么TRAM的作者给我们一个更方便的选项。打开你的终端,如果是window就“win+r 输入cmd”,如果是ubuntu就“Ctrl+Shift+T",输入
docker ps
如果你看到下面内容,说明安装成功了。【注意】只要看到红色的,说明有效。如果你的docker没有在运行任何项目,那么你看不到绿色框的内容。

2. docker-compose.yml
很好,聪明的你已经安装好了docker。那么下一步我们需要获取docker-compose.yml文件。按照官方的说法,我们可以使用以下指令来获取,但是当你的电脑无法访问精彩的互联网时,这一步会成为你的阻碍。
curl -LO https://github.com/center-for-threat-informed-defense/tram/raw/main/docker/docker-compose.yml
我们用一种更保险的方法,就找一个地方,创建一个文件夹(这一步随你,但这样做会更清晰),我们就把他叫做TRAM,并创建一个txt文件,随后改名为docker-compose.yml,是的,手动去创建它。随后把下面的内容粘进去,并保存。
# TRAM compose file.
# - TRAM is currently setup to use Django with SQLite DB
# - TRAM currently only works from localhost on port 8000 (or whatever port you select here)
# - Any ML data and DB data is stored at the path stored in the environment variable
# `DATA_DIRECTORY`. This is internal to Django.
# - ALLOWED_HOSTS is a list of hosts allowed to connect to the Django server (in settings.py)
# - CSRF_TRUSTED_ORIGINS is a list of origins allowed to requests to the Django server (in settings.py)
# - SECRET_KEY is generated at startup to a random value. Set SECRET_KEY env variable for tram service below
# to use a static value.
services:tram:image: ghcr.io/center-for-threat-informed-defense/tramenvironment:- DATA_DIRECTORY=/tram/data- ALLOWED_HOSTS=["【这里换成当前电脑的ip】", "localhost"]- CSRF_TRUSTED_ORIGINS=["【这里换成当前电脑的ip】:8000", "http://localhost:8000"]- DJANGO_SUPERUSER_USERNAME=【这里输入你想要用的用户名】- DJANGO_SUPERUSER_PASSWORD=【这里换成你的密码】 # your password here- DJANGO_SUPERUSER_EMAIL=【这里换成你的邮箱】 # your email address herevolumes:- tram:/tram/data- tram_static:/tram/src/tram/staticfilesnginx:image: ghcr.io/center-for-threat-informed-defense/tram-nginxports:- "8000:80"volumes:- tram:/tram/data:ro- tram_static:/tram/src/tram/staticfiles:rovolumes:tram:tram_static:
细心的你可能会发现,我的文件中有两行内容和官方的并不一样,那就是tram字段下的image以及nginx字段下的image,别着急,一会你就知道了。
3. Air Gap Installation
按照官方手册,下一步就是直接运行docker compose up指令,如果你愿意,你可以使用官方的docker-compose.yml文件并直接运行一下上面的指令,可能可以省去很多步骤。但是以我的安装经验来看,是行不通的,你会遇到以下报错:

所以,让我们在隔离环境中进行镜像拉取和抽取的操作吧。
这部分大家可以按照官方的手册来,还是比较顺畅的:
(1) 拉取一下image
docker pull ghcr.io/center-for-threat-informed-defense/tram:latest
docker pull ghcr.io/center-for-threat-informed-defense/tram-nginx:latest
这个步骤中,对tram的拉取会很耗时间,因为他要pull接近3个G,所以大家耐心等待。
(2) 输出成tgz格式
docker save ghcr.io/center-for-threat-informed-defense/tram:latest | gzip > tram-latest.tgz
docker save ghcr.io/center-for-threat-informed-defense/tram-nginx:latest | gzip > tram-nginx-latest.tgz
(3) 确认一下到处正确
ls -lah tram*.tgz
你会看到(类似)
-rw-r--r-- 1 johndoe wheel 345M Feb 24 12:56 tram-latest.tgz
-rw-r--r-- 1 johndoe wheel 9.4M Feb 24 12:57 tram-nginx-latest.tgz
(4)加载这些image
docker load < tram-latest.tgz
docker load < tram-nginx-latest.tar.gz
(5)确认一下加载成功没有
docker images | grep tram
注意这一步。大家在windows上部署的时候,习惯性会使用powershell直接操作,这是没有问题的,但是会出现grep不是内部工具的提示,因此其实建议大家从头就在docker部署过程中配置的WSL UBUNTU中操作(现在才说有点晚哈,不过不影响)。
别急,如果在windows上,请大家去掉 | 后的grep操作,然后从输出中寻找我们要找的:

只要有二位在,就OK。
聪明的你是不是发现这俩哥们跟眼熟。没错。就是我们刚才在docker-compose.yml文件中配置的内容。此时你应该清楚了,官方是直接从Internet拉取的,但我们很难保障能顺利拉取,因此在一个隔离环境中做了类似离线化的操作,只是步骤多了一点,其他的不受影响。
(6)见证奇迹
很好很好,总算搞定了,接下来,让我们在docker-compose.yml所在目录下,运行一下
docker compose up -d

这时候我们在docker界面中就会观察到一个略显潦草的名字---docker

接下俩让我们在浏览器中访问:
http://localhost:8000
我们就会进入到TRAM中:

还记得我们在docker-compose.yml文件中配置的账户名和密码吗?
忘了没关系,打开看下就知道了。

让我们进行研究吧!!【途中的APT29是我自己上传的,暂时还没做进一步的研究】。
4. 补充
TRAM是基于Django框架的,这个框架天然继承了友好的管理界面,在论文中的“Confidence Level” 也就清晰了一些,这是一个可设置的参数!

可以看到,进入ML Admin界面后,ML Settings字符旁边有一个Manage,这是一个按钮~
点击后就会跳转到admin界面,我们就可以看到设置窗口了。

结束语
写的有些潦草,回头我们继续润色补充,悄悄告诉你,docker-compose.yml文件在项目源码的docker目录下也有,大家可以直接把项目都clone下来进行研究。
研究顺利!!!
