当前位置: 首页 > news >正文

网站建设收费标准新闻个人网页代码模板

网站建设收费标准新闻,个人网页代码模板,wordpress的第三方登录插件,搜索引擎广告案例workminer是通过SSH爆破传播的挖矿木马#xff0c;感染后会释放xmrig挖矿程序利用主机的CPU挖取北方门罗币。该样本能够执行特定的指令#xff0c;指令保存在一个配置文件config中#xff0c;config文件类似于xml文件#xff0c;里面有要执行的指令和参数#xff0c;样本中…workminer是通过SSH爆破传播的挖矿木马感染后会释放xmrig挖矿程序利用主机的CPU挖取北方门罗币。该样本能够执行特定的指令指令保存在一个配置文件config中config文件类似于xml文件里面有要执行的指令和参数样本中内嵌了一个config无攻击指令。该样本通过使用自己扩展的DHT协议来更新config有两种方式一是访问8个引导节点样本内嵌公开的加入p2p网络通过来寻找具有特定前缀id的同伙来更新config二是会随机扫描其它IP的UDP端口IP是随机生成的端口是一个范围内的随机端口若扫中其它受害主机受害主机会返回config用这种方式来更新config。 workminer属于Mozi僵尸网络组织主要攻击Iot设备作者已于2021年被中国警方逮捕该僵尸网络目前在互联网上还持续活跃。本文主要介绍workminer的dht通信部分workminer使用go和C语言混合编译C语言主要用于与同伙节点通信拉取和更新config。 基础知识一Linux系统调用 为了识别样本中的socket相关函数我们需要了解Linux系统调用尤其是socket相关函数调用的基础知识。 linux系统中使用int 80来调用linux系统apilinux中调用socket相关函数是通用系统调用sys_socketcall的实现的该接口的系统调用号为102函数定义为 #include sys/socket.h int socketcall(int subcall, unsigned long *args); 调用的时候寄存器eax保存调用号ebx为第1个参数ecx为第2个参数通过eax和ebx就能知道是哪个api ebx int subcall ecx unsigned long * eax 102 int 0x80第一个参数subcall要调用的api号在 /usr/include/linux/net.h中定义使用find命令找到这个文件 # cat /usr/include/linux/net.h | grep SYS #define SYS_SOCKET 1 /* sys_socket(2) */ #define SYS_BIND 2 /* sys_bind(2) */ #define SYS_CONNECT 3 /* sys_connect(2) */ #define SYS_LISTEN 4 /* sys_listen(2) */ #define SYS_ACCEPT 5 /* sys_accept(2) */ #define SYS_GETSOCKNAME 6 /* sys_getsockname(2) */ #define SYS_GETPEERNAME 7 /* sys_getpeername(2) */ #define SYS_SOCKETPAIR 8 /* sys_socketpair(2) */ #define SYS_SEND 9 /* sys_send(2) */ #define SYS_RECV 10 /* sys_recv(2) */ #define SYS_SENDTO 11 /* sys_sendto(2) */ #define SYS_RECVFROM 12 /* sys_recvfrom(2) */ #define SYS_SHUTDOWN 13 /* sys_shutdown(2) */ #define SYS_SETSOCKOPT 14 /* sys_setsockopt(2) */ #define SYS_GETSOCKOPT 15 /* sys_getsockopt(2) */ #define SYS_SENDMSG 16 /* sys_sendmsg(2) */ #define SYS_RECVMSG 17 /* sys_recvmsg(2) */ #define SYS_ACCEPT4 18 /* sys_accept4(2) */ #define SYS_RECVMMSG 19 /* sys_recvmmsg(2) */ #define SYS_SENDMMSG 20 /* sys_sendmmsg(2) */DHT协议基础 DHT协议是一种BT协议使用udp来通信通信内容使用bencode编码。可参考bt协议详解 DHT篇下 - 蓝猫163 - 博客园 (cnblogs.com)。 DHT协议有以下几种报文 ping 最基础的请求就是ping。这时KPRC协议中的“q”“ping”。Ping请求包含一个参数id它是一个20字节的字符串包含了发送者网络字节序的nodeID。对应的ping回复也包含一个参数id包含了回复者的nodeID。 示例 ping请求{t:aa, y:q,q:ping, a:{id:abcdefghij0123456789}} B编码d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe 回复{t:aa, y:r, r:{id:mnopqrstuvwxyz123456}} B编码d1:rd2:id20:mnopqrstuvwxyz123456e1:t2:aa1:y1:refind_node Findnode被用来查找给定ID的node的联系信息。这时KPRC协议中的q“find_node”。find_node请求包含2个参数第一个参数是id包含了请求node的nodeID。第二个参数是target包含了请求者正在查找的node的nodeID。当一个node接收到了find_node的请求他应该给出对应的回复回复中包含2个关键字id和nodesnodes是一个字符串类型包含了被请求节点的路由表中最接近目标node的K(8)个最接近的nodes的联系信息 示例 find_node请求{t:aa, y:q,q:find_node, a:{id:abcdefghij0123456789,target:mnopqrstuvwxyz123456}} B编码d1:ad2:id20:abcdefghij01234567896:target20:mnopqrstuvwxyz123456e1:q9:find_node1:t2:aa1:y1:qe 回复{t:aa, y:r, r:{id:0123456789abcdefghij, nodes:def456...}} B编码d1:rd2:id20:0123456789abcdefghij5:nodes9:def456...e1:t2:aa1:y1:reget_peers 这个请求用来表明发出announce_peer请求的node正在某个端口下载torrent文件。announce_peer包含4个参数。第一个参数是id包含了请求node的nodeID第二个参数是info_hash包含了torrent文件的infohash第三个参数是port包含了整型的端口号表明peer在哪个端口下载第四个参数数是token这是在之前的get_peers请求中收到的回复中包含的。收到announce_peer请求的node必须检查这个token与之前我们回复给这个节点get_peers的token是否相同。如果相同那么被请求的节点将记录发送announce_peer节点的IP和请求中包含的port端口号在peer联系信息中对应的infohash下。 这个请求报文本样本没有 其响应报文的处理同find_node报文 announce_peer 这个请求用来表明发出announce_peer请求的node正在某个端口下载torrent文件。announce_peer包含4个参数。第一个参数是id包含了请求node的nodeID第二个参数是info_hash包含了torrent文件的infohash第三个参数是port包含了整型的端口号表明peer在哪个端口下载第四个参数数是token这是在之前的get_peers请求中收到的回复中包含的。收到announce_peer请求的node必须检查这个token与之前我们回复给这个节点get_peers的token是否相同。如果相同那么被请求的节点将记录发送announce_peer节点的IP和请求中包含的port端口号在peer联系信息中对应的infohash下。 这个请求报文本样本没有 不支持这个报文 workminer的DHT通信部分 workminer通过自己改良过的DHT协议来请求和config下面来介绍workminer的dht通信过程。 首先会生成一个特殊的version则workminer节点发出的dht报文中都会有这个version字段。version字段共9个字节前5个字节为1:v43:(31 3A 76 34 3A)后面4个字节中根据下面的规则生成的。 第1个字节是随机产生的第2个字节是硬编码的0x42或由config文件中[ver]字段指定第3个字节和第4个字节是通过自定义的校验算法生成的。 下面是抓取的ping包通过这个特殊的标记wokerminer在处理接收到的包时就能够识别出哪些包是正常的dht包哪些包中由同伙发出来的对于正常的dht协议的请求和响应包走正常的处理流程对于同伙的包ping和find_node就会交换config。 上面这个计算校验和的算法是识别同伙的关键如下代码若结果为0表示是同伙的包若不是0则是正常的dht数据包。 // 根据version字段来判断是同伙发来的包 int GenCheckSum_82AAB68(unsigned __int16 a1, char *buf_a2, unsigned int buflen_a3) {char j; // [esp5h] [ebp-Bh]unsigned int i; // [espCh] [ebp-4h]for ( i 0; i buflen_a3; i ){a1 ^ (unsigned __int8)buf_a2[i] 8;for ( j 8; j; --j ){if ( (a1 0x8000) ! 0 )a1 (2 * a1) ^ 0x8005;elsea1 * 2;}}return a1;} int main(){char version[] { 0x31,0x3a ,0x76 ,0x34 ,0x3a ,0x26 ,0x42 ,0x53 ,0x77};int checksum GenCheckSum_82AAB68(0,version,9);if(checksum 0){puts(Mozi pkt);}else{puts(Normal dht pkt);}return 0; }从下列中随机选择一个端口若端口为0则取random()%645101024监听这个udp端口。 port_list[28] [0,0,0,0,0,0,0,0,0,0,0,0,0,0,8080,8000,1900,1434,1027,6881,4000 30301,5353,11211,8082,8081,8083,5060]为这UDP端口添加iptables规则。 使用异或的方式解密了两个公钥异或使用密钥为 4E 66 5A 8F 80 C8 AC 23 8D AC 47 06 D5 4F 6F 7E 将内嵌在样本的config提取出来共624字节前524字节为加密的config内容后96字节为文件的签名。使用第1个公钥来对加密的config验证签名。若验证签名通过则使用go语言来解析解密后的config执行config中的指令。若config中含有[ver]标签使用ver标签的值来重新计算数据包version字段。 公钥为 第一个公钥 用于验证config前528字节的完整性 02 d5 d5 e7 41 ee dc c8 10 6d 2f 48 0d 04 12 21 27 39 c7 45 0d 2a d1 40 72 01 d1 8b cd c4 16 65 76 57 c1 9d e9 bb 05 0d 3b cf 6e 70 79 60 f1 ea ef第二个公钥 用于验证config前428字节的完整性 02 c0 a1 43 78 53 be 3c c4 c8 0a 29 e9 58 bf c6 a7 1b 7e ab 72 15 1d 64 64 98 95 c4 6a 48 c3 2d 6c 39 82 1d 7e 25 f3 80 44 f7 2d 10 6b cb 2f 09 c6解密后的config [ss]ssh[/ss][cpu].x[/cpu][hp]88888888[/hp]构造自身nodeidnodeid有20个字节有以下几种可能 一 1/1000的可能 使用字符串888888d1:ad2:id20:作为前缀,即38 38 38 38 38 38 64 31 3A 61 64 32 3A 69 64 32 30 3A xx xx,后两个字节为随机值。 二 49/1000的可能使用888888作为前缀即38 38 38 38 38 38 xx xx xx xx xx xx xx xx xx xx xx xx xx xx,后面12个字节为随机值 三 950/1000的可能使用随机生成的nodeid. 接着使用上面的构造的selfNodeId向内置的8个引导节点发送ping请求。TransactionId使用6E 70 00 00。 router.bittorrent.com:6881 bttracker.debian.org:6881 router.utorrent.com:6881 dht.transmissionbt.com:6881 212.129.33.59:6881 82.221.103.244:6881 130.239.18.159:6881 87.98.162.88:6881使用wireshark抓包可以看到包的内容 这个包的含义如下 请求参数request arguments a:{id:38383838383864313a6164323a696432303a9550} 请求类型request type q:ping 会话IdTransaction Id t:706e0000 版本Version v:1942d177 消息类型Message Typeq表示请求 y:q设置一个全局的队列用来存储的节点信息这个队列结构如下所示。 struct NODE {char node_id[20];//节点的node_idchar addr[128];//地址信息 可存储Ipv4和ipv6的sockaddr结构int addrlen;//sockaddr结构的长度 }; struct NODE_LIST {int head;//队列头int end;//队列尾NODE nodelist[64];//队列队列大小为64 };下面进入一个死循环不断的向外发包和处理响应包。 每隔899秒向内嵌的8个公共节点发送ping请求。 从config中取出[nd]标签的值这是一个以,分割的列表如url1,ip,url2,...向其中的每个地址发送ping请求使用端口6881会话id使用6E 70 00 00。内嵌的config中没有nd标签不会执行 每隔299秒若node_list不为空的话从其中随机取一个node发送find_node请求。 find_node消息中的target_node_id使用以下的规则构造有4种可能。 一是 targetid完全使用随机值即20个随机的字节 二是 将 123888d1:ad2:id20: 作为target_nodeid的前18个字节后2个字节随机 三是 以888888作为target_nodeid的前6个字节后14个字节随机 四是 以888888d1:ad2:id20:作为target_nodeid的前18个字节后2个字节随机 会话id为6E 66 00 00。 构造一段随机长度的buf长度为从[3,97]中取一个随机数将第二个字节为0x2e使用前面的算法计算校验值将2个字节的校验值添加到buf末尾。 从[8080,8000, 1900, 1434, 1027, 6881, 4000, 30301, 5353, 11211, 8082, 8081, 8083, 5060]中随机取一个端口构造一个随机的IP地址将上面构造好的数据发出去。执行100次。 当同伙收到这个报文后会将加密的config发回来这里将这个报文定义为GET_CONF报文。 每隔599秒向node_list中所有节点发送一次find_node请求target_nodeid有两种情况会话id为6E660000. 一是 以888888d1:ad2:id20:为前缀后面为随机值 二是 以888888前缀后面为随机值 下面是处理接收到的数据包的逻辑 首先使用select和recvfrom接收udp的包将dht相关的包中关键字段解析出来如下图所示。对dht数据包进行解析对其中的关键的字段提取并返回数据包的类型根据这个类型值进入不同的处理逻辑提取出来的字段dht字段有 version 可判断是否为同伙的包 transctionid 可判断ping和find_node的响应 nodeid 对方的nodeid targetid find_node请求的目标id nodes find_node响应的nodes列表数据的类型有以下几种 enum DHTPktType : int {DHTPktType_OTHER -1,//其它DHTPktType_ERROR 0,//报错信息DHTPktType_RESPONSE,//响应包 包括ping、find_node的响应DHTPktType_PING,// ping请求DHTPktType_FIND_NODE,// find请求DHTPktType_GET_PEERS,//get_peers请求DHTPktType_ANNOUNCE_PEER,//annouce_peer 请求DHTPktType_MOZI_CNF_REQ,//get_conf请求 即上面的GET_CONF报文DHTPktType_MOZI_ENCODING_CNF //接收到对方发来加密的config };下面介绍这几种报文的处理逻辑 ping、find_node的响应 若会话id为6E 70 00 00,说明是本机发出去的ping请求的响应包将对方的nodeid、ip、port添加进入全局队列。 若会话id为6E 66 00 00说明是本机发出来的find_node请求的响应将对方的信息加入队列检查version字段。若不是Mozi节点发来的包将其中的nodes字段中8个节点加入队列。若是Mozi节点的包且nodes大小为624这其实是加密的config处理这个config。 ping请求 若收到别的节点发来的ping请求将对方信息加入队列进行正常的回复。 find_node、get_peers的请求 这两类请求的处理逻辑相同。若是非同伙的包按照正常的dht协议来处理从队列中取8个节点信息发给对方。 若是同伙发来的请求有4/5的概率会将自身加密的config填充进nodes字段发送给对方。 announce_peer请求 这类请求不支撑发送一个error信息。 GET_CONF请求 这不是DHT请求就是前面随机构造的数据包数据包长度99字节,最后两个字段是校验值当节点收到此请求会将自身的config发送给对方大小为624字节。 收到对方的config 若不是DHT报文且大于99字节这是别的节点发来的加密的config处理这个config. config的处理 对同伙获取的config大小为624字段其中前528字段是config1,后面96字段是签名信息使用第1个公钥验证其完整性 对于config1,取其前428为config2,428到524的96字段为签名信息使用第2个公钥签证其完整性。 然后对config2进行解密向对方节点发送一个ping请求将config文件中的[cpu]、[ss]、[sv]三个标签的值提取hp字段这是的nodeid的前缀提取ver字段重新计算verison。 cpu 不知道含义 ss 不知道含义 sv 不知道含义 hp nodeid的前缀 ver 这是一个byte值作为version字段的第二个字节最后调用go函数main_deal_conf来处理config提取出下列标签进而执行不同的操作。 slan 这是个开关变量作用未知 swan 这是个开关变量未知 spl 这是一个url用于下载更新的bash脚本 sdf 格式为url|filename会从url中下载文件保存为/tmp/filename sud 其中含有一个url用于更新本地的病毒母体 ssh 其中含有一个url用于下载bash脚本来执行 sdr 用于下载文件执行 srn 用于执行命令 scount 指向用于回连的url默认为http://ia.51.la/go1受害者会周期性的访问这个地址用于便于攻击者知道受害者的信息IOC 如何快速识别workminer的流量可以根据下面的特征 正常的dht报文的version字段符合文中的校验算法 nodeid以88888、88888888、888888d1:ad2:id20:开头 会话id中为6E 70 00 00或6E 66 00 00 udp的载荷小于99符合文中的校验算法 upd的载荷大小为624 有对外随机的udp扫描行为目标端口为[8080,8000, 1900, 1434, 1027, 6881, 4000, 30301, 5353, 11211, 8082, 8081, 8083, 5060]访问url http://ia.51.la/go1连接下列地址udp router.bittorrent.com:6881 bttracker.debian.org:6881 router.utorrent.com:6881 dht.transmissionbt.com:6881 212.129.33.59:6881 82.221.103.244:6881 130.239.18.159:6881 87.98.162.88:6881访问门罗币矿池 xmr.crypto-pool.fr:6666扫描TCP以下端口 2222 3389 22222 443 55554 9000 2223 9090 8888 8022 6000 9999 2323 2002 7777 2022 666 444 5555 222 26 2382 830 4118 23 50000流量中含有 SSH-2.0-Go总结 workminer的作者使用了一种变形的dht协议来更新config确认非常聪明具有很好的隐蔽性。config 文件中有些标签的含义还是没有分析清楚。 参考资料 Linux系统调用 int 80h int 0x80_怎么寻找int80指令-CSDN博客Linux system call table 정리(32bit, 64bit) (tistory.com)深度追踪Mozi僵尸网络360安全大脑精准溯源揪出幕后黑手_360社区BitTorrent 分布式散列表DHT协议详解 | 寂静花园 (addesp.com)bt协议详解 DHT篇下 - 蓝猫163 - 博客园 (cnblogs.com)P2P Botnet ozi分析报告 (360.com)P2P僵尸网络深度追踪——Mozi二二叉树吃瓜记-安全客 - 安全资讯平台 (anquanke.com)『P2P僵尸网络漏洞研究——mozi』 netgear路由器漏洞复现-安全客 - 安全资讯平台 (anquanke.com)【转】ECDSA 签名验证原理及C语言实现_ecdsa 嵌入式c语言-CSDN博客
http://www.zqtcl.cn/news/65839/

相关文章:

  • 企业在公司做的网站遇到的问题个人免费自助建站网站
  • 如何查网站是织梦做的网站建设公司天津
  • 高站网站建设北京哪家做网站好
  • 做动漫主题的网站wordpress页面关键词和描述
  • 抚州教育网站建设邢台 建网站
  • 怎么用手机搭建网站男女在床上做羞羞的事的网站
  • 最简单的单页网站怎么做wordpress如何超过2M
  • 蜂蜜做的好网站或案例闸北东莞网站建设
  • 廊坊开发网站公司合肥企业建站系统
  • 公司想做一个网站菜鸟学做网站
  • 昆明做网站开发维护的公司厦门免费建立企业网站
  • 东莞高端网站建设哪个好wordpress主题添加授权
  • 做网站窗体属性栏设置文字居中点击未来网站建设
  • 网站后台进不去的原因站长工具亚洲
  • 网站注册设计威海网站建设哪家的好
  • 手机网站建站cms全国认可企业信息查询平台
  • 简单的j网站建设方案书技工外包网
  • 深圳h5响应式网站建设天津个人网站备案查询
  • 北京网站建设q479185700強青岛网站推广哪家效果好
  • 网站建设网络推广代理公司建湖企业做网站多少钱
  • 网站开发主流语言赣州快车公众号
  • 凉山建设网站专业app怎么制作网站吗
  • 大气绿色网站模板韵博工业设计
  • 珠海建设网站首页做商城型网站
  • 软件开发的六大步骤上首页seo
  • google网站登录入口景安免费虚拟主机
  • 如何学习网站开发个人备案做电影网站
  • 创意摄影网站下载优化大师安装桌面
  • 湖南做网站最厉害的公司适合在家做的网站工作
  • 安徽城乡建设厅网站c 怎么和网站做交互