亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        SQLMVED:基于多變體執(zhí)行的SQL 注入運(yùn)行時(shí)防御系統(tǒng)

        2021-05-13 10:12:46馬博林張錚劉浩鄔江興
        通信學(xué)報(bào) 2021年4期
        關(guān)鍵詞:數(shù)據(jù)庫(kù)用戶(hù)方法

        馬博林,張錚,劉浩,鄔江興

        (1.信息工程大學(xué),河南 鄭州 450001;2.網(wǎng)絡(luò)通信與安全紫金山實(shí)驗(yàn)室,江蘇 南京 211100)

        1 引言

        隨著“互聯(lián)網(wǎng)+”新業(yè)態(tài)的快速發(fā)展,傳統(tǒng)行業(yè)向網(wǎng)絡(luò)服務(wù)發(fā)生轉(zhuǎn)變,海量的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,互聯(lián)網(wǎng)用戶(hù)可以通過(guò)結(jié)構(gòu)化查詢(xún)語(yǔ)句(SQL,structured query language)隨時(shí)隨地訪(fǎng)問(wèn)網(wǎng)絡(luò)服務(wù)數(shù)據(jù)。數(shù)據(jù)庫(kù)遵循國(guó)際標(biāo)準(zhǔn)化組織(ISO,International Organization for Standardization)、國(guó)際電工委員會(huì)(IEC,International Electrotechnical Commission)等發(fā)布的統(tǒng)一標(biāo)準(zhǔn),雖然提高了網(wǎng)絡(luò)服務(wù)間數(shù)據(jù)格式的一致性,但易被利用的特性也使網(wǎng)絡(luò)服務(wù)數(shù)據(jù)面臨越來(lái)越多的安全威脅。

        目前,SQL 注入攻擊(SQLIA,SQL injection attack)是危害網(wǎng)絡(luò)服務(wù)數(shù)據(jù)安全的主要威脅之一,“OWASP TOP 10”項(xiàng)目最近三次發(fā)布的The Ten Most Critical Web Application Security Risks報(bào)告顯示,SQLIA 在所有統(tǒng)計(jì)的安全威脅分類(lèi)中連續(xù)多年排名首位。

        文獻(xiàn)[1]提出了一種基于指令集隨機(jī)化的SQLIA 防御方法,通過(guò)對(duì)SQL 進(jìn)行隨機(jī)化變化,使攻擊者不能預(yù)知應(yīng)用程序的SQL 形式,無(wú)法完成SQLIA。該文獻(xiàn)推動(dòng)了SQLIA 防御方法由SQL 運(yùn)行前的檢測(cè)技術(shù)向運(yùn)行時(shí)的主動(dòng)防御技術(shù)轉(zhuǎn)變,其中的隨機(jī)化方法在黑盒環(huán)境下能夠有效抵御SQLIA,但是攻擊者一旦通過(guò)社會(huì)工程學(xué)或者在白盒環(huán)境下掌握了隨機(jī)化方法,調(diào)整注入代碼,便能實(shí)現(xiàn)有效的SQLIA。

        為了解決該問(wèn)題,本文改進(jìn)文獻(xiàn)[1]的技術(shù)思路,提出了一種基于多變體執(zhí)行技術(shù)的SQLIA防御方法。結(jié)合多變體執(zhí)行與隨機(jī)化防御思路,構(gòu)建SQLIA 運(yùn)行時(shí)防御系統(tǒng)架構(gòu),并根據(jù)數(shù)據(jù)的讀、寫(xiě)操作設(shè)計(jì)針對(duì)性的表決方法,基于Web 服務(wù)實(shí)現(xiàn)了原型系統(tǒng)SQLMVED(SQL multi-variant execution defense)。安全性評(píng)估和實(shí)驗(yàn)測(cè)試表明,該方法無(wú)論在攻擊者是否掌握了防御機(jī)制的情況下,均能夠有效抵御SQLIA。

        2 SQL 注入攻擊研究

        2.1 SQL 注入攻擊原理

        SQL 是用于數(shù)據(jù)庫(kù)查詢(xún)、更新和管理的高級(jí)非過(guò)程化編程語(yǔ)言,最初由IBM 公司研制開(kāi)發(fā),目前廣泛地應(yīng)用于程序設(shè)計(jì)開(kāi)發(fā)中。圖1 給出了典型的Web 服務(wù)架構(gòu)[2]??蛻?hù)端通過(guò)應(yīng)用層協(xié)議向服務(wù)器端發(fā)送請(qǐng)求(步驟1))。服務(wù)器通過(guò)CGI/FastCGI格式將請(qǐng)求轉(zhuǎn)發(fā)至CG(Icommon gateway interface)應(yīng)用程序進(jìn)行解析處理(步驟2))。執(zhí)行目標(biāo)程序,目標(biāo)程序若執(zhí)行回調(diào)功能代碼,則重復(fù)步驟3);若執(zhí)行數(shù)據(jù)庫(kù)操作功能代碼,則進(jìn)行步驟4),例如程序調(diào)用PHP-CGI 中的mysqli_query、oci_execute 等函數(shù);若執(zhí)行具有系統(tǒng)命令調(diào)用功能的代碼,則進(jìn)行步驟5)。最終,通過(guò)步驟6)和步驟7)將服務(wù)器端的響應(yīng)結(jié)果返回至客戶(hù)端。

        圖1 典型的Web 服務(wù)架構(gòu)

        SQLIA 的語(yǔ)句執(zhí)行在步驟4),攻擊者在用戶(hù)輸入中構(gòu)造惡意SQL,由CGI 將其與目標(biāo)程序中的SQL 拼接后發(fā)送至數(shù)據(jù)庫(kù)執(zhí)行,從而實(shí)現(xiàn)非法操作。相較于發(fā)生在步驟3)的代碼注入攻擊和發(fā)生在步驟5)的命令注入攻擊,SQLIA 不依賴(lài)于操作系統(tǒng)以及應(yīng)用程序運(yùn)行環(huán)境,在漏洞存在的情況下攻擊實(shí)施的門(mén)檻較低。

        2.2 SQL 注入攻擊威脅

        SQLIA 是針對(duì)數(shù)據(jù)庫(kù)的攻擊技術(shù),攻擊者利用應(yīng)用程序開(kāi)發(fā)階段的漏洞或缺乏對(duì)輸入驗(yàn)證,向應(yīng)用程序中注入惡意SQL,從而達(dá)到查詢(xún)、更改或刪除數(shù)據(jù)的目的。根據(jù)網(wǎng)絡(luò)空間安全[3]的框架劃分,SQLIA 主要是利用應(yīng)用層的漏洞或后門(mén),破壞數(shù)據(jù)層的安全性,SQLIA 主要將以下網(wǎng)絡(luò)服務(wù)特性或功能作為攻擊目標(biāo)。

        1) 繞過(guò)身份驗(yàn)證。網(wǎng)絡(luò)服務(wù)通常設(shè)置身份驗(yàn)證過(guò)程,以用戶(hù)輸入與數(shù)據(jù)庫(kù)查詢(xún)結(jié)果比對(duì)的方式實(shí)現(xiàn),攻擊者通過(guò)SQLIA 可繞過(guò)比對(duì)過(guò)程,使用非法用戶(hù)成功繞過(guò)身份驗(yàn)證。

        2) 竊取數(shù)據(jù)。網(wǎng)絡(luò)服務(wù)中的大量數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,如身份證號(hào)、手機(jī)號(hào)、銀行卡號(hào)等信息,攻擊者通過(guò)SQLIA 獲取敏感信息,是竊取數(shù)據(jù)的主要途徑。

        3) 破壞可用性。攻擊者通過(guò)SQLIA 不僅可以竊取數(shù)據(jù),還可以更改或刪除數(shù)據(jù),破壞數(shù)據(jù)完整性,甚至停止數(shù)據(jù)庫(kù)服務(wù),達(dá)到拒絕服務(wù)的目的。

        4) 數(shù)據(jù)庫(kù)指紋識(shí)別。攻擊者通過(guò)SQLIA 識(shí)別數(shù)據(jù)庫(kù)類(lèi)型、版本等信息,為發(fā)起針對(duì)性的0day或APT(advanced persistent threat)攻擊做準(zhǔn)備。

        5) 繞過(guò)輸入檢查。網(wǎng)絡(luò)服務(wù)為了抵御SQLIA,選擇性地部署外掛式防御措施,對(duì)用戶(hù)輸入檢查是否存在注入語(yǔ)句,攻擊者通過(guò)構(gòu)造特殊的SQLIA繞過(guò)輸入檢查。

        2.3 SQL 注入攻擊分類(lèi)

        本節(jié)主要介紹目前已知的SQLIA 類(lèi)型,由于無(wú)法窮舉每種攻擊類(lèi)型的所有變化形式,表1 以用戶(hù)查詢(xún)?yōu)閳?chǎng)景,為每種SQLIA 類(lèi)型提供了代表性的示例語(yǔ)句。真實(shí)的網(wǎng)絡(luò)對(duì)抗中,攻擊者通常組合使用多種SQLIA 類(lèi)型來(lái)完成對(duì)特定目標(biāo)的攻擊。

        1) 重言式。此類(lèi)攻擊在條件語(yǔ)句中構(gòu)造注入代碼,使SQL 的判定結(jié)果永遠(yuǎn)為真,從而繞過(guò)條件語(yǔ)句中的驗(yàn)證過(guò)程。

        2) 批量查詢(xún)。此類(lèi)攻擊利用查詢(xún)分隔符,注入額外的SQL,使原始語(yǔ)句完成操作后,繼而執(zhí)行注入的批量語(yǔ)句。

        3) 錯(cuò)誤回顯。數(shù)據(jù)庫(kù)錯(cuò)誤消息通常包含有用信息,此類(lèi)攻擊向服務(wù)端注入語(yǔ)法錯(cuò)誤、類(lèi)型轉(zhuǎn)換錯(cuò)誤或邏輯錯(cuò)誤的SQL,利用錯(cuò)誤回顯獲得數(shù)據(jù)庫(kù)關(guān)鍵信息。更進(jìn)一步地,攻擊者將錯(cuò)誤語(yǔ)句與查詢(xún)語(yǔ)句拼接,利用錯(cuò)誤信息回顯查詢(xún)結(jié)果。

        4) 聯(lián)合查詢(xún)。此類(lèi)攻擊注入U(xiǎn)NION 語(yǔ)句,改變返回的數(shù)據(jù)結(jié)果,從而繞過(guò)驗(yàn)證過(guò)程或獲得敏感數(shù)據(jù)。

        5) 存儲(chǔ)過(guò)程。此類(lèi)攻擊屬于數(shù)據(jù)庫(kù)中設(shè)置的額外抽象層,可以由開(kāi)發(fā)人員進(jìn)行編程,因此同樣遭受SQLIA 威脅。攻擊者可以注入SHUTDOWN、DROPTABLE 等語(yǔ)句,造成數(shù)據(jù)破壞或拒絕服務(wù)。

        6) 盲注。當(dāng)應(yīng)用程序隱藏了數(shù)據(jù)庫(kù)的不安全錯(cuò)誤消息而不再產(chǎn)生錯(cuò)誤回顯時(shí),攻擊者既可以采用布爾盲注方法,利用應(yīng)用程序的正確或錯(cuò)誤響應(yīng),判斷注入語(yǔ)句的執(zhí)行結(jié)果;也可以采用時(shí)間盲注方法,利用sleep、benchmark 等函數(shù)配合if-then 語(yǔ)句,通過(guò)響應(yīng)時(shí)間判斷注入語(yǔ)句的執(zhí)行結(jié)果,從而獲得有效信息。

        7) 交替編碼。攻擊者使用交替編碼(例如十六進(jìn)制、ASCII、Unicode)修改注入查詢(xún)語(yǔ)句,從而繞過(guò)輸入過(guò)濾器的檢測(cè)。

        2.4 SQL 注入攻擊防御方法

        根據(jù)防御發(fā)生的時(shí)機(jī),Shar 等[4]將SQLIA 防御技術(shù)在廣義上分為防御性編碼、運(yùn)行前分析和運(yùn)行時(shí)防御3 類(lèi)。

        防御性編碼是在開(kāi)發(fā)階段約束開(kāi)發(fā)者的代碼編寫(xiě)習(xí)慣,要求開(kāi)發(fā)者在實(shí)現(xiàn)過(guò)程中更多地采用參數(shù)化查詢(xún)或存儲(chǔ)過(guò)程轉(zhuǎn)義所有用戶(hù)提交的參數(shù)、數(shù)據(jù)類(lèi)型校驗(yàn)、白名單篩選等防御性編碼方式。Mcclure 等[5]和Cook 等[6]創(chuàng)新地提出了SQL 開(kāi)發(fā)模式,開(kāi)發(fā)者通過(guò)提供的API,能夠自動(dòng)實(shí)現(xiàn)具有數(shù)據(jù)類(lèi)型校驗(yàn)、輸入過(guò)濾和轉(zhuǎn)義的SQL,消除大量可能導(dǎo)致SQLIA 發(fā)生的編碼問(wèn)題。此類(lèi)防御技術(shù)盡管是有效的,但需要開(kāi)發(fā)者使用新的編程方式,并且不會(huì)對(duì)已存在的應(yīng)用程序提供安全防護(hù),應(yīng)用范圍狹窄。因此,防御性編碼類(lèi)的SQLIA 防御技術(shù)未受到國(guó)內(nèi)外學(xué)者的持續(xù)關(guān)注,研究成果有限。

        運(yùn)行前分析一般是通過(guò)對(duì)應(yīng)用程序進(jìn)行漏洞掃描、自動(dòng)化測(cè)試等來(lái)發(fā)現(xiàn)SQLIA 漏洞,從而確保應(yīng)用程序是安全可靠的,或者是在SQL 執(zhí)行之前利用數(shù)據(jù)挖掘、黑白名單等技術(shù)手段對(duì)輸入檢查,來(lái)保證用戶(hù)輸入不含有SQLIA 代碼。在漏洞測(cè)試方面,Kiezun 等[7]開(kāi)發(fā)了ARDILLA 工具,能夠根據(jù)應(yīng)用程序自動(dòng)生成SQLIA 語(yǔ)句,從而檢測(cè)應(yīng)用程序是否存在SQLIA 漏洞;孫歆等[8]設(shè)計(jì)了基于缺陷注入的模糊測(cè)試方法,服務(wù)代理獲取用戶(hù)請(qǐng)求后轉(zhuǎn)發(fā)至模糊測(cè)試引擎,引擎采用DOM4J 解析XML偽碼配置,生成測(cè)試用例進(jìn)行注入測(cè)試。針對(duì)輸入檢測(cè),防御方法通常設(shè)計(jì)在防火墻層面[9-12]或CGI層面[13-15]。在防火墻層面的相關(guān)研究較豐富,Kar等[9]提出的SQLiGoT 采用令牌圖和支持向量機(jī)能有效地識(shí)別SQLIA 語(yǔ)句;韓宸望等[10]提出了基于SQL 語(yǔ)法樹(shù)的過(guò)濾方法,在用戶(hù)請(qǐng)求進(jìn)入服務(wù)端前對(duì)比輸入語(yǔ)句的SQL 語(yǔ)法樹(shù)特征是否與合法特征一致,有效抵御SQLIA;趙宇飛等[11]基于長(zhǎng)度、連接頻率和特征串對(duì)網(wǎng)絡(luò)流量進(jìn)行分析,有效檢測(cè)SQLIA。在CGI 層面,張慧琳等[13]提出利用編碼值判斷SQL 中敏感字符的來(lái)源、轉(zhuǎn)義非可信敏感字符,基于 PHP 的 Zend 引擎實(shí)現(xiàn)了原型系統(tǒng)PHPGate,阻止SQLIA 發(fā)生。運(yùn)行前分析類(lèi)的SQLIA 防御技術(shù),無(wú)論是通過(guò)生成測(cè)試用例進(jìn)行自動(dòng)化測(cè)試,還是構(gòu)建合法或非法的語(yǔ)句特征進(jìn)行輸入檢測(cè),其核心思想是在掌握惡意輸入規(guī)則、語(yǔ)法漏洞集合或者建立有效白名單的前提下實(shí)施有效防護(hù),當(dāng)新型的攻擊出現(xiàn)時(shí),此類(lèi)技術(shù)保證的攻守平衡會(huì)被打破,繼而再努力解決新的問(wèn)題,產(chǎn)生新的研究成果。

        表1 SQLIA 類(lèi)型及示例

        運(yùn)行時(shí)防御在運(yùn)行前分析的基礎(chǔ)上,一方面在程序運(yùn)行時(shí)進(jìn)行監(jiān)控,確保應(yīng)用程序的行為始終在信任狀態(tài),Halfond 等[16]提出了AMNESIA 工具,該工具運(yùn)行在CGI 層,將靜態(tài)分析和運(yùn)行時(shí)防御相結(jié)合,在靜態(tài)部分創(chuàng)建語(yǔ)句模型,然后在運(yùn)行時(shí)監(jiān)測(cè)這些動(dòng)態(tài)生成的語(yǔ)句,一旦不符合設(shè)置的合法語(yǔ)句模型,該工具將阻止語(yǔ)句發(fā)送至數(shù)據(jù)庫(kù);何成萬(wàn)等[17]提出了一種基于A(yíng)OP(aspect-oriented programming)和動(dòng)態(tài)污點(diǎn)分析的檢測(cè)方法,通過(guò)污點(diǎn)標(biāo)記方法區(qū)分可信與非可信數(shù)據(jù)源,在JDBC 中解析發(fā)現(xiàn)非可信語(yǔ)法。另一方面改變攻擊者對(duì)目標(biāo)系統(tǒng)的認(rèn)知,使注入代碼失效,Boyd 等[1]基于SQL的隨機(jī)化設(shè)計(jì)了SQLRand 系統(tǒng),對(duì)SQL 關(guān)鍵字進(jìn)行隨機(jī)化處理,例如,原始未隨機(jī)化的SQL 為SELECT account FROM users WHERE login=“AND pass=”,采用key 為“123”隨機(jī)化后的SQL 為SELECT123 account FROM123 users WHERE123 login=“AND123 pass=”,這樣可以使攻擊者不能預(yù)知應(yīng)用程序的SQL 形式,SQLRand 系統(tǒng)架構(gòu)如圖2所示。在CGI 與數(shù)據(jù)庫(kù)之間增加代理,用于解析語(yǔ)句和去隨機(jī)化處理,如果解析語(yǔ)句發(fā)現(xiàn)含有未隨機(jī)化的SQL 關(guān)鍵字,則進(jìn)行異常處理,不予執(zhí)行,從而實(shí)現(xiàn)SQLIA 的有效防御。

        圖2 SQLRand 系統(tǒng)架構(gòu)

        SQLRand 系統(tǒng)在黑盒環(huán)境下能夠有效抵御SQLIA,但是存在被猜解的威脅,目前通過(guò)hashcat[18]工具暴力破解,在GPU 破解速度為9×109次/s 的條件下,每秒可以嘗試900 萬(wàn)種組合,攻擊者在秒級(jí)時(shí)間內(nèi)就可以完成對(duì)4 位標(biāo)簽的猜解。而攻擊者在白盒環(huán)境下能夠準(zhǔn)確掌握SQL 關(guān)鍵字的隨機(jī)化方法,隨即調(diào)整注入代碼,立刻實(shí)現(xiàn)有效的SQLIA。本文提出了一種基于多變體執(zhí)行的SQLIA 運(yùn)行時(shí)防御方法,多變體間采用互不相同的隨機(jī)化方法,即使在攻擊者掌握了隨機(jī)化方法的情況下,非法SQL也最多只能被某一變體解析成功,利用表決機(jī)制對(duì)多變體的響應(yīng)結(jié)果或解析結(jié)果進(jìn)行表決,實(shí)現(xiàn)SQLIA 的有效防御。

        3 基于多變體執(zhí)行的SQLIA 防御方法

        3.1 多變體執(zhí)行技術(shù)研究

        程序冗余執(zhí)行的技術(shù)思路最早應(yīng)用在程序調(diào)試、錯(cuò)誤容忍等保證程序可靠性的領(lǐng)域中,后來(lái)研究者在程序冗余執(zhí)行的基礎(chǔ)上,將冗余執(zhí)行的軟件進(jìn)行多樣化設(shè)計(jì),從而解決軟件的安全問(wèn)題,因此在軟件安全領(lǐng)域?qū)⑷哂鄨?zhí)行的多樣化程序稱(chēng)為多變體。多變體執(zhí)行最早由Knowlton[19]提出,分別將2 個(gè)功能邏輯等價(jià)程序的實(shí)現(xiàn)代碼分成小片段,然后利用跳轉(zhuǎn)指令,在保證程序語(yǔ)義不變的前提下,對(duì)代碼片段進(jìn)行重組。2 個(gè)程序并行執(zhí)行時(shí),由CPU 檢查程序的執(zhí)行語(yǔ)義是否相等,從而可以預(yù)防控制轉(zhuǎn)換越界、錯(cuò)誤使用野指針等安全問(wèn)題。

        Cox 等[20]提出了較完整的軟件多變體執(zhí)行架構(gòu)N-Variant,如圖3 所示。該架構(gòu)通過(guò)內(nèi)存地址空間隨機(jī)化和指令集隨機(jī)化技術(shù)生成冗余變體,在不關(guān)注攻擊方式的情況下,實(shí)現(xiàn)了對(duì)信息泄露攻擊的有效防御,N-Variant 奠定了多變體執(zhí)行技術(shù)的基礎(chǔ),并總結(jié)出該技術(shù)面臨著變體生成、監(jiān)控方法等關(guān)鍵問(wèn)題。

        圖3 N-Variant 系統(tǒng)架構(gòu)

        有關(guān)多變體執(zhí)行技術(shù)的眾多研究中,Berger 等[21]提出了DieHard,其架構(gòu)如圖4 所示。該架構(gòu)對(duì)init_heap、malloc、free 函數(shù)進(jìn)行重新設(shè)計(jì),采用新的init_heap 和malloc 函數(shù)結(jié)合,使用隨機(jī)化技術(shù)為多變體生成不同的堆對(duì)象布局。多變體以獨(dú)立的進(jìn)程運(yùn)行,通過(guò)管道從主進(jìn)程接收輸入,然后在新的free 函數(shù)中將輸出寫(xiě)入共享空間的緩沖區(qū)中,調(diào)用表決進(jìn)程對(duì)所有變體的輸出進(jìn)行比較,從而有效抵御內(nèi)存錯(cuò)誤,保證內(nèi)存安全。該團(tuán)隊(duì)又在Diehard的基礎(chǔ)上,擴(kuò)展內(nèi)存分配機(jī)制,設(shè)計(jì)了Dieharder[22]系統(tǒng)架構(gòu),使變體能夠在不連續(xù)的內(nèi)存頁(yè)面上隨機(jī)分配,解決了Diehard 中單個(gè)堆塊溢出后覆蓋其他堆塊空間的問(wèn)題。

        圖4 DieHard 系統(tǒng)架構(gòu)

        Novark 等[23]在DieHard 的基礎(chǔ)上,擴(kuò)展提出了 Exterminator,如圖 5 所示。該架構(gòu)改善了Diehard 的表決算法,能夠表決發(fā)現(xiàn)內(nèi)存錯(cuò)誤位置,并在運(yùn)行時(shí)生成補(bǔ)丁進(jìn)行適應(yīng)性的修補(bǔ),并且Exterminator 首次為多變體執(zhí)行架構(gòu)增加了動(dòng)態(tài)反饋機(jī)制。

        圖5 Exterminator 系統(tǒng)架構(gòu)

        以N-Variant、Diehard、Dieharder、Exterminator等架構(gòu)為代表進(jìn)行分析,多變體執(zhí)行是在多樣化技術(shù)的基礎(chǔ)上,利用冗余、動(dòng)態(tài)機(jī)制,解決軟硬件同質(zhì)化帶來(lái)的安全問(wèn)題。多變體只要在受保護(hù)的攻擊面中存在更小的重疊范圍,便可以作為變體的“源”來(lái)構(gòu)建冗余執(zhí)行架構(gòu)。

        我國(guó)鄔江興院士[24]提出了由構(gòu)造決定安全的擬態(tài)防御理論,研究了冗余、異構(gòu)、動(dòng)態(tài)特性解決內(nèi)生安全問(wèn)題的有效性,系統(tǒng)地構(gòu)建了動(dòng)態(tài)異構(gòu)冗余架構(gòu),如圖6 所示。該架構(gòu)由輸入代理、異構(gòu)組件池、異構(gòu)執(zhí)行體集、調(diào)度器、表決器組成。動(dòng)態(tài)異構(gòu)冗余架構(gòu)下同時(shí)運(yùn)行多個(gè)功能等價(jià)、結(jié)構(gòu)相異的執(zhí)行體,由于網(wǎng)絡(luò)攻擊對(duì)于目標(biāo)環(huán)境的依賴(lài)性,不同執(zhí)行體對(duì)具有攻擊行為的輸入會(huì)產(chǎn)生不一致的輸出,通過(guò)表決就能夠發(fā)現(xiàn)執(zhí)行體產(chǎn)生的異常結(jié)果。因此,動(dòng)態(tài)異構(gòu)冗余架構(gòu)能夠在不依賴(lài)先驗(yàn)知識(shí)的情況下,有效防御針對(duì)已知或未知漏洞后門(mén)發(fā)起的攻擊。

        圖6 擬態(tài)防御動(dòng)態(tài)異構(gòu)冗余架構(gòu)

        擬態(tài)防御相較于多變體技術(shù),具有完備的理論體系,已發(fā)行多版中英文著作[25]。對(duì)比兩者的技術(shù)思路可以發(fā)現(xiàn),多變體技術(shù)屬于擬態(tài)防御作為內(nèi)生安全構(gòu)造技術(shù)解決軟件安全的范疇。

        本文基于多變體執(zhí)行技術(shù),設(shè)計(jì)實(shí)現(xiàn)了SQLIA運(yùn)行時(shí)防御原型系統(tǒng)SQLMVED。基于本節(jié)的研究?jī)?nèi)容,SQLMVED 的衍生路線(xiàn)如圖7 所示。

        圖7 SQLMVED 的衍生路線(xiàn)

        3.2 SQLMVED 系統(tǒng)設(shè)計(jì)

        大部分多變體執(zhí)行架構(gòu)采用Leader-Follower或者M(jìn)aster-Slave 設(shè)計(jì),針對(duì)不予表決的系統(tǒng)調(diào)用,監(jiān)控器將其分派至Leader/Master 變體執(zhí)行,再將結(jié)果同步至Follower/Slave 變體中,這種方法能夠有效降低假陽(yáng)性,卻增加了安全威脅,Leader/Master變體一旦被控制,多變體執(zhí)行架構(gòu)的防御有效性將大打折扣。本文提出基于多變體執(zhí)行的SQLMVED系統(tǒng),為避免Leader-Follower/Master-Slave 模式的安全威脅,采用同步模式,系統(tǒng)架構(gòu)如圖8 所示,系統(tǒng)由用戶(hù)請(qǐng)求代理、負(fù)責(zé)處理請(qǐng)求的多變體、數(shù)據(jù)庫(kù)代理,以及數(shù)據(jù)庫(kù)組成。

        圖8 SQLMVED 系統(tǒng)架構(gòu)

        用戶(hù)請(qǐng)求代理是網(wǎng)絡(luò)服務(wù)的出入口[26],當(dāng)接收到用戶(hù)發(fā)起的請(qǐng)求時(shí),其將請(qǐng)求復(fù)制3 份再轉(zhuǎn)發(fā)至多變體;當(dāng)接收到多變體的響應(yīng)時(shí),進(jìn)行表決,若存在多數(shù)一致的響應(yīng),則返回至用戶(hù),否則拒絕響應(yīng)。用戶(hù)請(qǐng)求代理基于Nginx 實(shí)現(xiàn),利用ngx_http_upstream_module 模塊的負(fù)載功能和本文3.3 節(jié)設(shè)計(jì)的算法1,實(shí)現(xiàn)同一用戶(hù)請(qǐng)求向多變體的轉(zhuǎn)發(fā),以及同一用戶(hù)響應(yīng)的表決。

        多變體由Web 服務(wù)端、CGI 以及部署的應(yīng)用程序組成,其中應(yīng)用程序采用隨機(jī)化方法對(duì)SQL 進(jìn)行隨機(jī)化變化,且變體之間采用的標(biāo)簽是不同的。

        數(shù)據(jù)庫(kù)代理由獨(dú)立地服務(wù)于各個(gè)變體的SQL語(yǔ)法解析器SQLParse 和負(fù)責(zé)比較其解析結(jié)果的表決器組成。SQL 語(yǔ)法解析器基于sqlparse/ keywords.py 文件,使tokens.Keyword 與隨機(jī)化標(biāo)簽保持一致,完成解析隨機(jī)化SQL 和去隨機(jī)化的過(guò)程。由于只改變tokens.Keyword 的表現(xiàn)形式,不改變SQL 解析的正常流程,因此本文提出的SQL 隨機(jī)化方法不會(huì)影響SQL 解析器的正常功能。例如,變體E1采用的標(biāo)簽為“123”,其對(duì)應(yīng)的語(yǔ)法解析器為SQLParse1;變體E2采用的標(biāo)簽為“456”,其對(duì)應(yīng)的語(yǔ)法解析器為SQLParse2。以SQLSELECT a FROM b WHERE c=‘?’;(其中?為占位符)為例,當(dāng)攻擊者掌握了隨機(jī)化標(biāo)簽,調(diào)整輸入為admin’or123 ‘1’=‘1 時(shí),SQLParse1解析的結(jié)果,在未經(jīng)去隨機(jī)化處理時(shí)的結(jié)構(gòu)如圖9 所示。由于攻擊者注入的“or123”符合變體E1的變化方法,因此在變體E1中注入攻擊成功。

        圖9 注入成功時(shí)的SQL 語(yǔ)法樹(shù)

        SQLParse2解析的結(jié)果,在未經(jīng)去隨機(jī)化處理時(shí)的結(jié)構(gòu)如圖10 所示。在變體E2中,攻擊者注入的“or123”不符合其變化方法,因此注入攻擊失敗。同理,在變體E3中,注入攻擊也失敗。

        變體E1、E2、E3中的SQL 經(jīng)去隨機(jī)化處理后由數(shù)據(jù)庫(kù)執(zhí)行,變體E2和變體E3的執(zhí)行結(jié)果一致,且不同于注入成功的變體E1的執(zhí)行結(jié)果。

        3.3 SQL 表決方法設(shè)計(jì)

        表決作為多變體執(zhí)行架構(gòu)中的關(guān)鍵技術(shù),決定著多變體系統(tǒng)能否發(fā)現(xiàn)異常。在多變體系統(tǒng)中,表決點(diǎn)要么設(shè)置在變體執(zhí)行前對(duì)輸入進(jìn)行表決,要么設(shè)置在變體執(zhí)行后對(duì)輸出進(jìn)行表決。考慮到數(shù)據(jù)庫(kù)服務(wù)中數(shù)據(jù)讀、寫(xiě)操作的不同影響,SQLMVED 系統(tǒng)針對(duì)數(shù)據(jù)的讀、寫(xiě)操作采取的處理方式也不同。

        圖10 注入失敗時(shí)的SQL 語(yǔ)法樹(shù)

        讀操作。數(shù)據(jù)的讀操作不會(huì)引起數(shù)據(jù)的變化,讀操作的表決點(diǎn)設(shè)置在用戶(hù)請(qǐng)求代理處,用戶(hù)請(qǐng)求代理對(duì)變體返回用戶(hù)的輸出進(jìn)行表決,充分利用協(xié)議代理功能,保證參與一次表決的變體返回結(jié)果的同源性。

        寫(xiě)操作。數(shù)據(jù)的寫(xiě)操作必然使數(shù)據(jù)產(chǎn)生變化,若表決點(diǎn)繼續(xù)設(shè)置在用戶(hù)請(qǐng)求代理處,當(dāng)其發(fā)現(xiàn)不一致時(shí)還需要對(duì)數(shù)據(jù)進(jìn)行還原操作,增加了系統(tǒng)的復(fù)雜度。因此,寫(xiě)操作的表決點(diǎn)設(shè)置在數(shù)據(jù)庫(kù)代理處,表決器對(duì)經(jīng)過(guò)隨機(jī)化語(yǔ)法解析器去隨機(jī)化的語(yǔ)句進(jìn)行表決,只有通過(guò)表決的寫(xiě)操作語(yǔ)句才會(huì)由數(shù)據(jù)庫(kù)執(zhí)行。

        結(jié)合3.2 節(jié)的SQLMVED 系統(tǒng)設(shè)計(jì),系統(tǒng)處理用戶(hù)請(qǐng)求的流程如圖11 所示。

        1) 用戶(hù)請(qǐng)求代理表決算法

        用戶(hù)請(qǐng)求代理將請(qǐng)求復(fù)制,轉(zhuǎn)發(fā)至冗余多變體執(zhí)行并獲取響應(yīng)結(jié)果,對(duì)HTTP 響應(yīng)數(shù)據(jù)結(jié)構(gòu)的響應(yīng)體[27]進(jìn)行表決,用戶(hù)請(qǐng)求代理表決算法描述如算法1 所示,若存在多數(shù)一致的響應(yīng),則將其中的響應(yīng)結(jié)果返回至用戶(hù);若無(wú)法通過(guò)表決,則拒絕響應(yīng),返回錯(cuò)誤狀態(tài)碼。

        圖11 SQLMVED 系統(tǒng)流程

        算法1用戶(hù)請(qǐng)求代理表決算法

        2) 寫(xiě)操作表決方法

        數(shù)據(jù)庫(kù)代理負(fù)責(zé)將冗余的寫(xiě)操作合并成一次請(qǐng)求轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù)執(zhí)行,因此無(wú)法以用戶(hù)請(qǐng)求代理的方式處理。為保證參與表決的SQL 是由同一請(qǐng)求復(fù)制分發(fā)而來(lái)的,算法1 中的步驟4)~步驟6)采用唯一性標(biāo)識(shí)碼和時(shí)間戳在請(qǐng)求的頭部對(duì)請(qǐng)求進(jìn)行標(biāo)記。在此基礎(chǔ)上,通過(guò)修改應(yīng)用程序源代碼,將算法1 中的標(biāo)記信息傳遞至應(yīng)用程序的SQL 中,使數(shù)據(jù)庫(kù)代理通過(guò)該標(biāo)識(shí)能夠識(shí)別不同變體的同一用戶(hù)請(qǐng)求。如示例程序1 所示,應(yīng)用程序獲取請(qǐng)求頭部中的標(biāo)記信息,之后通過(guò)變量將其以注釋的形式拼接至SQL 中。

        示例程序1修改登錄用戶(hù)密碼

        數(shù)據(jù)庫(kù)代理的表決器配置高速緩存,變體的SQL臨時(shí)存儲(chǔ)在緩存中,并設(shè)置超時(shí)時(shí)間,當(dāng)未達(dá)到超時(shí)時(shí)間,若緩存中存在一致的3 條語(yǔ)句,則消除緩存記錄,轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù)執(zhí)行一次;當(dāng)達(dá)到超時(shí)時(shí)間,則直接消除緩存記錄,不予轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù)執(zhí)行,返回空數(shù)據(jù)至多變體。多變體在得到數(shù)據(jù)庫(kù)代理返回的數(shù)據(jù)后,返回響應(yīng)結(jié)果至用戶(hù)請(qǐng)求代理,此時(shí)用戶(hù)請(qǐng)求代理表決器再次對(duì)結(jié)果進(jìn)行表決,由于寫(xiě)操作的請(qǐng)求已經(jīng)在數(shù)據(jù)庫(kù)代理處完成表決,因此多變體的響應(yīng)結(jié)果在用戶(hù)請(qǐng)求代理處表決是一致的。

        3.4 安全性評(píng)估

        根據(jù)SQLMVED 系統(tǒng)的設(shè)計(jì)方法,在對(duì)其進(jìn)行安全性評(píng)估時(shí),需要滿(mǎn)足以下幾個(gè)條件。1) 多變體E1、E2、E3同時(shí)處理請(qǐng)求,都具有獨(dú)立執(zhí)行SQL的能力;2) 多變體E1、E2、E3在不遭受SQLIA 時(shí),均能夠正確地處理SQL;3) 多變體E1、E2、E3任意之間不存在協(xié)同或協(xié)作的聯(lián)系,假設(shè)用戶(hù)請(qǐng)求代理和數(shù)據(jù)庫(kù)代理的設(shè)計(jì)實(shí)現(xiàn)中沒(méi)有漏洞或后門(mén),攻擊者無(wú)法以此為跳板協(xié)同多變體;4) 假設(shè)表決算法的設(shè)計(jì)實(shí)現(xiàn)中也不存在漏洞或后門(mén),由此做出以下形式化推論。

        圖12 IEO 模型

        Ei使用的隨機(jī)化方法集合Vi中隨機(jī)化方法個(gè)數(shù)記為card(Vi),,且card(ω)≤card(Vi),τ為集合ω中的元素。假設(shè)對(duì)于任意一個(gè)變體Ei∈E,采用隨機(jī)化方法集合Vi中每個(gè)方法元素的概率是相等的。根據(jù)式(1)可得出,SQLMVED 系統(tǒng)在某種隨機(jī)化設(shè)計(jì)下被注入成功的概率為

        由此可見(jiàn),SQLMVED 系統(tǒng)的防御能力取決于變體之間隨機(jī)化方法的差異性,由于key1、key2、key3之間互不相同,因此變體之間不存在任何相互一致的隨機(jī)化方法,也就是card(ω)=0,因此攻擊者無(wú)法有效實(shí)施SQLIA。

        4 實(shí)驗(yàn)與分析

        為驗(yàn)證本文設(shè)計(jì)的SQLMVED 系統(tǒng)的有效性,本節(jié)主要從防御有效性測(cè)試和性能測(cè)試對(duì)其進(jìn)行實(shí)驗(yàn)與分析。

        4.1 防御有效性測(cè)試

        防御有效性測(cè)試中,采用VMware Workstation虛擬化環(huán)境搭建實(shí)驗(yàn)平臺(tái),普通未防護(hù)的環(huán)境為L(zhǎng)AMP(Linux、Apache、MySQL、PHP)架構(gòu),施加防護(hù)的環(huán)境為本文提出的SQLMVED 架構(gòu),用戶(hù)請(qǐng)求代理、變體(E1、E2、E3)、數(shù)據(jù)庫(kù)代理、數(shù)據(jù)庫(kù)均采用虛擬機(jī)(VM,virtual machine)進(jìn)行部署,具體配置如表2 所示。

        表2 防御有效性測(cè)試環(huán)境

        選取bWAPP、DVWA、SQLI-LABS 這3 種靶機(jī)應(yīng)用程序中未實(shí)施安全防護(hù)策略的部分,采用sqlmap 工具與人工構(gòu)造注入結(jié)合的方式分別對(duì)部署在LAMP 和SQLMVED 架構(gòu)環(huán)境中的以上3 種靶機(jī)應(yīng)用程序進(jìn)行測(cè)試,測(cè)試結(jié)果如表3 所示。LAMP 架構(gòu)環(huán)境對(duì)3 種靶機(jī)應(yīng)用程序的全部40 個(gè)注入點(diǎn)沒(méi)有任何防御能力,而SQLMVED 架構(gòu)環(huán)境能夠有效防御針對(duì)其中36 個(gè)注入點(diǎn)的攻擊。其中bWAPP 2.2 中SQLite、Stored SQLite、Blind SQLite 注入點(diǎn)無(wú)法防御是因?yàn)镾QLMVED 基于MySQL 數(shù)據(jù)庫(kù)設(shè)計(jì),暫且無(wú)法應(yīng)用于其他類(lèi)型數(shù)據(jù)庫(kù);Drupal 屬于應(yīng)用框架,目前SQLMVED 還未適用所有框架,因此無(wú)法有效防御此注入點(diǎn)。實(shí)驗(yàn)表明,SQLMVED 架構(gòu)能夠有效防御針對(duì)以上3 種靶機(jī)應(yīng)用程序的大部分SQLIA。

        表3 防御有效性測(cè)試環(huán)境

        4.2 性能測(cè)試

        SQLMVED 架構(gòu)環(huán)境在變體E1、E2、E3中部署具有數(shù)據(jù)讀寫(xiě)操作的測(cè)試頁(yè)面,讀寫(xiě)測(cè)試語(yǔ)句如表4 所示,在LAMP 架構(gòu)環(huán)境中也部署同樣的測(cè)試頁(yè)面。

        表4 讀寫(xiě)測(cè)試語(yǔ)句

        為減小虛擬化的實(shí)驗(yàn)環(huán)境對(duì)測(cè)試結(jié)果的影響,以及主要體現(xiàn)讀寫(xiě)過(guò)程的性能損耗,測(cè)試方法采用在連續(xù)的100 次訪(fǎng)問(wèn)中分別記錄測(cè)試頁(yè)面的響應(yīng)時(shí)間。

        讀數(shù)據(jù)測(cè)試結(jié)果匯總?cè)鐖D13 和圖14 所示,SQLMVED 的平均響應(yīng)時(shí)間為47.48 ms,LAMP 的平均響應(yīng)時(shí)間為23.88 ms。SQLMVED 架構(gòu)相較于LAMP 架構(gòu),平均響應(yīng)時(shí)間增加約一倍,大部分響應(yīng)時(shí)間控制在60 ms 以?xún)?nèi),性能損耗可以接受。

        圖13 SQLMVED 讀數(shù)據(jù)測(cè)試結(jié)果

        寫(xiě)數(shù)據(jù)測(cè)試結(jié)果匯總?cè)鐖D15 和圖16 所示,SQLMVED 平均響應(yīng)時(shí)間為4 870.63 ms,LAMP 的平均響應(yīng)時(shí)間為20.6 ms。SQLMVED 的寫(xiě)操作產(chǎn)生了較嚴(yán)重的性能損耗,這是由于SQLMVED 中寫(xiě)數(shù)據(jù)的過(guò)程比讀數(shù)據(jù)更復(fù)雜。但是,通過(guò)防御有效性測(cè)試可以發(fā)現(xiàn),SQLIA 通常發(fā)生在讀數(shù)據(jù)過(guò)程中,因此,若為減小性能損耗,即使只將讀數(shù)據(jù)采用多變體執(zhí)行的方法設(shè)計(jì),也能夠防御大部分SQLIA。

        圖14 LAMP 讀數(shù)據(jù)測(cè)試結(jié)果

        圖15 SQLMVED 寫(xiě)數(shù)據(jù)測(cè)試結(jié)果

        圖16 LAMP 寫(xiě)數(shù)據(jù)測(cè)試結(jié)果

        此外,SQLMVED 原型系統(tǒng)在設(shè)計(jì)實(shí)現(xiàn)中可能存在缺陷,包括防御有效性測(cè)試中發(fā)現(xiàn)的不足,SQLMVED 的局限性將在第5 節(jié)進(jìn)行分析總結(jié)。

        5 局限性分析

        SQLMVED 原型系統(tǒng)的局限性主要體現(xiàn)在以下2 個(gè)方面。

        1) 首先,SQLMVED 的多變體中需要對(duì)應(yīng)用程序的SQL 進(jìn)行隨機(jī)化變化,而SQL 具有跨代碼段、跨函數(shù)、跨文件等多種拼接方式,如何準(zhǔn)確地識(shí)別應(yīng)用程序中的SQL 并進(jìn)行隨機(jī)化變化,可能需要對(duì)程序分析技術(shù)進(jìn)行深入研究。其次,本文使用的隨機(jī)化方法不支持Hibernate、Mybatis 等開(kāi)發(fā)框架,因此SQLMVED 的適用范圍局限于使用原生SQL開(kāi)發(fā)的應(yīng)用程序。

        應(yīng)用程序以網(wǎng)站為例,根據(jù)W3Techs 對(duì)Alexa排名前100 萬(wàn)網(wǎng)站的類(lèi)型統(tǒng)計(jì)結(jié)果來(lái)看,使用原生SQL 開(kāi)發(fā)為主的PHP 網(wǎng)站數(shù)量占比達(dá)到了79%,說(shuō)明SQLMVED 雖然不能適用于所有的應(yīng)用程序,但也具備可觀(guān)的應(yīng)用前景。

        2) 本文在數(shù)據(jù)庫(kù)代理處采用高速緩存解決數(shù)據(jù)庫(kù)讀操作的表決問(wèn)題。但在高并發(fā)數(shù)據(jù)流的背景下,若把所有請(qǐng)求語(yǔ)句都保存在緩存中進(jìn)行表決處理,將會(huì)大大增加表決過(guò)程對(duì)存儲(chǔ)空間的消耗,本節(jié)基于Bloom filter[28]提出SQLMVED 的改進(jìn)思路。

        Bloom filter 是一種存儲(chǔ)空間高效的散列結(jié)構(gòu),被廣泛應(yīng)用在P2P 網(wǎng)絡(luò)寫(xiě)作、網(wǎng)絡(luò)緩存以及網(wǎng)絡(luò)測(cè)量等領(lǐng)域。Bloom filter 可以對(duì)待表決的語(yǔ)句集合采用位串表示,利用數(shù)據(jù)流冗余消除方式對(duì)語(yǔ)句進(jìn)行表決,當(dāng)判定某請(qǐng)求語(yǔ)句是冗余重復(fù)的數(shù)據(jù),就認(rèn)為該語(yǔ)句為3 冗余多變體中的多數(shù)一致語(yǔ)句,由數(shù)據(jù)庫(kù)代理轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù)執(zhí)行,否則丟棄該語(yǔ)句。數(shù)據(jù)流冗余消除算法設(shè)計(jì)的關(guān)鍵問(wèn)題是需要實(shí)時(shí)刪除達(dá)到最大計(jì)數(shù)值的過(guò)期元素,主要算法可以分為3 類(lèi),分別是基準(zhǔn)窗口模式、滑動(dòng)窗口模式、跳躍窗口模式,需要采用何種方式還需要進(jìn)一步研究。

        6 結(jié)束語(yǔ)

        本文在研究了現(xiàn)有多變體執(zhí)行技術(shù)和SQL 注入防御方法的基礎(chǔ)上,結(jié)合兩者的技術(shù)思路,提出了一種基于多變體執(zhí)行的SQL 注入運(yùn)行時(shí)防御方法。首先為應(yīng)用程序在運(yùn)行時(shí)構(gòu)建多變體執(zhí)行架構(gòu);其次通過(guò)隨機(jī)化方法對(duì)應(yīng)用程序的SQL 進(jìn)行變化,保證變體間隨機(jī)化方法的異構(gòu)性;最后在用戶(hù)請(qǐng)求代理和數(shù)據(jù)庫(kù)代理處通過(guò)表決分別發(fā)現(xiàn)異常的數(shù)據(jù)讀操作結(jié)果和數(shù)據(jù)寫(xiě)請(qǐng)求,使攻擊者即使在掌握了變體隨機(jī)化方法的情況下也無(wú)法實(shí)施有效的 SQLIA?;谠摲椒ㄔO(shè)計(jì)實(shí)現(xiàn)了原型系統(tǒng)SQLMVED,并通過(guò)形式化推論證明了SQLMVED的防御能力。性能測(cè)試結(jié)果顯示,由于該方法引入了請(qǐng)求的復(fù)制分發(fā)、語(yǔ)句解析、去隨機(jī)化、表決等處理過(guò)程,會(huì)降低程序性能,因此如何減小對(duì)性能的影響將是未來(lái)工作的重點(diǎn)之一。防御有效性測(cè)試雖然采用靶機(jī)應(yīng)用程序和自動(dòng)化注入工具構(gòu)造的都是已知漏洞攻擊,但是該方法也可以有效防御利用未知漏洞的SQLIA,只要攻擊者構(gòu)造的輸入數(shù)據(jù)中具有SQL 指令,就無(wú)法同時(shí)在多變體中正確執(zhí)行,進(jìn)而無(wú)法通過(guò)表決,防御利用未知漏洞的SQLIA。

        猜你喜歡
        數(shù)據(jù)庫(kù)用戶(hù)方法
        數(shù)據(jù)庫(kù)
        關(guān)注用戶(hù)
        可能是方法不對(duì)
        關(guān)注用戶(hù)
        數(shù)據(jù)庫(kù)
        關(guān)注用戶(hù)
        用對(duì)方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        亚洲黄色一级在线观看| 亚洲中文字幕精品乱码2021| 亚洲av产在线精品亚洲第三站| 欧美肥妇毛多水多bbxx水蜜桃| 欧美粗大猛烈老熟妇| 国产精品福利视频一区| 广东少妇大战黑人34厘米视频| 免费精品美女久久久久久久久久 | 国内精品久久久久国产盗摄| 少妇bbwbbw高潮| 免费女同毛片在线不卡| 91精品久久久老熟女91精品| 国产在线无码精品无码| 人妻少妇久久久久久97人妻| 无码丰满熟妇一区二区| 性色av一区二区三区| 人妻aⅴ无码一区二区三区| 91免费国产| 综合亚洲二区三区四区在线| 美女下蹲露大唇无遮挡| 亚洲av日韩av天堂一区二区三区| 国产成人亚洲综合一区| 亚洲av一二三四又爽又色又色| 国产毛片视频一区二区三区在线 | 亚洲AV无码成人精品区网页| 2021最新久久久视精品爱| 中文字幕有码在线亚洲| 亚洲女同一区二区| 亚洲国产精品日韩av专区| 日本一区二区啪啪视频| 亚洲中文字幕第一页免费 | 免费高清视频在线观看视频| 中文字幕av人妻少妇一区二区| 丰满人妻一区二区三区视频53| 在线欧美不卡| 日本一区二区三区精品不卡| 人妻少妇艳情视频中文字幕| 蜜臀av在线观看| 狼色精品人妻在线视频| 久久精品国产亚洲AV高清y w| 日本一区二区三区视频免费在线|