開發ActiveX控件調用另外一個ActiveX系列0——身份證識別儀驅動的問題

 

 

程序員要從0下表開始,這篇是介紹這個系列的背景的,沒有興趣的人能夠直接跳過。javascript


爲何要開發ActiveX控件

因爲工做須要,咱們開發了一個網站,使用了一款身份證識別儀的網頁ActiveX(OCX)插件。可是我發現如今市面上各類識別儀的ActiveX插件都有一個共同的問題,都是能夠被仿冒僞造,好多廠家爲了適應性,採用了同一個ClassID,實現一樣的接口來讀取信息。java

咱們的網站是要給到下線使用的,他們有些就會安裝一些身份證讀取軟件,來經過實現一個一樣接口一樣ClassID的ActiveX,達到身份證讀取欺詐的目的。例如clsid:10946843-7507-44FE-ACE8-2B3483D179B7程序員

<form id="form1" runat="server">    
    <OBJECT classid="clsid:10946843-7507-44FE-ACE8-2B3483D179B7"
      id="CVR_IDCard" name="CVR_IDCard" width="0" height="0" >
</OBJECT>

            <script language="javascript" type ="text/javascript">
                    

function Button1_onclick() {
                    var CVR_IDCard = document.getElementById("CVR_IDCard");                    
                    var strReadResult = CVR_IDCard.ReadCard();
                    if(strReadResult == "0")
                    {
ClearForm();
                                              document.all['Name'].value = CVR_IDCard.Name;  
                          document.all['Sex'].value = CVR_IDCard.Sex;    
                          document.all['Nation'].value = CVR_IDCard.Nation;

 

既然欺詐的ActiveX這麼猖獗,而身份證識別儀必須採用ActiveX控件的方式讀取外設,因此咱們須要開發本身的安全的ActiveX控件。api

PS:一開始咱們也以爲從技術上是沒法徹底防範的,從業務規範上的防範會更有效,甚至說安裝個攝像頭防止下面亂來都會有效。不過既然這裏是技術博客,咱們仍是從技術層面作點探討瀏覽器


爲何要從ActiveX調用另外一個ActiveX

既然身份證廠家提供了ActiveX(也就是OCX形式的控件),有的甚至會賣大包提供SDK包,也就是下面DLL的調用說明安全

 

華視電子識別儀驅動目錄↓服務器

image

南京藝數識別儀驅動目錄↓工具

image

若是個人ActiveX調用他們的DLL,固然技術上是簡單,可是由於識別儀廠家的驅動是不一樣的,並且DLL的接口也不盡相同,有的甚至不會提供接口文檔,就會形成通用性不好。網站

 

若是個人ActiveX調用他們的ActiveX,由於你們提供給網頁端都有一樣的接口,因此經過ActiveX調用ActiveX會更加簡單和通用。爲了增長安全性,咱們的ActiveX不會經過網頁進行中轉,而是在內存中直接調用識別儀廠家的ActiveX。spa

var CVR_IDCard = document.getElementById("CVR_IDCard");                    
var strReadResult = CVR_IDCard.ReadCard();
if(strReadResult == "0")
{

document.all['Name'].value = CVR_IDCard.Name;  
document.all['Sex'].value = CVR_IDCard.Sex;    
document.all['Nation'].value = CVR_IDCard.Nation;

識別儀廠家的ActiveX控件有什麼問題?

問題多了去了!!!我簡單分析了BS加載識別儀數據的過程,有多個漏洞點能夠想辦法繞過。

image

1:能夠經過通訊截取的,例如用Fiddler等工具攔截通訊,修改讀取的信息

2:直接在瀏覽器通訊前用js腳本修改數據

3:修改註冊表,將ActiveX控件的指向本身寫的一個僞造控件,服務器就分不清是真控件讀取的仍是僞造控件讀取的

4:大部分識別儀廠家的ActiveX控件都是基於公安部發布的幾個動態連接庫,如termb.dll、sdtapi.dll等,這些dll的接口都是無校驗的。寫一個僞造的termb.dll替換官方的dll,就能夠範圍僞造的信息。

5:從dll讀取usb端口應該還有文章可作,只是過於底層沒有深刻研究

 

還沒算系統鉤子、反編譯破解等高級方法,固然我也不是安全方面的專家,至少將一、二、3等門檻較低的問題修復也就差很少了,爲了達到這個目的,咱們的作法是開發一個ActiveX來調用識別儀廠家的ActiveX控件,並做安全處理(至於中間的安全作法和防禦方法,不在本系列討論內容)。

相關文章
相關標籤/搜索