流量分析【未完结】
挖矿流量检测
先做完签到题竞竞赛训练营-数据安全分析然后开始动手,题目要求上传一个txt文件,文件的每一行代表挖矿流量在pcap文件包中的编号数字,编号数字范围为1到pcap中packet个数,得分计算方式为100*f-score。
wireshark分析
使用捕获文件属性查看功能,可以发现,整个流量是抓了12分37秒,一共有341,711个包
“统计”→Http→请求,可以看到所有的http请求数据统计结果:
“统计”→协议分组统计功能,可以看到,大部分的数据都在tls协议上,因此考虑走tcp的挖矿协议。
根据“前置资料”部分的提示,还有签到题,可以把关注重心放在stratum协议上
原文:suricata下的挖矿行为检测 - FreeBuf网络安全行业门户 、btcpool之Stratum协议 - perimeter - 博客园 (cnblogs.com)、安全 | 聊聊挖矿哪些事儿(一) - 掘金 (juejin.cn)
目前主流的挖矿协议为stratum协议,GBT(getblocktemplate)协议和getwork协议由于带宽和性能的消耗比较多,在7,8年就已经被新的矿机所抛弃。stratum协议为JSON的数据格式,通信过程如下:
通信过程主要分为矿机登记、任务下发、账号登录、结果提交与难度调整等部分。 矿机登记以mining.subscribe方法向矿池连接:
{"id":1,"method":"mining.subscribe","params":[]}
矿池以mining.notify方法返回相关信息:
{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null}
账号登录一般分为两种,一种是直接登录,另一种是通过jsonrpc方式。矿机直接通过mining.authorize方法登录:
{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
通过jsonrpc方式登录:
{"id":1,"jsonrpc":"2.0","method":"login","params":{"login":"blue1","pass":"x","agent":"Windows NT 6.1; Win64; x64"}}
结果提交通过"mining.submit"方法向矿池提交任务:
{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
难度调整以mining.set_difficulty方法调整难度:
{"id":null,"method":"mining.set_difficulty","params":[2]}
分许上面json内容,主要特征字段有id、method、jsonrpc、params、result、login、pass、agent、mining.submit等,通过对具体通信数据包进行相应特征字符串检测,以此来发现挖矿行为的存在。而网页挖矿行为也可以通过检测coinhive.min.js等特征字符串来发现。
不过直接上显示过滤器过滤“json”无法得到任何流量包(?),因此考虑先把符合stratum的特征值导出来,语句如下:
# 显示过滤器语句
tcp contains "method" or tcp contains "jsonrpc" or tcp contains "params" or tcp contains "mining" or tcp contains "agent" or tcp contains "result"
导出来会有112个数据包
流量包长这样子,保存为“mining.pcap”
根据基于行为检测的挖矿木马检测技术的研究和有效实践 - FreeBuf网络安全行业门户,查是否有门罗币挖矿,但是查出来的都是tls加密后的流量,暂且搁置(13个)
对剥离出来的pcap包进行分析,“统计”🔜“流量图”
可以找到矿机与矿池的ip信息
查看其中一个流量包,发现通信内容确实是stratum协议的特征
根据题目要求,进行流量提取
from scapy.all import *
p=sniff(offline='cryptomining.pcap')
dic={1:"ICMP",2:"IGMP",3:"GGP",6:"TCP",7:"CBT",8:"EGP",9:"IGP",10:"BBNRCC监视",12:"PUP",
13:"ARGUS",14:"EMCON",22:"XEROXNSIDP",23:"Trunk-1",24:"Trunk-2",25:"leaf-1",26:"1eaf-2",
36:"XTP",41:"1Pv6",49:"BNA",54:"NBMA地址解析协议",55:"IP可移动性",57:"SKIP",62:"CFTP",
64:"SATNET和BackroomEXPAK",65:"Kryptolan",66:"MIT",67:"Internet Pluribus",69:"SATNET",
70:"VISA",74:"Wang Span",76:"Backroom SATNET",77:"SUN ND PROTOCOL",78:"WIDEBAND",
79:"WIDEBAND EXPAK",80:"ISO Internet",81:"VMTP",82:"SECURE—VMTP",83:"VINES",84:"TTP",
85:"NSFNET—IGP",87:"TCF",88:"EIGRP",89:"OSPF IGP",90:"Sprite RPC协议",9:"Locus地址解析协议",93:"AX.25帧",
97:"IP中的以太封装",100:"GMTP",101:"Ipsilon流量管理协议",102:"PNNI over IP",104:"ARIS",105:"SCPS",106:"QNX",
107:"活动网络",108:"IP有效负载压缩协议",109:"Sitara网络协议",110:"Compaq对等协议",111:"IP中的IPX",112:"虚拟路由器冗余协议",
113:"PGM可靠传输协议",114:"任何0跳跃协议",115:"第二层隧道协议",116:"D-II数据交换(DDX)",117:"交互式代理传输协议",
118:"日程计划传输协议",119:"SpectraLink无线协议",120:"UTI",122:"SM",124:"ISIS over IPv4",125:"FIRE",128:"SSCOPMCE",129:"IPLT"}
def getTime(p):
import datetime
timestamp = float(p.time)
dt = datetime.datetime.utcfromtimestamp(timestamp)+datetime.timedelta(hours=8)
return dt.strftime('%Y-%m-%d %H:%M:%S.%f')
def check(r):
tag=[ "method","jsonrpc", "params","mining", "agent" ,"result"]
for i in tag:
if i in str(raw(r)):
return True
return False
res=[]
idx=0
for pp in p:
flag = False
idx+=1
data = {
"No":idx,
"Time": getTime(pp),
"Src_ip": pp['IP'].src,
'Dst_ip': pp['IP'].dst,
'Protpcol': dic[pp['IP'].proto]
}
if pp.haslayer('TCP'):
if pp.haslayer('Raw'):
if check(pp):
print(pp.summary(), raw)
res.append(data)
import pandas as pd
df=pd.DataFrame(res)
text=df.to_string(index=False)
print(text)
赛后好像不让上传txt了,暂且不知道对不对。
加密流量的检测【施工中】
wp的做法是根据协议传输的特征,解不出内容,但是可以检测客户端与服务器的响应流程。赶紧这么做有点麻烦,于是开始了自我探索之旅。下面的这个文章提到了用AI直接学习元数据
原文:别怪ChatGPT,AI黑客攻击早已开始-36氪 (36kr.com)
借助AI技术,无需解密并分析有效负载,而是通过元数据和网络数据包分析网络流量,以及应用层面的安全检测,就可以实现加密流量的安全检测,有效的抵御恶意攻击。
but,查到一个师傅的绕过做法,啊这,如果让AI去学习加密后的特征看来是相当不靠谱的,还是得从协议出发啊。
原文:虚拟货币挖矿检测与防御
协议加密是未来IDS要解决问题。那么针对加密传输的情况,我们能够在握手协议和证书两个层面来做一些事情。由于挖矿的特殊性,矿池的域名、证书是不会轻易进行变化的,并且矿池的具有聚集属性,即越大的矿池集合到的矿机越多,越能够保证收益的稳定性。所以也可以针对排名较为靠前的矿池进行域名和证书的收集,添加针对性的检测策略。
矿工历程:国内TCP直连->国外->中转-> SSL->隧道->隧道+混淆
矿池挖矿
比特币
大致的教程都如视频你的电脑也可以挖比特币!所言,下矿机的时候记得选第二个,第一个会卡在协议允许界面。
控制面板处开始挖矿
but,一直出现网络连接问题,开全局proxy都没有,暂且不知如何处理(该如何解决NiceHash Miner中的\"NHMWS not connected\"错误),怀疑是因为走的校园网,学校部署的设备给拦截了。
乌鸦币
Raven 钱包下载地址:Wallets 付款地址:RUcV24mtFBLp5yHhtcNZrBqmUKjf3b1fPJ
矿池地址: Pools Ravencoin (RVN) KawPow | Mining Pools 这些都是可以用于挖乌鸦币的公开的矿池
# RVN
nbminer.exe -a kawpow -o stratum+ssl://rvn.kryptex.network:8888 -u RGTn7qhnPuXX6MYoT5oZ6ymFXfiwkr19Y9/worker
nbminer.exe -a kawpow -o stratum+ssl://rvn.kryptex.network:8888 -u RUcV24mtFBLp5yHhtcNZrBqmUKjf3b1fPJ/worker
# Nano
nbminer -a kawpow -o stratum+ssl://rvn-eu1.nanopool.org:10443 -u RGTn7qhnPuXX6MYoT5oZ6ymFXfiwkr19Y9.default
nbminer -a kawpow -o stratum+ssl://rvn-eu2.nanopool.org:10443 -u RGTn7qhnPuXX6MYoT5oZ6ymFXfiwkr19Y9.default
# Ravencoin Pool
nbminer.exe -a kawpow -o stratum+tcp://asia-rvn.2miners.com:6060 -u RGTn7qhnPuXX6MYoT5oZ6ymFXfiwkr19Y9.default
nbminer.exe -a kawpow -o stratum+tcp://asia-rvn.2miners.com:6161 -u RGTn7qhnPuXX6MYoT5oZ6ymFXfiwkr19Y9.default
都出现了解析问题(应该是被扳了)
找到了一些经过混淆后的公共矿池 矿工之家,but,GPU不够使。。。
自建矿池
搭建的环境:矿池-Ubuntu/192.168.191.197,矿机-raven本机/192.168.191.1。按照NOMP矿池搭建教程走,没有redis和nodejs的需要自己安装一下
curl –sL https://deb.nodesource.com/setup | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-add-repository ppa:chris-lea/redis-server
sudo apt-get update
sudo apt-get install git vim screen redis-server
sudo apt-get install build-essential libboost-all-dev libcurl4-openssl-dev libdb5.1-dev libdb5.1++-dev
# 直接按照package.json安装报错的化记得挂一些代理
npm config set proxy http://192.168.191.1:10811
git config --global http.https://github.com.proxy http://192.168.191.1:10811
git config --global https.https://github.com.proxy https://192.168.191.1:10811
git clone https://github.com/zone117x/node-stratum-pool node_modules/stratum-pool
nvm install v0.10.25
npm update
在执行npm update
的时候出现一下报错
查阅资料解决npm install时因无法访问github而报错,因此安装的时候记得挂一个代理,v2开启允许局域网后,可以在下方看到地址信息
Ubuntu上设置上对应的地址,详细可以看这篇 NAT模式下使用宿主机代理上网
没有代理可以试试这种方式:npm install安装依赖时报错
npm update --save node-sass --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist --sass-binary-site=http://npm.taobao.org/mirrors/node-sass
需要配置的文件
设置config.json
config.json
{
"logLevel": "debug",
"logColors": true,
"cliPort": 17117,
"clustering": {
"enabled": true,
"forks": "auto"
},
"defaultPoolConfigs": {
"blockRefreshInterval": 1000,
"jobRebroadcastTimeout": 55,
"connectionTimeout": 600,
"emitInvalidBlockHashes": false,
"validateWorkerUsername": true,
"tcpProxyProtocol": false,
"banning": {
"enabled": true,
"time": 600,
"invalidPercent": 50,
"checkThreshold": 500,
"purgeInterval": 300
},
"redis": {
"host": "127.0.0.1",
"port": 6379
}
},
"website": {
"enabled": true,
"host": "192.168.191.197",
"port": 80,
"stratumHost": "192.168.191.197",
"stats": {
"updateInterval": 60,
"historicalRetention": 43200,
"hashrateWindow": 300
},
"adminCenter": {
"enabled": false,
"password": "password"
}
},
"redis": {
"host": "127.0.0.1",
"port": 6379
},
"switching": {
"switch1": {
"enabled": false,
"algorithm": "sha256",
"ports": {
"3333": {
"diff": 10,
"varDiff": {
"minDiff": 16,
"maxDiff": 512,
"targetTime": 15,
"retargetTime": 90,
"variancePercent": 30
}
}
}
},
"switch2": {
"enabled": false,
"algorithm": "scrypt",
"ports": {
"4444": {
"diff": 10,
"varDiff": {
"minDiff": 16,
"maxDiff": 512,
"targetTime": 15,
"retargetTime": 90,
"variancePercent": 30
}
}
}
},
"switch3": {
"enabled": false,
"algorithm": "x11",
"ports": {
"5555": {
"diff": 0.001,
"varDiff": {
"minDiff": 0.001,
"maxDiff": 1,
"targetTime": 15,
"retargetTime": 60,
"variancePercent": 30
}
}
}
}
},
"profitSwitch": {
"enabled": false,
"updateInterval": 600,
"depth": 0.90,
"usePoloniex": true,
"useCryptsy": true,
"useMintpal": true,
"useBittrex": true
}
}
coins下的添加一个raven.json文件,配置coins算法:
钱包配置,记得rpc的账号密码要对应起来,(图里的密码后来改了, 懒得再截图了。
配置daemons的时候端口8766不要动,这是raven的默认rpc端口。nravencoin-config
raven.json
{
"enabled": true,
"coin": "raven.json",
"address": "RGTn7qhnPuXX6MYoT5oZ6ymFXfiwkr19Y9",
"rewardRecipients": {
"RW7SH54jpKk2b7bPLqt18uga82a2HWQTzh": 1
},
"paymentProcessing": {
"enabled": true,
"paymentInterval": 20,
"minimumPayment": 0.01,
"daemon": {
"host": "192.168.191.1",
"port": 8766,
"user": "ravend",
"password": "0123456"
}
},
"ports": {
"8888": {
"tls":false,
"diff": 0.5,
"varDiff": {
"minDiff": 0.04,
"maxDiff": 16,
"targetTime": 15,
"retargetTime": 60,
"variancePercent": 30
}
},
"7777": {
"tls":false,
"diff": 0.5,
"varDiff": {
"minDiff": 0.04,
"maxDiff": 16,
"targetTime": 15,
"retargetTime": 60,
"variancePercent": 30
}
},
"9999": {
"tls":false,
"diff": 2.5,
"varDiff": {
"minDiff": 1.5,
"maxDiff": 16,
"targetTime": 15,
"retargetTime": 60,
"variancePercent": 30
}
}
},
"daemons": [
{
"host": "192.168.191.1",
"port": 8766,
"user": "ravend",
"password": "0123456"
}
],
"p2p": {
"enabled": false,
"host": "127.0.0.1",
"port": 5889,
"disableTransactions": true
},
"mposMode": {
"enabled": false,
"host": "127.0.0.1",
"port": 3306,
"user": "me",
"password": "mypass",
"database": "vtc",
"checkPassword": true,
"autoCreateWorker": false
},
"mongoMode": {
"enabled": false,
"host": "127.0.0.1",
"user": "",
"pass": "",
"database": "vtc",
"authMechanism": "DEFAULT"
}
}
package.json中将node-watch库的版本号改为0.7.1或更高。这是因为在0.7.1版本之后,node-watch库添加了对Linux平台上递归监视的支持,其他的依赖库不变,之前只支持macOS和Windows
之后启动redis-server && sudo node init.js
成功访问
在getting started处可以看到配置成功的乌鸦币信息
挖矿尝试:
nbminer.exe -a kawpow -o stratum+tcp://192.168.191.197:7777 -u RGTn7qhnPuXX6MYoT5oZ6ymFXfiwkr19Y9.default
cpuminer.exe -a x16r -o stratum+tcp://192.168.191.197:7777 -u RW7SH54jpKk2b7bPLqt18uga82a2HWQTzh -p x -D -P -t 10
相关链接
F2Pool – 全球领先的比特币矿池 鱼池要双因素认证(鸿蒙死活装不上Google play,吐血),暂且搁置
poolin大型矿池需要买个矿机
Windows 11 系统最新挖矿教程!挖以太币用什么挖矿程序最好呢?
最近几个币的挖矿收益 | 聊聊购买挖矿设备 | XNM(XenBlocks)小狐狸钱包网络信息更新
2022年最新显卡挖矿教程(新手保姆级)第一集:显卡挖矿全流程,如何申请注册Metamask小狐狸以太坊钱包
Pepe Pow Mining Pool - Mining4People
HashHead.io – Xenium Mining Account Stats
Ravencoin 挖矿:挖掘 Ravencoin 保姆级教程 - 加密狗
如何搭建自己的比特币矿池 p2pool矿池教程综合篇-挖矿教程-挖矿网
zone117x/node-stratum-pool: High performance Stratum poolserver in Node.js
NiceHash+Electrum
NBminer
NBMiner挖矿教程 – 币印帮助中心 (poolin.me)
NBMiner 挖矿软件介绍-挖矿项目网 (liumuhui.com)
Releases · shanhaicoder/XENGPUMiner (github.com)
XeggeX Cryptocurrency Exchange
Release CPU-Miner with SonoA support · zPools/
各种加密代理协议的简单对比. 目前我们常用的加密代理有协议有 HTTPS,SOCKS5-TLS 和…
原神 2.8 KCP 验证密钥交互流程解析与流量解密 (sdl.moe)
前置资料
Gost构建加密隧道,规避流量监测,实现安全挖矿-2022.5.22更新 - 91挖 (91wa.net)
对于挖矿的检测以及防御方案 - 先知社区 (aliyun.com)
恶意挖矿监测运营实践和典型样本预警 - 知乎 (zhihu.com)
wireshark抓包 从入门到入坟————wireshark统计功能介绍_wireshark如何统计包数-CSDN博客
DataCon2021优秀解题思路分享:网络流量分析(中科院信工所 汤元) – DataCon社区 (qianxin.com)
DataCon2022优秀解题思路分享:网络流量分析赛道(广州大学-见世面战队) – DataCon社区 (qianxin.com
竞竞赛训练营-数据安全分析 - DataCon (qianxin.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2019-10-21 BUUCTF | easy_tornado