流量分析【未完结】

挖矿流量检测

先做完签到题竞竞赛训练营-数据安全分析然后开始动手,题目要求上传一个txt文件,文件的每一行代表挖矿流量在pcap文件包中的编号数字,编号数字范围为1到pcap中packet个数,得分计算方式为100*f-score。

wireshark分析

使用wireshark过滤/查找协议里面的特定内容_wireshark过滤报文内容-CSDN博客

使用捕获文件属性查看功能,可以发现,整个流量是抓了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的数据格式,通信过程如下:

Miner_communication.png

通信过程主要分为矿机登记、任务下发、账号登录、结果提交与难度调整等部分。  矿机登记以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 这些都是可以用于挖乌鸦币的公开的矿池

矿工用的是NBMiner 选的矿池:氪星池  纳米池 官方池

# 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

乌鸦币RVN windows挖矿教程 

Ravencoin 挖矿:挖掘 Ravencoin 保姆级教程 - 加密狗

如何搭建自己的比特币矿池 p2pool矿池教程综合篇-挖矿教程-挖矿网 

zone117x/node-stratum-pool: High performance Stratum poolserver in Node.js 

NiceHash+Electrum

你的电脑也可以挖比特币!挖矿永远都不晚 2021

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)

检测挖矿流量的方法

红蓝对抗——加密Webshell“冰蝎” 流量 100%识别

端对端双向加密隧道流量混淆转发挖矿

前置资料

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)

 

posted @ 2023-10-21 00:08  东坡肉肉君  阅读(141)  评论(0编辑  收藏  举报