久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

小谈Intel SGX

發(fā)布時(shí)間:2024/3/7 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小谈Intel SGX 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

Intel SGX簡(jiǎn)介

背景

為什么要Intel SGX?

Intel SGX尚處于學(xué)術(shù)討論

Intel SGX和可信啟動(dòng)什么關(guān)系?

開發(fā)者眼中SGX長(zhǎng)什么樣子?

SGX訪問控制是什么?

MEE與SGX EPC內(nèi)存加密

CPU里面SGX長(zhǎng)什么樣子?

有Enclave的APP的虛擬地址空間長(zhǎng)什么樣?

SGX目錄、文件初體驗(yàn)

SGX和它的小伙伴

SGX應(yīng)用

第一種,SGX應(yīng)用于服務(wù)器端,云端

第二種,應(yīng)用于客戶端

第三點(diǎn),SGX應(yīng)用于分布式客戶端

SGX應(yīng)用的總結(jié)

SGX保護(hù)框架(SGX Shield Framework)

SGX軟件層改進(jìn)

SGX攻防

Intel SGX發(fā)展趨勢(shì)

SGX軟硬件棧

基本介紹

背景知識(shí)

SGX的可信保障及優(yōu)點(diǎn)

SGX的不足

SGX與TrustZone區(qū)別

SGX內(nèi)存布局及訪問控制

SGX軟硬件棧圖示

硬件

驅(qū)動(dòng)

不可信運(yùn)行

可信運(yùn)行時(shí)

應(yīng)用程序

Enclave程序

硬件指令

內(nèi)核權(quán)限硬件指令-ENCLS

用戶權(quán)限硬件指令-ENCLU

SGX初始化過程

EINIT指令過程

驅(qū)動(dòng)接口

SGX API

1. 可信運(yùn)行時(shí)庫(kù)函數(shù)

2. 不可信運(yùn)行時(shí)庫(kù)

3. SGX API應(yīng)用舉例——本地DH會(huì)話建立

SGX開發(fā)特點(diǎn)

橋函數(shù)總結(jié)

SGX參數(shù)及函數(shù)屬性

SGX Switch模式及Switchless模式

SGX初始化

基本介紹

環(huán)境檢查總結(jié)

uRTS端構(gòu)建Enclave總結(jié)

uRTS維護(hù)Enclave、tRTS端構(gòu)建Enclave總結(jié)

收尾及Switchless模式初始化步驟總結(jié)

Intel SGX ECALL

ECALL Switch/Ordinary總結(jié)

ECALL Switchless總結(jié)

OCALL Switch/Ordinary總結(jié)

OCALL Switchless總結(jié)


Intel SGX簡(jiǎn)介

背景

為什么要Intel SGX?

Intel SGX的目標(biāo)就是為了解決目前日益受關(guān)注的“遠(yuǎn)程計(jì)算的安全問題”。

以云環(huán)境為例子,云租戶會(huì)將自己的產(chǎn)品部署在云平臺(tái)中,但是云平臺(tái)現(xiàn)在普遍認(rèn)為是一個(gè)不可信的地方,因?yàn)榭赡軙?huì)有云平臺(tái)管理者、同一云主機(jī)其他租戶的惡意攻擊,也可能云平臺(tái)本身存在漏洞,使得黑客輕易的攻擊并拿到Ring0權(quán)限(就好比我租了房東的一間臥室,我害怕房東、其他租戶、陌生人對(duì)我房間東張西望,甚至搞破壞。)。這種情況下,云租戶就開始擔(dān)心了。

與此同時(shí),Intel SGX出現(xiàn)了,它對(duì)自己做了一個(gè)安全內(nèi)存Enclave的概念,對(duì)安全內(nèi)存實(shí)施權(quán)限控制、加密等安全措施,防止別人(Ring0級(jí)別的攻擊者)非法對(duì)安全內(nèi)存內(nèi)的敏感數(shù)據(jù)代碼進(jìn)行機(jī)密性、完整性、真實(shí)性的破壞(Intel SGX對(duì)可用性并不保障),其中完整性主要通過可信建立Enclave保證,真實(shí)性通過由硬件背書的本地/遠(yuǎn)程認(rèn)證來(lái)確保。就好比我租了房東臥室后,我對(duì)自己臥室的墻進(jìn)行加固,并且對(duì)門加上自己的鎖(內(nèi)存訪問控制),甚至讓房間內(nèi)的東西也進(jìn)行上鎖(內(nèi)存加密),不讓人家偷窺、搞破壞。

除了云環(huán)境,Intel SGX旨在防所有Ring0級(jí)別的攻擊者(OS、VMM等),服務(wù)器中也可以對(duì)敏感部分就行加固。開發(fā)商下放版權(quán)也可以放到客戶端的SGX保證版權(quán)保護(hù)。此外還有對(duì)區(qū)塊鏈這種分布式客戶端的形式就行客戶端本地的SGX保護(hù)。

Intel SGX尚處于學(xué)術(shù)討論

Intel SGX在學(xué)術(shù)圈屬于非常熱門的一個(gè)點(diǎn),論文很多,這說明大家感覺Intel SGX的安全特性很有意義,也說明Intel SGX目前也有不少值得探討的問題存在。

由于Intel SGX會(huì)導(dǎo)致應(yīng)用開發(fā)方式的不同,使得Intel SGX很難真正用于實(shí)際生產(chǎn),這里主要指無(wú)法將原有的產(chǎn)品直接放到SGX中,這是第一點(diǎn)。第二點(diǎn),對(duì)于未來(lái)將開發(fā)的產(chǎn)品,由于產(chǎn)品往往依賴于某些庫(kù),但是實(shí)際中,這些庫(kù)并沒有人將它費(fèi)勁的搬到SGX中,導(dǎo)致SGX只有Intel維護(hù)的標(biāo)準(zhǔn)C/C++庫(kù)等,并沒有豐富的庫(kù),導(dǎo)致Enclave內(nèi)部開發(fā)起來(lái)也費(fèi)勁。此外,Enclave內(nèi)部目前應(yīng)該只支持C、C++的開發(fā),Python、Java這種個(gè)人感覺更適合上層開發(fā)的語(yǔ)言目前沒有支持。

上述說明SGX是個(gè)學(xué)術(shù)寵兒,但是實(shí)際應(yīng)用中,除非工業(yè)界非常感興趣,不然沒有那么多人力物力將不重要的產(chǎn)品搬到SGX中。所以就看產(chǎn)品是否敏感到非用SGX不可。

此外也有Graphene-SGX等能夠讓傳統(tǒng)APP不需要改代碼就能跑在SGX中,但是其會(huì)引入LibOS等相關(guān)內(nèi)容,使得Enclave內(nèi)部冗雜,TCB變大;并且效率受影響,SGX本身由于進(jìn)出Enclave刷新TLB等安全措施導(dǎo)致效率有損耗;兼容性值得考量,個(gè)人不是很了解LibOS,但是對(duì)LibOS能夠提供的兼容性值得考慮。

以我現(xiàn)在觀察發(fā)現(xiàn),基于Graphene-SGX等的產(chǎn)品數(shù)量貌似不如直接用SGX開發(fā)的多,(這個(gè)觀察不一定準(zhǔn)確),一方面是Graphene-SGX知名度不如SGX,一方面是Graphene-SGX出現(xiàn)時(shí)間也略晚,還有一方面就是Graphene-SGX某些特性上并不如直接從SGX開發(fā)來(lái)的高效,穩(wěn)定。

Intel SGX的好伙伴——ARM上的TrustZone,我們似乎也沒有觀察到TrustZone也有很普遍的應(yīng)用,一般還是敏感到需要用到了才不得不用。(觀察不一定準(zhǔn)確)或許未來(lái)又是另一番場(chǎng)景,我便不得而知了,但是可以肯定的是SGX想要廣泛應(yīng)用,必須要SGX支持足夠的中間件、庫(kù),能讓上層便捷的開發(fā)。

Intel SGX還有一點(diǎn)比較要命的就是,它對(duì)性能會(huì)帶來(lái)一定程度的影響,出入Enclave會(huì)有3k+ Cycle,而系統(tǒng)調(diào)用也就0.2k+Cycle,另一個(gè)由于EPC容量有限,目前最大只支持256M,EPC的Swap相對(duì)會(huì)比較頻繁,并且會(huì)引起40K+Cycle。

希望有一天,若為安全故,兩者皆可拋?畢竟解決遠(yuǎn)程計(jì)算安全問題的需求還是很大的。

Intel SGX和可信啟動(dòng)什么關(guān)系?

在SGX之前,可信計(jì)算中可信啟動(dòng)其實(shí)挺火,主要是說從底層Bootloader->BIOS->OS/VMM->APP的一步步遞進(jìn)的可信度量和啟動(dòng)。但是這種模式局限程度高,而且也有人說這限定了就幾個(gè)大廠的產(chǎn)品滿足可信啟動(dòng)的條件,相當(dāng)于某種壟斷。而且這種效率其實(shí)也有影響,且TCB大。

SGX主要還是CPU硬件里面強(qiáng)制將某塊內(nèi)存定義為安全內(nèi)存,并施加硬件級(jí)別的訪問控制等,這樣的話,就不要求整個(gè)主機(jī)都是可信的,只要SGX所管理的Enclave安全內(nèi)存是可信就行(包括Enclave代碼的可信度量和建立)。

開發(fā)者眼中SGX長(zhǎng)什么樣子?

下面這個(gè)是畫的舊圖。

簡(jiǎn)單來(lái)說SGX就是提供了一個(gè)安全內(nèi)存及其相關(guān)。下面稍微講一下SGX軟件棧結(jié)構(gòu)(具體見《SGX軟件棧》文檔)

總的來(lái)說,SGX是劃分兩個(gè)世界的——可信世界和不可信世界。每一個(gè)世界中,想要使用SGX的開發(fā)都需要開發(fā)哪一個(gè)世界的代碼,一般來(lái)說,不可信世界開發(fā)非敏感代碼(稱為APP,另一種理解就是APP也包含Enclave,這樣為了區(qū)分,就把不可信的叫做APP),可信世界開發(fā)敏感代碼(Enclave),或者說敏感代碼移入了可信世界。

既然有了兩個(gè)世界,他們之間的連接就需要有一個(gè)叫做橋函數(shù)的東西,ECALL橋能讓APP可以調(diào)用橋函數(shù)間接調(diào)用Enclave中寫好的API函數(shù)。反向的有個(gè)叫OCALL橋的東西。橋函數(shù)上承載著兩個(gè)世界間傳遞的參數(shù),而且ECALL中,Enclave并不信任APP傳給Enclave的ECALL參數(shù),所以需要參數(shù)的消毒檢查。OCALL有點(diǎn)類似。

既然要開發(fā)程序,就要用到SDK(我這里是把可信Enclave使用的SDK稱為SDK,這也符合Intel的叫法,另一種理解是SDK包括給不可信APP使用的PSW、給可信Enclave使用的SDK、橋函數(shù))和PSW,這兩個(gè)都是Intel提供的(linux下見github.com/intel/linux-sgx)。由于Enclave要保證自己內(nèi)部開發(fā)的函數(shù)盡可能不會(huì)離開Enclave,所以Enclave內(nèi)部用的SDK都是用靜態(tài)庫(kù)鏈接,除非萬(wàn)不得已,比如系統(tǒng)調(diào)用等,那么就得同OCALL橋到不可信世界完成任務(wù)。然后頂多是啟發(fā)式的對(duì)OCALL返回值進(jìn)行檢查(而且目前Intel并無(wú)消毒檢查,除非Enclave開發(fā)者自己做檢查)。

PSW、SDK一部分功能是用于我們傳統(tǒng)的那種為了具有某個(gè)功能而開發(fā)的函數(shù),還有一部分是對(duì)CPU提供的SGX功能指令的包裝,主要用于SGX特性的支持,為了讓你真正和CPU溝通,并獲得SGX特性支持。SGX特性是通過CPU向外面提供Ring0指令和Ring3指令,其中Ring0指令ENCLS主要有一些比如創(chuàng)建Enclave這種生命周期管理、頁(yè)權(quán)限管理的指令。Ring3指令ENCLU主要是讓控制流能夠在兩個(gè)世界之間流動(dòng),比如進(jìn)出Enclave這種。

這一塊的細(xì)節(jié)可以看《SGX軟件棧》。

SGX訪問控制是什么?

SGX訪問控制是說對(duì)Enclave安全內(nèi)存進(jìn)行訪問控制,不能讓攻擊者非法訪問敏感內(nèi)存。這主要還是通過CPU內(nèi)部實(shí)現(xiàn)的。有SGX特性CPU能夠讓不可信APP只有滿足進(jìn)入它的Enclave的條件時(shí)才能放行,而且Enclave A和Enclave B之間是互相不可訪問的。這種邏輯是CPU里面的EPCM和內(nèi)存RAM中被CPU定義為EPC里面的SECS結(jié)構(gòu)體、TCS結(jié)構(gòu)體這些單元連動(dòng)完成的。

《SGX技術(shù)的分析和研究》有介紹具體有哪幾則訪問控制。

MEE與SGX EPC內(nèi)存加密

EPC,Enclave Page Cache,是被加密的安全內(nèi)存頁(yè),由MEE加密。

MEE是Memory Encrypt Engine,內(nèi)存加密引擎,會(huì)對(duì)從CPU緩存、寄存器之類的地方往其他如內(nèi)存(比如EPC)、硬盤運(yùn)輸之前都加密,因此在內(nèi)存、硬盤的敏感數(shù)據(jù)都是加密的。

這種好處就是能夠抗總線攻擊,防止攻擊者直接物理連接總線竊取敏感數(shù)據(jù)。劣勢(shì),就是或多或少會(huì)有加密導(dǎo)致效率的影響,雖然說MEE已經(jīng)是一個(gè)專門的用來(lái)加密的模塊。

CPU里面SGX長(zhǎng)什么樣子?

這張圖主要是講SGX初始化過程的,也可以拿來(lái)講解CPU里面多了哪些部件。下面中間RAM這個(gè)是內(nèi)存,內(nèi)存里面一部分EPC就是存放Enclave的安全內(nèi)存池,里面有多個(gè)安全內(nèi)存頁(yè),每個(gè)Enclave按需從這里拿取Enclave安全內(nèi)存頁(yè)。

最左下角EPCM(Enclave Page Cache Map)是一個(gè)安全內(nèi)存管控的內(nèi)置微架構(gòu)結(jié)構(gòu)體(internal micro-architecture structure ),會(huì)由PMH硬件模塊進(jìn)行查EPCM,進(jìn)行訪問控制。PMH和EPCM主管對(duì)EPC的訪問控制,會(huì)依賴SECS、TCS聯(lián)動(dòng)判斷。

圖片右下角就是CPU及其MMU、MEE部件,MMU是傳統(tǒng)的地址翻譯部件,MEE是說SGX能夠做到在EPC中的敏感數(shù)據(jù)能夠明文存在(因?yàn)橛性L問控制,不擔(dān)心被偷窺),但是EPC中的數(shù)據(jù)一旦會(huì)轉(zhuǎn)到普通硬盤中的(由于EPC大小一般是256M,因此會(huì)出現(xiàn)換入換出到硬盤的情況),那么MEE就加密那個(gè)明文,只讓密文存在于硬盤中。其實(shí)MEE不單單是對(duì)換入換出到硬盤就行加密,它對(duì)任何離開CPU安全邊界的明文都進(jìn)行加密。

最左上角是Enclave代碼,這里代表的意思是Enclave代碼已經(jīng)放到了EPC中,然后圖片上講原來(lái)在RAM的EPC中的Enclave,單獨(dú)畫出到外面來(lái),它本質(zhì)是存在于EPC中的。

上面這個(gè)APP和Enclave代碼是一個(gè)二進(jìn)制文件,最終會(huì)被加載到內(nèi)存的普通內(nèi)存(APP部分代碼)和安全內(nèi)存中(Enclave部分代碼)。

中間OS是在Enclave啟動(dòng)過程中(從無(wú)到有),完成對(duì)安全內(nèi)存頁(yè)申請(qǐng),代碼復(fù)制進(jìn)安全內(nèi)存頁(yè)等一系列操作的管理(《SGX軟件棧》文檔中有專門講這個(gè))。我之前說了OS是不可信的,所以通過OS啟動(dòng)Enclave會(huì)需要一些額外的措施:Architectural Enclave這個(gè)特殊的Enclave(由Intel簽名并啟動(dòng)起來(lái)的Enclave)會(huì)對(duì)Enclave的完整性進(jìn)行簽名保證,Enclave被OS啟動(dòng)過程中,相應(yīng)的啟動(dòng)過程的度量會(huì)放在EPC的SECS中,最后會(huì)對(duì)AE簽名的那個(gè)度量值比對(duì),為了防止OS對(duì)Enclave啟動(dòng)過程中做小動(dòng)作。

總結(jié)一下,CPU本身擴(kuò)充了很多硬件指令,可以分為兩大類ENCLS、ENCLU。上圖可以看到CPU所增加的硬件部件,有MEE、PMH(查EPCM)、Intel ME(粗粗了解到它提供可信輸入和可信時(shí)間)(其他暫且沒想到,似乎還有)。

SGX初始化過程大概就是建立時(shí)候申請(qǐng)安全內(nèi)存頁(yè),然后將Enclave代碼放進(jìn)去,并且度量建立過程是否可靠。(細(xì)節(jié)見《SGX軟件棧》)

有Enclave的APP的虛擬地址空間長(zhǎng)什么樣?

APP依然還是那個(gè)APP,有著常見的虛擬地址空間(比如4G,32位地址下),然后其中有一整塊,比如0X700-0X800(通過觀察一般都是高地址,這里只是隨便寫了)是給Enclave的,因?yàn)镋nclave是一個(gè).so動(dòng)態(tài)庫(kù)鏈接給APP的,Enclave虛擬地址的起始地址依賴于ALSR地址空間隨機(jī)化給定。

那我們假設(shè)訪問某個(gè)Enclave函數(shù)時(shí),我們用的這個(gè)函數(shù)的虛擬地址(和正常虛擬地址空間里面調(diào)用函數(shù)一樣),然后會(huì)經(jīng)過MMU的虛實(shí)地址轉(zhuǎn)換,變成物理地址,這個(gè)物理地址會(huì)指向EPC,前面講了EPC是RAM中的一部分(而且是靠前的一部分,存在于PRM中,由BIOS和范圍寄存器來(lái)決定EPC的大小),所以EPC也是有物理地址的,這也很正常。物理地址拿到后,想要訪問EPC物理頁(yè),那么請(qǐng)先經(jīng)過EPCM的訪問控制檢查。如果通過了,那么IP寄存器就會(huì)給到那個(gè)Enclave函數(shù)了。

SGX目錄、文件初體驗(yàn)

?

和傳統(tǒng)應(yīng)用開發(fā)不同,上圖可以看到APP、Enclave是分開編寫的。命名倒是無(wú)所謂,具體會(huì)通過Makefile里面說明把哪些編程Enclave。

?

此外,通過這個(gè)EDL文件可以清楚的看到光是進(jìn)出Enclave的接口就分開了。一部分trusted括起來(lái)的是ECALL用來(lái)進(jìn)入Enclave,untrusted括起來(lái)的是OCALL,用來(lái)離開Enclave。

SGX和它的小伙伴

要知道可信執(zhí)行環(huán)境不止Intel SGX一家,所以很多思想可能值得借鑒的地方,并且,應(yīng)該是能夠以可信執(zhí)行環(huán)境一個(gè)更高的高度來(lái)看待這些應(yīng)用攻防的問題。

硬件比如還有TrustZone、RISC-V KeyStone、AMD SEV、RISC-V 蓬萊TEE。軟件有Virtual Ghost、SP3、Overshadow、InkTag、CHAOS、AppShield(這個(gè)不一定準(zhǔn)確),他們都或多或少有類似Enclave的可信執(zhí)行環(huán)境的概念。

SHIELDING SOFTWARE FROM PRIVILEGED SIDE-CHANNEL ATTACKS(SEC’18)這篇是關(guān)于Virtual Ghost的工作。它做了兩個(gè)工作。第一,針對(duì)已有的頁(yè)表側(cè)信道,它的做法是將頁(yè)表機(jī)制由Virtual Ghost內(nèi)部來(lái)完成,OS所保管的Direct Map中對(duì)于Virtual Ghost內(nèi)部安全有用戶空間的映射被刪除。第二,針對(duì)LLC側(cè)信道,利用Intel Cache Allocation Technology,從硬件層面對(duì)LLC實(shí)施隔離,不讓OS窺探Virtual Ghost內(nèi)部的存放于LLC中隱私。Intel CAT技術(shù)是Intel RDT的子模塊,我目前感覺和SGX一樣是向用戶態(tài)提供Ring3指令用于CPU特性管理(可能存在錯(cuò)誤)。

接下來(lái)我們講講現(xiàn)在有哪些SGX的研究了。分類方法主要依賴于CCS’17中,關(guān)于SGX的三篇綜述

SGX應(yīng)用

第一種,SGX應(yīng)用于服務(wù)器端,云端

這一類個(gè)人覺得很需要結(jié)合代碼、它們所描述的行業(yè)需求和以前的行業(yè)產(chǎn)品去考慮問題,畢竟是應(yīng)用,不然可能體會(huì)不到精髓。

我對(duì)SGX應(yīng)用的理解也停留在表層,就是他們拿SGX大概做了個(gè)啥,但是有些細(xì)節(jié),我目前也說不太上來(lái)。

?DelegaTEE(SEC’18)?Sini?a Mateti? (ETH Zurich)下一篇也是他?

?

以前Alice(Owner)想將自己部分Paypal中的資產(chǎn)給Bob(Delegatee),需要將賬戶密碼交給對(duì)方,這很不安全。(我們不考慮錢能直接通過轉(zhuǎn)賬,因?yàn)橛械馁Y產(chǎn)并不像轉(zhuǎn)賬那樣可以簡(jiǎn)單實(shí)現(xiàn),那樣單純是金額的加減。我們討論的是一大類授權(quán)的問題)。

那么現(xiàn)在用上一個(gè)憑證和對(duì)憑證以及用戶身份信息驗(yàn)證的一個(gè)服務(wù)器Brokered System。Brokered System能夠根據(jù)Alice具體將多少資產(chǎn)以怎么樣的形式分享給Bob這件事生成憑證,并且憑證一方面分享給Bob,另一方面儲(chǔ)存在服務(wù)器中,Bob登錄服務(wù)器后,證明自己是Bob,并且把憑證給服務(wù)器一看,服務(wù)器覺得OK并且Bob想用掉這筆資產(chǎn)的時(shí)候,服務(wù)器就讓Paypal去完成比如支付Money的操作,可以看到驗(yàn)證的事情被放到了Brokered System服務(wù)器上面去做,Paypal直接和Brokered System合作,而不再和用戶直接接觸。帶來(lái)的好處是什么呢?是Paypal和Bob、Alice之前不需要互相信任,再無(wú)瓜葛,只需要信任Brokered System即可。這里可能看起來(lái)是一個(gè)妖異的設(shè)定:我的理解是因?yàn)楸緛?lái)Paypal沒有這個(gè)功能,Brokered System作為第三方模塊來(lái)實(shí)現(xiàn)這個(gè)功能,想盡辦法完成這種類似可信紅娘的牽線工作。

那么我們似乎還沒說到SGX。我們可以看到這時(shí)Brokered System中憑證的存儲(chǔ)、驗(yàn)證、使用非常敏感,同時(shí)Alice和Bob的個(gè)人信息也需要被嚴(yán)格保護(hù),作者就想到使用SGX來(lái)對(duì)這個(gè)服務(wù)器來(lái)進(jìn)行保護(hù)。所以這里應(yīng)該來(lái)說時(shí)SGX在服務(wù)器端的簡(jiǎn)單嘗試,更多的是授權(quán)的內(nèi)容,但是授權(quán)的方式已經(jīng)就有類似的(Kerberos系統(tǒng)也是授予ticket,和使用ticket的模式),所以它討論的亮點(diǎn)還是SGX的應(yīng)用,難度可能在于SGX的開發(fā)并且做成一個(gè)實(shí)際產(chǎn)品。

這篇論文通過視頻看的,可能理解不到位,有錯(cuò)誤歡迎反饋。

?BITE(SEC’19)?Sini?a Mateti? (ETH Zurich)?

?

區(qū)塊鏈中,我們知道手機(jī)等資源有限設(shè)備是不可能承載一個(gè)區(qū)塊鏈的完全節(jié)點(diǎn),所以手機(jī)上一般都是輕節(jié)點(diǎn),并且輕節(jié)點(diǎn)是根據(jù)需求向完全節(jié)點(diǎn)申請(qǐng)當(dāng)前涉及的區(qū)塊等信息。但是Light Node向Full Node請(qǐng)求地址對(duì)應(yīng)內(nèi)容時(shí),Full Node勢(shì)必要知道你所請(qǐng)求的啥,導(dǎo)致信息泄露。之前有個(gè)Bloom Filter試圖通過一個(gè)類似哈希表(或者是個(gè)承載多個(gè)對(duì)等數(shù)據(jù)單元的數(shù)據(jù)結(jié)構(gòu))并且模糊化訪問這個(gè)數(shù)據(jù)結(jié)構(gòu)的過程來(lái)解決這個(gè)信息泄露的問題,但是作者說共享Bloom Filter依然會(huì)導(dǎo)致信息泄露(Bloom Filter這一塊我只是大概聽說過,不了解)。

那么有了SGX這個(gè)東西,作者就利用SGX內(nèi)部部署Full Node端用來(lái)接收Address請(qǐng)求的模塊,這樣部署在服務(wù)器上也不用擔(dān)心Ring0攻擊者的迫害了。所以本質(zhì)也是SGX對(duì)原有產(chǎn)品的改進(jìn)。此外有一些細(xì)節(jié)是說:通過Scan Window或者ORAM來(lái)返回結(jié)果值,為了保證SGX執(zhí)行中的側(cè)信道問題。ORAM已經(jīng)有挺多論文用來(lái)防止訪存?zhèn)刃诺绬栴},后面也會(huì)提到(【寫到后面時(shí)把名字貼上來(lái)】)。現(xiàn)實(shí)中,走路時(shí)拐七繞八的方式讓陌生人不知道我們具體要去哪里。你可能說,陌生人會(huì)看到我們最終進(jìn)入哪個(gè)建筑,那么如果說有那么一個(gè)傳送門,進(jìn)的看起來(lái)是A建筑,實(shí)際傳送到了B建筑,(這是通過查表轉(zhuǎn)換實(shí)現(xiàn)),那么陌生人就只能犯糊涂了。這里需要知道的就是說ORAM可以通過類似上述方式讓攻擊者無(wú)法得知受害者的訪存情況。

(可以看到目前SGX應(yīng)用在某些知名產(chǎn)品上,對(duì)原有模塊的替換或改進(jìn),會(huì)受到大家很大的關(guān)注。)

EnclaveDB(S&P18)微軟和倫敦帝國(guó)學(xué)院合作的

?

數(shù)據(jù)庫(kù)DB可以說是大部分產(chǎn)品都要依賴的東西,計(jì)算機(jī)世界基礎(chǔ)中的基礎(chǔ)。但是現(xiàn)在服務(wù)器里面大家都考慮Ring0攻擊者的威脅了,那么DB里面的資料可不能讓Ring0攻擊者偷取,因?yàn)槿藗儗?duì)于敏感信息的保密要求是越來(lái)越高。以前有通過加密方式的DB,加密的方式效率低,這個(gè)可想而知,加密算法固有的缺陷。

那么服務(wù)器有了SGX,我們就干脆將部分敏感的數(shù)據(jù)庫(kù)放入Enclave,通過SGX而不是加密方式來(lái)保證安全,同時(shí)通過完善的日志記錄模式和事務(wù)備份恢復(fù)來(lái)保證完整性。上圖藍(lán)色是可信的部分,客戶端默認(rèn)是可信的,一般用戶自己不會(huì)坑自己,這里不考慮自己電腦被攻擊了,只考慮服務(wù)端有Ring0攻擊。第一步,我們?cè)谟疑辖堑臇|西比如可信DB、預(yù)編譯的Stored Procs會(huì)被通過簽名加密等安全措施,被部署到服務(wù)器端的Enclave。第二步,其他客戶端申請(qǐng)查詢請(qǐng)求時(shí)候,通過自己的Client庫(kù)通過左邊Host Process間接和Enclave搭上勾并進(jìn)行真正的查詢操作。

這一篇從視頻上來(lái)看,它告訴我們SGX應(yīng)用要考慮部署和使用兩件事。

小結(jié)

上圖是CCS’17上一位大佬講的SGX服務(wù)端應(yīng)用的論文列表(部分文章其實(shí)也可以歸于SGX Shield Framework類,后面單獨(dú)拎出來(lái)),和我隨機(jī)看的那幾篇有交集。但是我有一個(gè)明確的感受就是,想要做SGX應(yīng)用,得有原來(lái)那種產(chǎn)品的很清楚的了解,我光看視頻沒法深入理解SGX應(yīng)用的真正意義。以后若有需求會(huì)去看論文或者相關(guān)的代碼框架。

不過總的來(lái)說,SGX應(yīng)用是真正體現(xiàn)SGX價(jià)值的地方,現(xiàn)階段的SGX應(yīng)用可能思路上簡(jiǎn)單(實(shí)現(xiàn)可能也復(fù)雜),但是這將代表SGX這項(xiàng)技術(shù)是有意義的。并且服務(wù)端的SGX應(yīng)用你需要考慮SGX應(yīng)用部署和使用兩件事。

另外值得一題的是,我們多多少少可以看出SGX是同態(tài)加密的一個(gè)好的替換品。同態(tài)加密是通過密碼學(xué)的方法讓你無(wú)法感知(秘密+秘密=秘密)這個(gè)過程,而SGX就是在保險(xiǎn)箱里面完成(秘密明文+秘密明文=秘密明文)的工作,明文算起來(lái)就很快。

第二種,應(yīng)用于客戶端

這一塊的內(nèi)容相對(duì)少一些,目前大家所能想到的就是比如游戲開發(fā)商在下放游戲許可證等版權(quán)信息的時(shí)候,那么就用SGX內(nèi)部來(lái)保存版權(quán)信息,你想玩游戲,得通過SGX內(nèi)部版權(quán)信息的驗(yàn)證。但是我覺得這一點(diǎn)上,可能對(duì)于很強(qiáng)的逆向工程高手來(lái)說,可能無(wú)意義,因?yàn)槟嫦蚬こ棠嫦虻氖谴a,SGX內(nèi)部的敏感數(shù)據(jù)顯得不重要了。除非游戲里面的部分關(guān)鍵代碼也在SGX里面(個(gè)人猜測(cè),正常情況下,Enclave代碼是公開可見的,SGX保護(hù)的是代碼完整性,SGX保護(hù)的機(jī)密性是隱私數(shù)據(jù)的機(jī)密性,不過也有論文是能夠?qū)nclave代碼秘密地加載到SGX中),那么逆向工程會(huì)變得極其困難。

這張圖大概展示了客戶端SGX應(yīng)用的大概樣子,主要我個(gè)人對(duì)OTP不懂,所以不太好闡述,但是我們可以看到這個(gè)框架就是客戶端SGX和開發(fā)商之間有安全授權(quán)、配置的過程,那么Enclave可以看作開發(fā)商的飛地了(可以聯(lián)想領(lǐng)事館這個(gè)概念)

第三點(diǎn),SGX應(yīng)用于分布式客戶端

這類的論文和工作也不多,主要可能大家想法有限。我自己有一個(gè)想法就是分布式SGX客戶端下,我們可以將服務(wù)端的某些貼近客戶端的部分功能(或者全部功能)給移到客戶端來(lái)降低服務(wù)端的攻擊范圍和單點(diǎn)失效問題。有一點(diǎn)像客戶端冗余來(lái)彌補(bǔ)服務(wù)端單點(diǎn)的種種問題。

分布式SGX可能的應(yīng)用模式

有了SGX,我們可以將中心化任務(wù)做成分布式,而不用擔(dān)心分布式客戶端上的用戶會(huì)故意不按照預(yù)期流程執(zhí)行,因?yàn)镾GX已經(jīng)不能被Ring0攻擊了。這有點(diǎn)像我有個(gè)公司,我把我們公司的會(huì)計(jì)、法務(wù)都給派到了顧客家里,而且這會(huì)計(jì)和法務(wù)是絕對(duì)忠誠(chéng)的。

以前也有分布式相關(guān)的工作,但是方式都通過加密、冗余備份來(lái)實(shí)現(xiàn)可靠性。而我們通過SGX先天提供可信執(zhí)行環(huán)境,那么就不再需要加密、冗余備份的操作,而且將流程化簡(jiǎn),功能性和擴(kuò)展性也可以很好的提升。因此又體現(xiàn)了:SGX是加密方案的高效替代品

中心化任務(wù)分布式程度理論上是可以調(diào)節(jié)的,就是具體有多少模塊貼近客戶端。借此我們可以可以根據(jù)分布式SGX的計(jì)算資源和存儲(chǔ)資源的多少來(lái)進(jìn)行一個(gè)具體的中心化任務(wù)分布式程度的界定。

其實(shí)上述這種抗Ring0攻擊的Enclave其實(shí)不單單只有SGX可以做到,還有其他SGX的小伙伴也能。有一篇【SecTEE】講的是Trust Zone下提供Enclave的概念,它里面說只要提供隔離機(jī)制的CPU均有望實(shí)現(xiàn)Enclave。

上面大概講了下SGX分布式應(yīng)用的一種可能模式,那么具體的可能可以用于分布式存儲(chǔ)、分布式計(jì)算、分布式授權(quán)。

有一個(gè)功能這里也值得一提,【VC3、SGX-Shield】能夠做到Enclave代碼隱蔽載入Enclave內(nèi)存(通過遠(yuǎn)程載入具體代碼),或者我想有可能本地Enclave代碼加殼也能夠做到Enclave代碼保密的效果【目前可能尚未實(shí)現(xiàn)】(但是一般來(lái)說代碼加殼可以抗靜態(tài)分析,能否抗動(dòng)態(tài)分析尚不清楚,而且可能有賴于具體實(shí)現(xiàn))。對(duì)此我想利用的點(diǎn)是說,可以將Enclave代碼對(duì)分布式客戶端隱藏,就是悄悄地帶入分布式客戶端的SGX內(nèi),避免不必要的Enclave代碼公開。

現(xiàn)在,我們?cè)倏紤]分布式客戶端會(huì)有Enclave被開、關(guān)、重啟的情況,為了保證Enclave內(nèi)數(shù)據(jù)在不同時(shí)間段依然一致且有效,可以通過密封操作來(lái)保證狀態(tài)連續(xù)性。目前密封操作有回滾攻擊的危險(xiǎn)。對(duì)此,密封操作的抗回滾方案有【SGX Monotone Counter、ROTE……】。

單獨(dú)考慮分布式授權(quán)案例,將授權(quán)和驗(yàn)證的功能(相當(dāng)于公司工作人員)派到客戶端。為了防止分布式SGX某個(gè)節(jié)點(diǎn)被攻陷然后對(duì)全局產(chǎn)生危害,那就依然可以采用中心化+分布式相結(jié)合的方案,也就是說有多少功能下放到分布式SGX的程度進(jìn)行考量(比如分布式SGX節(jié)點(diǎn)只被賦予有限的權(quán)限,但也能很大程度滿足正常驗(yàn)證需求,使得攻擊者攻破分布式SGX節(jié)所能獲得的權(quán)力有限)。

最后,審計(jì)的需求、日志的維護(hù)可以參考【EnclaveDB、ROTE】的做法。此外,日志管理細(xì)節(jié)上可以做冗余備份,然后借鑒Counter【SGX Monotone Counter、ROTE……】實(shí)現(xiàn)一致性維護(hù)。

SGX應(yīng)用的總結(jié)

現(xiàn)在SGX漸漸應(yīng)用于傳統(tǒng)模塊的替換,然后提下SGX價(jià)值,目前的工作應(yīng)該說不多。不過也恰恰體現(xiàn)了SGX的潛力,然后未來(lái)還有很多SGX的工作可以做。

(其實(shí)SGX應(yīng)用也包括,SGX保護(hù)框架,SGX軟件層改進(jìn),單獨(dú)拎出來(lái))

SGX保護(hù)框架(SGX Shield Framework)

Haven(OSDI14)?微軟

SGX已經(jīng)硬件實(shí)現(xiàn)了,但是,很多老的APP并沒有用上SGX。并且SGX的代碼開發(fā)和原來(lái)不太一樣了,得把代碼劃分成Enclave內(nèi)外兩個(gè)部分。那么意味著老的APP很難用上SGX了,因?yàn)椴皇撬腥硕荚敢饣獍言瓉?lái)的APP移到SGX上。那么怎么把老的APP放到SGX上呢?微軟提供了Haven方案。

?

?

Haven架構(gòu)如圖:Enclave(APP->LibOS->Shield模塊)->uRTS->OS的棧結(jié)構(gòu)(LibOS在這里的作用相當(dāng)于自己租的臥室內(nèi)搭建一個(gè)小廚房等設(shè)施,盡可能的不與外界打交道,盡可能不用外面的大廚房)。這樣子,整個(gè)APP都是Enclave內(nèi)部的,APP和LibOS打交道就行,LibOS或者直接滿足APP的需求,或者向外讓Host OS完成具體需求。總之APP就不用改代碼了。

如上所說,Enclave仍然會(huì)有小部分的比如系統(tǒng)調(diào)用需要與外界接觸(好比小廚房的電、氣還是得走總的房子的電、氣)。此外,SGX還有一些細(xì)節(jié)限制:EPC大小有限(比如256M),頁(yè)錯(cuò)誤等異常仍然由外界OS來(lái)處理,還有很多硬件指令Enclave內(nèi)不能調(diào)用……。

上述這種有Enclave與外界接觸的情況,就有被攻擊的風(fēng)險(xiǎn),只要SGX與外部有啥共享的機(jī)制,就可能被攻擊,SGX側(cè)信道很多就是基于共享機(jī)制(后面會(huì)講)。

LibOS和庫(kù)直接塞入SGX會(huì)導(dǎo)致TCB過大的問題,小結(jié)處會(huì)討論Haven和他的小伙伴們,進(jìn)行一個(gè)橫向?qū)Ρ取?/p>

SCONE(OSDI16)

?

SCONE的初衷應(yīng)該就是想讓容器能夠由SGX進(jìn)行安全加固。同時(shí)最好就是容器可以直接在Enclave中跑,不需要修改,因此它提出如上圖架構(gòu)。

它發(fā)現(xiàn)其實(shí)并不需要整個(gè)LibOS都移進(jìn)來(lái)也能完成對(duì)容器的支撐,因此將LibOS概念移除,移除了包含網(wǎng)絡(luò)和文件Shield層、多線程(不支持多進(jìn)程)、MUSL等。

另外它還實(shí)現(xiàn)了一套異步系統(tǒng)調(diào)用的機(jī)制(可能是處于安全考慮?目前尚不清楚)。

可以看到SCONE的架構(gòu)和Haven就有一些區(qū)別了,SCONE的TCB相對(duì)Haven更小(Haven的LibOS代碼、庫(kù)的代碼量很大),同時(shí)效率也得到了提升。不過SCONE架構(gòu)中,Enclave與外界的接口更多了,因?yàn)镾CONE里面刪除了很多東西,意味著這些東西都得找HostOS提供。

Ryoan(OSDI16)

作者認(rèn)為SGX原來(lái)的機(jī)制主要是為了保護(hù)Enclave免受Enclave外部的攻擊,但是Enclave本身可能有意或無(wú)意的將Enclave內(nèi)的信息泄露給Enclave外部(偏主動(dòng)式的)。于是作者在Enclave內(nèi)放置一個(gè)沙箱來(lái)執(zhí)行代碼(比如與外界的輸入輸出(包括內(nèi)存拷貝等)進(jìn)行加密或管控、系統(tǒng)調(diào)用的管控、檢查點(diǎn)),在SGX基礎(chǔ)上增強(qiáng)安全性,并且還能防御部分軟件側(cè)信道。

Panoply(NDSS17)

?

為了讓傳統(tǒng)程序能夠不改代碼的移植到Enclave中,Haven、Graphene-SGX中將LibOS移入Enclave,并仿真地提供系統(tǒng)調(diào)用、線程、事件處理、Forking等功能(最終會(huì)轉(zhuǎn)換到Host OS的系統(tǒng)調(diào)用),但是也會(huì)導(dǎo)致TCB太大(主要是庫(kù)比較大),效率低等。SCONE、Ryoan使用容器、沙箱來(lái)向上支撐傳統(tǒng)程序,但是如Fork/Exec等功能無(wú)法仿真(因?yàn)楸旧聿⒉皇窍馠aven那樣整個(gè)LibOS都搬進(jìn)SGX),這種選擇一般來(lái)說TCB很小(主要是庫(kù)不在Enclave內(nèi)),效率個(gè)人猜測(cè)會(huì)高于Haven這種。

Panoply另辟蹊徑,或者說上述兩種綜合一下,將Libssl等庫(kù)(Haven中將其放在Enclave中)專門用一個(gè)Enclave來(lái)執(zhí)行,目的是為了實(shí)現(xiàn)復(fù)用(不需要每個(gè)Enclave保留一份,降低TCB),然后想要調(diào)庫(kù),就向庫(kù)Enclave發(fā)出申請(qǐng),庫(kù)Enclave返回結(jié)果。可以放心的是Enclave間的調(diào)用(通信)走的是加密信道,同時(shí)彼此實(shí)現(xiàn)相互認(rèn)證。

另一個(gè)點(diǎn)和SCONE還是有點(diǎn)像,就是Enclave留一個(gè)Shim來(lái)執(zhí)行系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)各種豐富的功能,具體實(shí)現(xiàn)放到不可信的Host OS中。

Panoply這種庫(kù)Enclave的想法一定程度實(shí)現(xiàn)代碼復(fù)用,降低TCB,不過應(yīng)該會(huì)導(dǎo)致面向HostOS的接口變多,Haven中Enclave與HostOS的接口只有20+。

總之,Haven、Panoply都能幫助傳統(tǒng)程序不改代碼移植,間接提供系統(tǒng)調(diào)用、線程等功能,區(qū)別在于Haven通過LibOS實(shí)現(xiàn)了很多OS功能,Panoply留了個(gè)接口給Enclave,讓有些功能由HostOS來(lái)做。Panoply庫(kù)Enclave的概念挺新穎,用來(lái)實(shí)現(xiàn)代碼復(fù)用。

?

Panoply的庫(kù)Enclave思想其實(shí)和RPC有點(diǎn)接近。

Graphene-SGX(ATC17)

?

個(gè)人覺得這個(gè)和Haven類似,或者說Haven架構(gòu)的Linux下實(shí)現(xiàn),Haven是Win下的實(shí)現(xiàn)。Haven應(yīng)該是20個(gè)固定系統(tǒng)調(diào)用,Graphene-SGX是28個(gè)固定系統(tǒng)調(diào)用(18個(gè)系統(tǒng)調(diào)用會(huì)有檢查)。除了向上支持Linux傳統(tǒng)軟件,后來(lái)還能夠支持容器(這一點(diǎn)可能挺有意思),未來(lái)將支持EDMM(Enclave Dynamic Memory Management)。

EDMM這是個(gè)SGX v2新增的機(jī)制,背后由新增的硬件指令實(shí)現(xiàn),目的是說SGX v1時(shí)候,我一開始聲明Enclave多大,那加載起來(lái)的Enclave就那么大,大小不能再改了,SGX v2增加EDMM,讓Enclave可以建立以后,也就是運(yùn)行的時(shí)候動(dòng)態(tài)申請(qǐng)新的EPC頁(yè),滿足Enclave大小的變化。

SGX軟件層改進(jìn)

Eleos(EuroSys17)

文章首先講了SGX帶來(lái)的開銷。第一點(diǎn),SGX帶來(lái)的直接開銷:進(jìn)出Enclave要3300/3800周期,而系統(tǒng)調(diào)用也就250周期;LLC Miss開銷是非Miss下的5.6~9.5倍;EPC頁(yè)換入換出硬盤Swap區(qū)需要40,000周期。第二點(diǎn),SGX帶來(lái)的間接開銷:由于安全期間進(jìn)出Enclave會(huì)刷新TLB(LLC我忘了是否刷新,L1在Intel的微碼補(bǔ)丁之前是不刷新,Foreshadow的出現(xiàn)導(dǎo)致Intel也做L1的刷新了。),LLC污染會(huì)造成2倍延遲、TLB污染可能造成6倍延遲。

上述實(shí)驗(yàn)結(jié)果主要說明了進(jìn)出Enclave開銷大。無(wú)論是正常的Enclave退出還是頁(yè)錯(cuò)誤之類的問題導(dǎo)致Enclave退出(AEX)都會(huì)帶來(lái)很大的延遲,因此通過非Enclave退出的方式——RPC,來(lái)替換Enclave退出的功能;而關(guān)于頁(yè)錯(cuò)誤則通過一個(gè)安全的用戶空間頁(yè)表機(jī)制SUVM(見下圖,大概是說軟件實(shí)現(xiàn)了虛實(shí)地址翻譯工作,Enclave頁(yè)表也放在Enclave內(nèi)部,原來(lái)都是統(tǒng)一用的內(nèi)核頁(yè)表,如果發(fā)現(xiàn)有頁(yè)被換出到普通內(nèi)存,那么就Enclave內(nèi)部仿真一個(gè)錯(cuò)誤處理機(jī)制,將換出到普通內(nèi)存的EPC頁(yè)再放回EPC中,并完成完整性度量。也就是說Enclave內(nèi)部做了一個(gè)軟件的用戶態(tài)頁(yè)表機(jī)制,將硬件頁(yè)表機(jī)制架空。)來(lái)避免Enclave退出。相比與改進(jìn)之前的SGX,Eleos RPC增加23%帶寬,Eleos RPC+SUVM增加50%帶寬,可喜可賀。

?

這里讓我聯(lián)想到了SGX的Switchless模式,Switchless模式大概是說我先專門弄一個(gè)線程出來(lái)讓他們直接跑在Enclave環(huán)境,然后把他們稱為ECALL工人線程,工人線程自然是用來(lái)干活的。現(xiàn)在我們運(yùn)行APP,然后APP調(diào)用一個(gè)ECALL函數(shù),那么ECALL任務(wù)放到任務(wù)池,并通知(通過發(fā)送Signal)之前一直空轉(zhuǎn)的ECALL工人起床干活了,然后ECALL工人將ECALL任務(wù)跑起來(lái)。

CoSMIX(ATC19)

以前,SQLite的fast_read_db之類的函數(shù)依賴內(nèi)存映射文件(mmap),這會(huì)通過調(diào)用OS錯(cuò)誤句柄將內(nèi)容從硬盤帶到內(nèi)存,但是OS不可信,因此OS的錯(cuò)誤處理也不可信。如果使用請(qǐng)求頁(yè)面指令,這個(gè)指令的功能和流程定死了,不靈活。如果使用用戶自定義處理句柄,由于會(huì)通過OS來(lái)調(diào)用Enclave內(nèi)部用戶自定義句柄,流程很長(zhǎng),效率低(而且個(gè)人認(rèn)為給了OS攻擊的可能性)。

CoSMIX在Enclave內(nèi)部仿真了頁(yè)表機(jī)制來(lái)完成虛實(shí)地址轉(zhuǎn)換,目標(biāo)虛擬地址轉(zhuǎn)變成不可信的物理地址,然后將內(nèi)容取回EPC,該頁(yè)的數(shù)據(jù)同時(shí)會(huì)保留到緩存(Foreshadow中說,可以利用這個(gè)緩存造成攻擊)中,可以加快訪問“內(nèi)存”(怎么聽著很像SUVM)。

總的感覺是將頁(yè)表機(jī)制移入Enclave,通過LibOS來(lái)實(shí)現(xiàn),并完成加密內(nèi)存的解密等操作。會(huì)想起Sectum將頁(yè)表移入Enclave的做法。

這也體現(xiàn)了有些SGX漏洞就是由于Enclave部分功能需要通過OS來(lái)完成(比如頁(yè)表機(jī)制)產(chǎn)生泄露。通過LibOS實(shí)現(xiàn)部分機(jī)制可以緩解此類漏洞。

Rust-SGX SDK(CCS19)百度

Rust語(yǔ)言號(hào)稱是一個(gè)能夠?qū)崿F(xiàn)內(nèi)存安全(不會(huì)出現(xiàn)指針越界之類由于指針這個(gè)東西導(dǎo)致的問題)的語(yǔ)言,SGX又是個(gè)能抵抗特權(quán)攻擊CPU特性,兩者優(yōu)勢(shì)互補(bǔ),就是Rust-SGX了。不過當(dāng)然不只是這樣,除了能夠用上Rust語(yǔ)言的內(nèi)存安全性和SGX提供的安全內(nèi)存,Rust-SGX還讓開發(fā)者多了一個(gè)使用Rust語(yǔ)言的機(jī)會(huì)。

?

看上圖,Rust-SGX下,Enclave可以使用Rust語(yǔ)言書寫,然后會(huì)調(diào)用Rust庫(kù)來(lái)使用SGX,Rust庫(kù)通過Rust-to-C FFI調(diào)用C語(yǔ)言的SGX SDK。

Rust-SGX有一個(gè)近親,Fortanix的Rust EDP SDK方案,它將SGX SDK也用Rust重寫,這可以將Rust的內(nèi)存安全特性實(shí)現(xiàn)地更充分。但是百度的Rust-SGX SDK能夠避免SGX SDK的上游更新導(dǎo)致后續(xù)又要用Rust重寫,同時(shí)C語(yǔ)言的SGX SDK效率比Rust更高(安全性降低)。

百度的Rust-SGX能夠保證除SGX SDK以外的其他部件都是安全的,不會(huì)引入新的漏洞,且經(jīng)過形式化驗(yàn)證。

Fortanix Rust EDP SDK

SGX攻防

SGX攻防是SGX論文中非常多的一大塊,不過目前的我沒有太多時(shí)間來(lái)寫這塊。先留坑。

Intel SGX攻防工作是為了讓Intel SGX更加完善。目前很多的SGX攻防工作的思想是從CPU攻防、其他TEE攻防和軟件攻防借鑒的。如從Intel SGX架構(gòu)、微架構(gòu)、軟件棧攻擊。

Intel SGX軟件層攻防。對(duì)SGX SDK等軟件層發(fā)動(dòng)攻擊,對(duì)軟件層攻擊進(jìn)行防御。代表工作有Iago attacks(ASPLOS’13)【惡意構(gòu)造系統(tǒng)調(diào)用返回值對(duì)Enclave攻擊】、A Tale of Two Worlds(CCS’19)【首先對(duì)SGX SDK中ABI、API攻擊進(jìn)行系統(tǒng)調(diào)研,然后實(shí)現(xiàn)了新型ABI、API攻擊】、COIN Attacks(ASPLOS’20)【首先分析了軟件層SGX常見攻擊模型,然后根據(jù)攻擊模型實(shí)現(xiàn)了漏洞自動(dòng)挖掘框架】……

微架構(gòu)數(shù)據(jù)采樣(Micro-architectural Data Sampling)指利用推測(cè)執(zhí)行導(dǎo)致微架構(gòu)信息泄露給攻擊者。SGX下代表的MDS工作有Foreshadow(SEC’18)【SGX版Meltdown,觸發(fā)異常提供瞬態(tài)執(zhí)行窗口,使信息泄漏到緩存被攻擊者竊取。與Meltdown不同,Foreshadow需額外構(gòu)造異常繞過SGX中止頁(yè)面語(yǔ)義并提供瞬態(tài)執(zhí)行窗口】、RIDL(S&P’19)【攻擊者竊取泄漏到微架構(gòu)LFB的信息,SGX下也有該問題。相較L1攻擊,LFB攻擊只要更少的地址位匹配】、Strong and efficient...(SEC’17)【Intel TSX事務(wù)入口加載冗余緩存,增加緩存?zhèn)刃诺涝肼暋俊?/p>

超線程攻防。超線程下利用兄弟核的微架構(gòu)信息泄露進(jìn)行攻擊,及相關(guān)防御。Racing in Hyperspace(SP’18)【受害者通過度量它的兩個(gè)線程間通訊時(shí)長(zhǎng)確定兩個(gè)線程是否在兄弟核上,避免攻擊者線程和受害者線程處于兄弟核上】、Varys(ATC’18)……

內(nèi)存安全攻防。SGX下,以內(nèi)存安全問題為主的攻防。代表工作有SGX-Shield(NDSS’17)【Enclave內(nèi)部署加載器將代碼加密帶入Enclave,并在Enclave內(nèi)實(shí)現(xiàn)ASLR】、SGXBOUNDS(EuroSys’17)【利用EPC的地址Bits中空余Bits,對(duì)緩沖區(qū)Load/Store邊界進(jìn)行檢查】、Dark-ROP(SEC’17)【利用側(cè)信道等手段定位Gadgets,通過Gadgets鏈實(shí)現(xiàn)ROP攻擊。二進(jìn)制代碼復(fù)用攻擊】、The Guard’s Dilemma(SEC’18)【源碼代碼復(fù)用攻擊,利用程序原有的內(nèi)存漏洞,實(shí)現(xiàn)控制流、棧、寄存器的劫持】……

未初始化的Padding Bits:利用傳參數(shù)據(jù)結(jié)構(gòu)中的Padding?Bits實(shí)現(xiàn)數(shù)據(jù)偷偷傳輸。Leaking Uninitialized...(arXiv’17)【利用E/OCALL參數(shù)的Padding Bits將數(shù)據(jù)傳入/出Enclave】……

執(zhí)行流痕跡——頁(yè)表痕跡。通過頁(yè)地址泄露信息反推執(zhí)行流。Controlled-channel attacks(S&P’15)【頁(yè)錯(cuò)誤泄露頁(yè)地址,利用頁(yè)地址鏈反推控制流】、SGX-PTE(SEC’17)【緩存?zhèn)刃诺婪赐票患虞d進(jìn)緩存的PTE,進(jìn)一步反推頁(yè)地址鏈及控制流】、T-SGX(NDSS’17)【利用Intel TSX的特性,使攻擊者只能獲取Abort Handler的頁(yè)地址信息,避免真正的控制流泄露,Abort Handler還能記錄AEX頻率】……

執(zhí)行流痕跡——影子分支。利用分支預(yù)測(cè)器的共享進(jìn)行側(cè)信道信息泄露。代表工作有Branch Shadowing(SEC’17)【退出Enclave時(shí)不刷新分支預(yù)測(cè)器,SGX內(nèi)外共享分支預(yù)測(cè)器,攻擊者通過(地址碰撞的)影子分支反推受害者分支選擇,反推SGX內(nèi)控制流】、BranchScope(ASPLOS’18)……

執(zhí)行流痕跡——指令時(shí)延。Nemesis(CCS’18)【利用APIC時(shí)間中斷,單步中斷Enclave代碼并計(jì)算代碼執(zhí)行時(shí)長(zhǎng),通過時(shí)延序列反推控制流】……

執(zhí)行流痕跡——其他防護(hù)。ZeroTrace(NDSS'18)【本文針對(duì)ORAM低效率問題使用SGX進(jìn)行性能提升】、OBFUSCURO(NDSS’19)【將代碼、數(shù)據(jù)訪問模式固定避免控制流痕跡泄露】……

Intel SGX發(fā)展趨勢(shì)

云計(jì)算是一種基于互聯(lián)網(wǎng)的計(jì)算方式,通過這種方式,共享的軟硬件資源和信息可以按需求提供給計(jì)算機(jī)各種終端和其他設(shè)備,使用服務(wù)商提供的電腦基建作計(jì)算和資源。【維基百科】

云計(jì)算非常契合各個(gè)實(shí)體對(duì)計(jì)算資源的定制需求,同時(shí)是一種典型的遠(yuǎn)程計(jì)算場(chǎng)景。Intel SGX是一種良好的遠(yuǎn)程計(jì)算安全方案,非常有應(yīng)用前景。不過SGX開發(fā)細(xì)節(jié)有別于傳統(tǒng)開發(fā),因此工程實(shí)現(xiàn)存在阻力。目前已有部分SGX應(yīng)用誕生,體現(xiàn)了SGX的價(jià)值,未來(lái)SGX應(yīng)用將更加豐富。

Intel SGX目前很多安全細(xì)節(jié)仍處于討論之中,隨著SGX應(yīng)用豐富,SGX的安全性將會(huì)受到更多的討論。

此外,其他芯片廠商未來(lái)可能也將學(xué)習(xí)Intel SGX來(lái)解決遠(yuǎn)程計(jì)算安全問題,以滿足遠(yuǎn)程計(jì)算安全需求。

SGX軟硬件棧

基本介紹

背景知識(shí)

1. Intel SGX

Intel SGX狹義上是指一組CPU指令,該組指令增強(qiáng)應(yīng)用程序代碼和數(shù)據(jù)的安全性,為它們提供更強(qiáng)的保護(hù)以防泄漏或修改。開發(fā)人員可將敏感信息放入Enclave中,Enclave是內(nèi)存中具有更強(qiáng)安全保護(hù)性的執(zhí)行區(qū)域。

Intel SGX廣義上是指以SGX指令為基礎(chǔ)所構(gòu)建的包括Intel CPU等硬件、CPU提供的硬件指令、驅(qū)動(dòng)、Platform Software(用于構(gòu)建不可信運(yùn)行時(shí)環(huán)境uRTS)、SDK(用于構(gòu)建可信運(yùn)行時(shí)環(huán)境tRTS)等在內(nèi)的一種新的安全機(jī)制,既Intel SGX軟硬件棧。

SGX平臺(tái)需要Intel 6代及以上處理器,并且BIOS支持并開啟了SGX選項(xiàng)。

2. 常用名詞

Intel ?SGX:Intel Software Guard Extensions的簡(jiǎn)稱。

Enclave:下述條目針對(duì)Enclave不同的角度來(lái)表述,實(shí)際表述中不太加以區(qū)分,并且更側(cè)重于指Enclave實(shí)例。

Enclave內(nèi)存:Enclave是內(nèi)存中具有更強(qiáng)安全保護(hù)性的執(zhí)行區(qū)域。

Encalve環(huán)境:通過Enclave內(nèi)存及硬件保護(hù)機(jī)制、可信運(yùn)行時(shí)共同來(lái)保護(hù)敏感代碼數(shù)據(jù)的環(huán)境,或者說安全世界。

Enclave代碼:希望放在Enclave中執(zhí)行的敏感代碼數(shù)據(jù)。

Enclave文件:保存著Enclave代碼數(shù)據(jù)的鏡像文件。與實(shí)例的區(qū)別好比程序代碼與進(jìn)程的區(qū)別,一個(gè)靜態(tài),一個(gè)動(dòng)態(tài)。

Enclave實(shí)例:指從Enclave文件具體執(zhí)行起來(lái)的進(jìn)程。

EPC:Enclave Page Cache。Enclave的物理內(nèi)存是一種抽象的表示,Enclave物理內(nèi)存會(huì)最終落實(shí)到一個(gè)個(gè)具體的物理頁(yè),這些頁(yè)就是來(lái)自于EPC。也就是說EPC是一塊加密的處于系統(tǒng)保留內(nèi)存的物理內(nèi)存區(qū)域,用來(lái)存放Enclave的頁(yè)和SGX數(shù)據(jù)結(jié)構(gòu)。

EP:Enclave Page。EPC中一個(gè)個(gè)具體的頁(yè)。為了方便讀者理解,也可稱為EPC頁(yè)

SGX世界觀:SGX將軟硬件資源等劃分成安全世界和不安全世界

安全世界:包括可信運(yùn)行時(shí)和用戶的Enclave實(shí)例,安全世界中Enclave實(shí)例會(huì)利用可信運(yùn)行時(shí)提供的API完成敏感功能等。而每個(gè)開發(fā)者進(jìn)程都有自己的獨(dú)立的Enclave環(huán)境,不同Enclave的安全世界相互隔離。

不安全世界:包括不可信運(yùn)行時(shí)和用戶的非敏感代碼以及具有內(nèi)核權(quán)限的驅(qū)動(dòng)。

uRTS:Untrusted Runtime Service,不可信運(yùn)行時(shí)環(huán)境,不安全世界、普通世界的一部分。

tRTS:Trusted Runtime Service,可信運(yùn)行時(shí)環(huán)境,安全世界、Enclave環(huán)境的一部分。

AE:Architectural Enclave。由SGX平臺(tái)提供完成特定功能的特殊的Enclave,包括:Launch Enclave,用于決定在當(dāng)前SGX平臺(tái)上運(yùn)行哪些其他Enclave(主要指用戶的Enclave實(shí)例);Provisioning Enclave,提供長(zhǎng)期平臺(tái)證明密鑰;Quoting Enclave,使用非對(duì)稱平臺(tái)證明密鑰,用于為遠(yuǎn)程使用者簽署本地證明報(bào)告;Platform Service Enclave,平臺(tái)服務(wù)Enclave,用于提供如可信的時(shí)間等安全功能。

OCALL:從安全世界進(jìn)入不安全世界所用到的橋函數(shù)。

ECALL:從不安全世界進(jìn)入安全世界所用到的橋函數(shù)。

ISV:Individual Software Vendor個(gè)體軟件廠商

SgxEdger8r:SGX Edge Routine,主要用于在編譯過程中對(duì).edl文件中的ecall和ocall重新封裝編寫,即將用戶編寫的e/ocall改寫成實(shí)際執(zhí)行的e/ocall

3. 常用結(jié)構(gòu)體

SECS:SGX Enclave Control Structure。每個(gè)Enclave實(shí)例都具有一個(gè)該結(jié)構(gòu)體,用于保存關(guān)于該實(shí)例的信息,如Enclave的線性基址(對(duì)于整個(gè)程序而言)和大小。保存在EPC中該Enclave的內(nèi)存空間,只能由CPU訪問。

TCS:Thread Control Structure。每個(gè)Enclave實(shí)例可以擁有很多個(gè)具體執(zhí)行Enclave函數(shù)的Worker Thread,每個(gè)線程都對(duì)應(yīng)一個(gè)TCS,用于描述這個(gè)線程的信息,如線程執(zhí)行flag、SSA的位置、當(dāng)前使用的SSA(若干個(gè)SSA組成一個(gè)棧)。存儲(chǔ)在EPC中,只能由處理器訪問。

SIGSTRUCT:ENCLAVE SIGNATURE STRUCTURE。每個(gè)Enclave文件具有一個(gè)SIGSTRUCT來(lái)證明它是被某個(gè)SGX平臺(tái)簽署的。(見后續(xù)“EINIT指令過程”章節(jié))

EINITTOKEN:EINIT TOKEN STRUCTURE。從Enclave文件創(chuàng)建Enclave實(shí)例時(shí),需要向AE申請(qǐng)一個(gè)令牌,后續(xù)EINIT指令使用EINITTOKEN結(jié)構(gòu)來(lái)檢查是否允許執(zhí)行Enclave。(見后續(xù)“EINIT指令過程”章節(jié))

EPCM:ENCLAVE PAGE CACHE MAP。被硬件用來(lái)跟蹤EPC內(nèi)容,每一個(gè)Entry對(duì)應(yīng)一個(gè)EP。軟件不可訪問。每個(gè)Entry會(huì)說明EPC頁(yè)的線性地址等。

SGX的可信保障及優(yōu)點(diǎn)

  • Enclave這塊特殊內(nèi)存采用加密技術(shù),保障內(nèi)存代碼、數(shù)據(jù)的機(jī)密性和完整性。
  • 任何對(duì)Enclave進(jìn)行的訪問都需要經(jīng)過嚴(yán)格地訪問控制。
  • 可信計(jì)算基礎(chǔ)(TCB)縮小到CPU的SGX Enclave這一硬件保障設(shè)施,而不再要求操作系統(tǒng)和特權(quán)程序是可信的。
  • 支持虛擬化技術(shù)和容器技術(shù)。
  • SGX不足

  • Enclave處于用戶態(tài),如果Enclave中的代碼數(shù)據(jù)依賴于Enclave外部數(shù)據(jù),則存在安全隱患,需要Enclave代碼對(duì)傳入的外部數(shù)據(jù)檢查。
  • SGX 本身無(wú)法抵御側(cè)信道攻擊,因?yàn)椴皇菫閭?cè)信道防御而設(shè)計(jì)的,但是可以在程序開發(fā)過程中進(jìn)行設(shè)計(jì)防御。
  • Enclave 需要對(duì)原程序進(jìn)行改造,通過特殊的.edl文件聲明將敏感代碼放入Enclave中執(zhí)行,將不敏感代碼放在普通內(nèi)存中執(zhí)行。
  • Enclave所支持的特殊加密內(nèi)存的大小很小,因此開發(fā)者應(yīng)該只將至關(guān)重要的敏感的代碼數(shù)據(jù)放入其中。
  • SGX會(huì)產(chǎn)生一定程度的系統(tǒng)開銷。
  • SGX與TrustZone區(qū)別

    TrustZone將系統(tǒng)劃分為安全世界和普通世界,實(shí)現(xiàn)了執(zhí)行環(huán)境以及存儲(chǔ)、網(wǎng)絡(luò)和屏幕等設(shè)備的安全隔離,敏感代碼放入安全世界執(zhí)行。TrustZone里面程序是直面硬件資源的,并且TrustZone內(nèi)部的多個(gè)程序間并沒有安全隔離,直到有相關(guān)工作在TrustZone里面安置了一個(gè)安全內(nèi)核,如T6安全微內(nèi)核(上海瓶缽主導(dǎo)的工作,在Trustzone里實(shí)現(xiàn)了安全操作系統(tǒng)的功能,實(shí)現(xiàn)了敏感應(yīng)用之間的隔離,還可以讓開發(fā)者更好地使用物理硬件,安全微內(nèi)核只有六千行代碼,非常輕量級(jí),同時(shí)經(jīng)過安全審計(jì))。【SecTEE】等工作也試圖在TrustZone內(nèi)部提供Enclave的概念(包括了SGX所提供的可信度量、加密、訪問控制、密封、本地認(rèn)證、遠(yuǎn)程認(rèn)證中的部分功能),之前也聽到有相關(guān)工作在ARM芯片的普通世界構(gòu)建Enclave,而不是在TrustZone內(nèi)部,似乎硬件實(shí)現(xiàn)機(jī)制有一些區(qū)別,忘記了。

    SGX中,對(duì)于每一個(gè)進(jìn)程,可以創(chuàng)建多個(gè)類似于“安全世界”的Enclave,并且不同進(jìn)程之間的Enclave是互相硬件隔離的——通過MEE使用獨(dú)立的密鑰加密Enclave內(nèi)存進(jìn)行保障。

    SGX內(nèi)存布局及訪問控制

    這一塊很多資料來(lái)源于:

    王鵑, 樊成陽(yáng), 程越強(qiáng), 等. SGX 技術(shù)的分析和研究[J]. Journal of Software, 2018, 9: 2778-2798.

    1. SGX結(jié)構(gòu)簡(jiǎn)介

    每個(gè)進(jìn)程可以創(chuàng)建若干個(gè)Enclave實(shí)例(不過比較常見的情況是一個(gè)實(shí)例),Enclave執(zhí)行程序的敏感代碼,保護(hù)敏感數(shù)據(jù)。Enclave之間、Enclave與普通世界之間都存在訪問控制(后續(xù)“SGX訪問控制”章節(jié)會(huì)講述)。基本結(jié)構(gòu)如圖4所示(詳細(xì)的軟件棧構(gòu)造會(huì)在后續(xù)“SGX軟件棧”章節(jié)中描述)。

    • 硬件暴露的功能。硬件向外暴露Enclave Page Cache(EPC是一塊加密的處于系統(tǒng)保留內(nèi)存的物理內(nèi)存區(qū)域,用來(lái)存放 Enclave的頁(yè)和SGX數(shù)據(jù)結(jié)構(gòu),也就是說Enclave的物理內(nèi)存會(huì)最終落實(shí)到EPC)和EPCM(用于管理EPC頁(yè)的訪問控制,EPCM只能由硬件訪問)及硬件指令。
    • 內(nèi)核權(quán)限環(huán)境(既驅(qū)動(dòng))的功能。內(nèi)核權(quán)限環(huán)境有一個(gè)管理分配給Enclave的EPC頁(yè)的頁(yè)表,此外還能利用內(nèi)核權(quán)限硬件指令管理Enclave的生命周期,并把生命周期管理的功能向上提供給不可信運(yùn)行時(shí)環(huán)境。
    • 用戶權(quán)限環(huán)境的功能。用戶權(quán)限下的不可信運(yùn)行時(shí)可以管理Enclave生命周期。用戶權(quán)限下的可信運(yùn)行時(shí)幫助Enclave環(huán)境執(zhí)行敏感代碼以及調(diào)用用戶權(quán)限硬件指令,所提供的庫(kù)必須是經(jīng)過安全審計(jì)的庫(kù),而且只能通過靜態(tài)鏈接。

    圖1:SGX基本結(jié)構(gòu)

    2. Processor Reserved Memory布局

    如圖2所示,BIOS通過配置一組范圍寄存器分配Processor Reserved Memory(PRM)。其中包括EPC和其他保留給硬件使用的內(nèi)存。EPC中會(huì)分配Page給SGX數(shù)據(jù)結(jié)構(gòu)供Enclave使用。

    圖2:Processor Reserved Memory布局

    3. Enclave內(nèi)存結(jié)構(gòu)

    如圖3所示,每個(gè)Enclave內(nèi)存由EPC中分出的若干Page構(gòu)成,用于存儲(chǔ)Enclave代碼、Enclave數(shù)據(jù)——比如涉及金融等敏感操作的代碼數(shù)據(jù)、TCS。

    線程控制信息TCS。Enclave代碼的執(zhí)行是由某個(gè)具體線程(進(jìn)程只有一個(gè)線程時(shí)就是指進(jìn)程對(duì)應(yīng)的主線程,或者說進(jìn)程)來(lái)執(zhí)行,那么這個(gè)線程在Enclave中需要保存一份描述其針對(duì)于Enclave管理用的相關(guān)控制信息,既Thread Control Structure(TCS),換句話說,TCS保存著進(jìn)出Enclave時(shí)候所恢復(fù)或保存的Enclave線程信息。舉個(gè)例子就是,線程1從普通世界進(jìn)入安全世界,需要佩戴安全世界的工作證,當(dāng)離開安全世界,需要放下安全世界工作證,拿上linux環(huán)境的工作證。

    圖3:Enclave結(jié)構(gòu)

    4. Enclave Page Cache Map結(jié)構(gòu)

    如圖4所示。Enclave Page Cache Map(EPCM)是一個(gè)硬件結(jié)構(gòu),保存著分配給Enclave的Page的控制信息,一個(gè)Page對(duì)應(yīng)一個(gè) EPCM 表項(xiàng),控制信息包括頁(yè)面是否已被使用、該頁(yè)的擁有者、頁(yè)面類型、地址映射和權(quán)限屬性等。EPCM 結(jié)構(gòu)由 PMH(Page Miss Handler)硬件模塊訪問,這個(gè)模塊通過查詢頁(yè)表、范圍寄存器、EPCM 進(jìn)行內(nèi)存訪問。

    圖4:Enclave Page Cache Map結(jié)構(gòu)

    5.? SGX訪問控制

    Enclave基本訪問控制如圖5所示。

    • Enclave 外部的應(yīng)用程序按照段頁(yè)保護(hù)機(jī)制訪問PRM外部?jī)?nèi)存(普通內(nèi)存)。
    • Enclave 外部的應(yīng)用程序不能訪問 Enclave 內(nèi)存
    • Enclave 內(nèi)部的代碼在EPC范圍內(nèi)只能訪問屬于自己的內(nèi)存區(qū)域,不能訪問別的Enclave內(nèi)存。
    • Enclave 內(nèi)部的代碼按照段、頁(yè)保護(hù)機(jī)制訪問PRM外的內(nèi)存。
    • Enclave 內(nèi)部的代碼不能訪問其他PRM內(nèi)存。

    圖5:Enclave基本訪問控制

    SGX軟硬件棧圖示

    SGX軟件棧如圖所示。下面將先對(duì)硬件、驅(qū)動(dòng)、Platform Software提供的不可信運(yùn)行時(shí)、SDK提供的可信運(yùn)行時(shí)、開發(fā)者的應(yīng)用程序、開發(fā)者的Enclave程序這六個(gè)模塊進(jìn)行介紹,之后將對(duì)硬件指令、驅(qū)動(dòng)接口、API接口、橋函數(shù)這四個(gè)接口進(jìn)行介紹。

    下面這張為舊圖

    硬件

    最下層是SGX硬件,主要指支持SGX特性的CPU(需要Intel 6代CPU及以上),此外還包括PRM、EPCM、PMH等(具體見上文“SGX硬件原理”章節(jié))。CPU向上提供硬件指令ENCLS(內(nèi)核權(quán)限級(jí)Enclave硬件指令)及ENCLU(用戶權(quán)限級(jí)Enclave硬件指令),其中內(nèi)核權(quán)限指令提供對(duì)Enclave的生命周期管理等功能,用戶權(quán)限指令提供環(huán)境切換等功能。

    驅(qū)動(dòng)

    驅(qū)動(dòng)處于內(nèi)核權(quán)限,向上會(huì)接收不可信運(yùn)行時(shí)要求調(diào)用ENCLS的命令,然后向下調(diào)用ENCLS硬件指令,并將結(jié)果反饋給不可信運(yùn)行時(shí)。因此驅(qū)動(dòng)一種功能是不可信運(yùn)行時(shí)想要調(diào)用ENLCS指令的代理(主要是Enclave生命周期管理以及EP的部分管理),并完成與該指令相關(guān)工作,其中一個(gè)非常重要的工作就是sgx_encl結(jié)構(gòu)體的管理(其中包括保管每個(gè)Enclave所被分配到的EP集合)。另一方面,由于SGX不信任驅(qū)動(dòng),要求驅(qū)動(dòng)通過調(diào)用內(nèi)核權(quán)限指令完成如TLB刷新、EP頁(yè)交換等安全性和高效性的保障,只有如此,程序才能繼續(xù)正常運(yùn)行。

    不可信運(yùn)行

    不可信運(yùn)行時(shí)處于用戶態(tài)權(quán)限。一方面,不可信運(yùn)行時(shí)向下調(diào)用驅(qū)動(dòng)接口來(lái)管理Enclave生命周期,向上將該功能以API形式提供給開發(fā)者。另一方面,還能調(diào)用用于進(jìn)入Enclave的用戶態(tài)權(quán)限硬件指令,提供不可信環(huán)境下SGX設(shè)備能力查詢、不可信密鑰交換API等功能(見下文“SGX API”章節(jié))。

    可信運(yùn)行時(shí)

    可信運(yùn)行時(shí)同樣處于用戶態(tài)權(quán)限。可信運(yùn)行時(shí)向下能夠調(diào)用用戶態(tài)權(quán)限硬件指令用于離開可信世界、創(chuàng)建加密報(bào)告等。可信運(yùn)行時(shí)向上能夠給開發(fā)者提供Enclave開發(fā)的API。由于安全原因以及環(huán)境隔離,Enclave代碼不能調(diào)用外部任何庫(kù),只能靜態(tài)鏈接安全庫(kù),同時(shí)SGX設(shè)計(jì)者希望能夠讓Enclave代碼開發(fā)能夠滿足常規(guī)的開發(fā)需求,提供良好的開發(fā)環(huán)境,因此可信運(yùn)行時(shí)包含了很多經(jīng)過安全審計(jì)的標(biāo)準(zhǔn)庫(kù)和開發(fā)庫(kù),比如C\C++標(biāo)準(zhǔn)庫(kù)、加密庫(kù)等(具體見下文“SGX API”章節(jié))。

    應(yīng)用程序

    應(yīng)用程序處于用戶態(tài)權(quán)限,并屬于不可信世界,能夠利用不可信運(yùn)行時(shí)API完成Enclave生命周期管理,還能調(diào)用普通世界的任意庫(kù)函數(shù),也就是說應(yīng)用程序開發(fā)與傳統(tǒng)的程序開發(fā)沒有區(qū)別。

    Enclave程序

    需要執(zhí)行的敏感程序,利用可信運(yùn)行時(shí)提供的API來(lái)完成開發(fā),同時(shí)由于EPC大小有限,開發(fā)者應(yīng)該保證Enclave程序規(guī)模不能太大。

    硬件指令

    硬件指令分為內(nèi)核權(quán)限硬件指令和用戶權(quán)限硬件指令。內(nèi)核權(quán)限硬件指令指的是指令需要通過內(nèi)核態(tài)下才能訪問,縮寫是ENCLS。用戶權(quán)限硬件指令指的是指令用戶態(tài)下便能訪問,縮寫是ENCLU。每一個(gè)具體的功能指令被稱為葉功能,如EADD葉功能,因?yàn)槿~功能之間的區(qū)分是硬件指令(如ENCLS指令:0x 0F 01 CF)的EAX值不同,因此ENCLS指令的EAX在輸入時(shí)都是用作葉功能號(hào)。

    內(nèi)核權(quán)限硬件指令-ENCLS

    如圖2所示,SGX 1代指令中,ENCLS主要用于管理Enclave生命周期等。比如下文將介紹的Enclave初始化,ECREATE指令創(chuàng)建Enclave,主要是創(chuàng)建SECS,然后EADD添加EP(Enclave Page)并把Enclave文件內(nèi)容拷貝到EP中,EEXTEND度量EP,最后EINIT確定這個(gè)Enclave建立是否合法可信。

    如圖3所示,SGX 2代指令在1代基礎(chǔ)上添加了動(dòng)態(tài)增加EP、修改EP權(quán)限類型的功能,在1代中,在Enclave初始化以后,不能動(dòng)態(tài)增加EP或者修改EP權(quán)限屬性。

    圖2:SGX 1代內(nèi)核權(quán)限硬件指令

    圖3:SGX 2代新增內(nèi)核權(quán)限硬件指令

    • EADD

    這個(gè)葉功能將源頁(yè)面從非Enclave內(nèi)存復(fù)制到EPC中,將EPC頁(yè)面與EPC中駐留的SECS頁(yè)面相關(guān)聯(lián),并將線性地址和安全屬性存儲(chǔ)在EPCM中。Enclave偏移量和安全屬性作為關(guān)聯(lián)內(nèi)容的一部分被度量并擴(kuò)展到SECS.MRENCLAVE。此指令只能在當(dāng)前特權(quán)級(jí)別為0時(shí)執(zhí)行。

    RBX包含PAGEINFO結(jié)構(gòu)的有效地址,而RCX包含EPC頁(yè)面的有效地址。

    • EBLOCK

    這個(gè)葉功能導(dǎo)致EPC頁(yè)面被標(biāo)記為阻塞。此指令只能在當(dāng)前特權(quán)級(jí)別為0時(shí)執(zhí)行。

    RCX的內(nèi)容是EPC頁(yè)面的有效地址。DS段用于創(chuàng)建線性地址。不支持段重寫。在RAX中返回一個(gè)錯(cuò)誤代碼。

    • ECREATE

    ENCLS[ECREATE]是Enclave構(gòu)建過程中執(zhí)行的第一條指令。ECREATE將EPC外部的SECS結(jié)構(gòu)復(fù)制到EPC內(nèi)部的SECS頁(yè)面。SECS的內(nèi)部結(jié)構(gòu)是軟件無(wú)法訪問的。

    ECREATE將在受保護(hù)的SECS中設(shè)置字段,并在EPC中將頁(yè)面標(biāo)記為有效。ECREATE初始化或檢查未使用的字段。

    軟件在源結(jié)構(gòu)中設(shè)置以下字段:SECS:BASEADDR, SECS:SIZE(以字節(jié)為單位)和屬性。SECS:BASEADDR必須按照SECS.SIZE范圍自然對(duì)齊。SECS.SIZE最小是2頁(yè)(8192字節(jié))。

    源操作數(shù)RBX包含一個(gè)PAGEINFO結(jié)構(gòu)的有效地址。PAGEINFO包含源SECS的有效地址和SECEINFO的有效地址。PAGEINFO中的SECS字段未被使用。RCX寄存器是目標(biāo)SECS的有效地址。它是EPC中的一個(gè)空槽的地址。SECS結(jié)構(gòu)必須是頁(yè)面對(duì)齊的。SECINFO標(biāo)記必須將頁(yè)面指定為SECS頁(yè)面。

    • EDBGRD

    這個(gè)葉功能將一個(gè)四字/雙字從屬于調(diào)試Enclave的EPC頁(yè)面復(fù)制到RBX寄存器中。在64位模式下讀取8個(gè)字節(jié),在非64位模式下讀取4個(gè)字節(jié)。無(wú)法重寫讀取的數(shù)據(jù)的大小。

    EPC內(nèi)部源位置的有效地址在寄存器RCX中提供。

    • EDBGWR

    這個(gè)葉功能將EBX/RBX中的內(nèi)容復(fù)制到屬于調(diào)試Enclave的EPC頁(yè)面。8個(gè)字節(jié)以64位模式寫入,4個(gè)字節(jié)以非64位模式寫入。無(wú)法重寫數(shù)據(jù)的大小。EPC內(nèi)部源位置的有效地址在寄存器RCX中提供

    • EEXTEND

    這個(gè)葉功能通過測(cè)量一個(gè)擴(kuò)展字符串來(lái)更新一個(gè)SECS的MRENCLAVE測(cè)量寄存器。此指令只能在當(dāng)前特權(quán)級(jí)別為0且未初始化enclave時(shí)執(zhí)行。

    RCX包含要測(cè)量的EPC頁(yè)面的256字節(jié)區(qū)域的有效地址。DS段用于創(chuàng)建線性地址。不支持段重寫。

    • EINIT

    這個(gè)葉功能是在Enclave構(gòu)建過程中執(zhí)行的最后一條指令。EINIT之后,MRENCLAVE度量完成,Enclave準(zhǔn)備使用EENTER指令開始執(zhí)行用戶代碼。

    EINIT接收SIGSTRUCT和EINITTOKEN的有效地址。SIGSTRUCT描述了包含MRENCLAVE、ATTRIBUTES、ISVSVN、一個(gè)3072位RSA密鑰和使用所包含密鑰的簽名的Enclave。SIGSTRUCT必須填充兩個(gè)值,q1和q2:

    q1 = floor(Signature2 / Modulus);

    q2 = floor((Signature3 - q1 * Signature * Modulus) / Modulus);

    EINITTOKEN包含MRENCLAVE、MRSIGNER和屬性。這些值必須與SECS中的對(duì)應(yīng)值匹配。如果使用調(diào)試啟動(dòng)鍵創(chuàng)建EINITTOKEN,則Enclave也必須處于調(diào)試模式。

    具體過程可以參考下文“EINIT指令過程”章節(jié)。

    • ELDB/ELDU

    這個(gè)葉功能將頁(yè)面從常規(guī)主存復(fù)制到EPC。作為復(fù)制過程的一部分,對(duì)頁(yè)面進(jìn)行密碼學(xué)驗(yàn)證和解密。此指令只能在當(dāng)前特權(quán)級(jí)別為0時(shí)執(zhí)行。

    ELDB葉功能在復(fù)制后在EPC中的目標(biāo)頁(yè)面的EPCM條目中設(shè)置BLOCK位。復(fù)制后,ELDU葉功能清除EPC中的目標(biāo)頁(yè)的EPCM條目中的BLOCK位。

    RBX包含一個(gè)PAGEINFO結(jié)構(gòu)的有效地址;RCX包含目的地EPC頁(yè)面的有效地址;RDX包含保存頁(yè)面版本的版本數(shù)組槽的有效地址。

    • EPA

    這個(gè)葉功能在EPC頁(yè)面中創(chuàng)建一個(gè)空版本數(shù)組,其邏輯地址由DS:RCX提供,并為該頁(yè)面設(shè)置EPCM屬性。在執(zhí)行這條指令時(shí),寄存器RBX必須設(shè)置為PT_VA。

    • EREMOVE

    這個(gè)葉功能使EPC頁(yè)面與其SECE解除關(guān)聯(lián),并被標(biāo)記為未使用。此指令葉僅在當(dāng)前特權(quán)級(jí)別為0時(shí)才能執(zhí)行。

    RCX的內(nèi)容是EPC頁(yè)面的有效地址。DS段用于創(chuàng)建線性地址。不支持段重寫。

    如果操作數(shù)沒有正確對(duì)齊、或沒有引用該EPC頁(yè)面、或頁(yè)面被另一個(gè)線程使用、或其他線程在頁(yè)面所屬的Enclave中運(yùn)行,則該指令將失敗。此外,如果操作數(shù)指向所關(guān)聯(lián)的SECS,則指令失敗。

    • ETRACK

    這個(gè)葉功能提供了一種機(jī)制,讓硬件跟蹤軟件是否成功地完成了所需的TLB地址清除。該指令只能在當(dāng)前特權(quán)級(jí)別為0時(shí)執(zhí)行。

    RCX的內(nèi)容是EPC頁(yè)面的有效地址。

    • EWB

    這個(gè)葉功能將一個(gè)頁(yè)面從EPC復(fù)制到常規(guī)主存。作為復(fù)制過程的一部分,頁(yè)面受到加密保護(hù)。此指令只能在當(dāng)前特權(quán)級(jí)別為0時(shí)執(zhí)行。

    • EAUG

    這個(gè)葉功能為已存在的Enclave新分配EPC頁(yè),將使EPC頁(yè)面清零,將EPC頁(yè)面與EPC中駐留的SECS頁(yè)面相關(guān)聯(lián),并將線性地址和安全屬性存儲(chǔ)在EPCM中。作為關(guān)聯(lián)內(nèi)容的一部分,將安全屬性配置為阻止訪問EPC頁(yè)面,直到EACCEPT葉或EACCEPTCOPY葉的相應(yīng)調(diào)用確認(rèn)將新頁(yè)面添加到Enclave為止。此指令只能在當(dāng)前特權(quán)級(jí)別為0時(shí)執(zhí)行。

    RBX包含PAGEINFO結(jié)構(gòu)的有效地址,而RCX包含EPC頁(yè)面的有效地址。

    • EMODPR

    此葉功能限定已初始化的Enclave中的EPC頁(yè)面的訪問權(quán)限。SECINFO參數(shù)的RWX位被視為一個(gè)權(quán)限掩碼;沒指定頁(yè)面權(quán)限的值將無(wú)效。此指令只能在當(dāng)前特權(quán)級(jí)別為0時(shí)執(zhí)行。

    RBX包含SECINFO結(jié)構(gòu)的有效地址,而RCX包含EPC頁(yè)面的有效地址。

    • EMODT

    這個(gè)葉功能修改EPC頁(yè)面的類型。將安全屬性配置為:在調(diào)用EACCEPT確認(rèn)修改之前,阻止作為新類型訪問EPC頁(yè)面。此指令只能在當(dāng)前特權(quán)級(jí)別為0時(shí)執(zhí)行。

    RBX包含SECINFO結(jié)構(gòu)的有效地址,而RCX包含EPC頁(yè)面的有效地址。

    用戶權(quán)限硬件指令-ENCLU

    如圖4所示,SGX 1代指令中,ENCLU主要用于進(jìn)出Enclave、創(chuàng)建用于Enclave驗(yàn)證的報(bào)告等。

    如圖5所示,SGX 2代指令在1代基礎(chǔ)上讓用戶決定是否接受的ENCLS對(duì)EP權(quán)限類型的修改、擴(kuò)展EP權(quán)限、EP拷貝到EAUG新創(chuàng)建的EP。

    圖4:SGX 1代用戶權(quán)限硬件指令

    圖5:SGX 2代新增用戶權(quán)限硬件指令

    • EENTER

    ENCLU[EENTER]指令將執(zhí)行轉(zhuǎn)移到Enclave。在指令結(jié)束時(shí),邏輯處理器以Enclave模式在EnclaveBase+TCS.OENTRY的RIP上執(zhí)行。

    如果目標(biāo)地址不在CS段(32位)內(nèi),或者不在標(biāo)準(zhǔn)的地址范圍(64位),則會(huì)得到一個(gè)#GP(0)結(jié)果。

    • EEXIT

    ENCLU[EEXIT]指令從當(dāng)前執(zhí)行的Enclave和分支退出到RBX中指定的位置。

    RCX接收當(dāng)前的AEP(異步退出指針)。如果RBX不在CS(32位模式)或不在標(biāo)準(zhǔn)的地址范圍(64位模式),則會(huì)產(chǎn)生#GP(0)結(jié)果。

    • EGETKEY

    ENCLU[EGETKEY]指令從處理器特定的密鑰層次結(jié)構(gòu)中返回一個(gè)128位的密鑰。寄存器RBX包含KEYREQUEST結(jié)構(gòu)的有效地址,指令據(jù)此決定被請(qǐng)求的密鑰。RCX寄存器包含將返回密鑰的有效地址。RBX和RCX中的地址都應(yīng)該是Enclave中的位置。EGETKEY使用處理器唯一的值根據(jù)許多可能的輸入創(chuàng)建特定的鍵來(lái)派生鍵。這個(gè)指令葉只能在一個(gè)Enclave內(nèi)執(zhí)行。

    EGETKEY使用處理器唯一的值根據(jù)多種可能的輸入創(chuàng)建特定密鑰來(lái)派生密鑰。這個(gè)指令葉只能在一個(gè)Enclave內(nèi)執(zhí)行。

    • EREPORT

    這個(gè)葉功能創(chuàng)建一個(gè)描述Enclave內(nèi)容的加密報(bào)告。這個(gè)指令葉只能在Enclave內(nèi)部執(zhí)行。其他Enclave可以使用密碼報(bào)告來(lái)確定Enclave是否在相同的平臺(tái)上運(yùn)行。

    RBX包含Enclave的MRENCLAVE值的有效地址,MRENCLAVE使用REPORT密鑰驗(yàn)證輸出的REPORT。RCX包含一個(gè)64字節(jié)的REPORTDATA結(jié)構(gòu)的有效地址,該結(jié)構(gòu)允許指令的調(diào)用者將數(shù)據(jù)與目標(biāo)Enclave相關(guān)聯(lián)。RDX包含指令輸出的REPORT的地址。

    • ERESUME

    ENCLU[ERESUME]指令使用之前存儲(chǔ)在SSA中的機(jī)器狀態(tài),繼續(xù)執(zhí)行由于異常或中斷而中斷的ENCLU指令。

    • EACCEPT

    通過驗(yàn)證SECINFO中指定的安全屬性與EPCM中頁(yè)面的安全屬性匹配,這個(gè)葉函數(shù)接受對(duì)運(yùn)行中的Enclave中的頁(yè)面的更改。這個(gè)指令葉只能在Enclave內(nèi)部執(zhí)行。

    RBX包含SECINFO結(jié)構(gòu)的有效地址,而RCX包含EPC頁(yè)面的有效地址。

    • EACCEPTCOPY

    這個(gè)葉功能將現(xiàn)有EPC頁(yè)面的內(nèi)容復(fù)制到未初始化的EPC頁(yè)面(由EAUG創(chuàng)建)。初始化之后,該指令還可以修改與目標(biāo)EPC頁(yè)面關(guān)聯(lián)的訪問權(quán)限。這個(gè)指令葉只能在Enclave內(nèi)部執(zhí)行。

    RBX包含SECINFO結(jié)構(gòu)的有效地址,而RCX和RDX分別包含EPC頁(yè)面的有效地址。

    • EMODPE

    這個(gè)葉功能擴(kuò)展了運(yùn)行中的Enclave現(xiàn)有EPC頁(yè)面的訪問權(quán)限。SECINFO參數(shù)的RWX位被視為一個(gè)權(quán)限掩碼;若值表示不擴(kuò)展頁(yè)面權(quán)限,那么指令將不起作用。這個(gè)指令葉只能在Enclave內(nèi)部執(zhí)行。

    RBX包含SECINFO結(jié)構(gòu)的有效地址,而RCX包含EPC頁(yè)面的有效地址。

    SGX初始化過程

    這里將以SGX初始化為例,使讀者能夠?qū)GX指令有更直觀的感受。SGX初始化過程如圖6所示。

  • 應(yīng)用程序會(huì)請(qǐng)求將其Enclave加載到內(nèi)存中。
  • ECREATE指令負(fù)責(zé)創(chuàng)建并填充SECS結(jié)構(gòu),SECS具體保存在一個(gè)EP中。
  • 使用EADD指令將每個(gè)頁(yè)面加載到受保護(hù)的內(nèi)存中,添加過程會(huì)記錄到SECS的日志中。
  • 使用EEXTEND指令將度量每個(gè)添加的EP,度量過程會(huì)記錄到SECS的日志中。
  • EINIT指令最終完成對(duì)Enclave的創(chuàng)建,如圖4-3-2-12所示。
  • 圖6:SGX初始化流程

    EINIT指令過程

    EINIT指令的執(zhí)行過程體現(xiàn)了Enclave實(shí)例是如何被可信的啟動(dòng)起來(lái),因此這里將對(duì)EINIT指令過程展開描述。

    如圖7講述了EINIT指令的執(zhí)行過程,既EINIT如何最終完成Enclave創(chuàng)建,用到了三個(gè)結(jié)構(gòu):SIGSTRUCT、EINITTOKEN和SECS。

  • EINIT先檢查Enclave文件的SIGSTRUCT中的公鑰是否能夠成功驗(yàn)證之前硬件平臺(tái)對(duì)這個(gè)Enclave文件的SIGSTRUCT的簽名,如果成功說明,這個(gè)公鑰和這個(gè)簽名是匹配的。
  • 之后,當(dāng)加載起Enclave實(shí)例時(shí),需要向Architectural Enclave(完成特定功能由SGX平臺(tái)提供的特殊的Enclave)根據(jù)Enclave文件的各項(xiàng)加載特性和最后運(yùn)行起來(lái)的Enclave的各項(xiàng)特性申請(qǐng)一個(gè)EINITTOKEN。SIGSTRUCT中的公鑰HASH以后將成為簽名者的標(biāo)識(shí)MRSIGNER,然后與EINITTOKEN中的MRSIGNER比對(duì),如果配對(duì),說明,這個(gè)公鑰的確是這個(gè)SGX平臺(tái)所認(rèn)證的開發(fā)者的,這個(gè)Enclave文件確實(shí)是這個(gè)SGX平臺(tái)所認(rèn)證的開發(fā)者簽名的。
  • MRENCLAVE代表著Enclave可信啟動(dòng)的度量結(jié)果,或者說Enclave啟動(dòng)日志。EINIT指令將SIGSTRUCT中的MRENCLAVE與SECS中的、EINITTOKEN中的比對(duì),如果匹配,說明這個(gè)Enclave啟動(dòng)過程時(shí)可信的。
  • 驅(qū)動(dòng)接口

    驅(qū)動(dòng)接口的主要功能還是向不可信運(yùn)行時(shí)uRTS提供管理Enclave生命周期的功能,會(huì)在內(nèi)核權(quán)限硬件指令基礎(chǔ)之上完成具體的生命周期管理能力。

    SGX API

    這里將介紹運(yùn)行時(shí)環(huán)境(uRTS由Platform Software提供、tRTS由SDK提供)向開發(fā)者提供了哪些API供使用。這是SGX開發(fā)者直接接觸的部分。

    1. 可信運(yùn)行時(shí)庫(kù)函數(shù)

    由于Enclave程序會(huì)被放在Enclave Page中,與其他內(nèi)存存在隔離,因此無(wú)法鏈接動(dòng)態(tài)鏈接庫(kù)來(lái)實(shí)現(xiàn)各種豐富的傳統(tǒng)開發(fā)能有的功能,只能鏈接靜態(tài)鏈接庫(kù),也就是將需要用到的靜態(tài)鏈接庫(kù)函數(shù)一并放到Enclave內(nèi)存中。因此靜態(tài)鏈接庫(kù)的豐富程度決定了Enclave程序開發(fā)的便利程度。為了滿足Enclave程序盡可能能夠像傳統(tǒng)開發(fā)一樣便利,因此提供了一系列包括C/C++標(biāo)準(zhǔn)庫(kù)、可信密碼學(xué)庫(kù)等源碼用于靜態(tài)鏈接。由于靜態(tài)鏈接庫(kù)一旦出現(xiàn)安全性問題會(huì)直接影響Enclave程序,因此所能使用的庫(kù)函數(shù)是需要經(jīng)過安全審計(jì)的,所以需要剔除或者重新實(shí)現(xiàn)不安全的庫(kù)函數(shù),此外為了便于開發(fā)提供可信的密碼學(xué)相關(guān)操作的庫(kù)函數(shù)。總而言之,可信庫(kù)函數(shù)的提供需要滿足安全性及便利性。

    a. 可信運(yùn)行時(shí)系統(tǒng)服務(wù)

    一些起到幫助性質(zhì)的庫(kù)函數(shù)。

  • sgx_is_within_enclave、sgx_is_outside_enclave:可以幫助開發(fā)人員判斷一個(gè)地址是否在Enclave內(nèi)存中。
  • sgx_read_rand:提供一個(gè)真隨機(jī)函數(shù)。Enclave不支持鏈接C/C++標(biāo)準(zhǔn)庫(kù)里的rand、srand,因?yàn)樗鼈兪莻坞S機(jī)函數(shù),從庫(kù)中被剔除。
  • b. 自定義異常處理函數(shù)

    當(dāng)Enclave中發(fā)生了硬件異常,將由異常處理鏈來(lái)逐級(jí)處理硬件異常。tRTS提供了函數(shù)使得開發(fā)者的Enclave程序能通過注冊(cè)處理函數(shù)來(lái)具體處理部分硬件異常,然后再將異常交給原來(lái)的異常處理鏈處理,或者說將這個(gè)異常處理句柄追加到異常處理鏈中。

  • sgx_register_exception_handler:注冊(cè)一個(gè)異常處理句柄,將它追加到異常處理鏈。
  • sgx_unregister_exception_handler:注銷一個(gè)異常處理句柄。
  • c. 為CPUID準(zhǔn)備的自定義異常處理函數(shù)

    Enclave中不支持直接使用CPUID指令,若想在Enclave中操作CPUID指令,得通過libsgx_tstdc.a中的函數(shù)sgx_cpuid、sgx_cpuid_ex或內(nèi)聯(lián)函數(shù)__cpuid、__cpuidex調(diào)用ocall進(jìn)入uRTS具體實(shí)現(xiàn)。由于是uRTS下執(zhí)行,所以最好檢查CPUID指令返回值和Ocall返回值。如果Enclave中用到第三方庫(kù)用到了CPUID指令,需要開發(fā)者做分析檢查,處理CPUID異常或者開發(fā)者直接給出CPUID結(jié)果而不去真正調(diào)用CPUID。

    d. 可信服務(wù)庫(kù)

    可信服務(wù)庫(kù)sgx_tservice主要用于安全的數(shù)據(jù)操作和保護(hù)。第一部分函數(shù)是對(duì)SGX硬件指令包裝。

  • sgx_get_key:產(chǎn)生一個(gè)128位的私鑰,是對(duì)EGETKEY硬件指令的包裝。
  • sgx_create_report:創(chuàng)建一個(gè)目標(biāo)Enclave的報(bào)告,是對(duì)EREPORT硬件指令的包裝。
  • sgx_verify_report:對(duì)sgx_create_report產(chǎn)生報(bào)告提供軟件驗(yàn)證。
  • sgx_self_report:創(chuàng)建自身Enclave的密碼學(xué)報(bào)告。
  • sgx_self_target:函數(shù)sgx_self_target使用Enclave的自身的加密學(xué)報(bào)告生成自身的“目標(biāo)信息”(另一種實(shí)用的結(jié)構(gòu),更加豐富地描述Enclave的信息)。可以使用它來(lái)獲取在Enclave間的認(rèn)證過程所用到的“目標(biāo)信息”。
  • 第二部分函數(shù)是用于將數(shù)據(jù)密封到SGX平臺(tái)的不可信存儲(chǔ)中的函數(shù)。Enclave被關(guān)閉或重啟的情況下,Enclave中數(shù)據(jù)將隨Enclave銷毀而消失,如果有些數(shù)據(jù)未來(lái)需要被用到,那么就需要加密存儲(chǔ)不可信存儲(chǔ)中。

  • sgx_seal_data、sgx_seal_data_ex:sgx_seal_data函數(shù)找到一個(gè)Enclave獨(dú)有的用于Seal(封裝數(shù)據(jù))的密鑰,并使用該密鑰加密輸入數(shù)據(jù)緩沖區(qū)。在銷毀enclave之后,可以使用這個(gè)函數(shù)來(lái)保存機(jī)密數(shù)據(jù)。密封的數(shù)據(jù)塊可以在Enclave的未來(lái)實(shí)例化時(shí)打開。sgx_seal_data_ex在sgx_seal_data基礎(chǔ)上,可以自定義Seal密鑰的導(dǎo)出過程。
  • sgx_unseal_data:實(shí)用Enclave的Seal密鑰來(lái)解密之間Seal過的數(shù)據(jù)塊。
  • sgx_mac_aadata、sgx_mac_aadata_ex:對(duì)密封數(shù)據(jù)使用Enclave獨(dú)有的密鑰生成AES-GMAC,用于標(biāo)識(shí)這個(gè)密封數(shù)據(jù)對(duì)應(yīng)于該Enclave。
  • sgx_unmac_aadata:通過比對(duì)密封數(shù)據(jù)(計(jì)算MAC)及其之前生成的AES-GMAC數(shù)據(jù)判斷是否是這個(gè)密封數(shù)據(jù)是否是同個(gè)Enclave之前的實(shí)例生成的。
  • 第三部分函數(shù)用于幫助計(jì)算密封數(shù)據(jù)的大小、加密文本長(zhǎng)度和消息驗(yàn)證碼(MAC)文本長(zhǎng)度。

    • sgx_calc_sealed_data_size、sgx_get_add_mac_txt_len、sgx_get_encrypt_txt_len:幫助密封庫(kù)函數(shù)確定在具體操作時(shí)為一些關(guān)鍵結(jié)構(gòu)分配內(nèi)存的大小

    e. 可信平臺(tái)服務(wù)函數(shù)

    允許開發(fā)者使用平臺(tái)服務(wù)(PSE,Paltform Service Enclave)或者獲得平臺(tái)服務(wù)安全屬性。.

  • sgx_create_pse_session、sgx_close_pse_session:創(chuàng)建和關(guān)閉與PSE之間的會(huì)話,會(huì)話用于請(qǐng)求平臺(tái)服務(wù)。
  • sgx_get_ps_sec_prop、sgx_get_ps_sec_prop_ex:用于獲得平臺(tái)服務(wù)的安全屬性的描述。
  • sgx_get_trusted_time:從AE獲取可信的時(shí)間
  • sgx_create_monotonic_counter_ex、sgx_create_monotonic_counter:用于創(chuàng)建一個(gè)處于非易失性內(nèi)存(Non-volatile Memory)的有安全保障的單調(diào)計(jì)數(shù)器,用于比如密封數(shù)據(jù)版本號(hào)等維護(hù),防止密封數(shù)據(jù)的回滾攻擊等。
  • sgx_destroy_monotonic_counter:銷毀單調(diào)性計(jì)數(shù)器。
  • sgx_increment_monotonic_counter:對(duì)單調(diào)性計(jì)數(shù)器進(jìn)行加一操作。
  • sgx_read_monotonic_counter:讀取單調(diào)性計(jì)數(shù)器當(dāng)前的值。
  • ?f. Diffie–Hellman (DH)會(huì)話建立函數(shù)?

    幫助開發(fā)者使用ECDH密鑰交換協(xié)議在兩個(gè)Enclave間建立安全會(huì)話。

  • sgx_dh_init_session:用于初始化會(huì)話建立的請(qǐng)求方和應(yīng)答方。
  • sgx_dh_responder_gen_msg1、sgx_dh_initiator_proc_msg1、sgx_dh_responder_proc_msg2、sgx_dh_initiator_proc_msg3:用于具體的ECDH密鑰交換過程。
  • ?g. C?標(biāo)準(zhǔn)庫(kù)?

    sgx_tstdc提供了可信標(biāo)準(zhǔn)C庫(kù),同時(shí)這個(gè)庫(kù)只能在Enclave中使用。目前支持C99子集,代碼來(lái)自O(shè)penBSD項(xiàng)目。不支持部分函數(shù)的原因:

  • 函數(shù)定義用到了受限制的CPU指令。
  • 函數(shù)定義已知是不安全的。
  • 函數(shù)定義太大了或者函數(shù)定義嚴(yán)重依賴于不可信世界的數(shù)據(jù)。
  • 需要特定編譯器
  • 具體的函數(shù)支持情況:

  • Locale函數(shù):地域設(shè)置,如中文操作系統(tǒng)下,顯示中文、中國(guó)人習(xí)慣的日期格式等,Localization數(shù)據(jù)過大,不適合放Enclave。
  • 隨機(jī)數(shù)生成函數(shù):不安全的為隨機(jī)函數(shù),提供了一個(gè)真隨機(jī)sgx_read_rand。
  • 字符串函數(shù):不安全的字符串操作函數(shù),安全的字符串操作函數(shù)仍然可用(strncpy等)。
  • Abort函數(shù):語(yǔ)義有區(qū)別,一旦一個(gè)Enclave線程發(fā)出abort,那么Enclave處于Unusable狀態(tài),不再啟動(dòng)新的Enclave線程,當(dāng)所有Enclave線程都退出后,這個(gè)Enclave就被鎖定不再被發(fā)現(xiàn)。
  • 線程同步基元:提供互斥量同步、條件變量同步、線程管理但不支持Enclave內(nèi)部創(chuàng)建線程。
  • 在Enclave內(nèi)查詢CPUID:sgx_cpuid、sgx_cpuidex。
  • 安全函數(shù):_s后綴的函數(shù),在mbusafecrt.h中。
  • GCC?內(nèi)建函數(shù):為了優(yōu)化代碼,GCC可能將如malloc替換成內(nèi)建的__bultin_malloc,這樣可能使得Enclave中的代碼內(nèi)聯(lián)了不安全的內(nèi)建函數(shù)。可以通過fno-builtin or -fno-builtin-function編譯選項(xiàng)來(lái)禁止。
  • Non-Local Jumps:標(biāo)準(zhǔn)C庫(kù)提供了setjmp(記錄程序狀態(tài))、longjmp(恢復(fù)在之前記錄的程序狀態(tài)),longjmp可能破壞棧結(jié)構(gòu),在C程序使用中要保證這些指令被用在未知行為上。
  • h. C++ 語(yǔ)言支持

    C++語(yǔ)言特性支持情況。ISO/IEC 14882:SGX對(duì)定義的C++庫(kù)大部分語(yǔ)言特性完全支持,包括:

  • 動(dòng)態(tài)內(nèi)存分配:new/delete
  • 支持全局的Initializers,通常用于構(gòu)建全局對(duì)象
  • Run-time Type Identification (RTTI)
  • Enclave內(nèi)部C++異常處理函數(shù)
  • × 不支持全局Destructors,因?yàn)镋nclave銷毀時(shí),EPC會(huì)被回收。

    × Enclave接口定義中不支持C++對(duì)象,如果需要外部往Enclave傳參,需要另外保存成C結(jié)構(gòu)體。

    C++標(biāo)準(zhǔn)庫(kù)支持情況:支持了一套遵循C++11標(biāo)準(zhǔn)的可信C++標(biāo)準(zhǔn)庫(kù)(包括STL)。有多個(gè)版本的C++標(biāo)準(zhǔn)庫(kù)可以被鏈接:

  • sgx_tcxx.a(默認(rèn)):從libc++移植,支持大部分C++11特性。
  • sgx_tstdcxx.a(較老的):源自STLport,支持有限的C++11特性。
  • 不支持的函數(shù)如下:

  • I/O相關(guān)的函數(shù)和類,如<iostream>
  • 依賴locale庫(kù)的函數(shù)
  • 需要系統(tǒng)調(diào)用的函數(shù)
  • 只有C語(yǔ)言函數(shù)可以作為Enclave與外部的橋接函數(shù)。

    i. 密碼學(xué)庫(kù)

    SDK提供了可信密碼學(xué)庫(kù)sgx_tcrypto,這同時(shí)會(huì)被其他可信庫(kù)如sgx_tservice用到。可信密碼學(xué)庫(kù)基于Intel Integrated Performance Primitives (Intel IPP)或Intel Software Guard Extensions SSL cryptographic library (Intel SGX SSL)。sgx_tcrypto庫(kù)函數(shù)包括(除IPP、SGX SSL外的函數(shù),一類適用于單獨(dú)的直接對(duì)單數(shù)據(jù)集進(jìn)行密碼學(xué)運(yùn)算,另一類是構(gòu)建管理句柄對(duì)多個(gè)數(shù)據(jù)集進(jìn)行管理和運(yùn)算):

  • sgx_sha256_msg:提供標(biāo)準(zhǔn)的SHA256散列。
  • sgx_sha256_init、sgx_sha256_update、sgx_sha256_get_hash、sgx_sha256_close:用于多數(shù)據(jù)集的SHA256的管理及運(yùn)算。
  • sgx_rijndael128GCM_encrypt、sgx_rijndael128GCM_decrypt:用于單獨(dú)的Rijndael AES-GCM的加解密操作。
  • sgx_aes_gcm128_enc_init、sgx_aes_gcm128_enc_update、sgx_aes_gcm128_enc_get_mac、sgx_aes_gcm_close:用于多數(shù)據(jù)集的AES-GCM128位的管理和運(yùn)算。
  • sgx_rijndael128_cmac_msg:提供獨(dú)立的標(biāo)準(zhǔn)的CMAC散列計(jì)算。
  • sgx_cmac128_init、sgx_cmac128_update、sgx_cmac128_final、sgx_cmac128_close:用于多數(shù)據(jù)集之上的CMAC128位散列的管理和運(yùn)算。
  • sgx_aes_ctr_encrypt、sgx_aes_ctr_decrypt:提供單獨(dú)的Rijndael AES-CTR加解密運(yùn)算。
  • sgx_ecc256_open_context、sgx_ecc256_close_context、sgx_ecc256_create_key_pair、sgx_ecc256_compute_shared_dhkey、sgx_ecc256_check_point:提供ECC256操作的管理和具體運(yùn)算。
  • sgx_ecdsa_sign、sgx_ecdsa_verify、sgx_ecdsa_verify_hash:用于ECDSA簽名和驗(yàn)證。
  • sgx_rsa3072_sign、sgx_rsa3072_verify:用于RSA3072的簽名和驗(yàn)證。
  • sgx_create_rsa_key_pair、sgx_create_rsa_priv2_key、sgx_create_rsa_pub1_key、sgx_free_rsa_key:用于構(gòu)建和銷毀RAS密鑰。
  • sgx_rsa_priv_decrypt_sha256、sgx_rsa_pub_encrypt_sha256:RSA-OAEP加密模式的SHA256算法的加解密。
  • sgx_calculate_ecdsa_priv_key:利用隨機(jī)種子產(chǎn)生ECDSA私鑰。
  • sgx_ecc256_calculate_pub_from_priv:利用ECC私鑰計(jì)算ECC公鑰。
  • sgx_hmac_sha256_msg:提供標(biāo)準(zhǔn)的HMAC散列。
  • sgx_hmac256_init、sgx_hmac256_update、sgx_hmac256_final、sgx_hmac256_close:提供多數(shù)據(jù)集上的HMAC256散列的管理和運(yùn)算。
  • j. 可信密鑰交換函數(shù)

    • sgx_ra_init、sgx_ra_init_ex、sgx_ra_get_keys、sgx_ra_close:用于遠(yuǎn)程驗(yàn)證和交換密鑰的管理和操作。

    ?k. Intel受保護(hù)文件系統(tǒng)庫(kù)?

    提供了常規(guī)C語(yǔ)言文件操作API的子集,寫過程中,文件被加密存儲(chǔ)在不可信磁盤中,讀取過程中會(huì)驗(yàn)證文件的機(jī)密性和完整性,功能上總體接近傳統(tǒng)的文件庫(kù)函數(shù)。

  • sgx_fopen、sgx_fopen_auto_key、sgx_fclose、sgx_fread、sgx_fwrite、sgx_fflush、sgx_ftell、sgx_fseek、sgx_feof、sgx_remove:用于受保護(hù)文件的開關(guān)、創(chuàng)建、讀寫、定位、刪除等功能。
  • sgx_ferror、sgx_clearerr:返回或清除文件錯(cuò)誤
  • sgx_fexport_auto_key、sgx_fimport_auto_key:用于導(dǎo)入導(dǎo)出最新的用于文件加解密操作的密鑰
  • sgx_fclear_cache:清除內(nèi)部的文件緩沖。
  • l. TCMalloc庫(kù)

    • malloc、free、realloc、calloc、memalign:提供了可信的經(jīng)過安全審計(jì)的TCMalloc庫(kù)版本(sgx_tcmalloc庫(kù),從gperftools-2.5移植)

    m. Switchless調(diào)用庫(kù)

    不可信世界包含switchless調(diào)用的不可信部分,如sgx_create_enclave_ex使用switchless模式創(chuàng)建enclave;可信世界中l(wèi)ibsgx_tswitchless.a庫(kù)提供switchless調(diào)用的可信部分,主要是維護(hù)可信世界中switchless調(diào)用的特性,能夠讓不可信世界switchless調(diào)用能夠進(jìn)入到可信世界正常運(yùn)作。(見下文“SGX Switch模式及Switchless模式”章節(jié))

    n. 受保護(hù)代碼加載器庫(kù)

    維護(hù)不可信世界的“受保護(hù)代碼加載”

    2. 不可信運(yùn)行時(shí)庫(kù)

    a. Enclave創(chuàng)建與銷毀

  • sgx_create_enclave、sgx_create_enclave_ex、sgx_create_enclave_from_buffer_ex、sgx_create_encrypted_enclave:用于創(chuàng)建Enclave,傳入?yún)?shù)有所不同。
  • sgx_destroy_enclave:用于銷毀Enclave。
  • b. 證明函數(shù)

    向應(yīng)用程序或Enclave程序證明目標(biāo)Enclave程序的確運(yùn)行在SGX環(huán)境中。

  • sgx_init_quote、sgx_calc_quote_size、sgx_get_quote_size、sgx_get_quote、sgx_report_attestation_status、sgx_check_update_status:采用Intel EPID(增強(qiáng)隱私標(biāo)識(shí))方案的證明的管理和獲取。
  • sgx_select_att_key_id、sgx_init_quote_ex、sgx_get_quote_size_ex、sgx_get_quote_ex:采用Intel EPID及ECDSA方案的證明的管理與獲取。
  • c. 不可信密鑰交換函數(shù)

    用于不可信環(huán)境下遠(yuǎn)端服務(wù)器和Enclave程序的秘密交換

  • sgx_ra_get_msg1、sgx_ra_proc_msg2:不可信環(huán)境下采用Intel EPID證明方案的遠(yuǎn)端服務(wù)器和Enclave程序的秘密交換。
  • sgx_get_extended_epid_group_id:Intel EPID證明方案下,告訴遠(yuǎn)端服務(wù)器用的哪一個(gè)Intel EPID組。
  • sgx_ra_get_msg1_ex、sgx_ra_proc_msg2_ex:不可信環(huán)境下采用Intel EPID證明及ECDSA證明方案的遠(yuǎn)端服務(wù)器和Enclave程序的秘密交換。
  • d. 不可信平臺(tái)服務(wù)函數(shù)

    sgx_get_ps_cap:說明平臺(tái)服務(wù)PSE支持哪些功能

    e. Intel SGX 使能和啟動(dòng)控制函數(shù)

  • sgx_cap_enable_device:讓應(yīng)用程序能夠動(dòng)態(tài)開啟SGX設(shè)備。
  • sgx_register_wl_cert_chain:如果開發(fā)者有一個(gè)最新的Enclave簽名密鑰白名單證書鏈,則需要先調(diào)用此函數(shù)才能啟動(dòng)Enclave。
  • sgx_get_whitelist_size:告訴應(yīng)用程序白名單證書鏈的大小
  • sgx_get_whitelist:告訴應(yīng)用程序當(dāng)前AE服務(wù)所支持的白名單證書鏈。
  • f. Intel SGX 設(shè)備能力函數(shù)

  • sgx_is_capable:告訴應(yīng)用程序SGX設(shè)備是否可用。
  • sgx_cap_get_status:幫助開發(fā)者檢查客戶端平臺(tái)的SGX狀態(tài),既SGX是否能用、是否能被開啟。
  • 3. SGX API應(yīng)用舉例——本地DH會(huì)話建立

    想象這樣一個(gè)場(chǎng)景,一個(gè)應(yīng)用程序啟動(dòng)了若干不同Enclave實(shí)例,我們想讓實(shí)例間構(gòu)建起可信的會(huì)話通道,既ECDH密鑰交換及會(huì)話建立(API函數(shù)見上文“Diffie–Hellman (DH)會(huì)話建立函數(shù)”章節(jié))。

    下文“橋函數(shù)”章節(jié)將會(huì)具體講述應(yīng)用程序如何進(jìn)出Enclave。這里將簡(jiǎn)化此細(xì)節(jié),直接表述為應(yīng)用程序從不可信環(huán)境切換環(huán)境進(jìn)入Enclave。

    如圖8所示,這里描述Enclave1、Enclave2(簡(jiǎn)稱E1、E2)之間的會(huì)話建立。創(chuàng)建E1、E2實(shí)例,線程從APP切換至E1,然后調(diào)用sgx_dh_init_session這個(gè)API函數(shù)進(jìn)入可信運(yùn)行時(shí)(tRTS,由SDK提供,tRTS和Enclave同處于安全世界,不需要環(huán)境切換),將自己標(biāo)記為會(huì)話請(qǐng)求方。E1會(huì)繼續(xù)要求外部應(yīng)用程序轉(zhuǎn)告E2它想要和E2建立通訊。

    切換至E2后,E2調(diào)用sgx_dh_init_session進(jìn)入tRTS將自己初始化為應(yīng)答方,然后調(diào)用sgx_dh_responder_gen_msg1,這樣會(huì)調(diào)用硬件指令EREPOTE產(chǎn)生E2的報(bào)告,此外創(chuàng)建E2的公私鑰對(duì),把公鑰、報(bào)告封裝成Msg1用于返回給E1。

    E1調(diào)用sgx_dh_initiator_proc_msg1處理Msg1產(chǎn)生Msg2:E1創(chuàng)建自己的公私鑰對(duì),通過指令創(chuàng)建E1報(bào)告,用Msg1的E2公鑰和E1私鑰創(chuàng)建共享密鑰,將E1公鑰、報(bào)告等封裝成Msg2交給E2。

    E2最終會(huì)返回Msg3:E2調(diào)用sgx_dh_responder_proc_msg2處理Msg2,既用E1公鑰和E2私鑰構(gòu)建共享密鑰,并用Msg2中的共享密鑰散列值驗(yàn)證之。

    E1調(diào)用sgx_dh_initiator_proc_msg3處理Msg3。最后驗(yàn)證對(duì)方身份完成會(huì)話建立。

    (可以見博客——SGX本地認(rèn)證)

    SGX開發(fā)特點(diǎn)

    與傳統(tǒng)的C++程序開發(fā)不同,SGX應(yīng)用程序會(huì)分為兩塊,一塊是執(zhí)行在Enclave中的代碼,一塊是執(zhí)行在普通環(huán)境中的代碼。此外,需要在.edl文件中的trusted標(biāo)記中寫上在Enclave中執(zhí)行的函數(shù)的聲明,在untrusted標(biāo)記中寫上在普通環(huán)境中執(zhí)行的函數(shù)的聲明。

    SgxEdger8r(SGX Edge Routine,主要用于在編譯過程中對(duì).edl文件中的ecall和ocall重新封裝編寫,即將用戶編寫的e/ocall改寫成實(shí)際執(zhí)行的e/ocall)工具會(huì)在應(yīng)用程序編譯過程中根據(jù)edl文件將可信與不可信函數(shù)聲明重新封裝成給Enclave環(huán)境、普通環(huán)境下代碼所調(diào)用的橋函數(shù),實(shí)現(xiàn)兩種環(huán)境之間的切換。如普通環(huán)境下代碼調(diào)用橋函數(shù)會(huì)進(jìn)而通過sgx_ecall進(jìn)入Enclave環(huán)境,Enclave環(huán)境下代碼調(diào)用橋函數(shù)進(jìn)而通過sgx_ocall進(jìn)入普通環(huán)境,其中調(diào)用sgx_e/ocall的代碼由SgxEdger8r根據(jù)用戶編寫在edl文件中trusted/untrusted標(biāo)記下的函數(shù)聲明來(lái)自動(dòng)生成,即具體的進(jìn)出Enclave代碼不需要用戶來(lái)實(shí)現(xiàn),只需要打上標(biāo)記即可。

    環(huán)境切換步驟如下:第一步,通過工具生成的橋函數(shù)會(huì)調(diào)用sgx_ecall、sgx-ocall進(jìn)而調(diào)用硬件指令來(lái)切換環(huán)境;第二步,由于那些打上標(biāo)記的函數(shù)本身有用戶定義的執(zhí)行代碼,因此在切換環(huán)境后會(huì)進(jìn)入真正的函數(shù)定義。舉個(gè)例子,Main()->不可信環(huán)境ECALL_A()->sgx_ecall()->EENTER->可信環(huán)境ECALL_A()。

    總而言之,這些打上標(biāo)記的函數(shù)聲明會(huì)最終由SgxEdger8r工具在編譯過程中改造成橋函數(shù),用于切換環(huán)境,然后執(zhí)行函數(shù)聲明對(duì)應(yīng)的函數(shù)定義。

    此外在普通環(huán)境中的代碼需要顯式地管理Enclave的生命周期,如調(diào)用“創(chuàng)建初始化Enclave的函數(shù)”之后才能調(diào)用Enclave中的函數(shù),最后需要調(diào)用“銷毀Enclave的函數(shù)”。

    如果想要將在普通環(huán)境和Enclave環(huán)境中傳遞一個(gè)“指向緩沖區(qū)的指針”等參數(shù),需要在.edl文件的函數(shù)形參前面聲明如[in]、[out]等參數(shù)標(biāo)記,這是因?yàn)槠胀ōh(huán)境的內(nèi)存往往是不可信的,通過比如將普通環(huán)境下的緩沖區(qū)拷貝一份到Enclave環(huán)境中,然后Enclave代碼在拷貝進(jìn)Enclave的緩沖區(qū)上進(jìn)行操作等才是放心的,不會(huì)中途被惡意篡改等,最后可能再拷貝到普通環(huán)境供普通環(huán)境下的程序使用(具體見下文“SGX參數(shù)”章節(jié))。

    橋函數(shù)總結(jié)

    通過上文的引入,現(xiàn)在總結(jié)一下橋函數(shù):橋函數(shù)是指在SGX平臺(tái)下,唯一能夠切換可信環(huán)境與不可信環(huán)境的方式,調(diào)用硬件指令ENCLU中的EENTER、EEXIT來(lái)具體實(shí)現(xiàn),是由SgxEdger8r工具來(lái)生成。

    代碼層面的環(huán)境切換過程大概是這樣,以傳統(tǒng)Switch模式ecall為例(這種模式便于理解,另一種Switchless模式Ecall見“SGX Switch模式及Switchless模式”章節(jié)):

    不可信環(huán)境->假裝調(diào)用由用戶定義的ecall函數(shù)->對(duì)應(yīng)的橋函數(shù)(SGX Edger8r重新封裝的)>sgx_ecall()->_sgx_ecall()->CEnclave::ecall()->do_ecall()->enter_enclave()->__morestack(匯編)->ENCLU(調(diào)用硬件指令)->切換到tRTS->可信環(huán)境->enclave_entry(匯編)->enter_encalve()->do_ecall()->trts_ecall()->真正調(diào)用由用戶定義的ecall函數(shù)。

    SGX參數(shù)及函數(shù)屬性

    SGX將參數(shù)從不可信環(huán)境傳入可信環(huán)境的方法是將保存在不可信環(huán)境的棧上的參數(shù)拷貝到寄存器,EENTER葉功能會(huì)將不可信環(huán)境的RSP、RBP保存到SSA結(jié)構(gòu)中,并完成地址的切換進(jìn)入可信環(huán)境。

    這里將描述.edl文件中的SGX橋函數(shù)(接口)中參數(shù)或函數(shù)的修飾符說明,用來(lái)具體說明函數(shù)傳參或函數(shù)聲明的具體屬性。ECALL為例子,OCALL類似。

    • public void ecall_array_user_check([user_check] int arr[4]);

    這里是對(duì)函數(shù)傳參屬性的說明,下同。

    [user_check]:Enclave程序使用數(shù)組時(shí)該數(shù)組不會(huì)被驗(yàn)證、數(shù)組對(duì)應(yīng)緩沖區(qū)不會(huì)拷貝到Enclave內(nèi)存中,Enclave可以直接修改應(yīng)用程序中數(shù)組對(duì)應(yīng)的緩沖區(qū)。(這個(gè)例子中參數(shù)為數(shù)組,指針類似)

    • public void ecall_array_in([in] int arr[4]);

    [in]:Enclave會(huì)在內(nèi)部分配相同大小的緩沖區(qū),外部緩沖區(qū)的內(nèi)容被拷貝到內(nèi)部緩沖區(qū),內(nèi)部緩沖區(qū)內(nèi)容修改不會(huì)導(dǎo)致(不影響)外部緩沖區(qū)任何變化。

    • public void ecall_array_out([out] int arr[4]);

    [out]:內(nèi)部緩沖區(qū)的修改在函數(shù)返回時(shí)拷貝到外部緩沖區(qū)。

    • public void ecall_array_in_out([in, out] int arr[4]);

    [in, out]:Enclave內(nèi)部會(huì)分配一個(gè)緩沖區(qū),將數(shù)組緩沖區(qū)拷貝進(jìn)來(lái),同時(shí)在函數(shù)返回時(shí),將內(nèi)部緩沖區(qū)內(nèi)容拷貝到外部緩沖區(qū),雙向。也就說緩沖區(qū)的改造過程被隱藏了,外部應(yīng)用程序只能知道函數(shù)的輸入輸出。

    • public void ecall_array_isary([user_check, isary] array_t arr);

    [isary]:告訴Edger8r用戶自定義結(jié)構(gòu)體array_t的變量是一個(gè)數(shù)組。

    • public void ecall_pointer_string([in, out, string] char *str);

    [string]:告訴Edger8r,變量str參數(shù)是一個(gè)NULL結(jié)尾的字符串。可以用于strlen等功能。

    • public void ecall_pointer_string_const([in, string] const char *str);

    const:說明字符串str不可修改,所以不適用[out]屬性。

    • public void ecall_pointer_size([in, out, size=len] void *ptr, size_t len);

    [size]:告訴Edger8r?ptr對(duì)應(yīng)的緩沖區(qū)的字節(jié)數(shù)。不能對(duì)[string]屬性施加[size]屬性。

    • public void ecall_pointer_count([in, out, count=cnt] int *arr, size_t cnt);

    [count]:告訴Edger8r需要拷貝的arr的長(zhǎng)度。

    • public void ecall_pointer_isptr_readonly([in, isptr, readonly, size=len] buffer_t buf, size_t len);

    [isptr]:告訴Edger8r自定義類型是一個(gè)指針。

    [readonly]:禁止Enclave內(nèi)部分配的緩沖區(qū)被拷貝到外部去,因此不能與[out]同時(shí)使用。

    • public void ecall_function_public(void);

    這里是對(duì)函數(shù)聲明屬性的描述,下同。

    [public]:外部可以直接調(diào)用該Ecall

    • int ecall_function_private(void);

    [private]:默認(rèn),外部不可以直接調(diào)用該Ocall,除非有Ocall調(diào)用這個(gè)Ecall并且是[allow]屬性

    • void ocall_function_allow(void) allow(ecall_function_private);

    [allow]:允許OCALL在外部調(diào)用[private]?ECALL。

    SGX Switch模式及Switchless模式

    (可以見博客——ECALL Switch模式和ECALL Switchless模式)

    由上文可見,SGX是通過Ecall來(lái)進(jìn)入Enclave環(huán)境,類似的,通過Ocall離開Enclave環(huán)境。關(guān)于Ecall效率方面,傳統(tǒng)的Switch模式,應(yīng)用程序?qū)?yīng)的線程(該進(jìn)程只有一個(gè)Main線程)會(huì)切換進(jìn)入Enclave環(huán)境,然后拿上它在Enclave環(huán)境的“工作證”,也就是綁定上TCS這個(gè)結(jié)構(gòu)體,進(jìn)行具體的用戶定義的Ecall函數(shù)的執(zhí)行。

    但是這種模式,只能使用一個(gè)線程來(lái)完成具體任務(wù)(我們將這種調(diào)用用戶定義的Ecall函數(shù)稱為Ecall任務(wù),此外還有Ocall任務(wù)),效率很低,同時(shí)還有伴隨開銷,比如進(jìn)入Enclave環(huán)境需要拿起TCS“工作證”。因?yàn)槟壳斑€不支持unix的線程庫(kù),因此在Enclave中不支持創(chuàng)建線程,只能支持互斥量、條件變量等的維護(hù)(用于外部應(yīng)用程序創(chuàng)建多個(gè)線程分別進(jìn)入Enclave的場(chǎng)景),目前不支持線程庫(kù)的原因是一方面Enclave程序旨在保護(hù)敏感代碼,而遠(yuǎn)不需要?jiǎng)?chuàng)建線程等功能,另一方面出于數(shù)據(jù)依賴性、安全性等考量。

    為了提高效率問題,定義了Switchless模式,如圖9所示。以Ecall為例,uRTS為外部應(yīng)用程序提供了Ecall任務(wù)池,以及聯(lián)合tRTS初始化了多個(gè)可信Worker線程來(lái)具體執(zhí)行Ecall任務(wù)。舉例來(lái)說,外部應(yīng)用程序調(diào)用了Ecall_A、Ecall_B,Switch做法是只有一個(gè)線程,它執(zhí)行Ecall_A之后后回到不可信環(huán)境繼而執(zhí)行Ecall_B,是一種上下文環(huán)境切換的概念;Switchless做法是構(gòu)建好Ecall Table管理器保存可能執(zhí)行的Ecall函數(shù),同時(shí)構(gòu)建一個(gè)任務(wù)池用于記錄每個(gè)Ecall具體執(zhí)行的先后順序,uRTS線程會(huì)喚醒空閑的可信Worker線程從任務(wù)池中取任務(wù),然后查詢Call Table,進(jìn)而完成具體任務(wù),因此省去了上下文環(huán)境切換的開銷。Ocall方向的類似。

    圖9:Switchless模式調(diào)用架構(gòu)

    SGX初始化

    基本介紹

    這張圖改自Intel SGX手冊(cè)的一張圖(一年前看的,實(shí)在記不住在哪個(gè)位置了)。相對(duì)于那張圖,我把PMH、ME兩個(gè)硬件模塊畫上去了。

    下圖是Enclave初始化時(shí)硬件間關(guān)系圖,Enclave初始化大致經(jīng)歷了(1)申請(qǐng)Enclave內(nèi)存,(2)創(chuàng)建SECS數(shù)據(jù)結(jié)構(gòu),(3)加載Enclave代碼進(jìn)Enclave內(nèi)存,(4)度量Enclave代碼,(5)完成初始化。

    圖中最下面的內(nèi)存中一塊特定區(qū)域用作Enclave內(nèi)存(一般稱為Enclave Page Cache,EPC)。SECS是存儲(chǔ)在EPC中的一個(gè)重要數(shù)據(jù)結(jié)構(gòu),用于Enclave管理。EPCM是存儲(chǔ)于EPC中實(shí)施EPC訪問控制的數(shù)據(jù)結(jié)構(gòu)。CPU中的MEE硬件模塊負(fù)責(zé)對(duì)EPC加密,防止物理攻擊。CPU中的PMH硬件模塊負(fù)責(zé)查詢EPCM項(xiàng)并實(shí)施EPC訪問控制。

    以sgx_create_enclave為例初始化Enclave,源碼流程如圖所示。sgx_create_enclave擴(kuò)展支持SGX?PCL、Switchless Calls 初始化和Key Separation & Sharing (KSS).

    環(huán)境檢查總結(jié)

    SGX初始化過程中部分?jǐn)U展特性的聲明、驗(yàn)證和配置(Switchless特性、PCL特性、KSS特性)。

    ex_features_p數(shù)組項(xiàng)說明
    0

    pointer to an Intel? SGX PCL sealed key

    1pointer to the sgx_uswitchless_config_t structure
    2pointer to the sgx_kss_config_t structure
    3:31reserved, must be NULL

    將Enclave文件映射到進(jìn)程的虛擬地址空間。這個(gè)映射的位置就是下圖Enclave虛擬內(nèi)存視圖的虛框部分。

    將Enclave文件這個(gè)ELF文件進(jìn)行全面的ELF格式解析,驗(yàn)證Enclave文件格式的正確性,以及對(duì)Enclave文件中關(guān)鍵信息(關(guān)鍵符號(hào)、動(dòng)態(tài)Section、元數(shù)據(jù)【其中包括重要的Enclave布局信息等】)進(jìn)行記錄,后續(xù)在構(gòu)建Enclave時(shí)經(jīng)常會(huì)用到這些信息。比如布局直接填充到ELRANGE,起ELRANGE結(jié)構(gòu)性(堆、棧、TCS等)格局作用,比如動(dòng)態(tài)Section中的REL、PLT用于重定位過程,比如關(guān)鍵符號(hào)用于進(jìn)出Enclave時(shí)提供出入口。

    對(duì)當(dāng)前軟件棧平臺(tái)進(jìn)行驗(yàn)證,尤其是版本情況進(jìn)行匹配驗(yàn)證。

    對(duì)當(dāng)前CPU的X擴(kuò)展特性進(jìn)行驗(yàn)證、分析和記錄,后續(xù)構(gòu)建Enclave過程中,需要依據(jù)X特性對(duì)細(xì)節(jié)進(jìn)行指定,比如根據(jù)X特性支持情況,在進(jìn)出Enclave時(shí)候針對(duì)X特性,額外保存X特性相關(guān)的上下文環(huán)境(比如SSE、AVX、MPX等CPU擴(kuò)展特性的上下文內(nèi)容,并且值得提醒的是Enclave內(nèi)外是兩套不同的上下文環(huán)境)。一切的目的是為了讓SGX和CPU擴(kuò)展特性有更好地兼容,并且不會(huì)引入任何安全問題。

    環(huán)境檢查的事情終于做完了,然后會(huì)進(jìn)入__create_enclave函數(shù)來(lái)完成Enclave的創(chuàng)建。

    uRTS端構(gòu)建Enclave總結(jié)

    包括部分?jǐn)U展特性的聲明、驗(yàn)證和配置(Switchless特性、PCL特性、KSS特性)。

    SGX元數(shù)據(jù)的驗(yàn)證,后面會(huì)用到。

    將SGX驅(qū)動(dòng)綁定的設(shè)備作為Enclave或者說ELRANGE的基址,構(gòu)建SECS(管理并代表一個(gè)Enclave的數(shù)據(jù)結(jié)構(gòu)),并加載到EPC中。

    對(duì)Enclave文件映射打補(bǔ)丁,將一些全局變量等信息更新到Enclave文件映射,后續(xù)會(huì)使用Enclave文件映射構(gòu)建ELRANGE。

    將PT_LOAD、PT_TLS等類型的Segment加載到ELRANGE和對(duì)應(yīng)的EPC中。

    將元數(shù)據(jù)中堆、線程上下文等布局信息加載到ELRANGE和對(duì)應(yīng)的EPC中。

    布局情況可以參考下圖

    上面提到SECS的構(gòu)建會(huì)涉及到ECREATE硬件指令,并且任何頁(yè)加載到EPC的過程都會(huì)涉及到EADD、EEXTEND硬件指令。并且ECREATE、EADD、EEXTEND都是Ring0權(quán)限的ENCLS硬件指令,需要SGX驅(qū)動(dòng)來(lái)完成。

    之后EINIT硬件指令判斷Enclave加載過程是否可信,是否是一個(gè)可信啟動(dòng)過程。

    uRTS維護(hù)Enclave、tRTS端構(gòu)建Enclave總結(jié)

    ?

    uRTS維護(hù)一個(gè)CEnclave類用來(lái)管理使用Enclave。

    如果開啟了調(diào)試模式,那么就對(duì)調(diào)試模式的相關(guān)功能進(jìn)行初始化,比如VTune。

    uRTS請(qǐng)求裁剪敏感的或者動(dòng)態(tài)的EPC頁(yè)。

    進(jìn)入tRTS完成Enclave初始化相關(guān)的配套工作,比如ELRANGE的符號(hào)、地址重定位過程,比如字符串庫(kù)、加密庫(kù)的優(yōu)選過程,比如保留內(nèi)存、線程棧保護(hù)機(jī)制的初始化,比如初始化或調(diào)整線程棧、TCS等線程相關(guān)信息。此外還有就是對(duì)之前敏感或動(dòng)態(tài)頁(yè)的裁剪申請(qǐng)進(jìn)行批準(zhǔn)接受(調(diào)用EACCEPT硬件指令,Ring3權(quán)限的ENCLU硬件指令)。

    這里進(jìn)出Enclave都是通過上下文切換的方式。

    收尾及Switchless模式初始化步驟總結(jié)

    將通過裁剪申請(qǐng)的裁剪頁(yè)重新放入到可用EPC頁(yè)中。

    mprotect設(shè)置ELRANGE中各個(gè)Section的訪問屬性以及各個(gè)Segment對(duì)應(yīng)的訪問屬性

    如果元數(shù)據(jù)版本較新,并且當(dāng)前環(huán)境支持EDMM,那么對(duì)PT_GNU_RELRO、PT_LOAD的Segment,用Ring0權(quán)限的EMODPR硬件指令來(lái)設(shè)置這些頁(yè)的訪問權(quán)限為RX,Ring0權(quán)限的EMODPR硬件指令會(huì)對(duì)管理EPC屬性的EPCM進(jìn)行調(diào)整設(shè)置。rsrv內(nèi)存用EMODPR改為RW。不支持EDMM等情況,就不進(jìn)行改動(dòng)。

    針對(duì)上下文相關(guān)的內(nèi)存,內(nèi)存訪問控制屬性用mprotect設(shè)置為RW。rsrv內(nèi)存在不支持EDMM情況下,不要用mprotect改變它的屬性。

    針對(duì)EREMOVE掉的頁(yè),需要用mprotect設(shè)置為PROT_NONE,不然這個(gè)頁(yè)一旦被訪問,會(huì)發(fā)生總線異常(sigbus exception),因?yàn)檫@個(gè)EPC頁(yè)已經(jīng)被EREMOVE硬件指令給從當(dāng)前Enclave中去除,EPCM也沒有再維護(hù)EREMOVE掉的頁(yè)的信息。

    上面所涉及到的ELRANGE的頁(yè)本身在ECREATE、EADD、EREMOVE時(shí)就設(shè)置或更改了基本的EPCM項(xiàng),這里主要是進(jìn)行調(diào)整,以及在進(jìn)程虛擬地址空間用mprotect進(jìn)行訪問控制設(shè)置。

    填充TCS最小池,使得TCS最小池現(xiàn)有的TCS數(shù)量達(dá)到最低要求。

    Switchless模式的初始化。

    Intel SGX ECALL

    ECALL Switch/Ordinary總結(jié)

    這種方式時(shí)SGX最初支持也是最直接的ECALL方式,切換上下文進(jìn)入Enclave,但是這種切換上下文(EENTER【ENCLU.0x02】)的開銷非常大,幾千個(gè)Cycle,可以查看《Eleos: ExitLess OS services for SGX enclaves》,后來(lái)相關(guān)學(xué)者及Intel就推出了Switchless方案。

    這個(gè)總結(jié)主要講ECALL Switch/Ordinary

    線程想要執(zhí)行ECALL,那么就帶上ECALL索引值并申請(qǐng)一個(gè)TCS(TCS相當(dāng)于線程進(jìn)入tRTS的許可證或者工作證),然后將uRTS的上下文保存到SSA中,通過EENTER硬件指令切換上下文進(jìn)入tRTS,第一次進(jìn)入tRTS時(shí)的上下文來(lái)自于一個(gè)預(yù)置的模板,并且進(jìn)入到tRTS的enclave_entry地址,之后按照ECALL索引值查ECALL表得到ECALL的虛擬地址并執(zhí)行之。需要補(bǔ)充的是,剛進(jìn)入tRTS時(shí),線程需要確保線程棧保護(hù)機(jī)制開啟、線程數(shù)據(jù)已經(jīng)初始化過。

    如果進(jìn)入Enclave是因?yàn)?#xff1a;進(jìn)入到tRTS完成SGX初始化的部分工作;OCALL返回重新進(jìn)入到Enclave內(nèi)部;進(jìn)入tRTS動(dòng)態(tài)構(gòu)建TCS;重新進(jìn)入tRTS為了處理異常(《進(jìn)入Enclave的目的歸類》)。那么就需要調(diào)用各自的處理函數(shù)來(lái)解決這些個(gè)特殊目的。

    對(duì)于OCALL返回重新進(jìn)入到Enclave內(nèi)部,線程會(huì)使用之前OCALL時(shí)保存到tRTS的SSA進(jìn)行上下文的恢復(fù)。對(duì)于AEX,是通過ERESUME硬件指令重新進(jìn)入Enclave。

    《SGXv2.8起Enclave內(nèi)新增pthread庫(kù)》從linux-sgx v2.8開始,SGX支持在tRTS創(chuàng)建pthread線程,這個(gè)會(huì)要求在tRTS內(nèi)部開辟線程空間,然后OCALL到uRTS創(chuàng)建pthread線程并分配TCS給這個(gè)pthread線程。創(chuàng)建pthread線程者會(huì)重新回到tRTS中(OCALL返回),新創(chuàng)建的pthread線程會(huì)切換上下文進(jìn)入到tRTS。

    ECALL Switchless總結(jié)

    SGX初始化末期的時(shí)候,根據(jù)用戶選擇,可以對(duì)ECALL Switchless進(jìn)行初始化。此時(shí)主要完成的任務(wù)是uRTS端的ECALL Switchless初始化。(SGXv2.8調(diào)整后,tRTS端初始化Switchless的操作被放到了第一次Swtichless ECALL時(shí)執(zhí)行)

    內(nèi)容主要包括:

  • 構(gòu)建并初始化uRTS端的uSwitchless管理器、O/ECALL管理器、信號(hào)線管理器、工人線程管理器,初始化t/uWorker工人線程。
  • 工人線程自身進(jìn)行初始化,然后休眠并等待Switchless ECALL任務(wù)。
  • 構(gòu)建一個(gè)喚醒線程。等到主線程需要喚醒所有工人線程的時(shí)候,就讓喚醒線程代為去喚醒所有工人線程
  • (SGXv2.8調(diào)整后,tRTS端初始化Switchless的操作被放到了第一次Swtichless ECALL時(shí)執(zhí)行)

    當(dāng)發(fā)生第一個(gè)Switchless ECALL時(shí),主線程需要切換上下文進(jìn)入Enclave,并在tRTS端對(duì)ECALL Switchless進(jìn)行初始化,主要是為了讓tRTS內(nèi)部也保管一份uSwtichless管理器,并往tRTS內(nèi)部傳入OCALL表。然后喚醒所有工人線程,其中tWorker切換上下文進(jìn)入tRTS,并且在tRTS初始化ECALL管理器、信號(hào)線和ECALL表,等待著信號(hào)置位并處理ECALL任務(wù)。

    調(diào)用ECALL Switchless者,會(huì)開始構(gòu)建ECALL任務(wù)并發(fā)送信號(hào)(將信號(hào)線某個(gè)空閑的Bit置位),此時(shí)ECALL任務(wù)的狀態(tài)從【SL_INIT】變成【SL_SUBMITTED】,然后將ECALL任務(wù)放到ECALL管理器開辟的任務(wù)池中,并循環(huán)等待tWorker線程接收【SL_ACCEPTED】及處理完【SL_DONE】ECALL任務(wù)。

    tWorker工人線程這邊,第一次進(jìn)入Enclave時(shí),會(huì)在tRTS端初始化ECALL管理器、信號(hào)線管理器和ECALL表。然后tWorker工人線程就循環(huán)等待信號(hào)置位。當(dāng)接收到信號(hào)時(shí),它就將ECALL任務(wù)取出,并將ECALL任務(wù)狀態(tài)設(shè)置為【SL_ACCEPTED】。然后tWorker工人線程根據(jù)ECALL任務(wù)中的索引值查ECALL表并執(zhí)行對(duì)應(yīng)ECALL,執(zhí)行完后將ECALL任務(wù)狀態(tài)設(shè)置為【SL_DONE】。

    OCALL Switch/Ordinary總結(jié)

    這個(gè)OCALL Switch/Ordinary和ECALL Switch/Ordinary非常相像,就是方向反了。

    將tRTS的上下文保存到SSA,然后使用EEXIT【ENCLU.0x04】回到uRTS并從之前進(jìn)入tRTS時(shí)保存的SSA中上下文信息來(lái)恢復(fù)uRTS的上下文。EEXIT【ENCLU.0x04】的返回點(diǎn)是當(dāng)時(shí)EENTER【ENCLU.0x02】的下一條指令。然后用OCALL索引值查OCALL表獲得OCALL的虛擬地址并執(zhí)行之。

    OCALL Switchless總結(jié)

    和ECALL Switchless和接近

    總結(jié)

    以上是生活随笔為你收集整理的小谈Intel SGX的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    牛和人交xxxx欧美 | 国产suv精品一区二区五 | 久久婷婷五月综合色国产香蕉 | 亚洲人成无码网www | 久久亚洲国产成人精品性色 | 久久精品一区二区三区四区 | 人人爽人人澡人人人妻 | 日本精品久久久久中文字幕 | 亚洲自偷精品视频自拍 | 在线观看免费人成视频 | 久久亚洲日韩精品一区二区三区 | 欧美freesex黑人又粗又大 | 亚洲 a v无 码免 费 成 人 a v | 国产又粗又硬又大爽黄老大爷视 | 精品无人区无码乱码毛片国产 | 久久精品人人做人人综合试看 | 特黄特色大片免费播放器图片 | 精品人人妻人人澡人人爽人人 | 亚洲综合精品香蕉久久网 | 老熟女重囗味hdxx69 | 日本一卡2卡3卡四卡精品网站 | 丰满少妇女裸体bbw | 日韩成人一区二区三区在线观看 | 亚洲综合另类小说色区 | 亚洲色www成人永久网址 | 亚洲国产欧美日韩精品一区二区三区 | 国产三级精品三级男人的天堂 | 久久成人a毛片免费观看网站 | 成人综合网亚洲伊人 | 久久久久av无码免费网 | 青青草原综合久久大伊人精品 | 妺妺窝人体色www在线小说 | 小sao货水好多真紧h无码视频 | 熟女少妇在线视频播放 | 玩弄中年熟妇正在播放 | 国产莉萝无码av在线播放 | 亚洲国精产品一二二线 | 久久午夜夜伦鲁鲁片无码免费 | 无码精品国产va在线观看dvd | 欧美亚洲日韩国产人成在线播放 | 日日天干夜夜狠狠爱 | 任你躁国产自任一区二区三区 | 人妻有码中文字幕在线 | 97精品国产97久久久久久免费 | 又大又黄又粗又爽的免费视频 | 国产精品办公室沙发 | 亚洲精品国产精品乱码不卡 | 日本欧美一区二区三区乱码 | 国内综合精品午夜久久资源 | 欧美xxxxx精品 | 久久久精品456亚洲影院 | 久久精品丝袜高跟鞋 | 97资源共享在线视频 | 东京热一精品无码av | 久久久久国色av免费观看性色 | 一本久道久久综合狠狠爱 | 欧美自拍另类欧美综合图片区 | 亚洲色www成人永久网址 | av无码久久久久不卡免费网站 | 性史性农村dvd毛片 | 亚洲熟妇色xxxxx欧美老妇y | 国产成人人人97超碰超爽8 | 亚洲の无码国产の无码步美 | 国产在线无码精品电影网 | 国产精品美女久久久 | 欧美乱妇无乱码大黄a片 | 两性色午夜视频免费播放 | 国产精品手机免费 | 欧美高清在线精品一区 | 国产做国产爱免费视频 | 国产特级毛片aaaaaaa高清 | 久久99精品国产麻豆蜜芽 | 午夜肉伦伦影院 | 国産精品久久久久久久 | 男女作爱免费网站 | 色婷婷久久一区二区三区麻豆 | 成人免费无码大片a毛片 | 欧美三级a做爰在线观看 | 一本久道久久综合婷婷五月 | 人人爽人人澡人人高潮 | 国产精品亚洲综合色区韩国 | 亚洲精品综合一区二区三区在线 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲va中文字幕无码久久不卡 | 国产在线精品一区二区高清不卡 | 国产艳妇av在线观看果冻传媒 | 国产亚洲精品久久久ai换 | 国产两女互慰高潮视频在线观看 | 国产成人无码午夜视频在线观看 | 丰满岳乱妇在线观看中字无码 | 青春草在线视频免费观看 | 天堂亚洲免费视频 | 久精品国产欧美亚洲色aⅴ大片 | 成人免费无码大片a毛片 | 中文字幕乱码人妻二区三区 | 国产超碰人人爽人人做人人添 | 熟妇女人妻丰满少妇中文字幕 | 超碰97人人做人人爱少妇 | 精品欧洲av无码一区二区三区 | 亚洲国产综合无码一区 | 色妞www精品免费视频 | 人妻体内射精一区二区三四 | 亚洲午夜久久久影院 | 色欲综合久久中文字幕网 | 波多野结衣 黑人 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 无码任你躁久久久久久久 | 精品乱码久久久久久久 | √天堂中文官网8在线 | 国产日产欧产精品精品app | 真人与拘做受免费视频一 | 亚洲综合伊人久久大杳蕉 | 男人和女人高潮免费网站 | 双乳奶水饱满少妇呻吟 | 无码国产激情在线观看 | 欧美阿v高清资源不卡在线播放 | 日本高清一区免费中文视频 | 丰满少妇熟乱xxxxx视频 | 免费看男女做好爽好硬视频 | 熟妇人妻无乱码中文字幕 | 国产成人精品三级麻豆 | 思思久久99热只有频精品66 | 色一情一乱一伦 | 久久亚洲国产成人精品性色 | 日本肉体xxxx裸交 | 无码成人精品区在线观看 | 久久国产精品二国产精品 | 久久综合给久久狠狠97色 | 18禁止看的免费污网站 | 樱花草在线播放免费中文 | 一本久久伊人热热精品中文字幕 | 久久久久成人片免费观看蜜芽 | 久在线观看福利视频 | 欧美丰满熟妇xxxx性ppx人交 | av无码久久久久不卡免费网站 | 色五月五月丁香亚洲综合网 | 国内老熟妇对白xxxxhd | 国产一区二区三区精品视频 | 午夜免费福利小电影 | 88国产精品欧美一区二区三区 | 国产亚洲人成在线播放 | 国产精品沙发午睡系列 | 无码人妻丰满熟妇区毛片18 | 大肉大捧一进一出好爽视频 | 在线亚洲高清揄拍自拍一品区 | 性生交大片免费看女人按摩摩 | 国产精品沙发午睡系列 | 欧美日韩在线亚洲综合国产人 | 综合人妻久久一区二区精品 | 久久久久久久久888 | 免费播放一区二区三区 | 国产乱子伦视频在线播放 | 亚洲精品一区三区三区在线观看 | 亚洲中文字幕无码中文字在线 | 女人被爽到呻吟gif动态图视看 | 国产热a欧美热a在线视频 | 一区二区三区高清视频一 | 中文字幕色婷婷在线视频 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲va中文字幕无码久久不卡 | 国产人成高清在线视频99最全资源 | 天天躁夜夜躁狠狠是什么心态 | 乱人伦人妻中文字幕无码久久网 | 日产国产精品亚洲系列 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 成人欧美一区二区三区黑人免费 | 亚洲综合另类小说色区 | 亚洲欧美日韩国产精品一区二区 | 99视频精品全部免费免费观看 | 国产精品无码成人午夜电影 | 久久精品中文闷骚内射 | 精品国产成人一区二区三区 | 老头边吃奶边弄进去呻吟 | 国产香蕉97碰碰久久人人 | 久久久精品成人免费观看 | 纯爱无遮挡h肉动漫在线播放 | 成人无码精品一区二区三区 | 99久久人妻精品免费一区 | 蜜臀aⅴ国产精品久久久国产老师 | 国产婷婷色一区二区三区在线 | 自拍偷自拍亚洲精品10p | 日本大乳高潮视频在线观看 | 国产激情综合五月久久 | 成 人 免费观看网站 | 丝袜人妻一区二区三区 | 亚洲啪av永久无码精品放毛片 | 午夜时刻免费入口 | 综合激情五月综合激情五月激情1 | 高潮毛片无遮挡高清免费视频 | 精品久久久无码人妻字幂 | 伊人久久大香线焦av综合影院 | 久久精品国产精品国产精品污 | 任你躁国产自任一区二区三区 | aa片在线观看视频在线播放 | 人人妻人人澡人人爽欧美一区九九 | 国产无遮挡又黄又爽又色 | 99re在线播放 | 在线精品亚洲一区二区 | 丰腴饱满的极品熟妇 | 99久久精品国产一区二区蜜芽 | 青草青草久热国产精品 | 男女下面进入的视频免费午夜 | 女人高潮内射99精品 | 国产精品久久久久影院嫩草 | 最新版天堂资源中文官网 | 国产亚洲精品久久久ai换 | 亚洲码国产精品高潮在线 | 丝袜 中出 制服 人妻 美腿 | 人人妻人人澡人人爽欧美一区九九 | 永久免费观看国产裸体美女 | 欧美成人免费全部网站 | av无码久久久久不卡免费网站 | 无套内射视频囯产 | 日韩精品一区二区av在线 | 国产成人无码av片在线观看不卡 | 动漫av网站免费观看 | 成熟女人特级毛片www免费 | 国产无套内射久久久国产 | 欧美 亚洲 国产 另类 | 蜜桃视频插满18在线观看 | 300部国产真实乱 | 午夜精品久久久内射近拍高清 | 67194成是人免费无码 | 1000部啪啪未满十八勿入下载 | 1000部啪啪未满十八勿入下载 | 国产手机在线αⅴ片无码观看 | 国产精品久免费的黄网站 | 亚洲熟妇色xxxxx亚洲 | 欧美性猛交内射兽交老熟妇 | 亚洲欧美中文字幕5发布 | 99精品国产综合久久久久五月天 | 清纯唯美经典一区二区 | 少妇高潮喷潮久久久影院 | 欧美日韩在线亚洲综合国产人 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | www国产亚洲精品久久久日本 | 精品国产aⅴ无码一区二区 | 国产成人精品三级麻豆 | 成人av无码一区二区三区 | 中文字幕无码免费久久9一区9 | 国产激情综合五月久久 | 中文字幕亚洲情99在线 | 啦啦啦www在线观看免费视频 | 国产精品99爱免费视频 | 亚洲日韩中文字幕在线播放 | 亚洲综合无码一区二区三区 | 精品一区二区三区无码免费视频 | 亚洲熟妇自偷自拍另类 | 亚洲成a人片在线观看无码3d | 国产偷抇久久精品a片69 | 内射老妇bbwx0c0ck | 天天拍夜夜添久久精品 | 噜噜噜亚洲色成人网站 | 最近的中文字幕在线看视频 | 国内少妇偷人精品视频免费 | 国产无遮挡又黄又爽又色 | 免费观看黄网站 | 久热国产vs视频在线观看 | 丰满少妇人妻久久久久久 | 国产午夜无码精品免费看 | 麻豆人妻少妇精品无码专区 | 露脸叫床粗话东北少妇 | 日产国产精品亚洲系列 | 激情亚洲一区国产精品 | 无码人妻丰满熟妇区毛片18 | 国产成人无码a区在线观看视频app | 亚洲人成无码网www | 欧美变态另类xxxx | 国产精品国产自线拍免费软件 | 国产无遮挡吃胸膜奶免费看 | 久久久久免费精品国产 | 成人影院yy111111在线观看 | 欧美国产日韩亚洲中文 | 欧美35页视频在线观看 | 88国产精品欧美一区二区三区 | 一本久久a久久精品vr综合 | 中文字幕无线码 | 人妻少妇精品无码专区动漫 | 国产97在线 | 亚洲 | 欧美国产日韩久久mv | 国产后入清纯学生妹 | 兔费看少妇性l交大片免费 | 天海翼激烈高潮到腰振不止 | 丁香花在线影院观看在线播放 | 九九综合va免费看 | 久久亚洲中文字幕无码 | 久久综合香蕉国产蜜臀av | 中文字幕无线码 | 国产莉萝无码av在线播放 | 十八禁真人啪啪免费网站 | 领导边摸边吃奶边做爽在线观看 | 亚洲综合无码一区二区三区 | 中文字幕日韩精品一区二区三区 | 国产欧美精品一区二区三区 | 亚洲一区二区三区国产精华液 | 精品一区二区三区波多野结衣 | 久久午夜无码鲁丝片午夜精品 | 日韩欧美成人免费观看 | 欧美日韩一区二区三区自拍 | aⅴ在线视频男人的天堂 | 丰满少妇女裸体bbw | 无码av最新清无码专区吞精 | 欧美刺激性大交 | 亚洲色在线无码国产精品不卡 | 亚洲精品无码人妻无码 | 男女作爱免费网站 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 色狠狠av一区二区三区 | 国产午夜精品一区二区三区嫩草 | 亚洲乱码国产乱码精品精 | 永久免费观看美女裸体的网站 | 精品久久久中文字幕人妻 | 青春草在线视频免费观看 | 亚洲欧美国产精品专区久久 | 捆绑白丝粉色jk震动捧喷白浆 | 人妻体内射精一区二区三四 | 欧美自拍另类欧美综合图片区 | 好男人www社区 | 国产三级久久久精品麻豆三级 | 波多野结衣乳巨码无在线观看 | 少妇太爽了在线观看 | 内射白嫩少妇超碰 | 日日碰狠狠丁香久燥 | 欧美 日韩 人妻 高清 中文 | 免费国产成人高清在线观看网站 | 亚洲人成人无码网www国产 | 亚洲综合色区中文字幕 | 无码一区二区三区在线观看 | 国产精品国产三级国产专播 | 少妇性俱乐部纵欲狂欢电影 | 亚洲男人av天堂午夜在 | 久久久久免费精品国产 | 乱人伦人妻中文字幕无码久久网 | 玩弄少妇高潮ⅹxxxyw | 人人妻人人澡人人爽精品欧美 | 99久久婷婷国产综合精品青草免费 | 福利一区二区三区视频在线观看 | 精品国产av色一区二区深夜久久 | 亚洲午夜无码久久 | 国产女主播喷水视频在线观看 | 色噜噜亚洲男人的天堂 | 玩弄少妇高潮ⅹxxxyw | 国产精品久久久av久久久 | 国产精品久久福利网站 | 女人被男人爽到呻吟的视频 | 六月丁香婷婷色狠狠久久 | 国产一区二区三区精品视频 | 久久久无码中文字幕久... | 欧美精品免费观看二区 | 久久久久久久人妻无码中文字幕爆 | 国产成人精品久久亚洲高清不卡 | 人人超人人超碰超国产 | 又粗又大又硬又长又爽 | 99久久精品国产一区二区蜜芽 | 国产精品无码一区二区桃花视频 | 曰韩无码二三区中文字幕 | 51国偷自产一区二区三区 | 久久亚洲精品中文字幕无男同 | 亚洲国产精品久久人人爱 | 国产精品亚洲一区二区三区喷水 | 麻豆国产97在线 | 欧洲 | 奇米影视7777久久精品人人爽 | 国产一精品一av一免费 | 久久综合久久自在自线精品自 | 娇妻被黑人粗大高潮白浆 | 国产精品无码一区二区桃花视频 | 日韩视频 中文字幕 视频一区 | 成人av无码一区二区三区 | 午夜精品久久久久久久 | 秋霞成人午夜鲁丝一区二区三区 | 日日碰狠狠躁久久躁蜜桃 | 99视频精品全部免费免费观看 | 国产精品久久久久无码av色戒 | √天堂资源地址中文在线 | 色一情一乱一伦 | 激情国产av做激情国产爱 | www国产精品内射老师 | 波多野结衣av一区二区全免费观看 | 国内精品一区二区三区不卡 | 精品国产av色一区二区深夜久久 | 国产办公室秘书无码精品99 | 亚洲一区二区三区国产精华液 | 久久综合给久久狠狠97色 | 欧美自拍另类欧美综合图片区 | 草草网站影院白丝内射 | 永久免费观看美女裸体的网站 | 国产人成高清在线视频99最全资源 | 日韩精品久久久肉伦网站 | 中文字幕无线码免费人妻 | 欧美 丝袜 自拍 制服 另类 | 狠狠色噜噜狠狠狠狠7777米奇 | 中文字幕乱码人妻二区三区 | 在线观看欧美一区二区三区 | 国产午夜亚洲精品不卡下载 | 成人性做爰aaa片免费看 | 国产两女互慰高潮视频在线观看 | 少妇性l交大片欧洲热妇乱xxx | 精品欧洲av无码一区二区三区 | 大地资源网第二页免费观看 | 伦伦影院午夜理论片 | 久9re热视频这里只有精品 | 精品无人国产偷自产在线 | 国产后入清纯学生妹 | 亚洲小说春色综合另类 | 国产小呦泬泬99精品 | 强奷人妻日本中文字幕 | 欧美成人午夜精品久久久 | 色婷婷久久一区二区三区麻豆 | 人妻aⅴ无码一区二区三区 | 精品无码成人片一区二区98 | 一区二区三区乱码在线 | 欧洲 | 亚洲一区二区三区国产精华液 | 日本一区二区更新不卡 | 丝袜 中出 制服 人妻 美腿 | 少妇高潮喷潮久久久影院 | 精品无码一区二区三区爱欲 | 国产性生大片免费观看性 | 玩弄人妻少妇500系列视频 | 内射巨臀欧美在线视频 | 无码国产乱人伦偷精品视频 | 精品夜夜澡人妻无码av蜜桃 | 无码成人精品区在线观看 | 人人妻人人澡人人爽欧美一区 | 亚洲一区二区观看播放 | 中文字幕乱妇无码av在线 | 欧美高清在线精品一区 | 精品亚洲韩国一区二区三区 | 18黄暴禁片在线观看 | 天下第一社区视频www日本 | 国产欧美精品一区二区三区 | 久久久精品456亚洲影院 | 伊人久久大香线焦av综合影院 | 99re在线播放 | 久久久久国色av免费观看性色 | 日韩成人一区二区三区在线观看 | 人妻少妇被猛烈进入中文字幕 | 麻豆md0077饥渴少妇 | 午夜丰满少妇性开放视频 | 亚洲国产av美女网站 | 98国产精品综合一区二区三区 | 中文字幕 亚洲精品 第1页 | 人妻体内射精一区二区三四 | 丰满少妇女裸体bbw | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产特级毛片aaaaaaa高清 | 色老头在线一区二区三区 | 丝袜人妻一区二区三区 | 青青青爽视频在线观看 | 久久久av男人的天堂 | 欧美日韩一区二区综合 | 曰本女人与公拘交酡免费视频 | 国产成人无码专区 | 性色欲情网站iwww九文堂 | 狠狠亚洲超碰狼人久久 | 亚洲精品国偷拍自产在线麻豆 | 欧美日韩一区二区综合 | 成人一在线视频日韩国产 | 亚洲一区二区三区 | 欧美 亚洲 国产 另类 | 鲁鲁鲁爽爽爽在线视频观看 | 免费观看黄网站 | 国产无遮挡又黄又爽免费视频 | 捆绑白丝粉色jk震动捧喷白浆 | 日欧一片内射va在线影院 | 波多野结衣一区二区三区av免费 | 秋霞特色aa大片 | 国产九九九九九九九a片 | 99精品无人区乱码1区2区3区 | 国产小呦泬泬99精品 | 久久国产精品萌白酱免费 | 欧美国产日韩久久mv | 粉嫩少妇内射浓精videos | 国产电影无码午夜在线播放 | 对白脏话肉麻粗话av | a在线亚洲男人的天堂 | 99久久精品日本一区二区免费 | 国产三级久久久精品麻豆三级 | 四虎影视成人永久免费观看视频 | 一本大道久久东京热无码av | 色欲av亚洲一区无码少妇 | 熟女体下毛毛黑森林 | 国产九九九九九九九a片 | 国产精品嫩草久久久久 | 色综合久久88色综合天天 | 无码免费一区二区三区 | 黑人玩弄人妻中文在线 | 欧美性色19p | 日韩精品无码一区二区中文字幕 | 无遮挡国产高潮视频免费观看 | 青青青手机频在线观看 | 精品偷拍一区二区三区在线看 | 精品成人av一区二区三区 | 狂野欧美性猛xxxx乱大交 | 成人欧美一区二区三区黑人 | 亚洲乱码日产精品bd | 国产综合在线观看 | 大乳丰满人妻中文字幕日本 | 无码国内精品人妻少妇 | 中文字幕人成乱码熟女app | 欧美 丝袜 自拍 制服 另类 | 97久久国产亚洲精品超碰热 | 国产偷国产偷精品高清尤物 | 色诱久久久久综合网ywww | 无码一区二区三区在线 | 色综合久久88色综合天天 | 一本精品99久久精品77 | 偷窥日本少妇撒尿chinese | 狂野欧美性猛xxxx乱大交 | 国产疯狂伦交大片 | 国产午夜福利亚洲第一 | 久久久久免费精品国产 | 色一情一乱一伦 | 97无码免费人妻超级碰碰夜夜 | 一本久道久久综合狠狠爱 | а天堂中文在线官网 | 国产成人精品优优av | 亚洲乱码国产乱码精品精 | 久青草影院在线观看国产 | 国产又粗又硬又大爽黄老大爷视 | 国产乱人伦av在线无码 | 国产香蕉尹人综合在线观看 | 日本免费一区二区三区最新 | 荫蒂添的好舒服视频囗交 | 欧美精品一区二区精品久久 | 精品久久8x国产免费观看 | 久久国语露脸国产精品电影 | 狠狠色色综合网站 | 国产午夜精品一区二区三区嫩草 | 国产精品亚洲专区无码不卡 | 国产97在线 | 亚洲 | 激情人妻另类人妻伦 | 久久综合给久久狠狠97色 | 久久久精品成人免费观看 | 在线а√天堂中文官网 | 国产成人无码区免费内射一片色欲 | 亚洲男人av香蕉爽爽爽爽 | 亚洲欧美日韩综合久久久 | 精品国产成人一区二区三区 | 少妇邻居内射在线 | 少妇高潮一区二区三区99 | 国精产品一品二品国精品69xx | 久久久精品人妻久久影视 | 漂亮人妻洗澡被公强 日日躁 | 在线精品亚洲一区二区 | 亚洲精品一区三区三区在线观看 | 性生交片免费无码看人 | 久久久国产精品无码免费专区 | 妺妺窝人体色www婷婷 | 亚洲一区二区三区偷拍女厕 | 四虎国产精品一区二区 | 中文字幕 亚洲精品 第1页 | 最新版天堂资源中文官网 | 成人试看120秒体验区 | 装睡被陌生人摸出水好爽 | 一本加勒比波多野结衣 | 俄罗斯老熟妇色xxxx | 国产午夜精品一区二区三区嫩草 | 国内精品人妻无码久久久影院蜜桃 | 377p欧洲日本亚洲大胆 | 成人欧美一区二区三区 | 日产国产精品亚洲系列 | 少妇人妻大乳在线视频 | 亚洲综合在线一区二区三区 | 午夜成人1000部免费视频 | 久久精品人人做人人综合试看 | 在线播放免费人成毛片乱码 | 亚洲精品成人福利网站 | 曰韩无码二三区中文字幕 | 男人扒开女人内裤强吻桶进去 | 天下第一社区视频www日本 | 国产精品二区一区二区aⅴ污介绍 | 夜夜夜高潮夜夜爽夜夜爰爰 | 色综合久久88色综合天天 | 乌克兰少妇性做爰 | 熟妇人妻激情偷爽文 | 18精品久久久无码午夜福利 | 蜜桃臀无码内射一区二区三区 | 中文字幕色婷婷在线视频 | 一本色道久久综合亚洲精品不卡 | 国产成人一区二区三区别 | 色婷婷综合中文久久一本 | 少妇无码一区二区二三区 | 一本久道久久综合婷婷五月 | 国产内射老熟女aaaa | 日韩av无码中文无码电影 | 久久亚洲精品中文字幕无男同 | 无码人妻精品一区二区三区不卡 | 55夜色66夜色国产精品视频 | 2020久久超碰国产精品最新 | 久久久精品人妻久久影视 | 男人和女人高潮免费网站 | 天堂亚洲2017在线观看 | 麻豆国产97在线 | 欧洲 | aⅴ在线视频男人的天堂 | 最近免费中文字幕中文高清百度 | 欧美国产日产一区二区 | 国产精品人人爽人人做我的可爱 | 好屌草这里只有精品 | 婷婷五月综合激情中文字幕 | 亚洲人成网站色7799 | 麻豆国产97在线 | 欧洲 | 欧美一区二区三区视频在线观看 | 国产成人无码av一区二区 | aa片在线观看视频在线播放 | 亚洲成av人影院在线观看 | 麻豆av传媒蜜桃天美传媒 | 熟女体下毛毛黑森林 | 午夜精品一区二区三区在线观看 | 中国女人内谢69xxxxxa片 | 国产一区二区三区日韩精品 | 在线播放无码字幕亚洲 | 欧美大屁股xxxxhd黑色 | 美女张开腿让人桶 | 大肉大捧一进一出视频出来呀 | 99er热精品视频 | 国产三级精品三级男人的天堂 | 色综合久久88色综合天天 | 女人被爽到呻吟gif动态图视看 | 夜夜躁日日躁狠狠久久av | 夜先锋av资源网站 | 中文无码精品a∨在线观看不卡 | 国产无av码在线观看 | 欧美国产亚洲日韩在线二区 | 成熟女人特级毛片www免费 | 狂野欧美激情性xxxx | 大肉大捧一进一出好爽视频 | 亚洲国产欧美在线成人 | 乌克兰少妇xxxx做受 | 亚洲欧美精品伊人久久 | 欧美日韩一区二区三区自拍 | 鲁大师影院在线观看 | 久久国产劲爆∧v内射 | 少妇无码av无码专区在线观看 | 无码福利日韩神码福利片 | 久久久久久久人妻无码中文字幕爆 | 亚洲s色大片在线观看 | 欧美性猛交xxxx富婆 | 乱人伦人妻中文字幕无码 | 精品亚洲韩国一区二区三区 | 国产午夜亚洲精品不卡下载 | 日本乱偷人妻中文字幕 | 无码国产色欲xxxxx视频 | 国产美女精品一区二区三区 | 国产色xx群视频射精 | 亚洲国产精品一区二区第一页 | 国内丰满熟女出轨videos | 天天拍夜夜添久久精品大 | 最新版天堂资源中文官网 | 亚洲一区二区三区播放 | 美女极度色诱视频国产 | 亚洲精品一区二区三区在线 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 欧美日韩一区二区综合 | 久久久久久亚洲精品a片成人 | 性欧美牲交在线视频 | 天堂а√在线中文在线 | 中文字幕无码免费久久9一区9 | 18精品久久久无码午夜福利 | 成人免费无码大片a毛片 | 国产精品久久精品三级 | 日韩人妻无码中文字幕视频 | 亚洲精品一区国产 | 久久国产精品精品国产色婷婷 | 沈阳熟女露脸对白视频 | 成人精品视频一区二区三区尤物 | 蜜桃无码一区二区三区 | 色情久久久av熟女人妻网站 | 装睡被陌生人摸出水好爽 | 精品久久久久久人妻无码中文字幕 | 国产免费无码一区二区视频 | 高潮喷水的毛片 | 国产极品美女高潮无套在线观看 | 欧美高清在线精品一区 | 国产电影无码午夜在线播放 | 亚洲熟妇自偷自拍另类 | 国产精品人人爽人人做我的可爱 | 蜜桃臀无码内射一区二区三区 | 少妇性l交大片 | 亚洲日韩av一区二区三区中文 | 亚洲成av人在线观看网址 | 又湿又紧又大又爽a视频国产 | 色综合久久久无码中文字幕 | 人人澡人摸人人添 | 国产激情精品一区二区三区 | 欧美日韩人成综合在线播放 | 国产激情一区二区三区 | 日韩精品无码一区二区中文字幕 | 精品国产一区二区三区av 性色 | 97人妻精品一区二区三区 | 六十路熟妇乱子伦 | 少妇性俱乐部纵欲狂欢电影 | 女人被男人爽到呻吟的视频 | 青青草原综合久久大伊人精品 | 亚洲中文字幕av在天堂 | 国产成人一区二区三区在线观看 | 亚洲人成影院在线观看 | 男人扒开女人内裤强吻桶进去 | 97精品人妻一区二区三区香蕉 | 国产亚洲精品久久久久久大师 | 欧美人与牲动交xxxx | 亚洲精品中文字幕乱码 | 国产精品无码久久av | 亚洲中文字幕久久无码 | 日韩亚洲欧美中文高清在线 | 国产精品久久久一区二区三区 | 色婷婷久久一区二区三区麻豆 | 波多野结衣av一区二区全免费观看 | 欧美日韩久久久精品a片 | 亚洲精品欧美二区三区中文字幕 | 欧美 日韩 人妻 高清 中文 | 亚洲va欧美va天堂v国产综合 | 中文字幕无码日韩欧毛 | 人妻人人添人妻人人爱 | 中文字幕色婷婷在线视频 | 丰满人妻一区二区三区免费视频 | 亚洲一区二区三区香蕉 | 在线а√天堂中文官网 | 国产9 9在线 | 中文 | 色婷婷久久一区二区三区麻豆 | 亚洲爆乳大丰满无码专区 | 玩弄人妻少妇500系列视频 | 女人被爽到呻吟gif动态图视看 | 日韩精品成人一区二区三区 | 亚洲天堂2017无码 | 日韩av激情在线观看 | 一区二区三区高清视频一 | 久精品国产欧美亚洲色aⅴ大片 | а√天堂www在线天堂小说 | 日韩av无码一区二区三区 | 国产亚洲精品久久久久久 | 日韩精品久久久肉伦网站 | 在线精品国产一区二区三区 | 人人妻人人澡人人爽欧美精品 | 国产麻豆精品精东影业av网站 | 人人妻人人澡人人爽欧美一区九九 | 熟妇激情内射com | 国产av一区二区精品久久凹凸 | 国产午夜福利亚洲第一 | 国产精品无码mv在线观看 | 久久精品国产一区二区三区 | 一本久道久久综合婷婷五月 | 中文字幕人妻丝袜二区 | 熟妇人妻无乱码中文字幕 | 久久久久人妻一区精品色欧美 | 国产人妻人伦精品1国产丝袜 | 久久精品国产一区二区三区肥胖 | 中文字幕+乱码+中文字幕一区 | 色情久久久av熟女人妻网站 | 亚洲国产午夜精品理论片 | 精品无码国产一区二区三区av | 亚洲一区二区三区四区 | 小sao货水好多真紧h无码视频 | 中文字幕精品av一区二区五区 | 娇妻被黑人粗大高潮白浆 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲国产av美女网站 | av人摸人人人澡人人超碰下载 | 特黄特色大片免费播放器图片 | 内射巨臀欧美在线视频 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲成色在线综合网站 | 久久熟妇人妻午夜寂寞影院 | 日韩精品a片一区二区三区妖精 | 亚洲熟女一区二区三区 | 丝袜美腿亚洲一区二区 | 无码国内精品人妻少妇 | 国产综合久久久久鬼色 | 免费无码午夜福利片69 | 女高中生第一次破苞av | 少妇人妻av毛片在线看 | 久久午夜无码鲁丝片午夜精品 | 日韩av无码一区二区三区不卡 | 俺去俺来也www色官网 | 大色综合色综合网站 | 丰满人妻精品国产99aⅴ | 国产精品久久久久影院嫩草 | 久久国产精品精品国产色婷婷 | 国产精品亚洲专区无码不卡 | 亚洲色欲色欲欲www在线 | 福利一区二区三区视频在线观看 | 欧美精品在线观看 | 欧美国产亚洲日韩在线二区 | 青青青手机频在线观看 | 亚洲色大成网站www国产 | 国产一区二区三区四区五区加勒比 | 国产精品久久久一区二区三区 | 国产成人无码专区 | 亚洲精品一区国产 | 又大又紧又粉嫩18p少妇 | 一本久道久久综合狠狠爱 | 爆乳一区二区三区无码 | www成人国产高清内射 | 亚洲性无码av中文字幕 | 丰满少妇人妻久久久久久 | 野狼第一精品社区 | 国产精品久免费的黄网站 | 东京热无码av男人的天堂 | 无码吃奶揉捏奶头高潮视频 | 成人无码精品一区二区三区 | 亚洲欧美综合区丁香五月小说 | 天天躁夜夜躁狠狠是什么心态 | 国内精品九九久久久精品 | 日本一卡2卡3卡四卡精品网站 | 激情国产av做激情国产爱 | 欧美成人午夜精品久久久 | 两性色午夜免费视频 | 国产三级久久久精品麻豆三级 | 好屌草这里只有精品 | 国产午夜福利亚洲第一 | 水蜜桃亚洲一二三四在线 | 牲欲强的熟妇农村老妇女 | aⅴ在线视频男人的天堂 | 中文久久乱码一区二区 | 人人妻人人澡人人爽欧美一区 | 国产精品久久久久久亚洲影视内衣 | 亚洲爆乳无码专区 | 亚洲欧美综合区丁香五月小说 | 国产成人无码av一区二区 | 国产人妻精品一区二区三区不卡 | 牲欲强的熟妇农村老妇女视频 | 色婷婷欧美在线播放内射 | 亚洲成a人片在线观看日本 | 国产亚洲视频中文字幕97精品 | 中文字幕av无码一区二区三区电影 | 99久久精品日本一区二区免费 | 内射巨臀欧美在线视频 | 久久久久亚洲精品中文字幕 | 亚洲成a人片在线观看无码3d | 日本成熟视频免费视频 | 日韩视频 中文字幕 视频一区 | 88国产精品欧美一区二区三区 | 大色综合色综合网站 | 动漫av一区二区在线观看 | 国产一精品一av一免费 | 兔费看少妇性l交大片免费 | 久久aⅴ免费观看 | 无码乱肉视频免费大全合集 | 两性色午夜视频免费播放 | 日本一本二本三区免费 | 亚洲一区二区三区无码久久 | 国产精品-区区久久久狼 | 精品无码一区二区三区的天堂 | 久精品国产欧美亚洲色aⅴ大片 | 日产精品高潮呻吟av久久 | 中文字幕+乱码+中文字幕一区 | 爽爽影院免费观看 | 欧美成人免费全部网站 | 精品一区二区不卡无码av | 女人被爽到呻吟gif动态图视看 | 日韩av无码一区二区三区不卡 | 97资源共享在线视频 | 红桃av一区二区三区在线无码av | 免费男性肉肉影院 | 日本大香伊一区二区三区 | 国产三级精品三级男人的天堂 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精品手机免费 | 九一九色国产 | 曰韩无码二三区中文字幕 | 日本饥渴人妻欲求不满 | 久久综合九色综合97网 | 国产综合久久久久鬼色 | 国产莉萝无码av在线播放 | 天天摸天天碰天天添 | 成人综合网亚洲伊人 | 东京热男人av天堂 | 日韩精品一区二区av在线 | 无码av最新清无码专区吞精 | 亚洲中文字幕在线观看 | 国产特级毛片aaaaaa高潮流水 | 日韩欧美中文字幕在线三区 | 四虎影视成人永久免费观看视频 | 久久久精品欧美一区二区免费 | 国产性生大片免费观看性 | 成年美女黄网站色大免费视频 | 国产精品人人爽人人做我的可爱 | 国产成人无码午夜视频在线观看 | 亚洲日本va午夜在线电影 | 夜精品a片一区二区三区无码白浆 | 欧美人与物videos另类 | 天天躁夜夜躁狠狠是什么心态 | 色一情一乱一伦一视频免费看 | 国产成人无码av一区二区 | 午夜福利一区二区三区在线观看 | 2020最新国产自产精品 | 久久久中文字幕日本无吗 | 九月婷婷人人澡人人添人人爽 | 亚洲 另类 在线 欧美 制服 | 无码纯肉视频在线观看 | 午夜精品一区二区三区在线观看 | 亚洲码国产精品高潮在线 | 日本熟妇乱子伦xxxx | 国产女主播喷水视频在线观看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 无码人妻av免费一区二区三区 | 久久久久人妻一区精品色欧美 | 中文字幕中文有码在线 | 无码人妻av免费一区二区三区 | 亚洲色在线无码国产精品不卡 | 久久久精品人妻久久影视 | 成熟女人特级毛片www免费 | 东京一本一道一二三区 | 国产成人综合美国十次 | 久激情内射婷内射蜜桃人妖 | 国产舌乚八伦偷品w中 | 人妻体内射精一区二区三四 | 午夜福利一区二区三区在线观看 | 欧美亚洲国产一区二区三区 | 久久五月精品中文字幕 | 亚洲人成网站在线播放942 | 亚洲欧美精品aaaaaa片 | 国产精品亚洲综合色区韩国 | 国产又粗又硬又大爽黄老大爷视 | 亚洲成av人影院在线观看 | 福利一区二区三区视频在线观看 | 色综合久久久久综合一本到桃花网 | 精品偷自拍另类在线观看 | 性生交大片免费看l | 亚洲日韩精品欧美一区二区 | 中文字幕日韩精品一区二区三区 | 欧美国产日韩亚洲中文 | 日本熟妇大屁股人妻 | 少妇性l交大片 | 天堂久久天堂av色综合 | 亚洲s码欧洲m码国产av | 成人免费无码大片a毛片 | 国产精品美女久久久网av | 色诱久久久久综合网ywww | 国产午夜福利亚洲第一 | 国产亚洲精品久久久久久国模美 | 欧美xxxx黑人又粗又长 | 久久无码人妻影院 | 久久亚洲中文字幕无码 | 男人扒开女人内裤强吻桶进去 | 国产无套粉嫩白浆在线 | 蜜桃av抽搐高潮一区二区 | 国产精品久久国产三级国 | 伊在人天堂亚洲香蕉精品区 | 男人的天堂2018无码 | 理论片87福利理论电影 | 欧美丰满老熟妇xxxxx性 | 精品人妻中文字幕有码在线 | 精品水蜜桃久久久久久久 | 特级做a爰片毛片免费69 | a在线观看免费网站大全 | 奇米影视7777久久精品 | 久久亚洲中文字幕无码 | 亚洲国产欧美日韩精品一区二区三区 | 骚片av蜜桃精品一区 | 亚洲热妇无码av在线播放 | 少妇被黑人到高潮喷出白浆 | 免费观看的无遮挡av | 鲁大师影院在线观看 | 免费无码一区二区三区蜜桃大 | 久久伊人色av天堂九九小黄鸭 | 日日干夜夜干 | 亚洲国产精品久久人人爱 | 精品欧洲av无码一区二区三区 | 国产精品久免费的黄网站 | 日本丰满熟妇videos | 熟女体下毛毛黑森林 | 亚洲精品国产精品乱码不卡 | 夜精品a片一区二区三区无码白浆 | 少妇无码吹潮 | 麻豆果冻传媒2021精品传媒一区下载 | 日韩人妻少妇一区二区三区 | 啦啦啦www在线观看免费视频 | 99久久99久久免费精品蜜桃 | 亚洲国产精华液网站w | 国产人成高清在线视频99最全资源 | 欧美猛少妇色xxxxx | 国产亚洲欧美在线专区 | 亚洲色欲久久久综合网东京热 | 97资源共享在线视频 | 自拍偷自拍亚洲精品10p | 99er热精品视频 | 国产精品永久免费视频 | 国产亚洲精品久久久久久大师 | 99久久久国产精品无码免费 | 丰满人妻精品国产99aⅴ | www国产亚洲精品久久网站 | 水蜜桃亚洲一二三四在线 | 99久久精品午夜一区二区 | 性欧美大战久久久久久久 | 久久国产精品精品国产色婷婷 | 樱花草在线社区www | 无码av免费一区二区三区试看 | 国产两女互慰高潮视频在线观看 | 欧美日韩人成综合在线播放 | 欧美性色19p | 欧美一区二区三区视频在线观看 | 人人妻人人澡人人爽欧美一区九九 | 欧美熟妇另类久久久久久多毛 | 十八禁真人啪啪免费网站 | 99久久久无码国产aaa精品 | 给我免费的视频在线观看 | 精品人妻av区 | 国产真实伦对白全集 | 给我免费的视频在线观看 | 中文字幕av日韩精品一区二区 | 在线播放亚洲第一字幕 | 人妻互换免费中文字幕 | 亚洲性无码av中文字幕 | 国产精品二区一区二区aⅴ污介绍 | 亚洲熟妇色xxxxx亚洲 | 激情爆乳一区二区三区 | 无码纯肉视频在线观看 | 99久久久无码国产aaa精品 | 7777奇米四色成人眼影 | 成人免费视频视频在线观看 免费 | 蜜桃av抽搐高潮一区二区 | 国产av久久久久精东av | 麻豆国产人妻欲求不满 | 欧洲熟妇精品视频 | 国产激情一区二区三区 | 熟妇人妻中文av无码 | 熟女俱乐部五十路六十路av | 少妇无套内谢久久久久 | 亚洲欧美精品aaaaaa片 | 在教室伦流澡到高潮hnp视频 | 国产精品沙发午睡系列 | 天堂久久天堂av色综合 | 国产乱码精品一品二品 | 又色又爽又黄的美女裸体网站 | 国产精品久久国产精品99 | 激情爆乳一区二区三区 | 男女爱爱好爽视频免费看 | 亚洲国产欧美日韩精品一区二区三区 | 成人性做爰aaa片免费看 | 男人和女人高潮免费网站 | 日本护士毛茸茸高潮 | 亚洲欧洲无卡二区视頻 | 国产精品毛片一区二区 | 久久久久亚洲精品中文字幕 | 国产精品久久国产精品99 | 狠狠色欧美亚洲狠狠色www | 国产成人精品久久亚洲高清不卡 | 亚洲爆乳无码专区 | 久久久久亚洲精品中文字幕 | 丰腴饱满的极品熟妇 | 鲁鲁鲁爽爽爽在线视频观看 | 曰韩无码二三区中文字幕 | 色诱久久久久综合网ywww | 老司机亚洲精品影院无码 | 亚洲 日韩 欧美 成人 在线观看 | 欧美老熟妇乱xxxxx | 风流少妇按摩来高潮 | 成熟女人特级毛片www免费 | 日本护士毛茸茸高潮 | 成人片黄网站色大片免费观看 | 国产精品无码一区二区三区不卡 | 成人性做爰aaa片免费看不忠 | aa片在线观看视频在线播放 | 久久zyz资源站无码中文动漫 | 99国产精品白浆在线观看免费 | 国产精品久久久久久久9999 | 国产九九九九九九九a片 | 一本色道婷婷久久欧美 | 大肉大捧一进一出好爽视频 | 亚洲自偷精品视频自拍 | 日日噜噜噜噜夜夜爽亚洲精品 | 精品国产乱码久久久久乱码 | 在线视频网站www色 | 5858s亚洲色大成网站www | 中文字幕 人妻熟女 | 久久熟妇人妻午夜寂寞影院 | 天天做天天爱天天爽综合网 | 日本成熟视频免费视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 一二三四社区在线中文视频 | 亚洲国产精华液网站w | 国产亚洲欧美日韩亚洲中文色 | 波多野结衣 黑人 | 成人免费无码大片a毛片 | 亚洲国产精品毛片av不卡在线 | 男人和女人高潮免费网站 | 日日躁夜夜躁狠狠躁 | 久久精品国产一区二区三区肥胖 | 国产精品18久久久久久麻辣 | 亚洲色在线无码国产精品不卡 | 亚洲人成影院在线无码按摩店 | 中文字幕人妻无码一夲道 | 成在人线av无码免费 | 国产亚洲美女精品久久久2020 | 亚洲阿v天堂在线 | 人妻互换免费中文字幕 | 日本www一道久久久免费榴莲 | 国产精品久久国产精品99 | 无码人妻久久一区二区三区不卡 | 日本一区二区三区免费高清 | 亚洲精品美女久久久久久久 | 久久综合色之久久综合 | 天下第一社区视频www日本 | 在线天堂新版最新版在线8 | 亚洲欧美日韩成人高清在线一区 | 亚洲中文字幕无码一久久区 | 性史性农村dvd毛片 | 亚洲精品久久久久久久久久久 | 自拍偷自拍亚洲精品被多人伦好爽 | 麻花豆传媒剧国产免费mv在线 | 性做久久久久久久免费看 | 国色天香社区在线视频 | 一个人看的www免费视频在线观看 | 人妻互换免费中文字幕 | 丝袜人妻一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | 又紧又大又爽精品一区二区 | 久久久中文久久久无码 | 久久久久国色av免费观看性色 | 丝袜足控一区二区三区 | 色妞www精品免费视频 | 亚洲国产欧美在线成人 | 午夜成人1000部免费视频 | 强辱丰满人妻hd中文字幕 | 乱人伦人妻中文字幕无码久久网 | 亚洲一区二区观看播放 | 成熟妇人a片免费看网站 | 18禁止看的免费污网站 | 国产区女主播在线观看 | 狂野欧美激情性xxxx | 中文字幕日韩精品一区二区三区 | 欧美精品在线观看 | 国产精品亚洲五月天高清 | 国产精品久免费的黄网站 | 四虎国产精品一区二区 | 在线精品国产一区二区三区 | 免费中文字幕日韩欧美 | 国产福利视频一区二区 | 亚洲色偷偷偷综合网 | 久久精品人妻少妇一区二区三区 | 国产亚洲人成a在线v网站 | 日韩精品久久久肉伦网站 | 成年女人永久免费看片 | 成人性做爰aaa片免费看 | 女人被男人躁得好爽免费视频 | 亚洲色偷偷男人的天堂 | 精品熟女少妇av免费观看 | 国语自产偷拍精品视频偷 | 久久综合给久久狠狠97色 | 国产成人无码区免费内射一片色欲 | 亚洲成a人一区二区三区 | 久久国产精品精品国产色婷婷 | 亚洲精品国偷拍自产在线观看蜜桃 | 人妻无码久久精品人妻 | 人人妻人人澡人人爽欧美一区九九 | 亲嘴扒胸摸屁股激烈网站 | 亚洲欧美日韩成人高清在线一区 | 狠狠cao日日穞夜夜穞av | 无码精品人妻一区二区三区av | 1000部啪啪未满十八勿入下载 | 国产乱人伦偷精品视频 | 久久国产劲爆∧v内射 | 东京无码熟妇人妻av在线网址 | 日韩少妇白浆无码系列 | 内射巨臀欧美在线视频 | www一区二区www免费 | 国产精品沙发午睡系列 | 亚洲精品久久久久avwww潮水 | 久久久久久久女国产乱让韩 | 成熟女人特级毛片www免费 | 强奷人妻日本中文字幕 | 无码国内精品人妻少妇 | 中文字幕av伊人av无码av | 色婷婷久久一区二区三区麻豆 | 久久久久亚洲精品中文字幕 | 国产人妻精品一区二区三区不卡 | 成人免费视频在线观看 | 亚洲综合另类小说色区 | 精品无码国产一区二区三区av | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲熟悉妇女xxx妇女av | 乱码午夜-极国产极内射 | 欧洲极品少妇 | 日韩av无码中文无码电影 | 国产在线精品一区二区三区直播 | 欧美国产亚洲日韩在线二区 | 无码国内精品人妻少妇 | 久久精品人人做人人综合 | 人人澡人摸人人添 | 久在线观看福利视频 | 三上悠亚人妻中文字幕在线 | 久久伊人色av天堂九九小黄鸭 | 亚洲日韩精品欧美一区二区 | 无码精品国产va在线观看dvd | 亚洲高清偷拍一区二区三区 | 欧洲欧美人成视频在线 | 久久久精品人妻久久影视 | 黑人粗大猛烈进出高潮视频 | 亚洲日韩中文字幕在线播放 | 99精品视频在线观看免费 | 国产激情一区二区三区 | 亚洲a无码综合a国产av中文 | 国产无遮挡吃胸膜奶免费看 | 亚洲熟女一区二区三区 | 精品无码国产一区二区三区av | 国产真实伦对白全集 | 天天av天天av天天透 | 一本大道久久东京热无码av | 特级做a爰片毛片免费69 | 激情亚洲一区国产精品 | 亚洲精品国产品国语在线观看 | 夜夜影院未满十八勿进 | 国产三级精品三级男人的天堂 | 国产亚洲精品精品国产亚洲综合 | 日本大乳高潮视频在线观看 | 国产办公室秘书无码精品99 | 狂野欧美性猛交免费视频 | 国产在线精品一区二区高清不卡 | 亚洲人成网站免费播放 | 亚洲无人区一区二区三区 | 精品无码成人片一区二区98 | 国产精品久久国产精品99 | 十八禁视频网站在线观看 | 最新国产乱人伦偷精品免费网站 | 色五月丁香五月综合五月 | 激情人妻另类人妻伦 | 日本一本二本三区免费 | 午夜福利不卡在线视频 | 国模大胆一区二区三区 | 亚洲熟悉妇女xxx妇女av | 欧美日韩亚洲国产精品 | 国产亲子乱弄免费视频 | 九九热爱视频精品 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 欧美性猛交内射兽交老熟妇 | 无码任你躁久久久久久久 | 久久久精品成人免费观看 | 国产电影无码午夜在线播放 | 亚洲爆乳精品无码一区二区三区 | 国产在热线精品视频 | 国产香蕉尹人视频在线 | 亚洲精品成人av在线 | 激情爆乳一区二区三区 | 欧洲熟妇色 欧美 | 亚洲经典千人经典日产 | 久久精品国产一区二区三区 | 国产一区二区三区精品视频 | 亚洲色大成网站www | 久久精品人人做人人综合 | 精品久久久久久亚洲精品 | 色欲综合久久中文字幕网 | 国产成人无码av一区二区 | 免费观看的无遮挡av | 美女张开腿让人桶 | 日本成熟视频免费视频 | 色婷婷av一区二区三区之红樱桃 | 在线欧美精品一区二区三区 | 国产极品美女高潮无套在线观看 | 性色av无码免费一区二区三区 | 国产乱码精品一品二品 | 18无码粉嫩小泬无套在线观看 | 日韩av激情在线观看 | 国产xxx69麻豆国语对白 | 亚洲中文字幕乱码av波多ji | 激情人妻另类人妻伦 | 波多野结衣高清一区二区三区 | 正在播放老肥熟妇露脸 | 日本乱偷人妻中文字幕 | 无码人妻出轨黑人中文字幕 | 久久综合九色综合97网 | 久久久久久a亚洲欧洲av冫 | 国产亚洲精品久久久久久国模美 | 亚洲欧洲日本无在线码 | 扒开双腿吃奶呻吟做受视频 | 国产成人无码av一区二区 | 色综合久久网 | 成人欧美一区二区三区黑人 | 鲁鲁鲁爽爽爽在线视频观看 | 欧洲熟妇精品视频 | 中文无码精品a∨在线观看不卡 | 粗大的内捧猛烈进出视频 | 日本熟妇大屁股人妻 | 美女扒开屁股让男人桶 | 少妇太爽了在线观看 | 乱人伦人妻中文字幕无码久久网 | 亚洲国产精品一区二区美利坚 | 美女扒开屁股让男人桶 | 国产精品久久久久7777 | 内射白嫩少妇超碰 | 欧美人与物videos另类 | 夜精品a片一区二区三区无码白浆 | 日日摸天天摸爽爽狠狠97 | 亚洲无人区午夜福利码高清完整版 | 中文无码精品a∨在线观看不卡 | 久久精品国产99久久6动漫 | 任你躁国产自任一区二区三区 | 对白脏话肉麻粗话av | 国产精品久免费的黄网站 | 久久综合香蕉国产蜜臀av | 国产色精品久久人妻 | 激情内射亚州一区二区三区爱妻 | 中文精品久久久久人妻不卡 | 东京热一精品无码av | 日本肉体xxxx裸交 | 亚洲人交乣女bbw | 精品国产福利一区二区 | 日韩亚洲欧美精品综合 | 久久精品国产日本波多野结衣 | 欧美高清在线精品一区 | 国产尤物精品视频 | 欧洲精品码一区二区三区免费看 | 性欧美大战久久久久久久 | 国产美女精品一区二区三区 | 亚洲 激情 小说 另类 欧美 | 色综合久久久无码中文字幕 | 在线亚洲高清揄拍自拍一品区 | 伊人久久大香线焦av综合影院 | 在线观看国产午夜福利片 | 国产精品人妻一区二区三区四 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 2020久久香蕉国产线看观看 | 国产精品内射视频免费 | 性生交大片免费看女人按摩摩 | 国内综合精品午夜久久资源 | 性欧美疯狂xxxxbbbb | 国产精品久久久久7777 | 5858s亚洲色大成网站www | 又粗又大又硬又长又爽 | 国产精品高潮呻吟av久久 | 大乳丰满人妻中文字幕日本 | 老司机亚洲精品影院无码 | 国产欧美熟妇另类久久久 | 午夜精品久久久久久久久 | 岛国片人妻三上悠亚 | 天堂亚洲免费视频 | 色妞www精品免费视频 | 人人妻人人澡人人爽人人精品浪潮 | 国产无套粉嫩白浆在线 | 国产三级精品三级男人的天堂 | 天天躁夜夜躁狠狠是什么心态 | 欧美人与物videos另类 | 少妇性荡欲午夜性开放视频剧场 | 伊人久久大香线蕉亚洲 | 久久亚洲国产成人精品性色 | 久久亚洲日韩精品一区二区三区 | 少妇人妻偷人精品无码视频 | 国精产品一品二品国精品69xx | 玩弄少妇高潮ⅹxxxyw | 女人被男人躁得好爽免费视频 | 中文字幕人成乱码熟女app | 欧美自拍另类欧美综合图片区 | 婷婷色婷婷开心五月四房播播 | 九九综合va免费看 | 日韩少妇内射免费播放 | 国产人妻精品午夜福利免费 | 色欲av亚洲一区无码少妇 | 日本www一道久久久免费榴莲 | 麻豆果冻传媒2021精品传媒一区下载 | 人人妻人人澡人人爽人人精品 | 国产超碰人人爽人人做人人添 | 日日鲁鲁鲁夜夜爽爽狠狠 | 高潮喷水的毛片 | 精品人妻人人做人人爽夜夜爽 | 亚洲男女内射在线播放 | 1000部夫妻午夜免费 | 国产艳妇av在线观看果冻传媒 | 毛片内射-百度 | 激情五月综合色婷婷一区二区 | 久久久久久九九精品久 | 久久久久亚洲精品男人的天堂 | 国产精品无码久久av | 人人妻人人澡人人爽人人精品浪潮 | 成 人 免费观看网站 | 免费观看又污又黄的网站 | 国产9 9在线 | 中文 | 荡女精品导航 | 国产xxx69麻豆国语对白 | 人人妻人人澡人人爽人人精品浪潮 | 午夜福利一区二区三区在线观看 | 装睡被陌生人摸出水好爽 | 女人被男人躁得好爽免费视频 | 天天综合网天天综合色 | 久久久中文字幕日本无吗 | 久久久亚洲欧洲日产国码αv | 久久99精品久久久久久动态图 | 欧美怡红院免费全部视频 | 亚洲熟女一区二区三区 | 国产欧美熟妇另类久久久 | 国产成人综合在线女婷五月99播放 | 曰本女人与公拘交酡免费视频 | 最近免费中文字幕中文高清百度 | aⅴ在线视频男人的天堂 | 日日摸日日碰夜夜爽av | 国产国产精品人在线视 | 国产精品va在线播放 | 亚洲第一无码av无码专区 | 东北女人啪啪对白 | 精品国产一区二区三区av 性色 | 欧美日韩一区二区免费视频 | 丰满护士巨好爽好大乳 | 亚洲啪av永久无码精品放毛片 | 国产超碰人人爽人人做人人添 | 久久精品中文字幕大胸 | 伊人久久大香线蕉av一区二区 | 精品人妻人人做人人爽 | 亚洲男女内射在线播放 | 亚洲热妇无码av在线播放 | 精品国产一区二区三区四区 | 久久国产精品萌白酱免费 | 日韩精品久久久肉伦网站 | а天堂中文在线官网 | 色综合视频一区二区三区 | 天天做天天爱天天爽综合网 | 精品无码一区二区三区的天堂 | 国产精品第一国产精品 | 好屌草这里只有精品 | 色综合久久久无码网中文 | 蜜桃视频插满18在线观看 | 国产精品99爱免费视频 | 久久综合九色综合97网 | 国内精品一区二区三区不卡 | 久久这里只有精品视频9 | 日日摸夜夜摸狠狠摸婷婷 | 国产亚洲视频中文字幕97精品 | 日本爽爽爽爽爽爽在线观看免 | 日本又色又爽又黄的a片18禁 | 丰满人妻精品国产99aⅴ | 又黄又爽又色的视频 | 天天av天天av天天透 | 九九综合va免费看 | 色五月丁香五月综合五月 | 国产激情精品一区二区三区 | 天堂а√在线中文在线 | 粉嫩少妇内射浓精videos | 亚洲国产av美女网站 | 国产超碰人人爽人人做人人添 | 成人无码视频在线观看网站 | 欧美国产日产一区二区 | 女人被男人躁得好爽免费视频 | 国产猛烈高潮尖叫视频免费 | 国产亚洲精品久久久久久久久动漫 | 国产偷抇久久精品a片69 | 日本爽爽爽爽爽爽在线观看免 | 亚洲成色www久久网站 | 亚洲中文字幕在线无码一区二区 | 99久久久国产精品无码免费 | 黑人巨大精品欧美一区二区 | 欧美性黑人极品hd | 一本色道久久综合亚洲精品不卡 | 男女作爱免费网站 | 亚洲欧洲日本无在线码 | 国产亚洲视频中文字幕97精品 | 国产精品久久久久7777 | 日韩少妇内射免费播放 | 强奷人妻日本中文字幕 | 欧美一区二区三区 | 欧美丰满老熟妇xxxxx性 | 一二三四在线观看免费视频 | 国产 精品 自在自线 | 大色综合色综合网站 | 国产后入清纯学生妹 | 曰韩无码二三区中文字幕 | 最新国产麻豆aⅴ精品无码 | aa片在线观看视频在线播放 | 欧美精品在线观看 | 亚洲国产欧美在线成人 | 天天摸天天碰天天添 | 中文字幕日韩精品一区二区三区 | 99久久人妻精品免费二区 | 国产欧美精品一区二区三区 | 国产凸凹视频一区二区 | 东京无码熟妇人妻av在线网址 | 欧美丰满熟妇xxxx | 久久午夜夜伦鲁鲁片无码免费 | 国产av无码专区亚洲awww | 久久久久久九九精品久 | 国产三级久久久精品麻豆三级 | 精品一二三区久久aaa片 | 亚洲a无码综合a国产av中文 | 久久综合色之久久综合 | 久久久久亚洲精品男人的天堂 | 人人澡人人妻人人爽人人蜜桃 | 国产麻豆精品一区二区三区v视界 | 国产无遮挡又黄又爽免费视频 | 影音先锋中文字幕无码 | 欧美喷潮久久久xxxxx | 国产精品久久久av久久久 | 131美女爱做视频 | 亚洲熟熟妇xxxx | 四虎4hu永久免费 | 特大黑人娇小亚洲女 | 精品国产成人一区二区三区 | 国产亚洲欧美日韩亚洲中文色 | 亚洲а∨天堂久久精品2021 | 学生妹亚洲一区二区 | 亚洲熟妇自偷自拍另类 | 成年美女黄网站色大免费全看 | 国产又粗又硬又大爽黄老大爷视 | 亚洲一区二区三区国产精华液 | 在线亚洲高清揄拍自拍一品区 | 性欧美疯狂xxxxbbbb | 国产午夜福利亚洲第一 | 精品无码国产自产拍在线观看蜜 | 色偷偷人人澡人人爽人人模 | 天天拍夜夜添久久精品 | 亚洲区小说区激情区图片区 | 97人妻精品一区二区三区 | 婷婷六月久久综合丁香 | 亚洲精品鲁一鲁一区二区三区 | a在线亚洲男人的天堂 | 鲁一鲁av2019在线 | 国产热a欧美热a在线视频 | 国产口爆吞精在线视频 | 蜜桃视频插满18在线观看 | 久青草影院在线观看国产 | 国产内射爽爽大片视频社区在线 | 欧美人与动性行为视频 | 亚洲综合另类小说色区 | 国产97人人超碰caoprom | 国产尤物精品视频 | 久久久久亚洲精品男人的天堂 | 亚洲精品国产a久久久久久 | 国产精品18久久久久久麻辣 | 亚洲成av人在线观看网址 | 亚洲日韩av一区二区三区四区 | 99久久婷婷国产综合精品青草免费 | 激情人妻另类人妻伦 | 熟妇女人妻丰满少妇中文字幕 | 樱花草在线社区www | 国产办公室秘书无码精品99 | 国产福利视频一区二区 | a在线亚洲男人的天堂 | 国产农村乱对白刺激视频 | 18无码粉嫩小泬无套在线观看 | 性欧美疯狂xxxxbbbb | 亚洲成av人片在线观看无码不卡 | 97夜夜澡人人双人人人喊 | 日日摸天天摸爽爽狠狠97 | 在线播放无码字幕亚洲 | 久久综合网欧美色妞网 | 亚洲精品国偷拍自产在线麻豆 | 全黄性性激高免费视频 | 十八禁视频网站在线观看 | 亚洲午夜无码久久 | 国产乱人偷精品人妻a片 | 老子影院午夜精品无码 | 国产精品怡红院永久免费 | 精品乱码久久久久久久 | 伊人色综合久久天天小片 | 国产香蕉尹人综合在线观看 | 国产精品沙发午睡系列 | 一本久久a久久精品vr综合 | 欧美乱妇无乱码大黄a片 | 99精品国产综合久久久久五月天 | 国产精品久久福利网站 | 亚洲精品午夜国产va久久成人 | 国产高清不卡无码视频 | 中文字幕乱码人妻无码久久 | 国产精品第一国产精品 | 久久亚洲国产成人精品性色 | 国产精品久久久一区二区三区 | 波多野结衣乳巨码无在线观看 | 国产美女精品一区二区三区 | 精品无码一区二区三区爱欲 | 色五月丁香五月综合五月 | 强伦人妻一区二区三区视频18 | 日日天干夜夜狠狠爱 | 亚洲日韩av一区二区三区四区 | 97久久超碰中文字幕 | 99精品视频在线观看免费 | 国产精品va在线观看无码 | 一本一道久久综合久久 | 小sao货水好多真紧h无码视频 | 久久久久成人精品免费播放动漫 | 日韩视频 中文字幕 视频一区 | 久久久久久a亚洲欧洲av冫 | 亚洲色大成网站www国产 | 乌克兰少妇xxxx做受 | 亚洲成av人片天堂网无码】 | 无码乱肉视频免费大全合集 | 人人妻人人澡人人爽精品欧美 | 亚洲成av人片在线观看无码不卡 | 中文字幕乱码人妻二区三区 | 久久99精品国产麻豆蜜芽 | 小sao货水好多真紧h无码视频 | 丰满少妇熟乱xxxxx视频 | 无码中文字幕色专区 | 377p欧洲日本亚洲大胆 | 国产高清不卡无码视频 | 大肉大捧一进一出视频出来呀 | 熟妇女人妻丰满少妇中文字幕 | 国产亚av手机在线观看 | 精品成人av一区二区三区 | 超碰97人人射妻 | 天天躁夜夜躁狠狠是什么心态 | 亚洲综合另类小说色区 | 亚洲欧美精品aaaaaa片 | 国产精品沙发午睡系列 | 久久精品人妻少妇一区二区三区 | 久久久久人妻一区精品色欧美 | 又色又爽又黄的美女裸体网站 | 国产麻豆精品一区二区三区v视界 | 人人澡人人妻人人爽人人蜜桃 | 亚洲日韩一区二区三区 | 丰满少妇熟乱xxxxx视频 | 红桃av一区二区三区在线无码av | 日日躁夜夜躁狠狠躁 | 国产xxx69麻豆国语对白 | 亚洲娇小与黑人巨大交 | 捆绑白丝粉色jk震动捧喷白浆 | 免费看少妇作爱视频 | 88国产精品欧美一区二区三区 | 色综合视频一区二区三区 | 2020最新国产自产精品 | 亚洲人成网站免费播放 | 亚洲国产午夜精品理论片 | 成人精品视频一区二区三区尤物 | 国产熟妇另类久久久久 | 国内揄拍国内精品人妻 | 3d动漫精品啪啪一区二区中 | 牲欲强的熟妇农村老妇女 | 六月丁香婷婷色狠狠久久 | 国产电影无码午夜在线播放 | 人人超人人超碰超国产 | 国产性生交xxxxx无码 | 欧洲美熟女乱又伦 | 狂野欧美激情性xxxx | 亚拍精品一区二区三区探花 | 少妇一晚三次一区二区三区 | 天天躁日日躁狠狠躁免费麻豆 | 一本大道伊人av久久综合 | 男女爱爱好爽视频免费看 | 少妇一晚三次一区二区三区 | 欧美激情综合亚洲一二区 | 又色又爽又黄的美女裸体网站 | 亚洲a无码综合a国产av中文 | 青青草原综合久久大伊人精品 | 国内少妇偷人精品视频免费 | v一区无码内射国产 | 丰满人妻精品国产99aⅴ | 无码人妻精品一区二区三区下载 | 国产精品久久久久无码av色戒 | 欧美阿v高清资源不卡在线播放 | 熟女俱乐部五十路六十路av | 一区二区三区乱码在线 | 欧洲 | 九九久久精品国产免费看小说 | 性欧美牲交在线视频 | 窝窝午夜理论片影院 | 67194成是人免费无码 | 伊人色综合久久天天小片 | 精品厕所偷拍各类美女tp嘘嘘 | 中文字幕人成乱码熟女app | 国产亚av手机在线观看 | 国产熟女一区二区三区四区五区 | 国产婷婷色一区二区三区在线 | 欧美精品免费观看二区 | 成人无码精品1区2区3区免费看 | 丰满少妇人妻久久久久久 | aⅴ亚洲 日韩 色 图网站 播放 | 欧美熟妇另类久久久久久多毛 | 亚洲色成人中文字幕网站 | 婷婷五月综合激情中文字幕 | 欧美日韩人成综合在线播放 | 国精品人妻无码一区二区三区蜜柚 | 女人和拘做爰正片视频 | 两性色午夜免费视频 | 人妻有码中文字幕在线 | 一二三四社区在线中文视频 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲欧美精品aaaaaa片 | 樱花草在线播放免费中文 | 久久久久久久女国产乱让韩 | 亚洲欧美日韩国产精品一区二区 | 九一九色国产 | 日本护士毛茸茸高潮 | 小鲜肉自慰网站xnxx | 18精品久久久无码午夜福利 | 人人澡人人妻人人爽人人蜜桃 | 亚洲欧美国产精品久久 | 无套内射视频囯产 | 九月婷婷人人澡人人添人人爽 | 亚洲高清偷拍一区二区三区 | 少妇被黑人到高潮喷出白浆 | av无码不卡在线观看免费 | 中文精品无码中文字幕无码专区 | 国产亚洲精品久久久闺蜜 |