为什么现在wwW6666wkcOm缓地方不提示了,网上说6666wk跳转别的啦

&figure&&img src=&https://pic4.zhimg.com/v2-6ecf3fba47aebaf703dc28_b.jpg& data-rawwidth=&1920& data-rawheight=&1200& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-6ecf3fba47aebaf703dc28_r.jpg&&&/figure&&h2&更新啦!
1:29AM&/h2&&p&一些同学想让我写一篇arp攻击的文章,做了点功课,先对编程工具写了一篇介绍,供大家参考:&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&DeepWeaver:通过摆弄python scapy模块 了解网络模型--Get your hands dirty!&/a&&/p&&p&后续会通过介绍的这几种方法试着写一个arp欺骗的程序,大家的点赞是我继续写下去的动力!&/p&&p&3-24晚&/p&&p&当当当当&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&室友不敢深夜打游戏篇二:如何用python-scapy进行arp欺骗&/a&&/p&&hr&&h2&原文:&/h2&&p&相信很多好好学习天天睡觉的宝宝,经常会有这样的苦恼:凌晨两点,隔壁床游戏打得正酣,机械键盘啪啪的响,嘴里不时吼道“又捡到一个二级头。我x这货开挂了吧,举报举报。。。”你心里可能恨恨地想着:捡你个头,举报你个头,我特么才要举报你呢,大晚上的不睡觉,...(此处省去30字脏话)。好吧,总之,你可能想过,我要是有个办法能让他或她断网就好了......&/p&&p&今天在学习ICMP协议(Internet Control Message Protocol)的时候,做到了一道题,问ping命令可以用来做什么↓&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-58a34c64eb4be8e23d7e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic2.zhimg.com/v2-58a34c64eb4be8e23d7e_r.jpg&&&/figure&&blockquote&其中第三个选项说: ping can be maliciously used as a way to attack a machine by flooding it with ping requests.&br&通过大量的ping请求,ping可以被恶意地用作一种攻击方式。&/blockquote&&p&做完这道题的时候,我虎躯一震,抖擞起了原本因为晚上没睡好而萎靡的精神。对啊,如果我死命的ping对方,对方是不是就上不了网了?即使能让对方的网络变卡也行。&br&其实这是一种网络攻击方式,它有种酷酷的名称,叫“死亡之ping”, 英文为&ping flooding&(像洪水一样ping对方,直到对方淹死在你的icmp里)&/p&&ul&&li&什么是ICMP&/li&&/ul&&p&要了解什么是ping flooding,我们先要了解ping是什么,要了解ping,则首先要了解什么是ICMP。&/p&&blockquote&提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。 ------摘自网络&/blockquote&&p&总之,简单来说,icmp首先可以用于所谓的“差错报文”,就是发送出问题时对方回复你“这里出问题了,没送到!”,比如下表:没到达应到的网络--&icmp报错;包在网络中迷路过期了--&icmp错误。第二则用于“控制报文”,比如我们总说某个网络能不能ping通,那么我们实际是看,我们给某个ip发一个icmp(echo request),看它会不会回复我们一个icmp(echo reply),回复了就意味着网络是通的,没回复就是哪里出问题了。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e69b4dbd0ec9a04aa5fee7e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&282& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic1.zhimg.com/v2-e69b4dbd0ec9a04aa5fee7e_r.jpg&&&/figure&&ul&&li&ICMP是如何工作的&/li&&/ul&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-bdc5f287ca5bdff28ab3ba_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&263& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic4.zhimg.com/v2-bdc5f287ca5bdff28ab3ba_r.jpg&&&/figure&&p&&br&&/p&&p&假如小明是路由(router),你给小红(host)写了份情书(ip packet),但是不晓得怎么被小明捡到了,不知所措的小明心想肯定是邮递员弄错了吧,他很好心的想把信件送还给你,但是由于你对小红实在情深意切,写的东西太多,而小明只想告诉你发送失败了,再发一次,而没必要告诉你,你自己究竟写的是什么鬼话,于是他把你的信封保留了(ip头部),还把你的信撕得只留下八个字节(让你知道哦原来是我写的千万封情书中的哪一封),然后,小明在你的旧信封上套了个ICMP牌子的大信封,还在大信封里写了张纸条,这是什么类型什么编码的icmp(见上图type,code栏),署名发信地为小明的ip,收件人为你的ip。&/p&&ul&&li&ping是如何工作的&/li&&/ul&&figure&&img src=&https://pic4.zhimg.com/v2-f514dd7d1401dcbb857ec11db735502f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&692& data-rawheight=&482& class=&origin_image zh-lightbox-thumb& width=&692& data-original=&https://pic4.zhimg.com/v2-f514dd7d1401dcbb857ec11db735502f_r.jpg&&&/figure&&p&&br&&/p&&p&有一天,你惹小红生气了,她一连好几天好几天不理你,于是你想写封信问候一下她,但是又怕说错话惹得她更加生气,于是你写了封简短的icmp,标号8、0代表这是用于&echo request&,只是想看看小红在家不,并不想打扰到她。小红家的管家接到了你的信,啥也没说,把一封”echo replay&的icmp回信发还给了你。于是你就知道小红好着呢!只是不想理你~&/p&&ul&&li&死亡之ping&/li&&/ul&&p&言归正传,我们来看看用什么方法可以让舍友断子绝孙,哦不,不能上网!&br&打开电脑的终端。通过 &code&man ping&/code& 命令,我们可以看到ping命令的详细使用方法,其中&code&-s&/code&可以指定发送包的大小,&code&-i&/code&指定发送的包的频率,这两个正是我们想要的,因为首先我们需要发送足够大的数据包从而能撑爆对方的带宽,其次每秒ping一次可不够,我们最好要每秒ping他个上千次,这样才更有可能阻塞对方的网络。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-fcdfb18e58d41f54d0a7ac2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&41& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic2.zhimg.com/v2-fcdfb18e58d41f54d0a7ac2_r.jpg&&&/figure&&p&如果不指明,默认发送64字节ICMP数据以及8字节的icmp头部&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b333ca6e612eed304bf3ea_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&62& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic4.zhimg.com/v2-b333ca6e612eed304bf3ea_r.jpg&&&/figure&&p&&br&&/p&&p&注意间隔如果低于0.2秒一次需要超级用户权限,所以我们最后需要sudo+命令&/p&&blockquote&另外,以上的方法只使用linux或者mac系统,windows据说是这么写的&code&ping -l 65500 -t ip地址&/code&&/blockquote&&p&好吧,重点来了,首先躺枪的是我的手机。&/p&&blockquote&这里提醒一下,这种方法有效的前提是你们都在一个局域网下,比如你们连的都是校网。&/blockquote&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2b98e3e8e1f63e36f1093e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&394& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic4.zhimg.com/v2-2b98e3e8e1f63e36f1093e_r.jpg&&&/figure&&p&&br&&/p&&p&查看我手机的内网ip,这里我用的是termux软件&/p&&p&然后在你的电脑上输入&code&sudo ping ***.***.***.*** -i 0.01 -s 65500&/code& ,这个意思就是说,每0.01秒给我的手机发送一个大小65500字节的icmp包。然后按回车:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-375bdbb19ded01bf9755d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&184& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic2.zhimg.com/v2-375bdbb19ded01bf9755d_r.jpg&&&/figure&&p&于是可以看到,我手机的流量蹭蹭蹭的涨上去了,等十秒以后,我就连不上百度了。。。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-5a24eac964ee24f1a2449ca1bacd9924_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&186& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic2.zhimg.com/v2-5a24eac964ee24f1a2449ca1bacd9924_r.jpg&&&/figure&&p&按ctrl+c停止攻击后,手机再次恢复了平静&/p&&h2&后记:&/h2&&p&当然,这种攻击方法还有很多新花样,比如仿造对方ip发送,让局域网下的电脑都收到对方的ping request,从而让整个局域网ping reply对方的电脑,或者动动脑子在内网搞个大闹天宫,我点到为止。&/p&&p&同样,除了icmp攻击,类似的攻击方法还有udp攻击,tcp攻击。本人菜鸟,具体是不是叫这个名儿我不知道瞎说的别信。&/p&&p&我一直觉得,学习计算机和学习魔法有非常多的相似之处。在霍格沃兹,学生学习一系列的咒语来召唤出潜藏在魔杖中的魔力,而我们,学习一系列的编码,代码(code)来召唤出计算机中的算力,从而为我们所用,造福人类,to make the world a better place是所有程序员的信条。所以,当你学了更多的知识,当你有了更强大的魔力以后,不要试图去做伏地魔,就像谷歌喊出的口号-------don't be evil!(不作恶!)&/p&
1:29AM一些同学想让我写一篇arp攻击的文章,做了点功课,先对编程工具写了一篇介绍,供大家参考:后续会通过介绍的这几种方法试着写一个arp欺骗的程序,大家…
&figure&&img src=&https://pic1.zhimg.com/v2-cbbef4ecd3befd884cfeff8_b.jpg& data-rawwidth=&600& data-rawheight=&357& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/v2-cbbef4ecd3befd884cfeff8_r.jpg&&&/figure&&p&不懂TCP协议,无论是网络工程师、还是软件工程师,都是不可饶恕的,只要看我花多大力气回答TCP协议,就可以推算出这个协议是多么重要。这个专场按照回答的先后次序整理,希望还没怎么重视TCP协议的同学补补课。&/p&&p&&br&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&三次握手的第三次握手发送ACK能携带数据吗?如何携带?怎样体现的呢?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP 和 HTTP 的区别和联系是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&关于socket的困惑???&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&计算机是如何聊天的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么使用tcpdump观察三次握手的过程,最后一次握手后,ack变为1而不是y+1?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&在tcp链接的释放过程中,由于存在TIME-WAIT阶段,会影响其他程序在该端口建立tcp连接吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP协议存在那些缺陷?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么TCP的MSS协商没有按照小的来?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp重传机制 对端滑动窗口一直为0时如何处理?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP中已有SO_KEEPALIVE选项,为什么还要在应用层加入心跳包机制?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP连接建立后,下行和上行经过的路由器是一样的吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp协议握手为什要各随机一个数字并加一?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP拥塞控制的问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP连接中a连b和b连a是一码事吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP建立连接过程为什么会有4个包?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp首部只有端口号没有ip地址,那么网络层怎么知道目的ip地址的呢?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP、UDP与分组交换、电路交换之间的关系?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP面向字节流和报文段的关系是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp 握手后向公网发送包,与mss大小不符合,丢失问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么TCP编程里要设计成分为欢迎套接字和连接套接字?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP 协议下 socket 有可能丢包吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP链接之间的网络物理断开了然后有连上,这个TCP链接是否断开?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&《TCP/IP详解 卷1:协议》哪些章节需要重点阅读?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP这门技术有什么用?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&怎么理解TCP是面向连接的,HTTP基于TCP却是无连接的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&UDP广播和TCP链接传送数据,哪个更节省带宽?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&怎么理解TCP的面向连接和UDP的无连接(不面向连接)?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP 协议到底在讲什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp中的mss是536?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP负载怎么协商?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP中断可以用3次挥手吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么在第一次挥手的时候发送的是FIN+ACK而不是FIN?&/a&&br&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp滑动窗口的发送窗口和接收窗口的说法正确吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp状态变迁图的疑问:listen怎么转换到syn_sent?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP协议中,在建立连接的时候ISN序号分配问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP协议中,一端要给另一端发送数据,是先进行ARP请求和应答,还是先建立tcp连接?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp 编程中,connect 连接成功的标准是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp 的可靠性到底指的是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP 为什么是三次握手,为什么不是两次或四次?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP流量控制中的滑动窗口大小、TCP字段中16位窗口大小、MTU、MSS、缓存区大小有什么关系?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP快速重传为什么是三次冗余ack,这个三次是怎么定下来的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp中两台设备在同时建立连接时,为什么需两次发送自己的SYN?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP中使用PPP在数据链路层建立连接的意义是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&如何改进TCP,甚至重新设计TCP/IP,才可以完全杜绝SYN Flood等安全问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP如何保持长连接,并识别不同请求的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么tcp连接的传输速度慢,断开重新连接后,传输速度就变快了呢?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP协议中的端口具体指的是什么,为什么要有端口,你是怎么理解的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP四次分手中,主动关闭方最后为什么要等待2MSL之后才关闭连接?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp协议可靠吗? 怎么知道自己发出的消息已经被是否被成功接收?&/a&&/p&
不懂TCP协议,无论是网络工程师、还是软件工程师,都是不可饶恕的,只要看我花多大力气回答TCP协议,就可以推算出这个协议是多么重要。这个专场按照回答的先后次序整理,希望还没怎么重视TCP协议的同学补补课。
&figure&&img src=&https://pic3.zhimg.com/v2-f85b667b0c031cb4a287f4e2fd48a9a7_b.jpg& data-rawwidth=&1366& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&https://pic3.zhimg.com/v2-f85b667b0c031cb4a287f4e2fd48a9a7_r.jpg&&&/figure&&p&(&b&前言&/b&:这篇文章不是像评论区的某些 dalao 所想的那样是来炫技的,更多的是来给大家&b&科普&/b&一些实用的渗透工具和方法,我相信不是所有的人都用过文中提到的这些方法。如果你觉得文章没有达到你要求的深度,完全可以不看,直接走人,真心没有必要故意留下恶心人的评论,显示你自己多么多么牛逼。谢谢~)&/p&&p&&br&&/p&&p&刚才在知乎上看到一篇文章&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&《你的QQ号是这么被偷走的!》&/a&,但是文章只是简单提到了一个伪造的 LOL 站点,嗯,就是这个【uvu.cc/ixMJ】,这明显是一个经过缩短链接处理的网站,打开后跳转到这个真实网址【&a href=&https://link.zhihu.com/?target=http%3A//mfspfgp.top/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://mfspfgp.top&/a&】,页面是下面这样的:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-535dc7e049d60d8ef088_b.jpg& data-rawwidth=&1725& data-rawheight=&913& class=&origin_image zh-lightbox-thumb& width=&1725& data-original=&https://pic1.zhimg.com/v2-535dc7e049d60d8ef088_r.jpg&&&/figure&&p&点击登录弹出一个对话框,让输入QQ号和密码,随便输入了一个进去,居然都可以登录,看来是一个简单盗号的网站无疑咯。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-934f3b31b2a9e897f1d6fb_b.jpg& data-rawwidth=&822& data-rawheight=&518& class=&origin_image zh-lightbox-thumb& width=&822& data-original=&https://pic1.zhimg.com/v2-934f3b31b2a9e897f1d6fb_r.jpg&&&/figure&&p&我很好奇的是,现在人们的安全意识这么高,这么低级的盗号网站还能骗到人吗?&/p&&p&算了,不管了,习惯性打开浏览器的开发者工具,先来看看这个盗号的 POST 过程。找到了,POST 到这个地址:&a href=&https://link.zhihu.com/?target=http%3A//mfspfgp.top/lollove.php& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&mfspfgp.top/lollove.php&/span&&span class=&invisible&&&/span&&/a& ,参数只有两个:name 和 pass。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-718be31ca2a4d20d5ee4867f_b.jpg& data-rawwidth=&899& data-rawheight=&782& class=&origin_image zh-lightbox-thumb& width=&899& data-original=&https://pic1.zhimg.com/v2-718be31ca2a4d20d5ee4867f_r.jpg&&&/figure&&p&有了 POST 的链接和参数,就可以先来玩一下了,首先使用 Python 伪造浏览器头,&b&生成随机的 QQ 号和密码&/b&,然后利用 requests 来循环 POST 垃圾数据到对方的服务器,毕竟&b&主要目的是警示一下网站管理员&/b&,数据量就少点吧,10000差不多了,而且 IP 代理和多线程并发都懒得加了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-fcec4f132bedad2ee99af9_b.jpg& data-rawwidth=&1115& data-rawheight=&395& class=&origin_image zh-lightbox-thumb& width=&1115& data-original=&https://pic3.zhimg.com/v2-fcec4f132bedad2ee99af9_r.jpg&&&/figure&&p&代码跑起来了,非常鼓励大家(尤其新手)采用类似手段给这个站点注入点垃圾信息,我估计钓鱼站长看到数据库中的这些垃圾数据,而且来自很多的 IP 地址,心理应该是崩溃的。&/p&&figure&&img src=&https://pic7.zhimg.com/v2-795f14d288adb3dc03ce5e_b.jpg& data-rawwidth=&677& data-rawheight=&443& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&https://pic7.zhimg.com/v2-795f14d288adb3dc03ce5e_r.jpg&&&/figure&&p&好了,就让它继续跑着吧,下面来看看能不能挖掘些其他的东西。&/p&&p&(&b&注&/b&:这个钓鱼网站获取到的账号密码&b&不一定就写入数据库&/b&,而且写入数据库后也不一定有页面进行显示出来,&b&所以 XSS 的难度很大&/b&。而且网站也有可能是通过&b&发邮件或者写入文本&/b&等方式进行保存数据,现在邮箱系统更新补丁很快,感觉 XSS 也不好弄。评论中有人说很轻松就可以 XSS 的,烦请告知具体的实现方法,非常感谢!)&/p&&p&先 PING 一下这个域名(mfspfgp.top),得到服务器的 IP 地址(103.98.114.75)。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-05ca2d5feacdcad116c7d2dd75b91c56_b.jpg& data-rawwidth=&474& data-rawheight=&211& class=&origin_image zh-lightbox-thumb& width=&474& data-original=&https://pic1.zhimg.com/v2-05ca2d5feacdcad116c7d2dd75b91c56_r.jpg&&&/figure&&p&查了一下这个地址,是个香港的服务器,也难怪,这样不备案的域名也只敢挂在外面的服务器上了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-dc51d6fbfc608_b.jpg& data-rawwidth=&445& data-rawheight=&185& class=&origin_image zh-lightbox-thumb& width=&445& data-original=&https://pic3.zhimg.com/v2-dc51d6fbfc608_r.jpg&&&/figure&&p&之后查了一下这个域名的 &b&whois&/b& 信息,得到一个 QQ 邮箱(&b&&/b&)和一个手机号(&b&&/b&),当然这两个联系方式也不一定是真的。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e5ef84a187d36cedc80e64_b.jpg& data-rawwidth=&886& data-rawheight=&704& class=&origin_image zh-lightbox-thumb& width=&886& data-original=&https://pic4.zhimg.com/v2-e5ef84a187d36cedc80e64_r.jpg&&&/figure&&p&用 QQ 搜了一下这个 QQ 号(),显示是一个江西吉安的少年,而且他的 QQ 空间是开放的,进去看了一下,也没有发现什么有价值的东西,只看出这个小兄弟喜欢玩英雄联盟和王者荣耀。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-9d0ad13e2384_b.jpg& data-rawwidth=&1080& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-9d0ad13e2384_r.jpg&&&/figure&&p&在搜索引擎上检索这个 QQ 号以及对应的 QQ 邮箱也没有找到任何有价值的信息,所以,上面这个 QQ 号的主人应该不是钓鱼网站的主人,很有可能是被这个网站盗号了。&/p&&p&在微信里搜索了一下这个手机号(),显示地区是河南洛阳,而且他的微信头像应该是他本人了。但是我不能确定他就是网站的所有者,所以就不放他的照片了。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e8dfed0c1cff_b.jpg& data-rawwidth=&1080& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-e8dfed0c1cff_r.jpg&&&/figure&&p&&br&&/p&&p&之后,利用邮箱反查工具,查了一下这个邮箱还注册了哪些网站,结果找出 9 个,发现其中有 6 个可以正常访问。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-efdedc6be31a_b.jpg& data-rawwidth=&1200& data-rawheight=&717& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic3.zhimg.com/v2-efdedc6be31a_r.jpg&&&/figure&&p&这 6 个可以访问的网址分别是:&a href=&https://link.zhihu.com/?target=http%3A//fjkskda.top/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://fjkskda.top&/a& 、&a href=&https://link.zhihu.com/?target=http%3A//jligyts.top/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://jligyts.top&/a& 、&a href=&https://link.zhihu.com/?target=http%3A//pfdqlql.top/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://pfdqlql.top&/a& 、&a href=&https://link.zhihu.com/?target=http%3A//yiqilin.top/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://yiqilin.top&/a& 、&a href=&https://link.zhihu.com/?target=http%3A//zykjgkd.top/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://zykjgkd.top&/a& 、&a href=&https://link.zhihu.com/?target=http%3A//mfspfgp.top/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://mfspfgp.top&/a& 。&/p&&p&对应三种形式的诈骗网页,分别是刚才展示的【生日祝福】、【酷秀一夏】、【2017赛事正式开始】,后两个页面截图分别如下:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ef63fcd145bd_b.jpg& data-rawwidth=&1850& data-rawheight=&940& class=&origin_image zh-lightbox-thumb& width=&1850& data-original=&https://pic2.zhimg.com/v2-ef63fcd145bd_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-bb492f219cfe95c5a0be_b.jpg& data-rawwidth=&1897& data-rawheight=&935& class=&origin_image zh-lightbox-thumb& width=&1897& data-original=&https://pic1.zhimg.com/v2-bb492f219cfe95c5a0be_r.jpg&&&/figure&&p&这三种页面的盗号方式全部一样,所以顺便将上面的程序对着其他的站点跑了一下,不用谢,我的名字叫雷锋~&/p&&p&&br&&/p&&p&之后,将上面提到的网址全部 Ping 了一下,获取了全部的 IP 地址,择其中物理位置最详细的那个 IP 来试试吧。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-52f1c9aa77b8f43ffd451_b.jpg& data-rawwidth=&949& data-rawheight=&325& class=&origin_image zh-lightbox-thumb& width=&949& data-original=&https://pic3.zhimg.com/v2-52f1c9aa77b8f43ffd451_r.jpg&&&/figure&&p&首先在 WhatWeb 里面检索一下这个 IP 地址,即可知道这个网站采用的是 nginx 1.8.1 服务器,使用的是 5.5.38 版本的 PHP。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8ed8ceb5d6a642cfb41e2dc_b.jpg& data-rawwidth=&740& data-rawheight=&602& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic3.zhimg.com/v2-8ed8ceb5d6a642cfb41e2dc_r.jpg&&&/figure&&p&然后用 nmap 扫了一下端口和运行的服务,发现开放的端口还是蛮多的。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c68a37d5aa055cee82cfea_b.jpg& data-rawwidth=&498& data-rawheight=&33& class=&origin_image zh-lightbox-thumb& width=&498& data-original=&https://pic1.zhimg.com/v2-c68a37d5aa055cee82cfea_r.jpg&&&/figure&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&PORT
compressnet
...省略...
61900/tcp open
62078/tcp open
iphone-sync
63331/tcp open
64623/tcp open
64680/tcp open
65000/tcp open
65129/tcp open
65389/tcp open
&/code&&/pre&&/div&&p&(题外话:上面那个 62078 端口对应的 iphone-sync 服务感觉有点像苹果同步啥的~)&/p&&p&然后用 w3af 来检测网站的一些弱点,进而获取一些重要信息。但是不知道怎么回事,这次运行 w3af 出现了线程出错,导致没有顺利完成扫描,所幸的是,扫出来一个敏感链接:&a href=&https://link.zhihu.com/?target=http%3A//103.27.176.227/OGeU3BGx.php& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&103.27.176.227/OGeU3BGx&/span&&span class=&invisible&&.php&/span&&span class=&ellipsis&&&/span&&/a&。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-8cdf3d4c29_b.jpg& data-rawwidth=&640& data-rawheight=&615& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-8cdf3d4c29_r.jpg&&&/figure&&p&用浏览器访问这个链接,显示的是一个错误页面,但是下面出现了一个关键信息:Powered by wdcp&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f870ba94ac05a95c260c217f5c20308d_b.jpg& data-rawwidth=&774& data-rawheight=&401& class=&origin_image zh-lightbox-thumb& width=&774& data-original=&https://pic2.zhimg.com/v2-f870ba94ac05a95c260c217f5c20308d_r.jpg&&&/figure&&p&点击 wdcp 进入其&a href=&https://link.zhihu.com/?target=http%3A//www.wdlinux.cn/wdcp/install.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方页面&/a&,看到了如下重要信息,这个网站还贴心地给出了一个体验站点:&a href=&https://link.zhihu.com/?target=http%3A//demo.wdlinux.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://demo.wdlinux.cn&/a&,大家可以去试试。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-50f63607bcb6cd34afd8db_b.jpg& data-rawwidth=&340& data-rawheight=&106& class=&content_image& width=&340&&&/figure&&p&这样就知道了上面那个钓鱼网站的后台地址了:&a href=&https://link.zhihu.com/?target=http%3A//103.27.176.227%3A8080/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://103.27.176.227:8080&/a&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-5a2d1b93fe59f7ef3161_b.jpg& data-rawwidth=&652& data-rawheight=&457& class=&origin_image zh-lightbox-thumb& width=&652& data-original=&https://pic2.zhimg.com/v2-5a2d1b93fe59f7ef3161_r.jpg&&&/figure&&p&另外,我刚才去那个体验站点试了试,发现在修改密码的时候,&b&用户名一直是 admin&/b&,修改不了,加上原来的登录页面没有验证码,估计可以尝试暴力破解。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f1b3d641ea0f364bf23d907d0f38ac57_b.jpg& data-rawwidth=&817& data-rawheight=&448& class=&origin_image zh-lightbox-thumb& width=&817& data-original=&https://pic2.zhimg.com/v2-f1b3d641ea0f364bf23d907d0f38ac57_r.jpg&&&/figure&&p&用 sqlmap 扫了一下登录表单的注入点,发现并没有找到。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-bbfcf0fdb103be61_b.jpg& data-rawwidth=&683& data-rawheight=&713& class=&origin_image zh-lightbox-thumb& width=&683& data-original=&https://pic1.zhimg.com/v2-bbfcf0fdb103be61_r.jpg&&&/figure&&p&难道真的只有通过密码库来暴力破解了吗?还在思考中。。。&/p&&p&&br&&/p&&p&(&b&结束语&/b&:使用 &b&&a href=&https://link.zhihu.com/?target=http%3A//www.freebuf.com/sectool/36545.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DDOS&/a& &/b&等技术也许可以很轻松击垮这样的钓鱼站点,但是站长分分钟给你再造几十个出来,这样受害的人也许会更多。所以本篇文章的目的就是给那些入门的人科普一下常见的渗透工具,这样当自己遇到类似情况的时候能有所帮助,只有让更多的知友认识到钓鱼网站的危险,学会利用上面的方法来保护自己的信息安全,这样才有意义,你们说呢?)&/p&
(前言:这篇文章不是像评论区的某些 dalao 所想的那样是来炫技的,更多的是来给大家科普一些实用的渗透工具和方法,我相信不是所有的人都用过文中提到的这些方法。如果你觉得文章没有达到你要求的深度,完全可以不看,直接走人,真心没有必要故意留下恶心…
&p&我寻找一个低级Linux网络调试工具已经有一段时间了, Linux允许使用虚拟接口和网络命名空间的组合在主机上直接运行复杂网络。当出现问题时,排除故障相当耗时。如果这是L3路由器的问题,可以使用mtr命令进行路由分析。但是,如果这是一个较低级别的问题,我通常会手动检查每个接口、桥接、网络命名空间以及防火墙,并启动几个tcpdump,以便了解发生了什么。这个过程是如此复杂,以至于我想要找到一个可以直接发现数据包的工具。&/p&&p&基本上,我需要的是L2的mtr。在本文最后,我将有一个简单易 用的低级数据包跟踪,如果你ping一个本地的Docker容器,它会显示如下:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-5d59cbb13dc14c99c7be7087aeb1ee50_b.jpg& data-rawwidth=&762& data-rawheight=&175& class=&origin_image zh-lightbox-thumb& width=&762& data-original=&https://pic1.zhimg.com/v2-5d59cbb13dc14c99c7be7087aeb1ee50_r.jpg&&&/figure&&p&在这篇文章中,我将重点介绍2个跟踪工具——perf和eBPF。&/p&&p&Perf 是用来进行软件性能分析的工具,通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。最初的时候,它叫做 Performance counter。&/p&&p&eBPF是Linux内核最近的一个补充,顾名思义,这是一个名为“Berkeley Packet Filter”的BPF字节码的扩展版本,用于过滤BSD的数据包。eBPF一共有3大类指令:跳转、运算、加载与存储。除此之外,它还可以用于在活动内核中安全运行独立于平台的代码,例如,存储器访问在程序可以运行之前被验证,并且必须能够证明该程序将在有限的时间内结束。如果内核不能证明它,即使它是安全的并也将被拒绝。eBPF不但是程序,还可以访问外部的数据,重要的是这个外部的数据可以在用户空间管理。&/p&&p&这样的程序可以用作QOS的网络分类器,作为eXpress数据平面(XDP)的一部分的非常低级别的网络和过滤,用于跟踪代理。跟踪探测器可以附加到/ proc / kallsyms或任何跟踪点中导出其符号的任何函数。不过,在这篇文章中,我将只分析对跟踪点的跟踪代理。&/p&&h2&&b&实验所需的配置&/b&&/h2&&p&在本文所进行的试验中,我需要使用一些工具来与perf和eBPF共同协调合作,比如bcc。bcc是一个强大而灵活的工具,是一个开源的 Linux 动态跟踪工具,允许你将内核探测器作为受限制的C语言编写,并使用Python将其设置在用户界面中。&/p&&p&我将在本文重现Ubuntu 17.04(Zesty)的安装说明,注意,将eBPF附加到跟踪点至少需要Linux内核的版本要高于 4.7。&/p&&p&安装perf的示意图:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-7ff278db3fc0_b.jpg& data-rawwidth=&761& data-rawheight=&129& class=&origin_image zh-lightbox-thumb& width=&761& data-original=&https://pic4.zhimg.com/v2-7ff278db3fc0_r.jpg&&&/figure&&p&&br&&/p&&p&如果你看到一条错误消息,可能意味着你的内核最近已更新,但你尚未重新启动。&/p&&p&安装bcc的示意图:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e2d9a115b0d63bcba86e56a_b.jpg& data-rawwidth=&1642& data-rawheight=&263& class=&origin_image zh-lightbox-thumb& width=&1642& data-original=&https://pic3.zhimg.com/v2-e2d9a115b0d63bcba86e56a_r.jpg&&&/figure&&p&找到好的跟踪点,也称为用perf手动跟踪数据包,目标是追踪数据包所采用的路径。根据交叉界面的不同,交叉的跟踪点也可能不同。&/p&&p&为了找到合适的跟踪点,我在perf trace下使用了2个内部和2个外部目标的ping:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&1.本地主机IP为127.0.0.1
2.一个Docker容器,IP 172.17.0.2
3.我的手机通过USB网络共享IP 192.168.42.129
4.我的手机通过WiFi与IP 192.168.43.1
&/code&&/pre&&/div&&p&perf trace是perf的子命令,它默认产生类似于strace的输出。我可以很容易地调整它来隐藏系统调用,例如,将ping到具有IP 172.17.0.2的Docker容器,如下所示:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo perf trace --no-syscalls --event 'net:*' ping 172.17.0.2 -c1 & /dev/null
0.000 net:net_dev_queue:dev=docker0 skbaddr=0xffff96d len=98)
0.008 net:net_dev_start_xmit:dev=docker0 queue_mapping=0 skbaddr=0xffff96d vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=0 len=98 data_len=0 network_offset=14 transport_offset_valid=1 transport_offset=34 tx_flags=0 gso_size=0 gso_segs=0 gso_type=0)
0.014 net:net_dev_queue:dev=veth79215ff skbaddr=0xffff96d len=98)
0.016 net:net_dev_start_xmit:dev=veth79215ff queue_mapping=0 skbaddr=0xffff96d vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=0 len=98 data_len=0 network_offset=14 transport_offset_valid=1 transport_offset=34 tx_flags=0 gso_size=0 gso_segs=0 gso_type=0)
0.020 net:netif_rx:dev=eth0 skbaddr=0xffff96d len=84)
0.022 net:net_dev_xmit:dev=veth79215ff skbaddr=0xffff96d len=98 rc=0)
0.024 net:net_dev_xmit:dev=docker0 skbaddr=0xffff96d len=98 rc=0)
0.027 net:netif_receive_skb:dev=eth0 skbaddr=0xffff96d len=84)
0.044 net:net_dev_queue:dev=eth0 skbaddr=0xffff96d len=98)
0.046 net:net_dev_start_xmit:dev=eth0 queue_mapping=0 skbaddr=0xffff96d vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=0 len=98 data_len=0 network_offset=14 transport_offset_valid=1 transport_offset=34 tx_flags=0 gso_size=0 gso_segs=0 gso_type=0)
0.048 net:netif_rx:dev=veth79215ff skbaddr=0xffff96d len=84)
0.050 net:net_dev_xmit:dev=eth0 skbaddr=0xffff96d len=98 rc=0)
0.053 net:netif_receive_skb:dev=veth79215ff skbaddr=0xffff96d len=84)
0.060 net:netif_receive_skb_entry:dev=docker0 napi_id=0x3 queue_mapping=0 skbaddr=0xffff96d vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=2 hash=0x_hash=0 len=84 data_len=0 truesize=768 mac_header_valid=1 mac_header=-14 nr_frags=0 gso_size=0 gso_type=0)
0.061 net:netif_receive_skb:dev=docker0 skbaddr=0xffff96d len=84)
&/code&&/pre&&/div&&p&只保留事件名称和skbaddr,这看起来更可读。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-92acea34dbdeff_b.jpg& data-rawwidth=&760& data-rawheight=&373& class=&origin_image zh-lightbox-thumb& width=&760& data-original=&https://pic4.zhimg.com/v2-92acea34dbdeff_r.jpg&&&/figure&&p&我清楚地看到,通过docker0桥接的数据包,然后是veth的主机端,veth79215ff在本文的情况下,最后是veth的容器端,并伪装成eth0。不过,我还没有看到网络命名空间。&/p&&p&最后,在eth0上看到数据包之后,我会以相反的顺序命中跟踪点。&/p&&p&通过在4个目标场景中重复类似的过程,我可以选择最适合的跟踪点来跟踪数据包。我选了4个跟踪点:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&net_dev_queue
netif_receive_skb_entry
napi_gro_receive_entry
&/code&&/pre&&/div&&p&我们可以轻松地仔细检查以下选项:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo perf trace --no-syscalls
--event 'net:net_dev_queue'
--event 'net:netif_receive_skb_entry'
--event 'net:netif_rx'
--event 'net:napi_gro_receive_entry'
ping 172.17.0.2 -c1 & /dev/null
0.000 net:net_dev_queue:dev=docker0 skbaddr=0xffff8e len=98)
0.010 net:net_dev_queue:dev=veth7781d5c skbaddr=0xffff8e len=98)
0.014 net:netif_rx:dev=eth0 skbaddr=0xffff8e len=84)
0.034 net:net_dev_queue:dev=eth0 skbaddr=0xffff8e849cb8cd00 len=98)
0.036 net:netif_rx:dev=veth7781d5c skbaddr=0xffff8e849cb8cd00 len=84)
0.045 net:netif_receive_skb_entry:dev=docker0 napi_id=0x1 queue_mapping=0 skbaddr=0xffff8e849cb8cd00 vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=2 hash=0x_hash=0 len=84 data_len=0 truesize=768
&/code&&/pre&&/div&&p&mac_header_valid=1 mac_header=-14 nr_frags=0 gso_size=0 gso_type=0)&/p&&p&如果你想进一步浏览可用的网络跟踪点列表,你可以使用用户列表:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo perf list 'net:*'
&/code&&/pre&&/div&&p&这应该会返回一个跟踪点名称列表,如net:netif_rx。冒号之前的部分(':')是事件类别('net')。&/p&&h2&&b&用eBPF/bcc编写自定义跟踪器&/b&&/h2&&p&如果你正在阅读这篇文章,那么读到这里,你就知道了如何在Linux虚拟机上追踪数据包。&/p&&p&从Linux Kernel 4.7开始,eBPF程序可以附加到内核跟踪点。在此之前,构建跟踪器的唯一替代方法是将探测器附加到导出的内核符号。虽然这可以起作用,但它有一些缺点:&/p&&p&1.内核内部API不稳定。&/p&&p&2.出于性能原因,大多数网络内部函数是内联或静态的,这两个都不能被探测。&/p&&p&3.找到这个函数的所有潜在的呼叫站点是非常耗时的,而且并不是所有需要的数据都可用。&/p&&p&让我从一个简单的hello world开始,每当我之前选择的4个跟踪点中的一个(net_dev_queue,netif_receive_skb_entry,netif_rx和napi_gro_receive_entry)被触发,我都将构建一个事件。为了保持运行的简单,我将发送comm程序,即基本上是程序名的16个字符串。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#include &bcc/proto.h&
#include &linux/sched.h&
// Event structure
struct route_evt_t {
char comm[TASK_COMM_LEN];
BPF_PERF_OUTPUT(route_evt);
static inline int do_trace(void* ctx, struct sk_buff* skb)
// Built event for userland
struct route_evt_t evt = {};
bpf_get_current_comm(evt.comm, TASK_COMM_LEN);
// Send event to userland
route_evt.perf_submit(ctx, &evt, sizeof(evt));
* Attach to Kernel Tracepoints
TRACEPOINT_PROBE(net, netif_rx) {
return do_trace(args, (struct sk_buff*)args-&skbaddr);
TRACEPOINT_PROBE(net, net_dev_queue) {
return do_trace(args, (struct sk_buff*)args-&skbaddr);
TRACEPOINT_PROBE(net, napi_gro_receive_entry) {
return do_trace(args, (struct sk_buff*)args-&skbaddr);
TRACEPOINT_PROBE(net, netif_receive_skb_entry) {
return do_trace(args, (struct sk_buff*)args-&skbaddr);
&/code&&/pre&&/div&&p&将此片段附加到“net”类别的4个跟踪点,加载skbaddr字段并将其传递给仅加载程序名称的公共部分。如果你想知道这个args-& skbaddr来自哪里,那么当你用TRACEPOINT_PROBE定义跟踪点时,通过bcc生成args结构。由于它是在运行中生成的,所以没有简单的方法可以看到它的定义,但是有一个更好的方法,就是直接从内核查看数据源。幸运的是,每个跟踪点都有一个/ sys / kernel / debug / tracing / events条目。例如,对于net:netif_rx,可以只输出“cat”/ sys / kernel / debug / tracing / events / net / netif_rx / format。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&name: netif_rx
field:unsigned short common_
offset:0; size:2; signed:0;
field:unsigned char common_
offset:2; size:1; signed:0;
field:unsigned char common_preempt_ offset:3; size:1; signed:0;
field:int common_
offset:4; size:4; signed:1;
field:void *
size:8; signed:0;
offset:16; size:4; signed:0;
field:__data_loc char[] offset:20; size:4; signed:1;
print fmt: &dev=%s skbaddr=%p len=%u&, __get_str(name), REC-&skbaddr, REC-&len
&/code&&/pre&&/div&&p&你可能会注意到记录末尾的print fmt行,这正是perf trace用来生成其输出的。&/p&&p&使用低级别的通道并且很好理解,我可以将其包装在Python脚本中,以便为探针的eBPF发送的每个事件显示一行:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#!/usr/bin/env python
# coding: utf-8
from socket import inet_ntop
from bcc import BPF
import ctypes as ct
bpf_text = '''&SEE CODE SNIPPET ABOVE&'''
TASK_COMM_LEN = 16 # linux/sched.h
class RouteEvt(ct.Structure):
_fields_ = [
ct.c_char * TASK_COMM_LEN),
def event_printer(cpu, data, size):
# Decode event
event = ct.cast(data, ct.POINTER(RouteEvt)).contents
# Print event
print &Just got a packet from %s& % (event.comm)
if __name__ == &__main__&:
b = BPF(text=bpf_text)
b[&route_evt&].open_perf_buffer(event_printer)
while True:
b.kprobe_poll()
&/code&&/pre&&/div&&p&注意,在这个阶段没有过滤。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$& sudo python ./tracepkt.py
Just got a packet from ping6
Just got a packet from ping6
Just got a packet from ping
Just got a packet from irq/46-iwlwifi
&/code&&/pre&&/div&&p&在这种情况下,你可以看到我正在使用ping和ping6,而WiFi驱动程序也会收到一些数据包。于是,我开始添加一些有用的数据或过滤器。这将更好地展示eBPF的功能和局限性。&/p&&h2&&b&添加网络接口信息&/b&&/h2&&p&首先,你可以安全地删除“comm”字段,加载和sched.h标头。&/p&&p&其次,你可以包括net / inet_sock.h,以便有必要的声明,并事件结构中添加char ifname [IFNAMSIZ]。&/p&&p&现在,我将从设备结构加载设备名称。这是有趣的,因为这是一个在实践中非常有用的信息,它能展示加载任何数据的技术:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&// Get device pointer, we'll need it to get the name and network namespace
struct net_device *
bpf_probe_read(&dev, sizeof(skb-&dev), ((char*)skb) + offsetof(typeof(*skb), dev));
// Load interface name
bpf_probe_read(&evt.ifname, IFNAMSIZ, dev-&name);
&/code&&/pre&&/div&&p&在知道它的工作原理后,我就要加载接口名称了,这就需要知道接口设备结构。我将从最后一个语句开始,因为它是最容易理解的。它使用bpf_probe_read从dev-& name读取长度为IFNAMSIZ的数据,并将其复制到evt.ifname。&/p&&p&不过要注意的是,eBPF的目标是允许安全地编写内核。这意味着禁止随机存储器访问,必须验证所有内存访问。除非你在堆栈中访问的内存,否则需要使用bpf_probe_read读取访问器。这使代码读写变得相当麻烦,但也非常的安全。 bpf_probe_read是某种安全的memcpy版本,它在内核中的bpf_trace.c中定义。有趣的是如果发生错误,bpf_probe_read将返回一个初始化为0的缓冲区并返回一个错误,它不会崩溃或停止程序。&/p&&p&接下来,我将使用以下宏来帮助保持可读性:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fdccdf6c1033_b.jpg& data-rawwidth=&751& data-rawheight=&195& class=&origin_image zh-lightbox-thumb& width=&751& data-original=&https://pic4.zhimg.com/v2-fdccdf6c1033_r.jpg&&&/figure&&p&这允许我写入:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&member_read(&dev, skb, dev);
&/code&&/pre&&/div&&h2&&b&添加网络命名空间ID&/b&&/h2&&p&命名空间标识符可以从2个位置加载:&/p&&p&1.套接字'sk'结构&/p&&p&2.设备'dev'结构&/p&&p&我最初使用的是socket结构,因为这是我在编写solisten.py时使用的。不幸的是,我不知道为什么一旦数据包跨越命名空间边界,命名空间标识符就不再可读了。读出的字段全为0,这是无效内存访问的清晰标识。&/p&&p&幸运的是,方法仍然有效。通过调整不同的接口,来查找它所属的命名空间的接口。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&struct net*
// Get netns id. Equivalent to: evt.netns = dev-&nd_net.net-&ns.inum
possible_net_t *skc_net = &dev-&nd_
member_read(&net, skc_net, net);
struct ns_common* ns = member_address(net, ns);
member_read(&evt.netns, ns, inum);
&/code&&/pre&&/div&&p&其中使用以下附加宏来提高可读性:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#define member_address(source_struct, source_member)
__ret = (void*) (((char*)source_struct) + offsetof(typeof(*source_struct), source_member));
&/code&&/pre&&/div&&p&作为附带作用,它允许简化member_read宏:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$& sudo python ./tracepkt.py
vetha373ab6
vetha373ab6
&/code&&/pre&&/div&&p&上图就是你发送ping到Docker容器时应该看到的,数据包通过本地docker0网桥,然后移动到veth pair,跨越网络命名空间边界。&/p&&h2&&b&跟踪请求回复和返回的数据包&/b&&/h2&&p&为了继续从数据包中加载IP,我必须读取IP报头。我会在坚持用IPv4,但是同样的逻辑也适用于IPv6。这个过程很复杂,由于我正在网络路径中处理内核,所以某些数据包尚未打开。这意味着某些报头偏移量仍未初始化,我必须把它们都计算所出来,从MAC头到IP头,最后到ICMP头。&/p&&p&可以通过加载MAC头地址轻轻地启动,并推断IP头地址。我们不会加载MAC头本身,而是假定它是14个字节长。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&// Compute MAC header address
member_read(&head,
skb, head);
member_read(&mac_header, skb, mac_header);
// Compute IP Header address
#define MAC_HEADER_SIZE 14;
char* ip_header_address = head + mac_header + MAC_HEADER_SIZE;
&/code&&/pre&&/div&&p&这基本上意味着IP头从skb-& head + skb-& mac_header + MAC_HEADER_SIZE 。&/p&&p&我现在可以在IP头的前4位,即第一个字节的前半部分中解码IP版本,并确保它是IPv4:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&// Load IP protocol version
bpf_probe_read(&ip_version, sizeof(u8), ip_header_address);
ip_version = ip_version && 4 & 0
// Filter IPv4 packets
if (ip_version != 4) {
&/code&&/pre&&/div&&p&现在加载完整的IP头,得到IP,使Python信息更加有用,确保下一个头是ICMP并导出ICMP头部偏移量。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&// Load IP Header
bpf_probe_read(&iphdr, sizeof(iphdr), ip_header_address);
// Load protocol and address
u8 icmp_offset_from_ip_header = iphdr.ihl * 4;
evt.saddr[0] = iphdr.
evt.daddr[0] = iphdr.
// Filter ICMP packets
if (iphdr.protocol != IPPROTO_ICMP) {
&/code&&/pre&&/div&&p&最后,我可以加载ICMP头本身,确保这是一个回应请求,并从中加载id和seq:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&// Compute ICMP header address and load ICMP header
char* icmp_header_address = ip_header_address + icmp_offset_from_ip_
bpf_probe_read(&icmphdr, sizeof(icmphdr), icmp_header_address);
// Filter ICMP echo request and echo reply
if (icmphdr.type != ICMP_ECHO && icmphdr.type != ICMP_ECHOREPLY) {
// Get ICMP info
evt.icmptype = icmphdr.
evt.icmpid
= icmphdr.un.echo.
evt.icmpseq
= icmphdr.un.echo.
// Fix endian
evt.icmpid
= be16_to_cpu(evt.icmpid);
evt.icmpseq = be16_to_cpu(evt.icmpseq);
&/code&&/pre&&/div&&p&如果要从特定的ping实例中过滤ICMP,可以假设evt.icmpid是ping的PID,至少使用Linux的ping。&/p&&p&使用一些简单的Python来处理事件,就可以在几种情况下进行测试。以root身份启动程序,在另一终端启动一些“ping”并观察:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# ping -4 localhost
lo request #7.0.0.1 -& 127.0.0.1
lo request #7.0.0.1 -& 127.0.0.1
reply #7.0.0.1 -& 127.0.0.1
reply #7.0.0.1 -& 127.0.0.1
&/code&&/pre&&/div&&p&ICMP回应请求报文(ICMPEcho-Request)由进程20212(Linux ping上的ICMP id)发送到Loopback接口上,传递给同一个回环接口,并生成返回应答,环回接口既是发射接收接口也是接收接口。&/p&&p&&b&那WiFi网关呢?&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# ping -4 192.168.43.1
wlp2s0 request #2.168.43.191 -& 192.168.43.1
reply #2.168.43.1 -& 192.168.43.191
&/code&&/pre&&/div&&p&在这种情况下,返回请求和返回应答会通过WiFi接口。请注意,当我只打印拥有数据包的进程的“comm”时,返回请求将属于ping进程,而返回应答将属于WiFi驱动程序,因为就Linux而言这是生成它的方式。&/p&&p&这是我最喜欢的方式,因为它能最好地展现eBPF的全部功能,并允许构建一个像ping的工具的“x-ray”,。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# ping -4 172.17.0.2
docker0 request #2.17.0.1 -& 172.17.0.2
vetha373ab6 request #2.17.0.1 -& 172.17.0.2
eth0 request #2.17.0.1 -& 172.17.0.2
reply #2.17.0.2 -& 172.17.0.1
vetha373ab6
reply #2.17.0.2 -& 172.17.0.1
reply #2.17.0.2 -& 172.17.0.1
Host netns
| Container netns
+---------------------------+-----------------+
| docker0 ---& veth0e65931 ---& eth0
+---------------------------+-----------------+
&/code&&/pre&&/div&&h2&&b&总结&/b&&/h2&&p&eBPF/bcc使我能够编写一系列新的工具来深入排除故障,跟踪和跟踪以前无法访问的问题,而无需修补内核。跟踪点也非常方便,因为它们在有趣的地方提供了一个好的提示,消除了对繁琐的内核代码的仔细阅读,并且可以被放置在代码中,否则这些代码将不能从kprobe访问,比如内联或静态函数。要进一步利用,可以添加IPv6。&/p&&p&你可以在Github上看到完整的代码(支持IPv6):&a href=&http://link.zhihu.com/?target=https%3A//github.com/yadutaf/tracepkt& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/yadutaf/trac&/span&&span class=&invisible&&epkt&/span&&span class=&ellipsis&&&/span&&/a&&/p&&blockquote&如若转载,请注明原文地址: &a href=&http://link.zhihu.com/?target=http%3A//www.4hou.com/technology/6994.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&4hou.com/technology/699&/span&&span class=&invisible&&4.html&/span&&span class=&ellipsis&&&/span&&/a&
更多内容请关注“嘶吼专业版”——Pro4hou&/blockquote&
我寻找一个低级Linux网络调试工具已经有一段时间了, Linux允许使用虚拟接口和网络命名空间的组合在主机上直接运行复杂网络。当出现问题时,排除故障相当耗时。如果这是L3路由器的问题,可以使用mtr命令进行路由分析。但是,如果这是一个较低级别的问题,我…
首先,我想说的是,SO_Keeplive是&b&实现在服务器侧,客户端被动响应,&/b&缺省超时时间为120分钟,这是RFC协议标准规范。&br&&br&SO_Keeplive是实现在TCP协议栈(四层),应用层的心跳实现在第七层,本质没有任何区别,但应用层需要自己来定义心跳包格式。&br&&br&之所以实现在服务器侧,是因为与客户端相比,服务器侧的寿命更长,因为服务器侧需要不间断地提供服务,而客户端可能由于用户下班而合上电脑(TCP没有来得及发送FIN关闭连接),这样的话,服务器侧就会有很多不可用的TCP连接(established),这样的连接依然会占用服务器内存资源,于是就设计这个keepalive 来检测客户端是否可用,如果几次重传keepalive ,客户端没有相应,删除连接,释放资源。&br&&br&需要指出的是,超时时间是指TCP连接没有任何数据、控制字传输的时间,如果有任何数据传输,会刷新定时器,重新走表。&br&&br&TCP心跳是一个备受争议的实现,只是一个option,不是强制标准。&br&&br&之所以应用层需要独立实现自己的心跳,是因为超时时间较长,无法给应用层提供快速的反馈。&br&&br&所以类似BGP协议就独立实现了自己的keepalive,最小可以设置一秒钟,三次没有应答即可以Reset连接,最快三秒可以检测到失效。&br&&br&而三秒依然太慢,可以用另外一个协议&b&BFD&/b&来提供更快发现链路失效,最快可以配置成10ms&br&,三次超时(30ms)就可以完成失效检测。
首先,我想说的是,SO_Keeplive是实现在服务器侧,客户端被动响应,缺省超时时间为120分钟,这是RFC协议标准规范。 SO_Keeplive是实现在TCP协议栈(四层),应用层的心跳实现在第七层,本质没有任何区别,但应用层需要自己来定义心跳包格式。 之所以实现在…
&figure&&img src=&https://pic3.zhimg.com/v2-8bcfb0b591be84be2b4c83_b.jpg& data-rawwidth=&640& data-rawheight=&452& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-8bcfb0b591be84be2b4c83_r.jpg&&&/figure&&p&&b&IP地址的所有研究,其实可以归到三个问题上:&/b&&/p&&p&1、这个IP在哪儿?&/p&&p&2、这个IP是什么?&/p&&p&3、这个IP干了什么?&/p&&p&&br&&/p&&p&看似简单的问题,但每个都需要投入巨大深入研究的代价。在IP画像研发过程中,我们接触了国内外很多出色的IP地址数据服务商,也经过诸多的测试与调研,最终我们选择了最优的平台,作为我们的基础数据供应商,在这些数据的基础上,产生出了更加丰富的信息,最终投入到各个风控场景中进行使用。&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&关于IP的一些冷知识:&/b&&/p&&p&IP地址(本文中特指IPv4地址),是用于标识网络和主机的一种逻辑标识。依托于强大的TCP/IP协议,使得我们可以凭借一个IP地址,就访问互联网上的所有资源。&/p&&p&&br&&/p&&p&IP地址本质上,只是一个32位的无符号整型(unsigned int),范围从0 ~ 2^32 ,总计约43亿个IP地址。为了便于使用,一般使用字符串形式的IP地址,也就是我们平常用到的192.168.0.1这种形式。实际上,就是把整数,每8个二进制位转换成对应的十进制整数,以点分隔的形式使用。&/p&&p&&br&&/p&&p&比如,192.168.0.1和是等价的。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-cafef425e5d336ca53826d_b.png& data-rawwidth=&640& data-rawheight=&118& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-cafef425e5d336ca53826d_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&b&全球共有五个区域互联网注册机构(RIR),分别是:&/b&&/p&&p&美洲互联网号码注册管理机构(American Registry for Internet Numbers,ARIN);&/p&&p&欧洲IP网络资源协调中心(RIPE Network Coordination Centre,RIPE NCC);&/p&&p&亚太网络信息中心(Asia-Pacific Network Information Centre,APNIC);&/p&&p&拉丁美洲及加勒比地区互联网地址注册管理机构(Latin American and Caribbean Internet Address Registry,LACNIC);&/p&&p&非洲网络信息中心(African Network Information Centre,AfriNIC)。&/p&&p&&br&&/p&&p&IP地址的划分,有RIR机构来进行统筹管理。负责亚洲地区IP地址分配的,就是APNIC,总部位于澳大利亚墨尔本。&/p&&p&各大RIR机构都提供了关于IP地址划分的登记信息,即whois记录。可以在各大RIR机构提供的whois查询页面上查看,或者使用whois命令查询:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-d99efcc294b_b.png& data-rawwidth=&640& data-rawheight=&293& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-d99efcc294b_r.jpg&&&/figure&&p&&br&&/p&&p&whois信息中,会显示IP地址所属的网段,以及申请使用和维护这个网段的运营商。比如,上面的信息中显示,153.35.93.31隶属于江苏省联通。&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&NO.1&/b&&/p&&p&&b&这个IP在哪儿?&/b&&/p&&p&&br&&/p&&p&前面提到IP的whois信息,其中包含了申请使用该IP的运营商信息,并且在网段描述信息中,会包含国籍和省份信息。&/p&&p&&br&&/p&&p&但是这样远远不够,风控场景中,我们需要更加精确的结果,需要知道这个IP具体在哪个城市、哪个乡镇,甚至希望能够精确到某一条街道或者小区。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-1b5adf5ac8c40a1ef876d08_b.png& data-rawwidth=&640& data-rawheight=&212& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-1b5adf5ac8c40a1ef876d08_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&曾有人问:我们的IP地址库是否能够提供这样的结果?可以确定用户在某个网吧、写字楼甚至某个小区?&/p&&p&&br&&/p&&p&那上面这样的IP数据库是如何产生的呢?&/p&&p&&br&&/p&&p&俗称“人海战术”。您可别不相信,直到今天,依然有众多的网友在为这个IP库提供数据更新,上报IP地址的确切位置。但我们无从考证这个位置信息是否真实准确,如果不能报保证数据的准确性,在风控决策中同盾是不会去使用的。&/p&&p&&br&&/p&&p&一种IP地址定位手段,是通过海量Traceroute信息来分析。&/p&&p&&br&&/p&&p&理论上,如果我能够得到所有IP相互之间Traceroute的信息,就可以绘制出整个互联网的链路图。&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-37faf7ed848efcaa647fcc1dbf505934_b.png& data-rawwidth=&640& data-rawheight=&219& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-37faf7ed848efcaa647fcc1dbf505934_r.jpg&&&/figure&&p&&br&&/p&&p&(上图来自于&a href=&http://link.zhihu.com/?target=http%3A//IPIP.NET& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&IPIP.NET&/span&&span class=&invisible&&&/span&&/a&提供的BestTrace工具)&/p&&p&&br&&/p&&p&每一次traceroute,都会返回详细的网络链路信息。积累了足够多的链路信息之后,就可以直观地看出,很多链路都经过了同一个IP,那么这个IP就是骨干节点或者区域的骨干节点。先确定出哪些节点是CN2骨干节点,进一步确定省级骨干节点,再逐一识别市县区级的骨干节点,最后得到全国范围内的网络分布。&/p&&p&&br&&/p&&p&以下是CAIDA的一份报告,使用了类似的原理,但统计的最小单位是AS(自治域)&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e24b0863caa6a2e0d1f6_b.png& data-rawwidth=&640& data-rawheight=&444& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-e24b0863caa6a2e0d1f6_r.jpg&&&/figure&&p&&br&&/p&&p&(CAIDA原图链接:&a href=&http://link.zhihu.com/?target=http%3A//www.caida.org/research/topology/as_core_network/2015/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&caida.org/research/topo&/span&&span class=&invisible&&logy/as_core_network/2015/&/span&&span class=&ellipsis&&&/span&&/a&)&/p&&p&&br&&/p&&p&圈的边缘,就是探测节点,中间的红色部分,就是全球互联网的骨干节点。原理虽然简单,但实现起来却没那么容易。&/p&&p&&br&&/p&&p&首先,你得有足够数量的节点来探测、收集traceroute链路数据。其次,要有可靠的技术手段来及时分析探测到的结果,汇总形成IP地址数据库。据了解,DigitalElemet也用了类似的方式进行探测,在全球范围内一共部署了超过8万个探测节点。&/p&&p&&br&&/p&&p&根据这种网络链路探测的出的定位结果,业内又称之为“网络位置”。就是从互联网的结构上来说,我们最终确定了一个IP,被分配到了某个地方的运营商手里。&/p&&p&&br&&/p&&p&但是我们又遇到了很多其他的情况,给大家举几个简单的例子。&/p&&p&&br&&/p&&p&117.61.31.0
江苏省 南京市 电信&/p&&p&&br&&/p&&p&通过分析这个IP关联的所有定位数据,得到了如下的分布:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bc3fec909a2e19e1e82cedef_b.png& data-rawwidth=&640& data-rawheight=&410& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-bc3fec909a2e19e1e82cedef_r.jpg&&&/figure&&p&&br&&/p&&p&这种情况,我们称为“流量回源”。当用户在使用南京电信的手机卡上网时,无论用户身处哪里,他的流量都会回到南京电信,再转发出去,所以从IP上看,都会显示为一个南京的IP。&/p&&p&&br&&/p&&p&上面的定位信息分布,可以在RTB Asia的IP地址实验室中&a href=&http://link.zhihu.com/?target=https%3A//ip.rtbasia.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&ip.rtbasia.com/&/span&&span class=&invisible&&&/span&&/a&。&/p&&p&&br&&/p&&p&153.35.93.32 江苏省 南京市 联通&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-d8bafad4f0f06c1cc1e345acb4488a66_b.png& data-rawwidth=&640& data-rawheight=&404& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-d8bafad4f0f06c1cc1e345acb4488a66_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&各种渠道的信息表明,这个IP确实分配到了南京联通,结果定位点全部落在了北京市的范围内。如果我们根据IP的定位结果来判断用户当前的位置,得到的结果肯定就错了。&/p&&p&&br&&/p&&p&难道前面提供的信息错了?其实是由于国内运营商对IP地址的划分和使用不透明,甚至特殊形式的租赁,导致北京的用户,分配到了一个南京的IP。&/p&&p&&br&&/p&&p&IP地址跨城市覆盖,覆盖范围非常大,用户位置和网络位置不在同一个城市甚至不在同一个省,都会影响到结果,无法准确给出判断。&/p&&p&&br&&/p&&p&另一方面,随着移动设备的普及,在用户允许的情况下,可以通过移动设备采集到设备上的GPS信息。前面大家看到的两张定位分布图,就是分析一个IP在历史上关联过的所有GPS定位绘制出来的。每一个红点,都表示曾经有一个用户这里出现过。再通过聚类和GPS反向解析,就可以预测一个IP下的用户,可能出现的地理位置。这个结果,我们又称之为“行为位置”。&/p&&p&&br&&/p&&p&这种分析方法看起来效果非常不错,但是却面临两个很重要的问题。&/p&&p&&br&&/p&&p&其一是,今年来设备作弊的方式层出不穷,如果没有有效的手段来保证数据的准确性和可靠性,最终得出的结果也会有偏差。&/p&&p&&br&&/p&&p&比如下面这里例子,定位点非常规整地分布在一个矩形区域内,而且覆盖到了海面上,做了深入的分析之后才发现这个IP下面有大量的作弊行为:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-33ddfb56bd9a0_b.png& data-rawwidth=&640& data-rawheight=&561& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-33ddfb56bd9a0_r.jpg&&&/figure&&p&&br&&/p&&p&另一方面,依靠定位点分布来分析IP的定位,需要长时间积累GPS数据。人口密集的地方,这个数据积累可以只要一天,二线城市需要一周,三线城市就需要至少一个月了。此前还遇到一个位于塔克拉玛干沙漠中的基站IP,至今还没有过与之关联的GPS信息。如果某一天,IP地址被重新分配了,划分到另外一个城市去使用,就需要等上一周甚至一个月的时间,才能重新校正结果。而网络链路的分析可以很快感知到。&/p&&p&&br&&/p&&p&实际的使用中,我们会把这两种方式结合到一起。并不是说,两个定位结果中,有一个错了。两个都是正确答案,只是某些情况下,有一个答案并不适合风控场景。&/p&&p&&br&&/p&&p&互联网,就像物流系统一样。我们分析IP的位置,和分析一个快递小哥负责派送的区域原理是一样。没有哪个快递小哥只给一户人家送货,IP也一样,我们最终只能确定这个IP后面的用户,可能出现的地理位置区域。随着技术的提升,数据的积累,我们能够不断缩小这个范围,达到最贴近真实的结果。&/p&&p&&br&&/p&&p&---------------------------------分割线------------------------------------------------------------&/p&&p&&br&&/p&&p&上文中我们提到了通过每个IP下的用户行为,判断用户群体的类型,进而给出IP地址的分类结果。那些,其实都只是最简单,最基础的一些分类方法。通过特定的指标计算、聚类算法,就可以得出结果。&/p&&p&&br&&/p&&p&然而,IP画像,是围绕反欺诈展开的,我们希望能够准确的评估一个IP地址的风险性,进而在风控策略中进行调控。 &/p&&p&&br&&/p&&p&在IP画像设计初期,我们设计了一个风险评分,用于总体评价这个IP地址风险。风险分数中,IP是否有代理行为、是否命中已知的威胁情报、是否发生过风险行为,都作为评估的依据。但是这样的一个笼统的评分,在实际使用中却有诸多不便。 &/p&&p&&br&&/p&&p&比如,我们曾经发现过一个IP地址,由于频繁的发生盗卡行为,最终我们给出的风险评分达到了94分(0~100,分数越高风险越高),然而这个IP下其他行为都是正常的,大量的正常用户通过这个IP进行登录、交易、支付等活动。&/p&&p&&br&&/p&&p&于是,我们萌生了一个想法,能否准确地定性一个IP到底做过什么样的坏事儿? &/p&&p&&br&&/p&&p&&b&什么是坏事儿?&/b&&/p&&p&反欺诈中,涉及到的业务风险其实非常非常多。不同的行业、不同的平台都会有各自独有的一些风险。
&/p&&p&&br&&/p&&p&就拿“黄牛”来说,随着互联网的发展,黄牛也从最早的票贩子,演变出了很多很多的花样。&/p&&p&&br&&/p&&p&&b&案例1:&/b&在各大航空公司的网上订票渠道中,存在很多“占座黄牛”,他们通过特定的渠道,订购了一定数量的廉价机票,然后加价转售,甚至会高出这张机票原有的价格。如果不能及时出手,黄牛就会选择退票,导致飞机上出现很多空座位,各大航空公司对此也很头疼。转手的过程很简单,只需要修改乘机人即可,这个行为可以通过线上的数据分析发现出来。&/p&&p&&br&&/p&&p&&b&案例2:&/b&一些票务网站(专指演唱会、赛事门票),黄牛会注册大量账号,抢购演唱会门票,拿到门票后,加价出手。由于黄牛拿到了实体票,转手过程是在线下进行的,通过线上行为就无法进行监控。但是,在抢票过程中,黄牛为了增加自己抢到票的几率,会使用很多个账号重复下单,大量订单中的收获地址都是同一个或者具有极高的相似度。&/p&&p&&br&&/p&&p&案例3:美团、猫眼、格瓦拉等购买电影票的平台中,也存在很大数量的黄牛。尤其是一些热门大片儿的首映票,价格可以炒到很高。电影票的黄牛,往往以代购的形式操作,他们拥有很高折扣的会员卡,可以低价购买到电影票,然后适当加价转手。黄牛完成支付后,拿到取票二维码,然后把二维码发送给买家。这个过程,也是很难通过线上的行为来进行检测的。&/p&&p&&br&&/p&&p&如果我们需要分析一个IP到底做了什么坏事,就必须要先给出明确的定义,到底什么样的行为算是坏事。然后把这些行为分解为非常详细的特征指标,进行建模。&/p&&p&&br&&/p&&p&这个过程是漫长的,就像上面举的例子,同样是“黄牛”,由于不同的平台,不通过的行业类型,中间存在着非常巨大的差异。每一种行为都要做这样的深入分析和研究,其实我们一开始是拒绝的......&/p&&p&&br&&/p&&p&在后来的一段时间里,我们团队接到了越来越多的提问,客户希望知道,这个IP到底干了什么?到底有没有风险?我们只能硬着头皮,去提取这个IP在过去半年里的行为数据,然后逐一分析。说到底,单凭一个IP地址的类型和地理位置,远远无法满足风控的需求。最终,我们决定要做这么件事儿。于是好几个月就这么过去了。&/p&&p&&br&&/p&&p&首先,我们梳理了一份反欺诈的词表,用来给出各种欺诈行为的明确定义。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ebabc57f56cf6d_b.png& data-rawwidth=&752& data-rawheight=&1344& class=&origin_image zh-lightbox-thumb& width=&752& data-original=&https://pic2.zhimg.com/v2-ebabc57f56cf6d_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&上面的列表中,是反欺诈词典中一小部分,列举了一些对互联网公司来说最为常见的风险行为。
&/p&&p&&br&&/p&&p&那么,接下来的问题就是要逐一对这些风险行为进行取样,分析其中的行为特征。&/p&&p&&br&&/p&&p&&b&特征提取&/b&&/p&&p&篇幅有限,这里就简单介绍一下我们对黄牛(票务行业)做行为分析和建模的过程。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e1b8f1ea0f3dda155d45f19b_b.png& data-rawwidth=&640& data-rawheight=&260& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-e1b8f1ea0f3dda155d45f19b_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&上图中,是我们抽取到的一份较为典型的黄牛抢票记录。&/p&&p&从这些记录里,能获取到怎样的信息呢?
&/p&&p&&br&&/p&&p&1、这批账号都在同一天注册,并且注册时间较为集中,注册时间间隔大约为30秒;&/p&&p&2、每个账户只下一个订单,但是多个订单产生的时间非常接近,时间间隔仅为毫秒级;&/p&&p&3、多个订单中的收货人姓名很相似,直观判断,不太可能是真实的姓名;&/p&&p&4、多个订单中的收货地址有明显的异常,在末尾添加了无用的字符串;&/p&&p&5、收获地址末尾的字符串为11位的数字,比较像手机号,多个订单中的这个字符串相同;&/p&&p&6、账号注册和风险发生,中间存在较长的时间,可以定义为休眠账号或养号行为。&/p&&p&&br&&/p&&p&如果对这个地址做检查,我们会发现:广东省佛山市均安镇均榄路天连大道是真实存在的。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-0eac06c4f0506eac08c5cba3caa7a1b9_b.png& data-rawwidth=&640& data-rawheight=&371& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-0eac06c4f0506eac08c5cba3caa7a1b9_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&但是这附近并没有什么小区,反而更像是一个村子。也就是说,收货地址中,“天连大道”之后的部分都是随机添加的,可能并没有任何意义。&/p&&p&&br&&/p&&p&这样的做法,是为了避免平台对收获地址做校验,如果大量订单都寄送到同一个收获地址,那么这些订单都存在刷单的嫌疑。
&/p&&p&&br&&/p&&p&上面的地图中,你可能也注意到了,其实并没有“天连大道”和“天连路”,其实是同一条街。但是由于名称不同,在地址核验过程中,就有可能被认为是两个不同的地址。类似的,比如“南京市白下区李府街”和“南京市秦淮区李府街”,也是同一条街道,2014年白下区被撤销,整体并入秦淮区。从行政区划上看,白下区已经不存在了,但是物流和快递大哥都知道,整个南京市就那么一条李府街,货物也可以成功地递交到收货人手中。&/p&&p&&br&&/p&&p&为此,我们也建立了一套用于对收货地址做真实性核验的系统,用于判断多个地址,是否指向了同一个地点。
&/p&&p&&br&&/p&&p&除了前面列举的三个特征之外,还有一个比较隐蔽的特征,就是注册这些账号的手机号,其实都是”虚假号码“(参见:虚假号码&a href=&http://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA4MjI2MTcwMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Dd6d7efd3fedf3chksm%3Db0f079ce57ba26a9a6deb1f444ad443a3cbc773beaf8a16ea74%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【反欺诈专栏】互联网黑产剖析——虚假号码&/a&)。换句话说,提交这些订单的用户,其实都是通过垃圾注册产生的垃圾账户(虚假账户)。除此之外,通过设备指纹技术,我们也识别出,这些订单其实都来自于同一台PC。从IP维度上,虽然每个订单的来源IP都不相同,但是每个IP都最终被确认为代理或者机房。&/p&&p&&br&&/p&&p&以上种种,就成为我们判断黄牛行为的特征,归纳如下:
&/p&&p&&br&&/p&&p&1、黄牛会事先通过垃圾注册准备一批可用的账号,注册过程中往往会使用虚假号码;&/p&&p&2、账号注册过程中会出时间、IP、设备上的集中性,即同一个设备,同一个IP上注册了大量账号;
3、多个订单中的收货人、收货地址不真实或相似度极高;&/p&&p&4、多个订单可能从同一个设备上产生;&/p&&p&5、提交订单的IP地址,大部分是机房IP或者代理IP;&/p&&p&6、垃圾账号注册完成之后可能不会立即进行抢票,而是经过了较长的沉睡期或进行特定的养号活动......&/p&&p&&br&&/p&&p&进一步细化之后,得到具体的指标参数,就可以进入训练模型的阶段了。&/p&&p&&br&&/p&&p&&b&攻击链路 &/b&&/p&&p&攻击链路(aka Kill-Chain),是安全领域中一个讨论比较多的话题。任何一次风险,都不会平白无故地发生,而是会有一个过程。对一次风险的定义,可以从最终的结果进行定义,但是更多的往往是对这个风险过程的定义。&/p&&p&&br&&/p&&p&以偷窃为例,一定会有这么几个步骤:
&/p&&p&&br&&/p&&p&寻找目标 -- 蹲点 -- 标记 -- 作案准备 -- 撬门/扒窗 -- 进入房间 -- 寻找保险箱 -- 撬开保险箱 -- 拿走钱/珠宝 -- 清理现场 -- 离开现场 -- 销赃 -- 寻找下一个目标&/p&&p&&br&&/p&&p&上面的这些,就是Kill-Chain中的节点(Node),也可以叫做风险过程(Process)。在整个攻击链路中,只有起点和终点是确定的,剩下的部分,可能会没有,也可能因为各种突发情况而产生分支链路忽然中断,或者重复某些环节。多个攻击链路,会在特定的一个节点上汇聚,这个节点,就成为了风险防控的关键节点。在这个节点上进行防护,效果就会

我要回帖

更多关于 wkwebview 缓存 秒开 的文章

 

随机推荐