2019年密碼與安全新技術講座-課程總結報告

2019年密碼與安全新技術講座-課程總結報告

課程講座總結

網絡(web)安全與內容安全


信息化的發展使得信息安全愈加重要。在網絡中因爲存在威脅方-防禦方技術、成本、風險、主題的非對稱性,維護信息安全的難度很是之高,沒有哪個系統敢說本身是絕對安全的,但起碼應該對常見的威脅作出應對,避免系統被很容易的攻破。

php

目前WEB應用中存在不少漏洞,常見的WEB漏洞以下:html

SQL注入攻擊

無論用什麼語言編寫的Web應用,它們都用一個共同點,具備交互性而且多數是數據庫驅動。在網絡中,數據庫驅動的Web應用隨處可見,由此而存在的SQL注入是影響企業運營且最具破壞性的漏洞之一。

SQL注入攻擊是經過將惡意的 Sql 查詢或添加語句插入到應用的輸入參數中,再在後臺 Sql 服務器上解析執行進行的攻擊。

黑客們能經過SQL注入進行攻擊基於一種SQL語言的技術基礎——構造動態字符串。這種技術能夠歸納爲如下幾點:node

  1. SQL命令可查詢、插入、更新、刪除等,命令的串接。而以分號字符爲不一樣命令的區別。(本來的做用是用於SubQuery或做爲查詢、插入、更新、刪除……等的條件式)
  2. SQL命令對於傳入的字符串參數是用單引號字符所包起來。(但連續2個單引號字符,在SQL數據庫中,則視爲字符串中的一個單引號字符)
  3. SQL命令中,能夠注入註解(連續2個減號字符 -- 後的文字爲註解,或「/」與「/」所包起來的文字爲註解)
  4. 所以,若是在組合SQL的命令字符串時,未針對單引號字符做轉義處理的話,將致使該字符變量在填入命令字符串時,被惡意竄改本來的SQL語法的做用。

具體來講,在應用程序中如有下列情況,則可能應用程序正暴露在SQL Injection的高風險狀況下:web

  • 在應用程序中使用字符串聯結方式或聯合查詢方式組合SQL指令。
  • 在應用程序連接數據庫時使用權限過大的帳戶(例如不少開發人員都喜歡用最高權限的系統管理員帳戶(如常見的root,sa等)鏈接數據庫)。
  • 在數據庫中開放了沒必要要但權力過大的功能(例如在Microsoft SQL Server數據庫中的xp_cmdshell延伸存儲程序或是OLE Automation存儲程序等)
  • 太過於信任用戶所輸入的數據,未限制輸入的特殊字符,以及未對用戶輸入的數據作潛在指令的檢查。

SQL注入攻擊可經過如下措施預防:算法

  1. 在設計應用程序時,徹底使用參數化查詢(Parameterized Query)來設計數據訪問功能。
  2. 在組合SQL字符串時,先針對所傳入的參數加入其餘字符(將單引號字符前加上轉義字符)。
  3. 若是使用PHP開發網頁程序的話,需加入轉義字符之功能(自動將全部的網頁傳入參數,將單引號字符前加上轉義字符)。
  4. 使用php開發,可寫入html特殊函數,可正確阻擋XSS攻擊。
  5. 其餘,使用其餘更安全的方式鏈接SQL數據庫。例如已修正過SQL注入問題的數據庫鏈接組件,例如ASP.NET的SqlDataSource對象或是 LINQ to SQL。
  6. 使用SQL防注入系統。
  7. 加強WAF的防護力

XSS跨站腳本攻擊

XSS攻擊一般指的是經過利用網頁開發時留下的漏洞,經過巧妙的方法注入惡意指令代碼到網頁,使用戶加載並執行攻擊者惡意製造的網頁程序。這些惡意網頁程序一般是JavaScript,但實際上也能夠包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻擊成功後,攻擊者可能獲得更高的權限(如執行一些操做)、私密網頁內容、會話和cookie等各類內容。


經過XSS攻擊,攻擊者期待達到如下目的:sql

  • 盜用cookie,獲取敏感信息。
  • 利用植入Flash,經過crossdomain權限設置進一步獲取更高權限;或者利用Java等獲得相似的操做。
  • 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻擊)用戶的身份執行一些管理動做,或執行一些通常的如發微博、加好友、發私信等操做。
  • 利用可被攻擊的域受到其餘域信任的特色,以受信任來源的身份請求一些平時不容許的操做,如進行不當的投票活動。
  • 在訪問量極大的一些頁面上的XSS能夠攻擊一些小型網站,實現DDoS攻擊的效果。

避免XSS最根本的方法是關閉瀏覽器的Javascript選項,但這可能使一些網頁沒法正確執行,通常來講使用更新比較頻繁的瀏覽器能得到更好的安全保證。從技術手段上來講,避免XSS攻擊的方法主要是將用戶所提供的內容進行過濾,許多語言都有提供對HTML的過濾:shell

  • PHP的htmlentities()或是htmlspecialchars()。
  • Python的cgi.escape()。
  • ASP的Server.HTMLEncode()。
  • ASP.NET的Server.HtmlEncode()或功能更強的Microsoft Anti-Cross Site Scripting Library
  • Java的xssprotect (Open Source Library)。
  • Node.js的node-validator。

CSRF跨站請求僞造

跨站請求僞造(英語:Cross-site request forgery),也被稱爲 one-click attack 或者 session riding,一般縮寫爲 CSRF 或者 XSRF, 是一種挾制用戶在當前已登陸的Web應用程序上執行非本意的操做的攻擊方法。[1] 跟跨網站腳本(XSS)相比,XSS 利用的是用戶對指定網站的信任,CSRF 利用的是網站對用戶網頁瀏覽器的信任。是攻擊者經過一些技術手段欺騙用戶的瀏覽器去訪問一個本身曾經認證過的網站並運行一些操做(如發郵件,發消息,甚至財產操做如轉帳和購買商品)。因爲瀏覽器曾經認證過,因此被訪問的網站會認爲是真正的用戶操做而去運行。這利用了web中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發自某個用戶的瀏覽器,卻不能保證請求自己是用戶自願發出的。數據庫

僞基站詐騙

僞基站,又稱假基站、假基地臺,是一種利用GSM單向認證缺陷的非法無線電通訊設備,主要由主機和筆記本電腦組成,可以搜取以其爲中心、必定半徑範圍內的GSM移動電話信息,並任意冒用他人手機號碼強行向用戶手機發送詐騙、推銷等垃圾短信,一般安放在汽車或者一個比較隱蔽的地方發送。僞基站運行時,用戶手機信號被強制鏈接到該設備上,沒法鏈接到公用電信網絡,以影響手機用戶的正常使用。編程

思考

張健毅老師的課生動簡潔,爲咱們講述了當前針對各類安全漏洞的攻擊方式,更是結合很多實際的例子加深咱們的認識。其中震網病毒和XCodeGhost給我很深的印象。現在咱們使用的手機、電腦、各類工業設備,核心部分從源頭上說都是國外掌握,像win10系統市場佔有率早已超過50%,但咱們對其核心代碼一無所知,也很難對可能的安全漏洞進行測試和防禦;像咱們平常使用的編譯器visual studio、XCode等也都不是開源,它們在編譯中到底有沒有作什麼別的咱們也無從得知。

尤爲是我國許多機密要害部分,使用這些不明不白的產品難保不會有什麼安全問題,核心技術仍是掌握在本身手中才能放心,操做系統等的國產化仍是儘快推動爲上。xcode

量子密碼


量子與量子態

微觀世界的某些物理量不能連續變化而只能取某些 分立值,相鄰分立值的差稱爲該物理量的一個量子 。

在量子力學裏,量子態(quantum state)指的是量子系統的狀態。態矢量能夠用來抽象地表示量子態。採用狄拉克標記,態矢量表示爲右矢|?>;其中,在符號內部的?能夠是任何符號,字母,數字,或單字。例如,在計算氫原子能譜時,能級與主量子數n有關,因此,每一個量子態的態矢量能夠表示爲 |?>。

通常而言,量子態能夠是純態或混合態。上述案例是純態。混合態是由不少純態組成的機率混合。不一樣的組合可能會組成一樣的混合態。當量子態是混合態時,能夠用密度矩陣作數學描述,這密度矩陣實際給出的是機率,不是密度。純態也能夠用密度矩陣表示。

哥本哈根詮釋以操做定義的方法對量子態作定義:量子態能夠從一系列製備程序來辨認,即這程序所製成的量子系統擁有這量子態。例如,使用z-軸方向的施特恩-格拉赫實驗儀器,能夠將入射的銀原子束,依照自旋的z-份量S_z分裂成兩道,一道的S_z爲上旋,量子態爲|↑>或|Z+,另外一道的S_z爲下旋,量子態爲|↓>或|Z->,這樣,能夠製備成量子態爲|↑>的銀原子束,或量子態爲|↓>的銀原子束。銀原子自旋態矢量存在於二維希爾伯特空間。對於這純態案例,相關的態矢量 |ψ= α|↑+ β|↓>是二維復值矢量 (α , β),長度爲1。

在測量一個量子系統以前,量子理論一般只給出測量結果的機率分佈,這機率分佈的形式徹底由量子態、相關的可觀察量來決定。對於純態或混合態,均可以從密度矩陣計算出這機率分佈。

另外,還有不少種不一樣的量子力學詮釋。根據實在論詮釋,一個量子系統的量子態完整描述了這個量子系統。量子態囊括了全部關於這系統的描述。實證詮釋闡明,量子態只與對於量子系統作觀察所獲得的實驗數據有關。按照系綜詮釋,量子態表明一個系綜的在一樣情況下製備而成的量子系統,它不適用於單獨量子系統。

量子態的可疊加性帶來一系列特殊性質 :

  • 量子計算的並行性,強大的計算能力。
  • 測不許原理,未知量子態不可準確測量。
  • 不可克隆定理,未知量子態不可克隆。
  • 對未知量子態的測量可能會改變量子態。

量子態的測量

  • 每一個力學量都對應一個厄米算符(矩陣)
  • 測量某個力學量時,測量結果爲此力學量對應厄米 算符的本徵值(特徵值)
  • 測量後量子態塌縮到此本徵值對應的本徵態(特徵向量)

提升量子密碼性能

  • 提升效率:可重用基、糾纏加強、雙光子、雙探測器
  • 提升抗干擾能力:無消相干子空間、量子糾錯碼
  • 提升實際系統抗攻擊能力:誘騙態、設備無關

感想

量子力學與相對論一塊兒被稱爲現代物理學的兩大支柱,能夠解釋微觀系統內的物理現象,從我對量子力學的瞭解來看,量子力學堪稱是爲人類打開了新世界的大門。

就我我的對物理的興趣來講,從大學以前的有點感興趣,到大學由於種種緣由的徹底不感興趣,再到如今對量子力學有初步瞭解後,到了很是感興趣的程度。科學技術是第一輩子產力,科技的發展已經大幅改變了人類的生活。科技發展到今天,有可能對人類生活方式產生根本性影響的在我看來只有兩點:一是對原子能的利用,二是對量子力學的研究與應用。 對量子力學的初步瞭解讓我感到震驚,量子力學彷彿存在了無限的可能性。

基於深度學習的密碼分析與設計初探


機器學習的分類

1.有監督學習
監督學習涉及一組標記數據。計算機能夠使用特定的模式來識別每種標記類型的新樣本。監督學習的兩種主要類型是分類和迴歸。在分類中,機器被訓練成將一個組劃分爲特定的類。

2.無監督學習
在無監督學習中,數據是無標籤的。因爲大多數真實世界的數據都沒有標籤,這些算法特別有用。無監督學習分爲聚類和降維。聚類用於根據屬性和行爲對象進行分組。

3.強化學習
強化學習研究學習器在與環境的交互過程當中,如何學習到一種行爲策略,以最大化獲得的累積獎賞。與前面咱們提到的其它學習問題的不一樣在於,強化學習處在一個對學習器的行爲進行執行和評判的環境中:環境將執行學習器的輸出,發生變化,而且反饋給學習器一個獎賞值;同時學習器的目標並不在於最大化當即得到的獎賞,而是最大化長期累積的獎賞。

機器學習的步驟

  1. 選擇一個合適的模型,這一般須要依據實際問題而定,針對不一樣的問題和任務須要選取恰當的模型,模型就是一組函數的集合。
  2. 判斷一個函數的好壞,這須要肯定一個衡量標準,也就是咱們一般說的損失函數(Loss Function),損失函數的肯定也須要依據具體問題而定,如迴歸問題通常採用歐式距離,分類問題通常採用交叉熵代價函數。
  3. 找出「最好」的函數,如何從衆多函數中最快的找出「最好」的那一個,這一步是最大的難點,作到又快又準每每不是一件容易的事情。經常使用的方法有梯度降低算法,最小二乘法等和其餘一些技巧(tricks)。
    學習獲得「最好」的函數後,須要在新樣本上進行測試,只有在新樣本上表現很好,纔算是一個「好」的函數。

深度學習

深度學習的實質,是經過構建具備不少隱層的機器學習模型和海量的訓練數據,來學習更有用的特徵,從而最終提高分類或預測的準確性。所以,「深度模型」是手段,「特徵學習」是目的。區別於傳統的淺層學習,深度學習的不一樣在於:1)強調了模型結構的深度,一般有5層、6層,甚至10多層的隱層節點;2)明確突出了特徵學習的重要性,也就是說,經過逐層特徵變換,將樣本在原空間的特徵表示變換到一個新特徵空間,從而使分類或預測更加容易。與人工規則構造特徵的方法相比,利用大數據來學習特徵,更可以刻畫數據的豐富內在信息。

<deep learning採用了神經網絡類似的分層結構,系統由包括輸入層、隱層(多層)、輸出層組成的多層網絡,只有相鄰層節點之間有鏈接,同一層以及跨層節點之間相互無鏈接,每一層能夠看做是一個logistic regression模型;這種分層結構,是比較接近人類大腦的結構的。


深度學習與密碼分析

1.基於卷積神經網絡的側信道攻擊:

  • TemplateAttack
  • MachineLearning
  • DeepLearning

2.基於循環神經網絡的明文破譯:


3.基於生成對抗網絡的口令破解:


4.基於深度神經網絡的密碼基元識別:


深度學習與密碼設計

兩大重點科學問題包括「組件化可變密碼算法設計與安全性評估」和「密文可編程數據安全存儲與計算」。所以將來對於新密碼算法的設計需求將與日劇增,然而目前密碼算法的設計還停留在人工設計階段,較爲耗時耗力,難以適應將來對密碼算法設計的需求。

生成對抗網絡GAN(Generative Adversarial Network):


機器生成密碼算法的思路:


感想

咱們應該正確認識AI可以在當前取得的成就,才能夠解決更加複雜的問題。咱們不能忽略:對於天然語言理解,雖然通過了數十年的發展,依然沒有人工智能系統能夠作到徹底正確地理解人類的語言(包括語音識別和機器翻譯);在機器人領域,即便工業機器人發展迅速,咱們依然沒有看到具備常識和推理能力的智能家庭機器人;在計算機視覺領域,即便咱們在人臉識別和圖片分類上取得了不小的成就,可是對於關係理解和完整的場景認知,如今系統能作到的還頗有限。

正如卡內基梅隴大學機器學習系Alex Smola教授認爲:AI技術在將來確實有可能對流水線工人、卡車司機、保潔員等相對低技能要求的工種形成衝擊,然而解決的辦法只能是提升整個社會的教育水平。其次,我認爲社會也在對人工智能技術的發展產生各類積極的約束:譬如,用戶對於技術的安全性和穩定性的要求;用戶對於數據隱私的要求;用戶對於產品的道德約束。總而言之,當前是人工智能發展的一個使人興奮的時期,機器學習技術對於整我的類的發展,也是具備不可估量的潛力。咱們應該正視科學技術發展的進步,理性看待所取得的結果。

信息隱藏


信息隱藏是指將特定用途的消息隱蔽地藏於其餘載體(Cover)中,使得它們難以被發現或者消除,經過可靠提取隱藏的信息,實現隱蔽通訊、內容認證或內容保護功能。信息隱藏的技術手段主要包括水印、可視密碼、隱寫等。

魯棒水印

魯棒水印是重要的數字產權管理與安全標識技術之一, 指將與數字媒體版權或者購買者有關的信息嵌入數字 媒體中,使攻擊者難以在載體不遭到顯著破壞狀況下 消除水印,而受權者能夠經過檢測水印實現對版權所 有者或者內容購買者等表示信息的認定。

相比於其餘隱藏技術,魯棒水印有如下兩個特色:

  • 對於覆蓋信號所作的改變應該不會被人類的感官察覺到
  • 即便隨後改變了水印層,也應該能夠恢復隱藏的信息

從根本上說,魯棒水印是對應於全部信息隱藏技術的優點與穩健性與嵌入率權衡的不一樣折衷。早在1954年就有了早期的魯棒水印,20世紀90年代,當娛樂業面臨愈來愈多的盜版行爲時,技術發展更爲迅速。 魯棒水印已被視爲補充傳統基於密碼學的內容保護的候選技術。


可視密碼

可視密碼技術是Naor和Shamir於1994年首次提出的,其主要特色是恢復祕密圖像時不須要任何複雜的密碼學計算,而是以人的視覺便可將祕密圖像辨別 出來。其作法是產生n張不具備任何意義的膠片,任取其中t張膠片疊合在一塊兒便可還原出隱藏在其中的祕密信息。可視密碼方案其實是一種祕密共享方案,即便是一個具備無窮計算能力的攻擊者,也不能在擁有的子祕密數量少於一個給定值時得到關於祕密圖像的任何信息。


隱寫

隱寫是基於信息隱藏的隱蔽通訊或者隱蔽存儲方法,將祕密消息難以感知地隱藏在內容可公開的載體中,保護保密通訊或者保密存儲這些行爲事實。

隱寫的信息一般用一些傳統的方法進行加密,而後用某種方法修改一個「假裝文本」(covertext),使其包含被加密過的消息,造成所謂的「隱祕文本」(stegotext)。例如,文字的大小、間距、字體,或者掩飾文本的其餘特性能夠被修改來包含隱藏的信息。只有接收者知道所使用的隱藏技術,纔可以恢復信息,而後對其進行解密。

隱寫包括多種方法,包括:

  • 自適應隱寫
  • LSB嵌入
  • 矩陣嵌入

隱寫分析

隱寫分析(steganalysis)是指在已知或未知嵌入算法的狀況下,從觀察到的數據檢測判斷其中是否存在祕密信息,分析數據量的大小和數據嵌入的位置,並最終破解嵌入內容的過程。
隱寫分析的發展歷程:

  1. Li Bin的「Auto-Encoder」,比RichModel還差14%-15% 。
  2. Qian系列:系統地提出了「GNCNN」,真正開創了CNN應用於Steganalysis,比RichModel差2%-3%。
  3. XuNet系列,第一層卷積層後用了Absolute(ABS)層以利用殘差圖像符號的對稱性,激活函數選取上,部分層用tanh函數。
  4. NiJQ最新:YeNet,新結構。
  5. XuGuanShuo:Res on J-UNIWARD,新的網絡結構,比featur-based method好一點(在low payload時不明顯)。

通常性的運用深度學習進行隱寫分析的過程以下:


感想

信息隱藏這方面的內容在以前的學會或者生活中其實一直被我忽視了,但如今想一想信息隱藏其實佔有很重要的地位,有很大的發展空間和應用前景,首先就是版權保護方面,數字水印技術若是能獲得有效發展和應用,對於版權法追權十分重要;當今互聯網的發展情況不管是雲存儲仍是各類新媒體的出現都位隱藏信息的傳播提供了十分便捷的途徑,這也爲咱們對有害隱藏信息的檢測提出了更高的要求。更廣義的信息隱藏,如以前出現過的植入xcode和易語言編譯器的後門程序,若是不能被有效檢測將帶來很大的安全威脅,再好比咱們從網上下載資料,會不會不知不覺就成爲了病毒或者違法信息的傳播者?

區塊鏈


狹義來說,區塊鏈是一種按照時間順序將數據區塊以順序相連的方式組合成的一種鏈式數據結構,並以密碼學方式保證的不可篡改和不可僞造的分佈式帳本。

廣義來說,區塊鏈技術是利用塊鏈式數據結構來驗證與存儲數據、利用分佈式節點共識算法來生成和更新數據、利用密碼學的方式保證數據傳輸和訪問的安全、利用由自動化腳本代碼組成的智能合約來編程和操做數據的一種全新的分佈式基礎架構與計算方式。

區塊鏈架構模型

通常說來,區塊鏈系統由數據層、網絡層、共識層、激勵層、合約層和應用層組成。 其中,數據層封裝了底層數據區塊以及相關的數據加密和時間戳等基礎數據和基本算法;網絡層則包括分佈式組網機制、數據傳播機制和數據驗證機制等;共識層主要封裝網絡節點的各種共識算法;激勵層將經濟因素集成到區塊鏈技術體系中來,主要包括經濟激勵的發行機制和分配機制等;合約層主要封裝各種腳本、算法和智能合約,是區塊鏈可編程特性的基礎;應用層則封裝了區塊鏈的各類應用場景和案例。該模型中,基於時間戳的鏈式區塊結構、分佈式節點的共識機制、基於共識算力的經濟激勵和靈活可編程的智能合約是區塊鏈技術最具表明性的創新點。


比特幣

比特幣也是區塊鏈支付系統和虛擬計價工具,因爲其採用密碼技術來控制貨幣的生產和轉移,而沒有中央的發行機構,沒法任意增發,交易在全球網絡中運行,有特殊的隱祕性,加上沒必要通過第三方金融機構,所以獲得愈來愈普遍的應用,也成了非法交易的介質。用戶利用我的計算機和智能手機中的加密錢包軟件,無需任何銀行、信用卡、在線支付公司等中介機構,可隨時隨地在網絡上直接交換物品、服務。 根據劍橋大學2017年的研究,全球有多達580萬個加密錢包活躍用戶,其中大多數使用比特幣。同時,有觀點認爲,比特幣技術獲得了普遍的承認和使用,令人類迎來了區塊鏈時代。

新增的數據塊總能連接到上一個區塊,即整條區塊鏈的尾部。比特幣點對點網絡將全部的交易歷史都存儲在「區塊鏈」(blockchain)中,因此區塊鏈能夠看做記錄着比特幣交易的帳本。區塊鏈是一羣分散的客戶端節點,並由全部參與者組成的分佈式數據庫,是對全部比特幣交易歷史的記錄。中本聰預計,當數據量增大以後,用戶端但願這些數據並不所有存儲本身的節點中。爲了實現這一目標,他採用引入散列函數機制。這樣客戶端將可以自動剔除掉那些本身永遠用不到的部分,比方說極爲早期的一些比特幣交易記錄。

感想

技術改變世界,毫不是一句空話。
編程做爲一種技術,能夠說是改變世界中成本最低的一種方式。
但技術永遠是雙刃劍,像區塊鏈技術能夠大大方便人們的生活,卻也爲不法分子的違法活動提供了方便。
做爲技術的開發者或持有者,咱們要堅守道德底線,幫助技術在對社會有益的方向發揮做用。

安全漏洞利用與挖掘


在計算機的全部設備中,硬件設備是最容易受到網絡漏洞的攻擊和破壞的,例如防火牆、路由器等。不一樣的設備所產生的漏洞類型有所不一樣,產生漏洞的緣由也有較大的差別。計算機網絡安全漏洞還有一個顯著的特色,就是具備必定的時效性,從計算機開始運行起,網絡中就會不斷產生新的漏洞,所以在平常的使用過程當中要不斷更新補丁或對系統進行升級,只有這樣纔能有效的增強對漏洞的防範。與此同時,一些已經進行修補的漏洞有可能會發生新的變化,所以也須要引發注意。

安全漏洞分類

** 網絡中的協議漏洞
就拿最咱們應用最普遍的TCP/IP協議組來講吧,它是置於可信的環境之下設計的,只考慮到網絡互連和開放性問題,而沒有過多的考慮安全性。形成了TCP/IP協議組自己在應用方面並不安全,所以致使基於TCP/IP協議的一系列網絡服務安全性及其脆弱。
應用軟件系統的漏洞
任何一款軟件因爲設計上的缺陷都或多或少存在必定的漏洞,這種漏洞能夠形成系統自己的脆弱。一般該漏洞分爲兩種:一是因爲操做系統自己設計缺陷形成的安全漏洞,並影響到運行在該系統上的應用程序;二是應用程序自己設計漏洞。
配置不當引發的漏洞 **
因爲安全策略設置的不完整,系統有時候會在安全策略未發揮做用的時候運行,而管理人員很難發現,直到系統出現問題纔有所覺察。

漏洞挖掘技術

1.人工分析

人工分析是一種灰盒分析技術。針對被分析目標程序,手工構造特殊輸入條件,觀察輸出、目標狀態變化等,得到漏洞的分析技術。輸入包括有效的和無效的輸入,輸出包括正常輸出和非正常輸出。非正常輸出是漏洞出現的前提,或者就是目標程序的漏洞。非正常目標狀態的變化也是發現漏洞的預兆,是深刻挖掘的方向。人工分析高度依賴於分析人員的經驗和技巧。人工分析多用於有人機交互界面的目標程序,Web漏洞挖掘中多使用人工分析的方法。

2.Fuzzing技術

Fuzzing技術是一種基於缺陷注入的自動軟件測試技術,它利用黑盒分析技術方法,使用大量半有效的數據做爲應用程序的輸入,以程序是否出現異常爲標誌,來發現應用程序中可能存在的安全漏洞。半有效數據是指被測目標程序的必要標識部分和大部分數據是有效的,有意構造的數據部分是無效的,應用程序在處理該數據時就有可能發生錯誤,可能致使應用程序的崩潰或者觸發相應的安全漏洞。

根據分析目標的特色,Fuzzing能夠分爲三類:

  1. 動態Web頁面Fuzzing,針對ASP、PHP、Java、Perl等編寫的網頁程序,也包括使用這類技術構建的B/S架構應用程序,典型應用軟件爲HTTP Fuzz;

  2. 文件格式Fuzzing,針對各類文檔格式,典型應用軟件爲PDF Fuzz;

  3. 協議Fuzzing,針對網絡協議,典型應用軟件爲針對微軟RPC(遠程過程調用)的Fuzz。

Fuzzer軟件輸入的構造方法與黑盒測試軟件的構造類似,邊界值、字符串、文件頭、文件尾的附加字符串等都可以做爲基本的構造條件。Fuzzer軟件能夠用於檢測多種安全漏洞,包括緩衝區溢出漏洞、整型溢出漏洞、格式化字符串和特殊字符漏洞、競爭條件和死鎖漏洞、SQL注入、跨站腳本、RPC漏洞攻擊、文件系統攻擊、信息泄露等。

與其它技術相比,Fuzzing技術具備思想簡單,容易理解、從發現漏洞到漏洞重現容易、不存在誤報的優勢。同時它也存在黑盒分析的所有缺點,並且具備不通用、構造測試周期長等問題。

經常使用的Fuzzer軟件包括SPIKE Proxy、Peach Fuzzer Framework、Acunetix Web Vulnerability Scanner的HTTP Fuzzer、OWASP JBroFuzz、WebScarab等。

3.補丁比對技術

補丁比對技術主要用於黑客或競爭對手找出軟件發佈者已修正但未尚公開的漏洞,是黑客利用漏洞前常用的技術手段。

安全公告或補丁發佈說明書中通常不指明漏洞的準確位置和緣由,黑客很難僅根據該聲明利用漏洞。黑客能夠經過比較打補丁先後的二進制文件,肯定漏洞的位置,再結合其餘漏洞挖掘技術,便可瞭解漏洞的細節,最後能夠獲得漏洞利用的攻擊代碼。

簡單的比較方法有二進制字節和字符串比較、對目標程序逆向工程後的比較兩種。第一種方法適用於補丁先後有少許變化的比較,經常使用的於字符串變化、邊界值變化等致使漏洞的分析。第二種方法適用於程序可被反編譯,且可根據反編譯找到函數參數變化致使漏洞的分析。這兩種方法都不適合文件修改較多的狀況。

複雜的比較方法有Tobb Sabin提出的基於指令類似性的圖形化比較和Halvar Flake提出的結構化二進制比較,能夠發現文件中一些非結構化的變化,如緩衝區大小的改變,且以圖形化的方式進行顯示。

經常使用的補丁比對工具備Beyond Compare、IDACompare、Binary Diffing Suite(EBDS)、BinDiff、NIPC Binary Differ(NBD)。此外大量的高級文字編輯工具也有類似的功能,如Ultra Edit、HexEdit等。這些補丁比對工具軟件基於字符串比較或二進制比較技術。

4.靜態分析技術

靜態分析技術是對被分析目標的源程序進行分析檢測,發現程序中存在的安全漏洞或隱患,是一種典型的白盒分析技術。它的方法主要包括靜態字符串搜索、上下文搜索。靜態分析過程主要是找到不正確的函數調用及返回狀態,特別是可能未進行邊界檢查或邊界檢查不正確的函數調用,可能形成緩衝區溢出的函數、外部調用函數、共享內存函數以及函數指針等。

對開放源代碼的程序,經過檢測程序中不符合安全規則的文件結構、命名規則、函數、堆棧指針能夠發現程序中存在的安全缺陷。被分析目標沒有附帶源程序時,就須要對程序進行逆向工程,獲取相似於源代碼的逆向工程代碼,而後再進行搜索。使用與源代碼類似的方法,也能夠發現程序中的漏洞,這類靜態分析方法叫作反彙編掃描。因爲採用了底層的彙編語言進行漏洞分析,在理論上能夠發現全部計算機可運行的漏洞,對於不公開源代碼的程序來講每每是最有效的發現安全漏洞的辦法。

但這種方法也存在很大的侷限性,不斷擴充的特徵庫或詞典將形成檢測的結果集大、誤報率高;同時此方法重點是分析代碼的「特徵」,而不關心程序的功能,不會有針對功能及程序結構的分析檢查。

5.動態分析技術

動態分析技術起源於軟件調試技術,是用調試器做爲動態分析工具,但不一樣於軟件調試技術的是它每每處理的是沒有源代碼的被分析程序,或是被逆向工程過的被分析程序。

動態分析須要在調試器中運行目標程序,經過觀察執行過程當中程序的運行狀態、內存使用情況以及寄存器的值等以發現漏洞。通常分析過程分爲代碼流分析和數據流分析。代碼流分析主要是經過設置斷點動態跟蹤目標程序代碼流,以檢測有缺陷的函數調用及其參數。數據流分析是經過構造特殊數據觸發潛在錯誤。

比較特殊的,在動態分析過程當中能夠採用動態代碼替換技術,破壞程序運行流程、替換函數入口、函數參數,至關於構造半有效數據,從而找到隱藏在系統中的缺陷。

常見的動態分析工具備SoftIce、OllyDbg、WinDbg等。 

感想

各種計算機產品和技術不斷深刻人們的生活,其可能的安全漏洞和安全風險也應獲得相應的重視。計算機安全風險,小到危害我的隱私,大到危害國家安全,咱們不得不慎重對待。要想防範安全風險,首先要知道風險出如今什麼地方,所以漏洞挖掘技術就體現出其應用價值。尤爲是如今移動端設備與人們生活關係愈加緊密,針對移動端漏洞的挖掘與修復更因該引發重視。

彙報總結

本小組彙報

論文題目:Spectre Attacks: Exploiting Speculative Execution
論文來源:39th IEEE Symposium on Security and Privacy(Oakland)
做者信息:

  • Paul Kocher
    • Independent
  • Daniel Genkin
    • University of Pennsylvania and University of Maryland
  • Daniel Gruss
    • Graz University of Technology
  • Werner Haas
    • Cyberus Technology
  • Mike Hamburg
    • Rambus, Cryptography Research Division
  • Moritz Lipp
    • Graz University of Technology
  • Stefan Mangard
    • Graz University of Technology
  • Thomas Prescher
    • Cyberus Technology
  • Michael Schwarz
    • Graz University of Technology
  • Yuval Yarom
    • University of Adelaide and Data

本文發表時間不到一年半,引用次數已經達到了416次。

Spectre Attacks(幽靈攻擊)

現代處理器使用分支預測和推測執行來最大化性能。 例如,若是分支的目標取決於正在讀取的內存值,則CPU將嘗試獲取目標並嘗試提早執行。 當內存值最終到達時,CPU丟棄或提交推測計算。 推測邏輯在執行方式上是不忠實的,能夠訪問受害者的內存和寄存器,而且能夠執行具備可測量反作用的操做。
幽靈攻擊涉及誘使受害者以規範的方式執行在正確的程序執行期間不會發生的操做以及泄漏受害者的操做,能夠經過側信道向外界提供的機密信息。幽靈攻擊結合了來自側信道攻擊,故障攻擊和迴歸導向編程的方法,能夠從受害者的內存中讀取任意任意位置的內容。 更普遍地說,推測性執行實施違反了支持數字軟件安全機制的安全假設,包括操做系統進程分離,靜態分析,容器化,即時(JIT)編譯以及對緩存的定時/側通道攻擊的對策。 這些攻擊對實際系統構成嚴重威脅,由於在用於數百萬臺設備的英特爾,AMD和ARM的微處理器中發現了預測執行的功能的漏洞。
幽靈攻擊就像字面所說的意思同樣,來無影去無蹤,當攻擊發生時受害者在毫無察覺的狀況下就被CPU的預測執行功能「出賣」了。

Speculative Execution(預測執行)

預測執行簡單來講是一些具備預測執行能力的新型處理器,能夠估計即將執行的指令,採用預先計算的方法來加快整個處理過程。

預測執行的設計理念是:加速大機率事件。

預測執行是高速處理器使用的一種技術,經過考慮可能的將來執行路徑並提早地執行其中的指令來提升性能。例如,當程序的控制流程取決於物理內存中未緩存的值時,可能須要幾百個時鐘週期才能知道該值。除了經過空閒浪費這些週期以外,過程還會控制控制流的方向,保存其寄存器狀態的檢查點而且繼續在推測的路徑上推測性地執行該程序。當值從存儲器中偶然到達時,處理器檢查最初猜想的正確性。若是猜想錯誤,則處理器將寄存器狀態恢復爲存儲的檢查點並丟棄(不正確的)預測執行,若是猜想是正確的,則該部分代碼已被執行過,不須要再次執行,所以帶來了顯著的性能增益。

能夠發現,若是預測錯誤,即使程序真正執行到這裏時錯誤結果被丟棄,但錯誤的結果仍是短暫的出如今寄存器中,在被丟棄以前,這部分數據就很容易被泄露。

欺騙分支預測器

下面是一段可能被分支預測器錯誤預估的代碼:

對於這段代碼,攻擊者首先使用有效的x調用相關代碼,訓練分支預測器判斷該if爲真。在執行過幾回以後,if判斷連續爲真,在下一次須要從低速緩存加載array1_size時,爲了避免形成時鐘週期的浪費,CPU的預測執行開始工做,此時它有理由判斷if條件爲真,由於以前均爲真(加速大機率事件),因而直接執行下面的代碼,也就是說此時即使x的值越界了,咱們依然頗有可能在高速緩存中查詢到內存中array1[x]和array2[array1[x]*256]的值,當CPU發現預測錯誤時咱們已經獲得了須要的信息。

攻擊過程及結果

攻擊流程圖以下:


獲取目標內存地址的技術本論文沒有介紹,我的覺得能夠堆內存地址進行監控,選擇頻繁被修改的地址。

攻擊示例程序中的受害代碼採用上面的例子,交替輸入有效和惡意的參數:



在經過直接讀取該處cache中的值肯定攻擊是否命中,當讀取速度小於某個經驗值時,則認爲該數據在高速緩存中,判斷爲命中。當命中某個數值達到必定次數時斷定命中結果:


本文做者聲稱這種攻擊能夠獲取信息的速率在必定環境下可達10KB/s(10KB/second on an i7 Surface Pro 3)。

類似的攻擊手段:meltdown

Meltdown是一種相似的微體系結構攻擊,它利用無序執行來泄漏目標的物理內存。 Meltdown在兩個主要方面與Spectre Attacks大相徑庭。 首先,與Spectre不一樣,Meltdown不使用分支預測來實現推測執行。 相反,它依賴於觀察,當一條指令致使一個軟中斷時,正在無序執行的指令停止。第二,Meltdown利用特定於英特爾處理器的特權升級漏洞,由此 推測執行的指令能夠繞過內存保護。 結合這些問題,Meltdown從用戶空間訪問內核內存。 此訪問會致使軟中斷,但在發出軟中斷以前,訪問後面的代碼會經過緩存通道泄漏所訪問內存的內容。與Meltdown不一樣,Spectre攻擊適用於非Intel處理器,包括AMD和ARM處理器。 此外,KAISER補丁已被普遍應用於對Meltdown攻擊的緩解,但不能防止幽靈攻擊。

復現過程

  • 實驗環境:
    • win10 專業版1809 64位、 win7旗艦版32位(VMware14 pro虛擬機)
    • CPU: i5-8300H。
    • 內存: 分別爲16G,4G。

代碼修改:原論文附錄中提供的代碼存在些許瑕疵,對於觀察指望輸出存在必定阻礙。
運行結果如圖:


其餘小組彙報總結

Finding Unknown Malice in 10 Seconds: Mass Vetting for New Threats at the Google-Play Scale

本文開發了一種名爲MassVet的新技術,用於大規模審查應用程序,而無需瞭解惡意軟件的外觀和行爲方式。與一般使用重量級程序分析技術的現有檢測機制不一樣,文中所用的方法只是將提交的應用程序與已經在市場上的全部應用程序進行比較,重點關注那些共享相似UI結構(表示可能的從新打包關係)和共性的區別。一旦公共庫和其餘合法代碼重用被刪除,這種差別/通用程序組件就會變得很是可疑。研究中,本文在一個有效的類似性比較算法之上構建了這個「DiffCom」分析,該算法將應用程序的UI結構或方法的控制流圖的顯著特徵映射到一個快速比較的值。在流處理引擎上實施了MassVet,並評估了來自全球33個應用市場的近120萬個應用程序,即Google Play的規模。最後研究代表,該技術能夠在10秒內以低錯誤檢測率審覈應用程序。此外,它在檢測覆蓋率方面優於VirusTotal(NOD32,賽門鐵克,邁克菲等)的全部54臺掃描儀,捕獲了超過10萬個惡意應用程序,包括20多個可能的零日惡意軟件和數百萬次安裝的惡意軟件。仔細觀察這些應用程序能夠發現有趣的新觀察結果:例如,谷歌的檢測策略和惡意軟件做者的對策致使某些Google Play應用程序的神祕消失和從新出現。

核心技術結構:

v-core:

All Your GPS Are Belong To Us: Towards Stealthy Manipulation of Road Navigation Systems

這篇論文主要探討了對道路導航系統進行隱身操縱攻擊的可行性目標是觸發假轉向導航,引導受害者到達錯誤的目的地而不被察覺。其主要想法是略微改變GPS位置,以便假冒的導航路線與實際道路的形狀相匹配並觸發實際可能的指示。爲了證實可行性,該論文首先經過實施便攜式GPS欺騙器並在真實汽車上進行測試來執行受控測量。而後,該論文設計一個搜索算法來實時計算GPS移位和受害者路線。該論文使用追蹤駕駛模擬(曼哈頓和波士頓的600輛出租車道路)進行普遍的評估,而後經過真實駕駛測試(攻擊咱們本身的車)來驗證完整的攻擊。最後,該研究組在美國和中國使用駕駛模擬器進行欺騙性用戶研究,結果顯示95%的參與者遵循導航沒有意識到這種攻擊就到了錯誤的目的地。

這種攻擊在實施中應用了GPS設備的一個關鍵特徵,即GPS設備在工做中根據頻段和信號強度選擇信號來源,沒有對信號源進行身份驗證。所以安全技術在平常生活中還存在很大的應用空間。

With Great Training Comes Great Vulnerability: Practical Attacks against Transfer Learning

本文提出了一個新的針對遷移學習的對抗性攻擊,即對教師模型白盒攻擊,對學生模型黑盒攻擊。攻擊者知道教師模型的內部結構以及全部權重,但不知道學生模型的全部權值和訓練數據集。
本文的攻擊思路:首先將target圖狗輸入到教師模型中,捕獲target圖在教師模型第K層的輸出向量。以後對source圖加入擾動,使得加過擾動的source圖(即對抗樣本)在輸入教師模型後,在第K層產生很是類似的輸出向量。因爲前饋網絡每一層只觀察它的前一層,因此若是咱們的對抗樣本在第K層的輸出向量能夠完美匹配到target圖的相應的輸出向量,那麼不管第K層以後的層的權值如何變化,它都會被誤分類到和target圖相同的標籤。

本文經過求解一個有約束的最優化問題來計算擾動。目標是是模擬隱藏層第K層的輸出向量,約束是擾動不易被人眼察覺。即在擾動程度perturb_magnitude小於必定約束值(擾動預算P)的前提下,最小化對抗樣本(擾動後的source image)第K層的輸出向量與target image 第K層的輸出向量的歐式距離。前人計算擾動程度都是使用Lp範數,可是它沒法衡量人眼對於圖像失真程度的感知。因此本文使用DSSIM計算擾動程度,它是一種對圖像失真度的客觀測量指標。

SafeInit: Comprehensive and Practical Mitigation of Uninitialized Read Vulnerabilities

因爲C/C++不會像C#或JAVA語言,確保變量的有限分配,要求在全部可能執行的路徑上對它們進行初始化。因此,C/C++代碼可能容易受到未初始化的攻擊讀取。同時C/C++編譯器能夠在利用讀取未初始化的內存是「未定義行爲」時引入新的漏洞。

在本文中,提出了一種全面而實用的解決方案,經過調整工具鏈來確保全部棧和堆分配始終初始化,從而減輕通用程序中的這些錯誤。 SafeInit在編譯器級別實現。

SafeInit經過強制初始化堆分配(在分配以後)和全部棧變量(不管什麼時候進入範圍)來減輕未初始化的值問題。這是經過修改編譯器直接在全部點插入初始化調用來完成的。爲了提供實用和全面的安全性,此工具必須在編譯器自己內完成。 只需在編譯過程當中傳遞額外的加固標記便可啓用SafeInit。SafeInit在首次使用以前初始化全部局部變量,做爲新分配變量的做用域處理。SafeInit經過修改編譯器編譯代碼的中間表示(IR),在每一個變量進入做用域後進行初始化(例如內置memset)。
SafeInit的強化分配器可確保在返回應用程序以前將全部新分配的內存清零。咱們經過修改現代高性能堆分配器tcmalloc來實現咱們的強化分配器。同時還修改了LLVM,以便在啓用SafeInit時未來自新分配的內存的讀取視爲返回零而不是undef。 同時,咱們在安全分配器中執行覆蓋全部堆分配函數以確保始終使用強化的分配器函數(對初始化堆分配是在分配以後進行強制初始化)。編譯器知道咱們的強化分配器正在使用中; 任何已分配內存的代碼都再也不使用未定義行爲,而且編譯器沒法修改或刪除。
最後,經過優化器和無效存儲消除提升SageInit的性能和安全性。運行結果以下:

Convolutional Neural Networks for Sentence Classification

傳統的文本分類方法主要是基於統計的機器學習方法,使用向量空間模型(vector space model,VSM)或者叫作詞袋模型(bag of words),抽取文本中的單詞特徵,並利用TF-IDF方法計算每一個單詞的權重。這樣,獲得一個單詞-文檔矩陣,矩陣的行爲不一樣的文檔,矩陣的列爲不一樣的單詞特徵。將這個矩陣輸入至相應的文本分類器(e.g. SVM,NB,...),就能夠實現文本的分類任務。這類方法使用的特徵是單詞的出現與否(較強一點是單詞的詞頻),忽略了單詞的順序、單詞構成的詞組(n-grams)和單詞與單詞之間的語義類似度關係。在工程實踐中實現較爲容易,可是缺點也較爲明顯。

本文所提到的方法,將文本轉換爲相似圖像的矩陣,採用CNN來完成文本分類任務,則更多的利用到單詞的順序和語義特徵。

網絡結構以下所示:

數據集:

實驗結果:

Manipulating Machine Learning: Poisoning Attacks and Countermeasures for Regression Learning

本文對線性迴歸模型的中毒攻擊及其對策進行了第一次系統研究,提出了一個針對中毒攻擊和快速統計攻擊的新優化框架,該框架須要對培訓過程的瞭解不多。

本文還採用原則性方法設計一種新的魯棒防護算法,該算法在很大程度上優於現有的穩健迴歸方法。在醫療保健,貸款評估和房地產領域的幾個數據集上普遍評估做者提出的攻擊和防護算法。在案例研究健康應用中證實了中毒攻擊的真實含義。

系統架構:

Trim算法及成果:

感想和體會

經過本課程的學習,個人視野獲得了很大的擴展,對之前不少都知識聽過名字的技術有了比較全面的瞭解。尤爲是每次講座後的論文閱讀,讓我從權威、專業的角度瞭解相關領域的前沿課題,對我從此的學習科研有很大的導向性幫助。期末深刻學習並復現頂會論文的過程更是獲益良多。幽靈攻擊這個課題讓我很是感興趣,以前從沒有想過看似神奇的CPU背後竟然還有這種「齷齪」事,這也不得不引發咱們進一步思考,許多如今運行看似良好的系統,是否是從機制上就存在着根本性的致命漏洞呢?對已知漏洞的防範較爲簡單,那麼在面對未知漏洞時,如何作到即便不知道是否存在漏洞、存在什麼樣的漏洞,也能在漏洞被利用是儘量減少損失呢?

對本課程的建議

頂會論文的深刻學習及復現過程建議儘早展開,時間充足的狀況下一方面選題能夠更從容,儘可能選到本身感興趣的題目;其次復現過程也能作到更全面詳細。就拿幽靈漏洞這個例子來講,時間更充足的話我還想深刻了解一下微軟針對幽靈漏洞發佈的補丁,以及安卓、IOS等是否有針對幽靈漏洞的補丁。

相關文章
相關標籤/搜索