北京xcon之行

8月21号到24号在北京,参加xcon大会,做了一个关于《弹性计算云安全——反思与展望》的演讲,ppt很简洁,但是讲了一个多小时,要是能有视频可以发出来就好了。这次演讲比以前的任何一次都重视,第一次在演讲前的晚上对着静子自己试讲了一遍。ppt丢在http://www.slideshare.net/im_yunshu/ss-25620166,翻墙能看,当然意义不大,只是个提纲而已。

其实xcon最主要的目的还是和朋友们聚会,21号航班比较晚,晚餐没赶上,螺螺开车去机场接的我,然后在酒店聊了很久。大家都有奋斗的目标,螺螺的公司发展得很好,从去年的5、6个人到现在已经有14个了,android下面的软件每天打开量有300多万。我也为在云计算中实现反向代理WAF透明接入以至于一切安全设备虚拟化并透明接入形成云安全市场而努力。

从第二天开始,晚餐就安排得满满的了。

22号下午在会场和glacier、娟子伉俪聊了挺久,主要是佛法方面的东西。晚上和螺螺、刺、iceyes、mix、pskey、superhei、猪猪侠等一大票人吃烤鱼,13个人,没多大会儿干掉了4条3斤多的鱼,服务员都惊呆了。边吃边扯淡,吃完还不尽性,于是又在附近找了个咖啡屋继续。黑客、人生、妹子天南海北,螺螺总还演示了McAfee某大牛逆向“陌陌”协议后做出的可搜全国各地女神的APP,琐哥演示了他们正在开发的“拉皮条”应用。

23号上午我演讲,结束后大家反响还不错,可惜官方不肯放出视频,我自己不知道到底如何。下午去百度转了转,xiaoyu领着我们一行人参观,感觉还挺好的。晚上又是吃饭,这次比较有意思,赵武负责组织的,因此有360的,知道创宇的,安全宝的,我们阿里巴巴的各种人,superhei还专门写了篇《决战紫禁之巅》继续此事。

24号本来打算去腾讯的一个内部会议,结果很意外的,碰到了一个7年未见的朋友,就和她一起吃了午饭。没走多远,刚好酒店附近有个叫“院落”的小店——环境很好,但是可惜没收拾好。

发表在 技术 | 3条评论

九溪十八涧

10号和icy去了“九溪十八涧”。出发前一直担心找不到方向,搜索到的路线图看起来就像一团麻。这是一次抱着试试看的忐忑心态开始的山涧之旅,结果却充满了惊喜和乐趣。

穿过几个隧道之后,右拐上了龙井路。曾经以为南山路、杨公堤一带是杭州最美丽的林荫道,行驶在在龙井路上立即让我感叹自己的浅薄。这是山间小路,一个弯道接着一个弯道,像是溅起的一朵朵浪花。山林茂密,偶尔透露出几缕阳光,显示出五颜六色的灿烂。很安静,窗外没有一点点声音,零零散散的有些骑车人。

一段距离之后,穿过了龙井村,这里又是另一番景象。远离山林,回归生活。两旁都是农家餐厅,一个一个的院子。屋后是山,屋前是溪,屋旁是龙井茶园。大约几百米后,停好车,沿着小溪步行。

很快的,几棵大树屹立在眼前。小溪一个拐弯从树下穿过浸湿了小路,三两个青石就是小桥,清泉潺潺流过。渐行渐远,蝉噪林逾静,鸟鸣山更幽,几步一弯,一弯一涧,真真切切的九溪十八涧。

发表在 琐记 | 4条评论

第二辆车

上周六去4S店定了第二辆车,周三去提车的。算是一个新的重大事件,稍微记录一下。

买车主要是两个原因。首先是公司要搬家到淘宝城,以后上班和icy不顺路,一辆车不够用了。其次是2010年初买的福克斯现在已经6万多公里,开在高速上抖动厉害,担心不安全,以后只能在市区用,这也要求买一辆可以跑高速的新车。

本来想搞一个w87v5的拍照,可惜没成,也就算了。

发表在 琐记 | 10条评论

做饭的天赋

一直觉得我做菜挺有天赋的。不复杂的家常菜,吃一遍基本上就知道怎么做了,能够依样画葫芦的弄出来,味道也差不离。

前些时候icy吃过我妈妈做的虾,觉得不错,就问是怎么做。于是我在旁边夸口说没什么的,到周末了我来做,上周末就开始兑现。傍晚时候2个人慢慢走,去菜场买菜,还特地记录了一下运动路线。

周末买菜

回家后把虾子洗洗,然后丢尽开水里面烫几分钟,捞出来冷水滤滤,把头掐掉。最后就是用蒜、姜、青椒大火炒,放点料酒去腥,加点酱油调色,差不多成了,花不了几分钟,很简单。

IMG_1444

IMG_1443

发表在 琐记 | 5条评论

上海之行

去年曾经在杭州的OWASP沙龙上讲过安全设备虚拟化的事情,那是我第一次在外部提起这个想法。之后的大半年一直在努力,为目标而奋斗。只是很可惜条件不太具备,想过的临时替代方案虽有5-6个,但因为种种原因全部夭折,没有做起来。

7月13号应邀在上海的OWASP发言,再次介绍了一下这个想法,并且讲了讲大半年来我的努力以及失败的经历。PPT放在http://www.slideshare.net/im_yunshu/security-device-virtualization-new了。也许9月份还会去北京讲一次,但是值得庆幸的是,上海演讲结束后有了一个新的方案,希望在9月份的演讲中,能够有在阿里成功实施的案例。

这次上海之行,演讲并非主要目的,主要还是看看爸妈以及弟弟他们。晚上住在交代旁边的酒店,房间一般,不过氛围还成。办好住宿后,去旁边的上海影城看了下电影,威尔史密斯的这部《重返地球》真心不怎么样,但是影院不错,放映厅比杭州任何一家都要大,椅子也更舒服。看完电影,理所当然是吃吃烧烤。四个人,交大旁边,找个路边摊一围,东拉西扯,就是那种久违的感觉。

发表在 技术 | 留下评论

关于吃鱼

这半年挺喜欢看《三联生活周刊》的,不知道是不是因为生活越来越单调。在春末夏初的季节,有一篇《烹小鲜记》讲了许多河鲜、吃鱼的事情。鱼也是我的爱好,因此记忆特别深刻。有段话这么说的,“《红楼梦》里吃的那些东西,说到底,还是粗糙。什么鹅油卷、豆腐皮包子、糟鸭掌,连条鱼都不吃,哪里谈得上‘精致’二字!”

说到底,红楼梦写得的东西毕竟还是比较偏北方,要吃鱼的话也就红烧鲤鱼之类的,想必和书中的小资气相冲,难入作者法眼。况且,吃鱼就很精致么?

“宋江看见道:‘美食不如美器,虽是个酒肆之中,端的好整齐器皿。’拿起箸来,相劝戴宗、李逵吃,自也吃了些鱼,呷了几口汤汁。李逵也不使箸,便把手去碗里捞起鱼来,和骨头都嚼吃了。宋江看见,忍笑不住,呷了两口汁,便放下箸不吃了。戴宗道:‘兄长,已定这鱼腌了,不中仁兄吃。’宋江道:‘便是不才酒后,只爱口鲜鱼汤吃,这个鱼真是不甚好。’戴宗应道:‘便是小弟也吃不得,是腌的,不中吃。’李逵嚼了自碗里鱼,便道:‘两位哥哥都不吃,我替你们吃了。’便伸手去宋江碗里捞将过来吃了,又去戴宗碗里也捞过来吃了,滴滴点点淋一桌子汁水。宋江见李逵把三碗鱼汤和骨头都嚼吃了……”

这种吃法,林妹妹见了必定要当场晕倒的。《烹小鲜记》的作者见了,不知道会不会还觉得吃鱼是件很精致的事情……

我吃的鱼,最怀念的是小时候在农村的那几年。每到夏天涨水季节,河里就有很多刁子鱼,半干半湿,与本地的小青椒一起闷,再一碗白米饭,想起来就要流口水。可惜现在杭州,再也没时间在这个季节回去了。奶奶也于去年去世,妈妈长居上海,我回去了谁给我做?又去哪里摘辣椒?

发表在 读书 | 11条评论

微博上关于云计算安全的几点讨论以及其它

最近发微博说到了两件事情,第一件事情是我们侦测云服务器对外部的扫描、攻击行为,第二件事情是我更喜欢透明WAF。微博上、私底下都有许多人和我讨论、质疑或者骂人——被骂都是关于第一件事情,微博篇幅太短,因此写篇博客描述一下我的想法。

先说对云服务器的恶意行为监测。当时我说有一个VM在1点开始做端口扫描直到9点结束,然后10点开始做密码扫描。然后被很多人质疑我们偷窥了用户的隐私数据,或者说我们可以偷窥用户的隐私数据。关于这个,我描述一下我们是怎么做的。

首先,分析行为,并不一定要查看明细的数据内容,只做宏观的统计就能够说明很多问题了。我们来看云服务器的IN、OUT方向BPS曲线图。

BPS曲线图

很明显,1点到9点之间出去的流量很大,进来的流量很小。而10点多开始,返回流量增大了不少。同时对照记录的3层、4层五元组信息可知,这两个时间周期内OUT方向目的端口主要集中要22、3389两个端口,而且我们跟进扫描发现,1点到9点之间的端口大部分是关闭的,少量开放,而10点之后的目的端口都是可以连接的,进一步分析发现10点之后的那些目的端口是1点到9点之间目的端口的子集。有这些数据,还不能足够说明VM在1点到9点之间是做大范围的端口扫描,10点之后在做密码扫描么?整个过程,只涉及到五元组信息,以及一些轻微的扫描、数据分析,没有任何地方与用户数据有关。

其次,数据隐私的担忧,仅仅是云计算才存在的问题么?回去几年,一般都把服务器托管在IDC机房,而IDC公司一般就是10几个人,几百台服务器,没有任何的规章制度——我待过1年,所以我很了解这个行业。相比而言,云计算公司都是更大更正规的公司,使用这里的资源更放心,云计算公司也更值得信赖。除此之外,运营商呢?老大哥呢?数据隐私保护问题,任重而道远。

最后,我们没有查看数据,但是即使有一天查看了,我想也是和google的邮件广告类似。google是怎么说的?“所有的数据是程序自动匹配,没有任何人参与这个过程”。程序查看数据算不算侵犯隐私?等法律专家来分析吧。

好了,数据隐私问题到此为止,说一下第二个问题。我前几天说越来越喜欢透明WAF,而不是现在这种做cname然后使用nginx反向代理的模式,也有一些人和我讨论为什么。其实很简单,对流量分析、DDOS防御带来不少的麻烦,因为太多站点共享一个IP,遭遇SYN Flood之类的四层攻击的时候,判断谁是目标都很难,更不用说实时的展示攻击数据,定制化的防御策略了。

其次,用户修改CNAME是一个很不好的东西,门槛较高,应该有不少小白被这一步吓跑了,一个一个教也不是一个可长期发展的方式。但是为什么安全宝、网站宝、加速乐他们都这么做?很简单,被逼的,本身不提供服务器因此只能通过这种方式迁移流量过来,也许以后大家都喜欢和IDC或者新兴的云计算公司合作吧。对于我们阿里来说,应该借助先天的云平台条件搞透明接入WAF,让用户无缝接入,在体验上领先其它安全公司。

透明介入的难点有2个,第1个是如何实现细粒度的流量牵引,细粒度是指只要WEB流量而不是全量的数据。第2个是透明接涉及到数据包重组工作。牵引流量至少有3个方法可选,tcp flowspec,就是cloudflare把自己玩死的那个东西,宫一鸣对这个很了解。其次是SDN,这个是我最看好的,但是还没有发展起来。最后是我自己搞的山寨货,iptables的SNAT、DNAT。流量牵引是我最想引入到阿里云的虚拟化业务中来,因为扩展开来可以实现我想做的安全设备虚拟化,WAF只不过是一个具体应用而已。关于这个,我在OWASP的沙龙上做过一次简单的介绍,可惜目前还没有得到支持。PPT可以在http://www.slideshare.net/im_yunshu/ss-15969834看到。我相信未来一定可以实现这个目标,用可随时增减的VM取代设备,用image取代系统,用SDN来改变流量,让平面化的VM变得立体起来,具备层次结构。以前也写过博客聊这个,我会持续努力实现目标。

WAF的事情也就说到这里,开始说第三个事情,其实主要是讲思路。只要思路对,任何东西都有好的一面。“就算是一条内裤,一张卫生纸都有它的用处”。

在阿里,一直在收集代理IP库,作为交易安全的评估参数之一。前几天一台云服务器遭遇CC攻击,在那一刹那间,脑子一闪,CC攻击?于是,我们多了一条收集代理IP地址的途径。请不要CC我们,你打不死的,只是免费给我们送代理服务器数据。扩展开来,我们是国内非常有希望做出IP信誉库的企业之一——看来遭遇非常多的攻击也不完全是坏事啊。希望有一天,我们能发布一个恶意IP地址库,定期更新,各大厂商都可以直接使用,就像反垃圾邮件组织提供的那些列表一样。额外的,还可以关联代理IP地址、密码破解攻击IP地址、欺诈IP地址等等数据,发布恶意行为的分析报告。

要说的,就这么些。

发表在 技术 | 6条评论

3D打印机

前几天近距离接触了一下3D打印机,不贵,2万多块。也许不久的未来,每个家庭都拥有一台,类似曾经的个人电脑。那样,很多商品已经不需要去超市采购了,只需要在网上付费下载设计图纸,然后打印即可。这样的话,很多东西价格会降低不少吧,减少了大量的运输、储存成本。

现在还不能规定颜色和材质,但是已经能打印比较复杂的东西了。下面的这个机器人和骷髅头都是打印出来的。

最后来一个工作中的视频,在打印一个手镯。谁能猜到哪个声音是我?

发表在 琐记 | 5条评论

“简单的翻墙”的升级版

前些时候做了一个demo,不具备实用性,只是掩饰如何简单的翻墙。这几天做了个可以偶尔用用的版本——说偶尔用用是因为bug还不少。而且我没有在代码中增加SSL支持,因此经常会被GFW切断,不过反正说了是偶尔用用就无所谓了。最主要的是因为自己没有需求,做这个东西只是练手,试用POE,虽然到最后麻烦点落到了操作DOM,HTML里面能写链接的地方还真不少啊,得一个一个改。

#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
use POE;
use POE::Component::Server::TCP;
use POE::Filter::HTTPD;
use POE::Filter::Stream;
use HTTP::Response;
use HTML::TreeBuilder;
use URI;
use LWP::UserAgent;

my $base_domain = '.icylife.net:8443';

POE::Component::Server::TCP->new( Port => 8443,
                                ClientFilter => 'POE::Filter::HTTPD',
                                ClientInput => \&handle_http_request,
                        );

POE::Kernel->run();
exit( );

sub replace_link
{
        my $dom_item = shift;
        my $attr_name = shift;
        my $base_url = shift;

        if( !defined($dom_item) || !defined($attr_name) || !defined($base_url) || !defined($dom_item->attr($attr_name)) )
        {
                return;
        }

        my $uri = URI->new( $dom_item->attr($attr_name) );

        $uri = $uri->abs($base_url);
        $uri->host($uri->host.$base_domain);
        $dom_item->attr($attr_name, $uri->as_string);
}

sub process_html
{
        my $html = shift;
        my $base_url = shift;

        my $root = HTML::TreeBuilder->new;
        $root->no_space_compacting( 1 );
        $root->ignore_ignorable_whitespace( 0 );

        $html =~ s/ / /g;
        $root->parse_content( $html );
        #$root->dump;

        # handle links
        my @links = $root->look_down( _tag=>'a', sub{ defined($_[0]->attr('href')) } );
        foreach my $link( @links )
        {
                my $old_link = $link->attr('href');
                if( $old_link =~ /^http:\/\// && defined($old_link) && $old_link !~ /^javascript:/ && $old_link !~ /^mailto:/ && $old_link !~ /^#/ )
                {
                        replace_link( $link, 'href', $base_url );
                }
        }

        my @csss = $root->look_down( _tag=>'link', sub{ defined($_[0]->attr('href')) } );
        foreach my $css( @csss )
        {
                replace_link( $css, 'href', $base_url );
        }

        my @jss = $root->look_down( _tag=>'script', sub{ defined($_[0]->attr('src')) } );
        foreach my $js( @jss )
        {
                replace_link( $js, 'src', $base_url );
        }

        my @pics = $root->look_down( _tag=>'img', sub{ defined($_[0]->attr('src')) } );
        foreach my $pic( @pics )
        {
                replace_link( $pic, 'src', $base_url );
        }

        my @forms = $root->look_down( _tag=>'form', sub{ defined($_[0]->attr('action')) } );
        foreach my $form( @forms )
        {
                replace_link( $form, 'action', $base_url );
        }

        my $new_html = $root->as_HTML( '' );
        $root->delete;

        #$new_html =~ s!^<body>\n?!!;
        #$new_html =~ s!</body>\s*\z!!;

        return $new_html;
}

sub handle_http_response
{
        my $kernel = shift;
        my $heap = shift;
        my $response = shift;

        my $response_header = $response->{_headers};
        my $response_data = $response->content;

        $heap->{client}->set_output_filter(POE::Filter::Stream->new());

        if( lc($response_header->header('Content-Type')) =~ /text\/html/ )
        {
                $response_data = process_html( $response_data, $response->request->uri );
        }
        $response->{_content} = $response_data;
        delete $response->{_request};

        $heap->{client}->put($response->as_string);

        print "sent ".length($response_data)." bytes\n";

        $kernel->yield("shutdown");
}

sub handle_http_request
{
        my ( $kernel, $heap, $request ) = @_[ KERNEL, HEAP, ARG0 ];

        if ( $request->isa("HTTP::Response") )
        {
                $heap->{client}->put($request);
                $kernel->yield("shutdown");

                return;
        }

        my $new_host = $request->header( "host" );
        $new_host =~ s/\.icylife\.net:8443//g;
        $request->header( "host", $new_host );

        $request->uri( "http://$new_host".$request->uri );
        $request->header("Connection", "close");
        $request->header("Proxy-Connection", "close");
        $request->remove_header("Keep-Alive");
        $request->remove_header("Accept-Encoding");

        print "access ".$request->uri->as_string."\n";

        my $ua = LWP::UserAgent->new;
        $ua->timeout(10);

        my $response = $ua->request( $request );

        handle_http_response( $kernel, $heap, $response );
}
发表在 技术 | 5条评论

陪同事试驾凯迪拉克

18号陪同事去滨江的白马湖参加凯迪拉克试驾活动。我并没有购买的想法,因此只是随便看了看车,当然也顺便看了几眼车模。除了这些虚的之外,也还有点额外的收获——我问了一个关于四驱的问题,得到了专业教练的解答。

今年5.1的时候开蒙迪欧回湖北,在武汉遭遇暴雨,于是高速上积水。车左前轮涉水,左边阻力变大,车辆左偏要撞中央护栏。我刹车,然后又打,稳住了。过了几秒钟,冲出涉水区,车辆右偏,再次打了回来。后来同事告诉我说四驱能解决这个问题,但是我不是太相信。

这次教练告诉我说四驱是解决不了这个问题的。最好的解决办法是第一,天气不好的时候车速放慢。第二养成良好的握方向盘习惯,双手扣紧了就不会出现大的偏转。不过我想这是因为汽车不够先进吧?理论上把动力转移到左前轮,让左前轮右前轮的速度维持一直是不是就可以了。

最后附上试驾场上教练的甩尾视频。

发表在 琐记 | 标签为 , , | 留下评论