董羽凡,劉力軍,劉軍
(南京審計大學金審學院,江蘇南京,210033)
隨著互聯網的普及,“彈窗廣告”肆意而為,“彈出窗口”是指當人們瀏覽某網頁時,會自動彈出一個窗口,當用戶試圖關閉該窗口時,往往會有另一個窗口彈出。彈窗幾乎遍布各大網站和諸多應用軟件,海量的彈窗,極大程度上影響了人們的上網和使用體驗。不法分子借助彈窗,傳播低俗、反動、虛假詐騙信息,發布違規的新聞信息的同時,木馬病毒惡意插件也通過彈窗的形式不斷出現。
網絡詐騙層出不窮,越來越多的不法分子通過發布惡意彈窗,誘使人們點擊彈窗,以繳納手續費為由實施詐騙。也有的不良彈窗通過發布低俗、反動、虛假詐騙信息來迫使用戶觀看,影響社會安定與和諧。同時用戶電腦因為這些不良彈窗占用更多內存,影響CPU運行效率。 彈窗“強制式”的呈現及其造成的“視覺污染”,給人們的互聯網生活帶來了極大的不良影響。
本作品在有效攔截各類惡意彈窗的基礎上,讓系統通過神經網絡機器培訓自主識別惡意彈窗。一方面減輕系統負擔,提升用戶的使用體驗,并且通過引入神經網絡實現真正的自主攔截惡意彈窗;另一方面,抵御包含惡意代碼,有效守護用戶個人隱私,提高主機和信息系統的安全防御能力。以上兩方面不僅具有很好的社會效益,同時通過降低網絡詐騙成功率、守護個人隱私,減少用戶損失,也具有一定的經濟效益。
當前對于移動廣告欺詐的研究一般都集中于移動廣告的行為以及其靜態屬性,針對傳統移動端廣告欺詐類型,Feng Dong 等設計實現了FraudDroid,針對傳統移動端廣告欺詐的行為以及其靜態信息,將其總結為九種類別,針對每一種類別制定單獨的檢測方案檢測傳統類型的移動端廣告欺詐。
對于新型的基于內容的廣告欺詐的研究比較少,TonTon Hsien-De Huan等對嵌入廣告的文本進行了研究,他們收集提取了十五萬則廣告的文本其進行深度學習訓練得出一個能夠根據文本分類區分廣告是否是良性的模型;Arunesh Mathur等針對購物網站在用戶界面設計上引導或欺騙用戶消費的“潛規則(Dark Pattern)”,通過分析與評估了11,000個購物網站的約53,000個產品頁面,發現了1,818個欺騙性“潛規則(Dark Pattern)”實例。前者沒有對廣告圖像進行分析,不夠完善;而后者主要是通過社會工程學的人工分析,不具備大批量自動化檢測的條件。現有的對廣告欺詐的檢測技術很難對這種欺詐進行檢測,導致了當前新型廣告欺詐的肆虐猖獗的現狀。
Windows操作系統中所謂句柄是唯一標識某個Windows對象(例如程序實例、窗口、光標、圖標、畫刷和菜單等)的一個32位無符號整數,句柄是Windows對象的唯一標識符,只有有了句柄,程序才能使用與其對應的Widows對象。Windows程序通常通過調用win32API函數來獲取某個Windows對象的句柄。
進程號(PID)是操作系統中的內核用于唯一標識進程的一個數值,簡而言之就是進程的名字,當檢測到惡意彈窗或者惡意廣告出現的時候,通過獲取惡意彈窗或惡意廣告的進程號將惡意彈窗和惡意廣告關閉。
在整個系統運行的過程中,可能因為人為或系統的原因導致系統被關閉,這就需要一個守護程序能夠實時保護系統。守護程序具有自啟功能且實時監控系統進程,當發現軟件進程被關閉后,重新啟動攔截程序。
機器學習有三種傳統的機器學習算法構建分類器模型,分別為邏輯回歸(Logistic Regression)、支持向量機(SVM)、隨機森林(Random Forest)。
邏輯回歸模型(LogisticRegression,LR)對具有兩個可能結果的分類問題的概率進行建模,它是針對線性回歸模型的擴展,主要思想是通過使用邏輯回歸函數來計算給定自變量的后驗概率,根據后驗概率給樣本進行分類。支持向量機(Support Vector Machine, SVM)是一種 監督學習算法,可用于回歸和分類任務。SVM算法的目的是在N(N是特征數)維空間中找到一個能夠清晰的將數據點分開的超平面。為了分離兩類數據點,可以選擇許多可能的超平面,而目標是找到一個具有最大余量(邊距)的超平面,使得這個超平面與兩個類別的數據點之間的距離最大,這樣的超平面稱作最優分界。隨機森林(Random Forest)以決策樹為基礎,通過構造多棵決策樹形成“森林”。將輸入數據放入森林中的每棵樹上,決策樹是在一個數據集的不同部分上進行訓練的,每顆樹都會給出一個分類結果,我們將該結果稱為這棵樹的“投票”。隨機森林算法通過平衡多個深決策樹的分類誤差使得模型的最終性能得到提高。
在機器學習中我們期待學習出一個表現全面且穩定的模型,但現實中往往只能得到多個弱分類模型,即僅在某些方面表現良好的模型。集成學習34方法通過組合多種算法來獲得比單獨使用其中任何一種算法更好的性能。那么使用集成學習思想的模型,其子模型采用不同的特征用于訓練,可以在數據上獲得不同角度的表達能力,進而結合不同子模型的優點。集成學習不屬于一種獨立的機器學習算法,更多的是強調一種思想,通過融合弱的學習器來提高整體的學習能力以更好的完成任務。
Visual Studio是由微軟推出的代碼編程工具,而本作品使用的Visual Studio 2017有著更多的趣味性,支持C#、C++、Python、等絕大多數的主流代碼語言。由于攔截窗口涉及到windows底層,因此這個部分可以通過C++來實現,界面美化方面則通過C#實現,而神經網絡方面是通過Python實現,最后通過各個部分產生的文檔來同步各個功能模塊來實現有機結合。
3.2.1 系統框架結構
系統框架圖如圖1所示。

圖1 系統框架結構圖
本作品將Windows下的所有窗口都定義為彈窗,然后對應用程序窗口進行實時監測,在實現保護用戶信息安全的同時對含有影響社會安定內容的窗口進行審計。本作品預期設置兩個列表—正常應用程序列表、應用彈窗攔截列表,用于存放彈窗的標題與句柄等信息,實現對彈窗的分類,那么彈窗下一次出現時,系統就可以根據它所在的列表來進行操作,從而達到過濾不良彈窗的效果。為防止攔截進程被惡意關閉,增加守護進程應用程序,并寫入注冊表,實現自啟功能,來實現實時監控的功能。實現神經網絡機器培訓對廣告的自主識別,最后將靜態屬性與動作融入到機器學習當中來提高效率。
3.2.2 軟件功能結構
以下為本系統的功能結構圖(圖2),以及對各功能的解釋定義。

圖2 功能結構圖
主要功能:
(1)抗“誘餌”式反攔截功能:可對“誘餌”彈窗進行攔截,再次出現相同標題的彈窗時直接關閉;若再次出現的彈窗標題不同,則作為一個新彈窗進行攔截。而神經網絡學習就可惡意通過自主識別廣告,來對新的彈窗進行自主攔截,避免了頻繁攔截新彈窗使得軟件本身影響了用戶的體驗。
(2)用戶自定義攔截策略:當軟件通過自主識別攔截廣告時,不能完全自主定義,增加緩沖詢問條,用戶可以默認或者拒接加入攔截列表。若用戶把需要的彈窗加入了攔截列表中或要使用曾經攔截過的彈窗,則可通過主程序將彈窗相關參數進行移除。該策略中,移除后的彈窗可以彈出,不再被攔截。
(3)無感化攔截:對于重復出現的彈窗,運用“移動+關閉”的攔截技術,在彈窗還未顯示時,就獲取到彈窗坐標,通過改變窗口位置,再將其關閉。
(4)守護的保護機制:當攔截模塊自身崩潰或惡意的關閉時,守護機制能夠將攔截模塊重新打開,確保攔截模塊可靠運行。
(5)審計功能:對含有黃、賭、毒以及詐騙等一系列影響社會安定內容的彈窗進行截圖審計,為后期與有關部門聯動做準備。
3.2.3 主要功能模塊及實現
3.2.3.1 主函數程序

圖3 主函數流程圖
讀取配置文件(彈窗攔截列表,也就是軟件自主識別認定為惡意彈窗的彈窗標題列表)的內容。
根據內容布置控件,就是陳列出彈窗攔截列表中的標題并在后面一一追加移除按鈕。
當需要移除相應的控件時,將需要移除的顯示框和對應的按鈕移除界面,然后再將惡意彈窗列表中需要刪除的彈窗內容全部刪除。
該部分獲取到攔截模塊產生的文檔之后,根據文檔內容利用C#進行布控。
3.2.3.2 廣告攔截程序

圖4 廣告攔截流程圖
獲取當前所有窗口句柄、標題,查看實時的窗口標題是否在彈窗攔截列表中(如果在該列表中,說明彈窗是惡意的),是則關閉,否就接著獲取實時窗口信息然后判斷。
關閉:根據彈窗的標題,獲取該標題實時的句柄,然后進行關閉。
判斷:我們通過邏輯回歸模型能得到分類結果,接著我們將彈窗的每一個部分放入模型進行分類,彈窗的每一個部分是一棵樹,然后彈窗各個部分構成隨機森林,每一棵“決策樹”進行投票,根據投票結果定義該彈窗是否是惡意的,然后放入到對應的列表中。
3.2.3.3 守護機制程序
遍歷當前所有進程號,如果有檢測進程,跳出來,如果
遍歷結束了還沒有找到,則繼續遍歷。

圖5 守護程序流程圖
我們不能一開始就自己打開彈窗攔截程序,所以要先判斷用戶是否有開啟過主程序,然后再進行守護。
當發現主程序以及被打開過,就會開始守護彈窗檢測程序,此時就會進入檢測彈窗攔截程序這個循環,不再去檢測主程序了,那么用戶可以隨意開啟關閉主程序。如果彈窗攔截未開啟,則重啟彈窗攔截程序,如果正常運行,則進行一個守護間斷(停止一分鐘,作為一個守護間隔,避免過多占用資源)。
隨著互聯網行業的蓬勃發展,彈窗爆發式增長,其中存在的安全威脅成為了一大關注熱點。本課題基于彈窗帶來的信息安全問題,研究了彈窗攔截技術。通過多種不同的攔截策略對不同的廣告彈窗進行攔截,對于提升用戶計算機瀏覽體驗;降低不法分子借助彈窗,侵犯用戶隱私,傳播非法信息的可能;防止木馬病毒通過廣告彈窗進行傳播具有一定意義。為了給用戶更好的體驗,著重研究如何將靜態屬性以及動作融入到機器學習當中,使得軟件自主識別具有更高的效率。