一 : 百度奇艺低调上线 拒绝分享模式
原本定于21日在京举办盛大发布仪式的百度旗下视频网站奇艺,鉴于全国哀悼地震遇难同胞的特殊背景,决定取消发布活动,改为低调上线。而作为正版视频网站的代表,奇艺方面表示将会拒绝视频分享模式,通过自己的实际行动为此前鱼龙混杂的视频网站市场正本清源,肃清盗版源头。
奇艺CEO龚宇告诉计世网,尽管来自全国各地的影视制作及电视台代表、广告主、投资机构、媒体等四百余人已陆续抵京,但为了承担社会责任,奇艺还是决定取消此次发布会,并且也不会实行延期举办。奇艺已经将4月22日当作自己的上线日,该公司表示将做有品质的中国正版视频网站。
据悉,此前龚宇曾经公开表示奇艺将用3年时间实现盈利,而业内有声音认为,奇艺取消视频分享模式,单纯依靠正版视频发布,似乎很难在如今的视频网站市场上存活。但奇艺方面表示将坚持这一道路,绝对不会成为盗版的温床。也有声音认为,只有百度等有实力的大公司来做视频业务,才有可能负担起完全版权内容的高昂成本。
3月底,奇艺宣布测试版上线,完成技术内测和用户测试工作,目前奇艺与包括中影集团、华谊兄弟、浙江卫视、湖南卫视、北京卫视等在内的众多重量级版权方达成战略合作,电影、电视剧、纪录片、综艺、动画片等内容采购量已经达到数万小时,此次发布内容1万小时,剩余内容将在未来数周内上线。奇艺计划在2010年底发展成为中国最大的正版影视娱乐内容库。
据介绍,与其他视频网站不同之处是,奇艺对用户提供国内首创的正版视频剪辑分享功能。用户在观赏视频过程中,可以点击分享按钮,在奇艺独创的影片播放时间轴中截取10分钟以内的视频片段,将其直接转发到百度贴吧、新浪微博、开心网、人人网、QQ空间等与朋友便捷分享。此外,奇艺用户还可以“随心看视频”。在奇艺,心情也成为选择视频节目的风向标,依照开心、无聊,悲伤、郁闷等心情关键词,用户可以在节目推荐单中享受随心点播的乐趣。
在国外的HULU网站已经率先证明盈利模式之后,国内视频领域也出现了新的商机,目前中国互联网视频用户规模突破2.4亿,未来将呈现出更大的增势,但目前优酷、土豆等分享类视频网站与激动网、优朋普乐等版权内容提供商两种模式争执不下,谁能成为未来市场主流仍然无法判断。龚宇表示,即便是只做正版视频内容,只要把价值做到极致,对奇艺3年盈利5年上市的目标来说已经足够。
百度旗下网站奇艺正式上线 加剧行业格局变化
百度奇艺网4月22日正式上线
二 : 解析PNG图象格式库存在远程拒绝服务漏洞
受影响系统:三 : SMBv3远程拒绝服务(BSOD)分析
前言
这个SMBv3漏洞是由lgandx爆出的一个未被微软修复的漏洞(暂未发布补丁),漏洞出来后我进行了一定的分析,花了很多时间,这个漏洞有一些意思,但是对于SMB的整个协议通信过程非常庞大,所以没有进行非常细致的跟踪,包括一些不透明的结构体让我感到晕头转向,但到最后还是有了一些结果。
这个SMB漏洞可以看作是被动的,需要用户主动去访问445端口才可以触发,而不像ms08067一样主动攻击别人,所以需要运行漏洞脚本在操作系统上。
那么很多人看到PoC中的关键部分,就会想:有填充数据,会不会是缓冲区溢出!
## Tree Connect if data[16:18] == "x03x00": head = SMBv2Header(Cmd="x03x00", MessageId=GrabMessageID(data), PID="xffxfex00x00", TID="x01x00x00x00", CreditCharge=GrabCreditCharged(data), Credits=GrabCreditRequested(data), NTStatus="x00x00x00x00", SessionID=GrabSessionID(data)) t = SMB2TreeData(Data="C"*1500)#//BUG packet1 = str(head)+str(t) buffer1 = longueur(packet1)+packet1 print "[*]Triggering Bug; Tree Connect SMBv2 packet sent." self.request.send(buffer1) data = self.request.recv(1024)
答案是否定的,至少在我看来,大量的数据目的并非是为了填充缓冲区,而是为了绕过tcpip.sys的某处判断,从而进入漏洞出发的函数调用逻辑。
问题出现在smbv2后的一个特性Tree Connect,用来处理共享服务的特性,opcode:0x03,而整个问题,确是多个地方导致的。下面我们就一起来进入今天的旅程吧!
Github地址:https://github.com/lgandx/PoC/tree/master/SMBv3%20Tree%20Connect
漏洞复现
首先,网上关于这个漏洞的触发方法有很多,比较通用的是twitter中某老外提到的Powershell的方法,最为简单,首先我们调试的环境是:Windows 10 x64 build 1607
接下来我们在kali2.0里运行漏洞脚本。
随后执行"dir ipPATH",漏洞触发,通过windbg双机联调,此时捕捉到了BSOD。
可以看到提示此时问题出现在mrxsmb20.sys中,问题函数是Smb2ValidateNegotiateInfo,来看一下触发位置的代码。
kd> p mrxsmb20!Smb2ValidateNegotiateInfo+0x17: fffff803`1869c7d7 66394114 cmp word ptr [rcx+14h],ax kd> r rcx rcx=0x00000000`00000000
此时rcx的值为0x0,是一处无效地址,因此这是由于空指针引用导致的BSOD,接下来继续执行可以看到Windows 10引发蓝屏。
回溯及数据包分析(important!)
我们来看一下mrxsmb20.sys关于Tree Connect特性的一些内容,代码逻辑相对简单。
可以看到执行到Smb2ValidateNegotiateInfo函数有两条逻辑调用,一个是Smb2TreeConnect_CopyData,一个是Smb2TreeConnect_Receive,这里我就把我回溯的结果和大家分享一下,首先,通过Smb2TreeConnect_Receive来接收smb的Tree Connect数据,这个是通过opcode来决定的。
正常情况下不会进入Smb2TreeConnect_CopyData,但一旦由不正常(后面会提到)数据包执行,则会在Receive之后进入CopyData函数的处理逻辑,从而引发漏洞。
这里数据包分析很关键,因为在漏洞触发过程中,就是由于数据包的问题导致的。
来看一下Smb最关键的这个数据包。
来看一下Smb头部的协议格式。
在协议格式中Opcode指示smb类型
注意数据包中对应位置,opcode值是0x03,就是tree connect的处理。同时这里在后面分析中我们要用到,注意Data数据之前的长度。其中包含了NetBIOS Session Service 4字节,和 SMB2 Header + Tree Connect Body 80字节,以及 Data n字节。这个非常重要,后续分析我们会用到。
漏洞分析
刚开始,我天真的以为是CopyData引发的某些异常,后来发现我错了,其实这个漏洞可以看成利用tcpip.sys中的某些逻辑特性,以及mrxsmb20.sys中对于相关结构的检查不够严格导致的空指针引用BSOD,而整个漏洞形成,我是利用正常和不正常的对比才终于发现。在分析的过程中,大量不透明的结构体引用让我有点尴尬,期待更熟悉SMB的大牛能够继续丰富分析。
正常的SMB2 Tree Connect包是不会触发异常的。
首先我们来看一下正常的逻辑调用,关键函数在tcpip.sys中的TcpDeliverDataToClient,这个函数负责处理接收到的数据包,在一个while(1)循环中。
char __fastcall TcpDeliverDataToClient(PKSPIN_LOCK SpinLock, KSPIN_LOCK *a2, _QWORD *a3, _QWORD **a4) { while ( 1 ) { …… v22 = (unsigned int)vars30; v23 = TcpIndicateData(v7, v6, v5, &v72); v24 = v71; if ( !(v6[3] + v6[4]) ) break; ……
在这个循环中,刚进入循环位置有一个if语句,后面我们会提到,在接收到TreeConnect包之后,不会进入if语句,而是执行下面的函数调用,在TcpIndicateData函数内部会调用到之前提到的Smb2TreeConnect_Receive,注意这一切现在都是在我们发送一个正常数据包时完成的。(接下来我们会分析到为什么是正常的)
在这个函数入口下条件断点。
kd> bp tcpip!TcpDeliverDataToClient ".if(poi(rbx+20)==0x1E4){;}.else{g;}" kd> g tcpip!TcpDeliverDataToClient: fffff801`f18017a0 4055 push rbp kd> dd rbx+20 L1 ffffb304`06865c58 000001e4
命中时,rbx会存放一个结构体,这个结构体按照IDA的反馈来看是一个KSPIN_LOCK自旋锁,windows内核同步处理的一种机制,这个暂且不管,注意一下rbx结构体+20位置的值,是1e4,这个值转换成10进制就是484,正好是我们发送的400个C的Data数据加刚才我们提到的头部84字节的长度。
接下来进入TcpIndicateData函数后会命中Smb2TreeConnect_Receive函数开始进行接收处理。
kd> p tcpip!TcpDeliverDataToClient+0x209: fffff801`f18019a9 e8e2810100 call tcpip!TcpIndicateData (fffff801`f1819b90) kd> dd rbx ffffb304`06865c38 aa9ce398 fffff801 00000000 00000000 ffffb304`06865c48 00000000 00000000 00000000 00000000 ffffb304`06865c58 000001e4 00000000 00000000 00000000 ffffb304`06865c68 00000000 00000000 00000000 00000000 ffffb304`06865c78 06865c60 ffffb304 00000000 00000000 ffffb304`06865c88 00000000 00000000 00000000 00000000 ffffb304`06865c98 00000000 00000000 00000000 00000000 ffffb304`06865ca8 00000000 00000000 00000000 00000001 kd> p Breakpoint 1 hit mrxsmb20!Smb2TreeConnect_Receive: fffff801`f3fbc4b0 48895c2420 mov qword ptr [rsp+20h],rbx
处理过程很长,这里我直接略过,在处理结束后会多层ret后返回到TcpDeliverDataToClient函数中,仍然处于while循环中。
kd> bp tcpip!TcpIndicateData+0x268 kd> g Breakpoint 3 hit tcpip!TcpIndicateData+0x268: fffff80a`72c39df8 c3 ret kd> p tcpip!TcpDeliverDataToClient+0x20e: fffff80a`72c219ae 833defa51a0001 cmp dword ptr [tcpip!MICROSOFT_TCPIP_PROVIDER_Context+0x24 (fffff80a`72dcbfa4)],1 kd> p tcpip!TcpDeliverDataToClient+0x215: fffff80a`72c219b5 448bf0 mov r14d,eax
这里我列举一下返回过程的逐层调用逻辑,因为kb回溯不到。Smb2TreeConnect_Receive -> SmbReceiveInd -> VctIndRecv -> SmbWskReceiveEvent -> afd!WskProTLEventReceive -> tcpip!TcpIndicateData -> tcpip!TcpDeliverDataToClient。
接下来就是关键了,首先会执行一处sub汇编指令。
kd> p tcpip!TcpDeliverDataToClient+0x2b9: fffff80a`72c21a59 48297b20 sub qword ptr [rbx+20h],rdi kd> r rdi rdi=00000000000001e4 kd> dd rbx+20 L1 ffffc10c`9fe79e78 000001e4
这个相减之后,会将rbx结构体对应的长度变成0,随后,会到达一处cmp操作,这处cmp操作会将这个值作为一个判断条件。
kd> p tcpip!TcpDeliverDataToClient+0x2de: fffff80a`72c21a7e 4c896b48 mov qword ptr [rbx+48h],r13 kd> p tcpip!TcpDeliverDataToClient+0x2e2: fffff80a`72c21a82 488b4320 mov rax,qword ptr [rbx+20h] kd> dd rbx+18 L1 ffffc10c`9fe79e70 00000000 kd> dd rbx+20 L1 ffffc10c`9fe79e78 00000000 kd> p tcpip!TcpDeliverDataToClient+0x2e6: fffff80a`72c21a86 48034318 add rax,qword ptr [rbx+18h] kd> p tcpip!TcpDeliverDataToClient+0x2ea: fffff80a`72c21a8a 0f858dfeffff jne tcpip!TcpDeliverDataToClient+0x17d (fffff80a`72c2191d) kd> p tcpip!TcpDeliverDataToClient+0x2f0: fffff80a`72c21a90 48837e2000 cmp qword ptr [rsi+20h],0
来看一下这一段伪代码。
while ( 1 ) { v70 = v10; v69 = TcpSatisfyReceiveRequests(v7); if ( v24 >= v23 ) { } else { v25 = (char *)ReceiveDpcTable + 24 * v21; v26 = v23 - v24; v27 = v7[2]; v70 = v26; *(_QWORD *)(*(_QWORD *)(v27 + 128) + (v21 << 7) + 56) -= v24; v28 = *((_DWORD *)v25 + 5); if ( v28 & 1 ) *((_DWORD *)v25 + 5) = v28 | 4; else TcpStartRcvWndTuningTimer(vars38); v6[4] -= v26; v29 = v6[9]; v6[3] = 0i64; if ( v26 + v29 ) { TcpAdvanceTcbRcvWnd(v7, (unsigned int)(v26 + *((_DWORD *)v6 + 18))); v6[9] = 0i64; } else { v6[9] = 0i64; } } if ( !(v6[3] + v6[4]) ) break;
在伪代码最后的位置,会对两个值进行判断,如果两个值之和为0,则条件成立,程序会跳出循环,刚才的跟踪我们可以发现,v6就是结构体,v6[4]的值来源于它自身减v26,而v26就是它自身,最后它的值为0,而刚才跟踪v6[3]的值也为0(如果知道结构体就好清楚v6到底是什么了T.T)。
经过对比调试,发现在正常的处理SMB Tree Connect包和触发BSOD的不正常情况下有一处关键的跳转逻辑,这里是一处if语句判断,成立则break跳出while循环,不成立,会继续执行。
那么不正常的情况呢?之前的处理和之前的分析一样,我们加大Data的值到1200,但是在返回后。
kd> p tcpip!TcpDeliverDataToClient+0x2b9: fffff80a`72c21a59 48297b20 sub qword ptr [rbx+20h],rdi kd> r rdi rdi=0000000000000404 kd> dd rbx+20 ffffc10c`a0643e78 00000504
显而易见,在我们加大Data长度的时候,到相减位置结构体对应位置的值是504,也就是1284,正好是Data的长度1200字节 + 刚才分析到的84字节,而此时rdi的值只有0x404,也就是944长度,这是一个Max值,如果Data长度超过0x404,这里会认为还有数据,因此相减后v6[4]的值不为0。
也就是说在SMB Tree Connect数据交互过程中,TcpDeliverDataToClient中关于这个地方的逻辑处理是,会根据数据包的长度,如果数据包长度小于0x404,则相减时v26的值是长度本身,然后会break。如果数据包长度大于0x404,则v26的值为max值,也就是0x404,相减不为0,则不会break。
kd> p tcpip!TcpDeliverDataToClient+0x2bd: fffff80a`72c21a5d 4533ed xor r13d,r13d kd> dd rbx+20 ffffc10c`a0643e78 00000100
这造成了一个问题,就是刚才到的break位置由于v6[4]不为0,所以不执行break,而是进入后续的处理。
kd> p tcpip!TcpDeliverDataToClient+0x2e2: fffff80a`72c21a82 488b4320 mov rax,qword ptr [rbx+20h] kd> p tcpip!TcpDeliverDataToClient+0x2e6: fffff80a`72c21a86 48034318 add rax,qword ptr [rbx+18h] kd> p tcpip!TcpDeliverDataToClient+0x2ea: fffff80a`72c21a8a 0f858dfeffff jne tcpip!TcpDeliverDataToClient+0x17d (fffff80a`72c2191d) kd> p tcpip!TcpDeliverDataToClient+0x17d: fffff80a`72c2191d 49833f00 cmp qword ptr [r15],0 kd> p tcpip!TcpDeliverDataToClient+0x181: fffff80a`72c21921 0f85e9010000 jne tcpip!TcpDeliverDataToClient+0x370 (fffff80a`72c21b10)
接下来,程序会回到while入口位置,接下来会进入之前提到没有进入的if语句处理,这是由于刚才没有break结束循环的原因,此时会进入if语句的处理,函数中所调用的函数都是Complete,猜测都是和结束数据包相关处理有关。
kd> p tcpip!TcpDeliverDataToClient+0x1c1: fffff80a`72c21961 e99bfeffff jmp tcpip!TcpDeliverDataToClient+0x61 (fffff80a`72c21801) kd> p tcpip!TcpDeliverDataToClient+0x61: fffff80a`72c21801 48837b0800 cmp qword ptr [rbx+8],0 kd> dd rbx+8 ffffc10c`a0643e60 9d8c2fa0 ffffc10c 9d8c2fa0 ffffc10c
来看一下这个if语句。
while ( 1 ) { if ( v6[1] ) { if ( !*v5 ) break; v9 = v6[1]; v10 = v6[2]; *((_BYTE *)v6 + 98) &= 0xFEu; v69 = v9; v6[1] = 0i64; v6[2] = 0i64; v11 = vars30; v71 = v10; LODWORD(v12) = TcpSatisfyReceiveRequests(v7, 0, (__int64)v6, vars30, v5, &v69, &v66); } }
在这个if语句中,会调用TcpSatisfyReceiveRequests函数,这个函数中第六个参数,也就是v69是很关键的,这个值决定了后面的空指针引用,接下来进入这个函数。
int __fastcall TcpSatisfyReceiveRequests(PKSPIN_LOCK SpinLock, char a2, __int64 a3, signed int a4, __int64 *a5, __int64 *a6, _DWORD *a7) { v8 = *a5; v95 = SpinLock; v9 = *a6; // RBP+148 v38 = *(_QWORD *)(v9 + 48); v39 = *(_QWORD *)(v9 + 56); v40 = *(_QWORD *)(v9 + 8); v41 = *(_QWORD *)(v9 + 72); v93 += v38; v99 += *(_QWORD *)(v9 + 40); v42 = *(_QWORD *)v9; _guard_dispatch_icall_fptr(v40, 0i64, v38, v39);// call WskProTLReceiveComplete
这个函数中的_guard_dispatch_icall_fptr调用了WskProTLreceiveComplete函数,而v40参数和v9结构体有关,v9是由传入第六个参数,也就是刚才提到的v69有关,v69又来自于v6[1],而这个结构体是和Complete有关,但是在TreeConnect数据包中却没有对这个结构体进行赋值。
随后在WskProTLReceiveComplete中,会将rcx,也就是第一个参数v40,进行传递(64位Windows系统中,参数传递通过寄存器,第一个参数是rcx,第二个是rdx,第三个是r8,第四个是r9)。在后面的分析中,省略了无关的汇编过程,只留关键的给大家分享。
kd> p afd!WskProTLReceiveComplete+0x34: fffff80a`7365aa84 488bd9 mov rbx,rcx ………… kd> p afd!WskProTLReceiveComplete+0x8e: fffff80a`7365aade 488bcb mov rcx,rbx kd> r rbx rbx=ffffc10ca01ba010 kd> p afd!WskProTLReceiveComplete+0x91: fffff80a`7365aae1 ff15512d0200 call qword ptr [afd!_imp_IofCompleteRequest (fffff80a`7367d838)]
经过一系列传递后,这个第一个参数会直接传给IofCompleteRequest函数,这个函数是irp完成函数,其实是一个中间过程,同步irp完成,后面就是善后工作。
在函数中,参数继续传递。
kd> p nt!IopfCompleteRequest+0xb: fffff800`9464b81b 4881ec00010000 sub rsp,100h kd> p nt!IopfCompleteRequest+0x12: fffff800`9464b822 488bd9 mov rbx,rcx ………… kd> p nt!IopfCompleteRequest+0x109: fffff800`9464b919 488bd3 mov rdx,rbx kd> p nt!IopfCompleteRequest+0x10c: fffff800`9464b91c 488bce mov rcx,rsi kd> p nt!IopfCompleteRequest+0x10f: fffff800`9464b91f ff5735 call qword ptr [rdi+35h] kd> t Breakpoint 0 hit mrxsmb!SmbWskReceiveComplete: fffff80a`731d6950 48895c2408 mov qword ptr [rsp+8],rbx
在IofCompleteRequest函数中,会有一处调用回到SmWskReceivComplete函数,而结构体会交给rdx,也就是第二个参数进入这个函数。随后这个参数会连续传递。先来看一下之前的堆栈回溯。
kd> kb RetAddr : Args to Child : Call Site fffff800`9464b922 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : mrxsmb!SmbWskReceiveComplete fffff80a`7365aae7 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IopfCompleteRequest+0x112 fffff80a`72c60d9d : fffff800`963d54a8 ffffc10c`9ed02780 fffff800`963d54b0 fffff800`963d547c : afd!WskProTLReceiveComplete+0x97 fffff80a`72c21860 : 00000000`00000002 ffffc10c`a0643d00 00000000`00000007 00000000`00000000 : tcpip!TcpSatisfyReceiveRequests+0x3cd 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : tcpip!TcpDeliverDataToClient+0xc0
之后参数会连续进行传递,首先会把当前rdx+b8存放的值交给r14,之后把r14+40位置的值交给r8,最后引用的就是r8+98位置的值。
kd> p mrxsmb!SmbWskReceiveComplete+0x1d: fffff80a`731d696d 488bda mov rbx,rdx kd> p mrxsmb!SmbWskReceiveComplete+0x20: fffff80a`731d6970 4c8bb2b8000000 mov r14,qword ptr [rdx+0B8h] ………… kd> p mrxsmb!SmbWskReceiveComplete+0x7f: fffff80a`731d69cf 4d8b4640 mov r8,qword ptr [r14+40h]//1 kd> dd r14+40 ffffc10c`a01ba168 9fdf3c58 ffffc10c
可以看到,这个过程并没有对这个值进行检查,由于结构体不透明,不能确定到底对应存放的是什么,但其实这个结构体的连续调用我们可以理解为KPCR -> KTHREAD -> _EPROCESS -> Token这种关系,在Windows内核有很多这样的域以及相关的结构体,而相互又是嵌套的。
这个结构体的值为0x0的原因可能就是由于这个complete部分的数据包是由于SMB Tree Connect过长引起的,而mrxsmb20.sys中却没有对相关结构体进行检查。
kd> p mrxsmb!VctIndDataReady+0x36: fffff80a`731d6a56 498bf8 mov rdi,r8 ………… kd> p mrxsmb!VctIndDataReady+0x146: fffff80a`731d6b66 488bd7 mov rdx,rdi kd> p mrxsmb!VctIndDataReady+0x149: fffff80a`731d6b69 488bcb mov rcx,rbx kd> p mrxsmb!VctIndDataReady+0x14c: fffff80a`731d6b6c ff15eeed0200 call qword ptr [mrxsmb!_guard_dispatch_icall_fptr (fffff80a`73205960)] kd> r rdx rdx=ffffc10c9fdf3c58 kd> t mrxsmb!guard_dispatch_icall_nop: fffff80a`731d8a30 ffe0 jmp rax kd> p mrxsmb20!Smb2TreeConnect_CopyData: fffff80a`7546b6c0 48895c2410 mov qword ptr [rsp+10h],rbx
最后进入CopyData后,会引用这个结构体+98偏移位置的值,进入漏洞触发的函数,而没有对这个值进行检查。
kd> p mrxsmb20!Smb2TreeConnect_CopyData+0x32: fffff80a`7546b6f2 488b8b98000000 mov rcx,qword ptr [rbx+98h] kd> p mrxsmb20!Smb2TreeConnect_CopyData+0x39: fffff80a`7546b6f9 e8c210ffff call mrxsmb20!Smb2ValidateNegotiateInfo (fffff80a`7545c7c0) kd> dd rbx+98 ffffc10c`9fdf3cf0 00000000 00000000
最后在函数中引用空指针,引发了BSOD。
四 : 拒绝“虚胖” 星域CDN打造百分百满意服务
什么?在互联网行业高歌猛进的今天,还会有企业对送上门来的客户说不?迅雷星域CDN悄然举起了手。
这个上市尚不足5个月的新型CDN服务商,迄今为止已接到了高达2686家企业客户前来预约旗下CDN服务,而真正被其接纳并成为正式客户约有200余家。网心科技CEO、迅雷CTO陈磊在最新一期CSDN CTO沙龙上更是表态称:“星域CDN不着急扩大规模,眼下我们的节奏是慢慢来,集中精力向少量客户提供优质服务”。
前车之鉴:“虚胖”的副作用太大
在被BAT们都视为香饽饽的CDN领域却要勒马慢行,为什么?这位年龄不大但却在互联网行业浸淫了多年的强将的回答是:星域CDN要的是来自客户的扎实口碑,并基于此基础上的稳扎稳打长远发展,而不是单纯规模上的“虚胖”。
陈磊讲述了他所经历过的一个不好的案例。在推出某个项目后,陈磊和他的团队一上来就做了长期投入,一早就将客户数量作为追逐目标,并基于项目提供的服务内容,向用户敞开了一个开放性的自助系统,任何用户上来之后都可以立即去进行测试。结果的确是客户量在短期内迅速上升,但随之而来的结局却并不美好——由于向每一个客户能提供的优秀服务人才的数量增长落后于客户量的增长,项目的整体服务能力反而快速下降,产品口碑也受到影响。
陈磊对这段并不算愉快的商业尝试给出了原因归纳:“一味追求项目或商业规模并不可取,没有好的服务质量,盲目的扩张业务量和客户量只能是‘虚胖’,副作用极大。”
仔细回想下,互联网行业中,甚至不乏堪称悲剧的“虚胖”式前车之鉴。细分行业中,团购一度火爆到无人不晓,风投们一拥而入,团购网站雨后春笋般冒出,最火的时候,团购网站数量激增到近6000家,但不到一年后,剧烈“增肥”后的团购网站即迎来了网站倒闭潮;企业中,广告刷遍全国大小城市的凡客更是在深受盲目追求规模之痛后,错过黄金发展期并至今仍在艰难转型中。
陈磊和他背后的星域CDN,显然不想重蹈类似覆辙。
制胜长计:百分百满意服务
那么,不追求规模,不讲究接入量,星域CDN靠什么在竞争激烈的CDN行业持续分得一杯羹?陈磊告诉记者,星域CDN的制胜之道是“百分百满意服务”——通过向用户提供百分百满意服务,形成用户长久黏性,并进而实现用户口碑效应。
然而百分百满意服务从来都不是件容易的事儿,尤其在以TO B且业务复杂著称的CDN行业。几乎每家企业的CDN需求都要做定制化对应服务,从前期的测试对接到接入后的持续跟进服务,开发难度大、服务环节复杂。
对此,陈磊向他的团队提出了如下要求:第一是要做到让每一个前来测试的用户得到百分百满意的服务;其次是接入后对事故、故障解决率要做到百分之百,不能让客户有任何一个悬而不决的问题;再次,只要是客户遇到的问题,即使问题不在星域CDN,也必须无条件百分百帮助其解决。
目前看来,陈磊和他的团队做的还不错。来自客户的好评正络绎不绝地反馈回来。
最后,陈磊总结道:“即使是在诞生了无数个风口细分行业的互联网行业,也不能单纯以规模论英雄。”对这句话,相信最近一年里的P2P、O2O等细分行业和身处其中的企业们会有相当共鸣。
五 : iPhone5正式发布 内嵌优酷视频分享服务
9月13日消息,苹果在今天凌晨的新品发布会上推出新一代手机iPhone5,搭载全新iOS6移动操作系统席卷全球果粉。此次系统功能包括3D实景地图、safari功能升级等,亮点频出,值得一提的是系统中针对中国用户进行了多项优化,系统内置优酷视频服务,为中国用户带来最熟悉及便利的视频分享体验。
本土化进程加快苹果首批内置品牌选择优酷
中国作为世界最大的移动终端市场,一直是苹果公司扩大市占额的重中之重。苹果公布的2012财年第二季度财报显示,苹果在大中华区的营收同比增长三倍,创纪录地达到79亿美元,约占其总营收的20%。中国已经成为苹果的第二大市场,仅次于美国。
苹果对中国用户越发重视,并开始加快本地化服务步伐。如果说Youtube在美国是最佳的视频服务选择,那么对中国用户来说,优酷平台就成了苹果内置视频服务的不二选择。优酷视频服务作为系统内置,用户拍摄的视频及本地视频都可以直接通过系统选项分享到优酷平台。针对中国用户进行内置优酷视频服务,大大提高了视频分享的便捷性,是双方共同为中国用户创造未来视频体验的第一步。
优酷是中国最大的综合视频网站,用户覆盖率高居首位,一直牢牢占据着行业第一的位置,集合了最全的专业影视节目、自制节目和UGC内容,尤其在UGC内容方面,优酷覆盖了大部分市场份额。UGC通过上传的方式分享,正在成为用户表达自己的主流方式,此次内置优酷上传分享服务,将推动苹果的应用和服务更好地满足用户的需求。
优酷力推手机拍客进一步强化视频分享体验
同时,为了优化用户的视频分享互动体验,优酷还于今年推出手机拍客客户端。相对于苹果内置的视频服务,这款产品囊括视频拍摄、视频上传、视频播放、视频分享、社交视频空间等多种强大功能,实现拍摄、上传、分享视频最快捷炫酷体验。为视频达人提供随手拍视频、记录身边新鲜事并快速上传的途径,在第一时间将视频乐趣与他人分享。
随着各种移动终端的快速发展,多屏合一的时代令视频应用无处不在。视频也逐渐成为移动终端经常使用的娱乐、信息应用,移动终端的视频市场也成为各家视频企业的必争之地。优酷土豆集团CTO姚键表示:“此次苹果内置优酷,满足了果粉视频拍摄、上传、分享体验;对优酷而言,将给我们‘拍客无处不在’的努力带来更切实的促进。”
优酷作为全球首家全面支持iPad/iPhone浏览和播放的视频网站,早在第一台iPad登陆中国时就已实现通过iPad/iPhone直接访问优酷主站。优酷客户端、优酷手机拍客客户端的推出,更满足了不同果粉的使用习惯。而每一次苹果新产品的发布,优酷也是紧随潮流趋势,推出相应服务。此次内置服务,优酷与苹果的合作关系进一步深化,在苹果推进其产品性能上充当着不可或缺的重要角色。
本文标题:分布式拒绝服务-百度奇艺低调上线 拒绝分享模式61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1