国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

MachO 代碼簽名剖析

共 13771字,需瀏覽 28分鐘

 ·

2021-10-14 13:42

驗(yàn)證代碼的正確性是計(jì)算機(jī)科學(xué)中最難的問(wèn)題之一,因?yàn)椴淮嬖谄毡橐饬x的正確的算法,所以這一驗(yàn)證通常使用數(shù)字簽名處理。數(shù)字簽名主要做兩部分工作:

  • 驗(yàn)證代碼的來(lái)源是否合法。
  • 代碼是否被修改過(guò)。

代碼簽名并非蘋果獨(dú)有技術(shù),Java 和 Android 的 Dalvik 都在使用,但蘋果公司是最早開(kāi)始使用的。大家可以通過(guò)閱讀下文思考代碼來(lái)源是否合法和代碼是否被修改過(guò)的驗(yàn)證是如何實(shí)現(xiàn)的。

本篇文章主要參考自 Jonathan Levin 的《最強(qiáng) iOS 和 macOS 安全寶典》代碼簽名一章。

  • 測(cè)試環(huán)境:macOS 11.2.3。
  • 測(cè)試項(xiàng)目:/bin/ls ?在 x86_64 架構(gòu)下的 MachO 文件。iOS 下的文件與之相差不大。

代碼簽名格式

在了解代碼簽名機(jī)制前,非常有必要了解代碼簽名的包含的內(nèi)容。代碼簽名附著在 MachO 的尾部。加載命令為LC_CODE_SIGNATURE,它指向一個(gè)超級(jí)二進(jìn)制塊Code Signature,該二進(jìn)制塊又包含了多個(gè)其他的子二進(jìn)制塊。之前寫(xiě)過(guò)一篇文章,有講解如何手動(dòng)解析這個(gè)簽名二進(jìn)制塊:深入理解MachO數(shù)據(jù)解析規(guī)則。

下面是該二進(jìn)制塊的層級(jí)結(jié)構(gòu):

超級(jí)二進(jìn)制塊是一個(gè)目錄性質(zhì)的結(jié)構(gòu),用于指定子二進(jìn)制塊的位置,各個(gè)子二進(jìn)制塊才是代碼簽名的主要角色。

子二進(jìn)制塊類型

子二進(jìn)制塊類型通過(guò)不同值進(jìn)行表示:

二進(jìn)制塊類型
0x0000代碼目錄
0x0002需求
0x0005授權(quán)
0x10000CMS 二進(jìn)制塊
0x10001身份證明(未使用)

本篇主要就是對(duì)這幾個(gè)子二進(jìn)制塊的功能和部分實(shí)現(xiàn)進(jìn)行分析。

二進(jìn)制塊的提取

jtool 是 Jonathan Levin 開(kāi)發(fā)的一款主要用于 MachO 分析的高效工具,可以使用 homebrew 進(jìn)行安裝。

$?brew?install?jtool

我們可以使用 jtool 單獨(dú)提取代碼簽名部分:

$?jtool?-arch?x86_64?-e?signature?/bin/ls
Extracting?Code?Signature?(5728?bytes)?into?ls.signature
$?od?-t?x1?-A?x?ls.signature?#原始字節(jié)內(nèi)容
0000000????fa??de??0c??c0??00??00??14??86??00??00??00??03??00??00??00??00
0000010????00??00??00??24??00??00??00??02??00??00??02??61??00??01??00??00
0000020????00??00??02??9d??fa??de??0c??02??00??00??02??3d??00??02??01??00
0000030????00??00??00??00??00??00??00??7d??00??00??00??30??00??00??00??02
0000040????00??00??00??0e??00??00??d2??30??20??02??0b??0c??00??00??00??00
0000050????00??00??00??00??63??6f??6d??2e??61??70??70??6c??65??2e??6c??73
#?...

也可以使用 MachO 找到 Code Signature 塊進(jìn)行查看。

代碼簽名的子二進(jìn)制塊

我們可以使用 jtool 查看代碼簽名內(nèi)容的分析:

$?jtool?-arch?x86_64?--sig?-v?/bin/ls
Blob?at?offset:?53808?(5728?bytes)?is?an?embedded?signature?of?5254?bytes,?and?3?blobs
?Blob?0:?Type:?0?@36:?Code?Directory?(573?bytes)
??Version:?????20100
??Flags:???????none?(0x0)
??Platform?Binary
??CodeLimit:???0xd230
??Identifier:??com.apple.ls?(0x30)
??CDHash:??????46cc1da7c874a5853984a286ffecb48daf2f65f023d10258a31118acfc8a3697?(computed)
??#?of?Hashes:?14?code?+?2?special
??Hashes?@125?size:?32?Type:?SHA-256
???Requirements?blob:?a8ccc60c2a5bff15805beb8687c6a899db386d964a5eb3cf3c895753f6879cea?(OK)
???Bound?Info.plist:?Not?Bound
???Slot???0?(File?page?@0x0000):?e4a537939e00f4974e02b03d36e4dab75f7dc095d2214ba66bc53c73c145ceff?(OK)
???Slot???1?(File?page?@0x1000):?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7?(OK)
???Slot???2?(File?page?@0x2000):?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7?(OK)
???Slot???3?(File?page?@0x3000):?4a7cb3e6c1b3a6ac82e3575239ee53d4f0d3bed260fed63438fd21ce0d00392e?(OK)
???Slot???4?(File?page?@0x4000):?9ec9e4e02292dfda34ef3caa8317e8bfbcc41a46b18d994dba45febe31b8c660?(OK)
???Slot???5?(File?page?@0x5000):?037285f744f366210cde48821261d4a5f5b739dcf0b82f94144613e92c4b7c07?(OK)
???Slot???6?(File?page?@0x6000):?be89c764e52382702918f2db62ff24d9df40410fe894b11d505a4abc1f854340?(OK)
???Slot???7?(File?page?@0x7000):?a6b322014743965656e796155c1e0bf22e19a3e8770a43f1111cfbc961037d26?(OK)
???Slot???8?(File?page?@0x8000):?a643fc9485d941019cbdeead1d5c47add9382417ebe4d15768221f3763553b84?(OK)
???Slot???9?(File?page?@0x9000):?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7?(OK)
???Slot??10?(File?page?@0xa000):?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7?(OK)
???Slot??11?(File?page?@0xb000):?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7?(OK)
???Slot??12?(File?page?@0xc000):?23304ae11c1ade4411cb63a0955eb644574b8af416e4e3818e382421272ae1b4?(OK)
???Slot??13?(File?page?@0xd000):?e0ca7b7000d04057e71c49365b1937711b3557f6b91e0fa144791c66de2a7a4d?(OK)
?Blob?1:?Type:?2?@609:?Requirement?Set?(60?bytes)?with?1?requirement:
?0:?Designated?Requirement?(@20,?28?bytes):?SIZE:?28
??Ident:?(com.apple.ls)?AND?Apple?Anchor
?Blob?2:?Type:?10000?@669:?Blob?Wrapper?(4585?bytes)?(0x10000?is?CMS?(RFC3852)?signature)
CA:?Apple?Certification?Authority?CN:?Apple?Root?CA
CA:?Apple?Certification?Authority?CN:?Apple?Code?Signing?Certification?Authority
CA:?Apple?Certification?Authority?CN:?Apple?Root?CA
CA:?Apple?Certification?Authority?CN:?Apple?Root?CA
CA:?Apple?Certification?Authority?CN:?Apple?Code?Signing?Certification?Authority
CA:?Apple?Software?CN:?Software?Signing
Time:?201222002625Zi

它有三個(gè) Blob,即三個(gè)子二進(jìn)制塊,Blob 0 是代碼簽名 Blob 1是需求,Blob 2 是 CMS,下面是對(duì)這幾個(gè) Blob 的分析。

代碼目錄(Code Directory)

代碼目錄是簽名塊的主體,它提供了簽名資源的散列值(哈希值)。代碼簽名并非對(duì)整個(gè)文件進(jìn)行簽名,因?yàn)橛袝r(shí)二進(jìn)制文件可能很大,計(jì)算全部?jī)?nèi)容占用資源較多;而且二進(jìn)制的加載是按需加載,不會(huì)一開(kāi)始就都全部映射到內(nèi)存中。簽名時(shí)會(huì)將整個(gè) MachO 文件劃分成多個(gè)頁(yè),每個(gè)頁(yè)單獨(dú)簽名。

代碼目錄部分就是對(duì)簽名信息的描述,其中包含了各個(gè)分頁(yè)的簽名值,簽名算法和分頁(yè)大小等內(nèi)容。代碼簽名的數(shù)據(jù)結(jié)構(gòu)如下:

/*
?*?C?form?of?a?CodeDirectory.
?*/

typedef?struct?__CodeDirectory?{
?uint32_t?magic;?????/*?magic?number?(CSMAGIC_CODEDIRECTORY)?*/
?uint32_t?length;????/*?total?length?of?CodeDirectory?blob?*/
?uint32_t?version;????/*?compatibility?version?*/
?uint32_t?flags;?????/*?setup?and?mode?flags?*/
?uint32_t?hashOffset;???/*?offset?of?hash?slot?element?at?index?zero?*/
?uint32_t?identOffset;???/*?offset?of?identifier?string?*/
?uint32_t?nSpecialSlots;???/*?number?of?special?hash?slots?*/
?uint32_t?nCodeSlots;???/*?number?of?ordinary?(code)?hash?slots?*/
?uint32_t?codeLimit;????/*?limit?to?main?image?signature?range?*/
?uint8_t?hashSize;????/*?size?of?each?hash?in?bytes?*/
?uint8_t?hashType;????/*?type?of?hash?(cdHashType*?constants)?*/
?uint8_t?platform;????/*?platform?identifier;?zero?if?not?platform?binary?*/
?uint8_t?pageSize;????/*?log2(page?size?in?bytes);?0?=>?infinite?*/
?uint32_t?spare2;????/*?unused?(must?be?zero)?*/
?/*?Version?0x20100?*/
?uint32_t?scatterOffset;????/*?offset?of?optional?scatter?vector?*/
?/*?Version?0x20200?*/
?uint32_t?teamOffset;????/*?offset?of?optional?team?identifier?*/
?/*?followed?by?dynamic?content?as?located?by?offset?fields?above?*/
}?CS_CodeDirectory;

結(jié)合 CodeDirectory 的偏移量,可以從 MachOView 里查看到這部分?jǐn)?shù)據(jù)的內(nèi)容:

找到對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的含義,我們關(guān)注其中三個(gè) uint8_t 類型的值:

參數(shù)含義
hashSize0x20hash 值大小,為 0x20 字節(jié)。
hashType0x02表示簽名算法,0x01 表示 SHA-1,0x02表示SHA-256。從 macOS10.12 和 iOS11開(kāi)始,蘋果轉(zhuǎn)向使用 SHA-256。
pageSize0x0C這里是一個(gè)計(jì)算公式:log2(PageSize) = 0x0C

根據(jù)公式算出分頁(yè)大?。篜ageSize = 2 ^ 0x0C = 4096 = 0x1000 = 4K。這跟系統(tǒng)的內(nèi)存分頁(yè)大小是一致的。

由此可知整個(gè) MachO 文件會(huì)按照 0x1000 字節(jié)的大小進(jìn)行分頁(yè),分頁(yè)使用 SHA-256 算出散列值。這些計(jì)算出的散列值會(huì)記錄在代碼插槽(Code Slots)里。

代碼插槽驗(yàn)證

上面Slot 從 0 到 13 的標(biāo)記對(duì)應(yīng)的都是代碼插槽。

有了計(jì)算規(guī)則我們還可以手動(dòng)驗(yàn)證代碼簽名的正確性,我們以前三個(gè)代碼插槽為例,也即前 0x1000 字節(jié)的內(nèi)容,嘗試手動(dòng)計(jì)算其散列值。

$?lipo?/bin/ls?-thin?x86_64?-output?/tmp/ls_x86_64
$?dd?bs=0x1000?skip=0?count=1?if=/tmp/ls_x86_64?2>/dev/null?|?openssl?sha256
SHA256(stdin)=?e4a537939e00f4974e02b03d36e4dab75f7dc095d2214ba66bc53c73c145ceff
$?dd?bs=0x1000?skip=1?count=1?if=/Users/zhangferry/ls_x86_64?2>/dev/null?|?openssl?sha256
SHA256(stdin)=?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7
$?dd?bs=0x1000?skip=2?count=1?if=/Users/zhangferry/ls_x86_64?2>/dev/null?|?openssl?sha256
SHA256(stdin)=?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7

注意到后面兩個(gè)插槽計(jì)算結(jié)果一樣,這是因?yàn)檫@兩部分?jǐn)?shù)據(jù)為補(bǔ)齊位,它們?nèi)繛?。

跟前三個(gè)代碼插槽的值進(jìn)行對(duì)比:

Slot???0?(File?page?@0x0000):?e4a537939e00f4974e02b03d36e4dab75f7dc095d2214ba66bc53c73c145ceff?(OK)
Slot???1?(File?page?@0x1000):?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7?(OK)
Slot???2?(File?page?@0x2000):?ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7?(OK)

發(fā)現(xiàn)兩邊散列值一樣,輸出內(nèi)容后面的 OK 是 jtool 驗(yàn)證的結(jié)果。

這里可以看到代碼插槽有14個(gè),F(xiàn)ile page 里的內(nèi)容表示相對(duì)起始地址。另外注意到輸出部分有一句注釋:

#?of?Hashes:?14?code?+?2?special

其表示有 14 個(gè)代碼插槽和 2 個(gè)特殊插槽。

特殊插槽

特殊插槽的出現(xiàn)是因?yàn)锳pp由多個(gè)內(nèi)容組成,并非只有二進(jìn)制文件,為了保證這些非二進(jìn)制文件的完整性,對(duì)它們也會(huì)進(jìn)行簽名,它們的簽名值就是特殊插槽。因?yàn)榇a插槽的索引是從0開(kāi)始的,而且其大小不固定,為了把特殊插槽也能排列進(jìn)去,就選用負(fù)數(shù)來(lái)表示特殊插槽的含義。以下是特殊插槽的定義:

#插槽目的
-1綁定的info.plist
-2需求(requirement):二進(jìn)制塊嵌入代碼簽名
-3資源目錄:CodeSignature/CodeResources文件的散列值
-4具體應(yīng)用:實(shí)際上未被使用
-5授權(quán)(entitlement):嵌入在代碼簽名中的授權(quán)

我們可以在上方 jtool 的輸出內(nèi)容里找到特殊插槽的內(nèi)容:

Requirements?blob:?a8ccc60c2a5bff15805beb8687c6a899db386d964a5eb3cf3c895753f6879cea?(OK)
Bound?Info.plist:?Not?Bound

因?yàn)樘厥獠宀圩饔檬枪潭ǖ?,也就沒(méi)用序號(hào)表示。

代碼簽名需求(Requirements)

目前代碼簽名只是分塊取散列值,保存起來(lái),但好像還不夠強(qiáng)大。蘋果公司已經(jīng)為代碼簽名增加了另外一個(gè)機(jī)制:需求(requirements)。它可以自定義規(guī)則以施加特定限制,比如允許哪些動(dòng)態(tài)庫(kù)加載。

需求有一套特殊的語(yǔ)法規(guī)則,其表達(dá)由操作數(shù)和操作碼組成,豐富的操作碼集使得構(gòu)建任何數(shù)量的邏輯條件成為可能??梢栽?span style="font-weight: bold;color: #ff3502;">requirements.h[1] 文件里查看都有哪些操作碼。

enum?ExprOp?{
?opFalse,??????//?unconditionally?false
?opTrue,???????//?unconditionally?true
?opIdent,??????//?match?canonical?code?[string]
?opAppleAnchor,?????//?signed?by?Apple?as?Apple's?product
?opAnchorHash,?????//?match?anchor?[cert?hash]
?opInfoKeyValue,?????//?*legacy*?match?Info.plist?field?[key;?value]
?opAnd,???????//?binary?prefix?expr?AND?expr
?opOr,???????//?binary?prefix?expr?OR?expr
?opCDHash,??????//?match?hash?of?CodeDirectory?directly
?opNot,???????//?logical?inverse
?opInfoKeyField,?????//?Info.plist?key?field?[string;?match?suffix]
?opCertField,?????//?Certificate?field?[cert?index;?field?name;?match?suffix]
?opTrustedCert,?????//?require?trust?settings?to?approve?one?particular?cert?[cert?index]
?opTrustedCerts,?????//?require?trust?settings?to?approve?the?cert?chain
?opCertGeneric,?????//?Certificate?component?by?OID?[cert?index;?oid;?match?suffix]
?opAppleGenericAnchor,???//?signed?by?Apple?in?any?capacity
?opEntitlementField,????//?entitlement?dictionary?field?[string;?match?suffix]
?exprOpCount??????//?(total?opcode?count?in?use)
};

對(duì)需求的編譯是由 csreq 進(jìn)行的,對(duì)需求的驗(yàn)證可以使用 codesign -v。

我們這里來(lái)嘗試解讀下已有的需求內(nèi)容。

大部分二進(jìn)制文件的需求只是驗(yàn)證簽名身份,即使用證書(shū)是否為蘋果所頒發(fā)。在 App Store 里的應(yīng)用則使用更嚴(yán)格的規(guī)則集。我們可以查看 Xcode 的代碼簽名需求:

$?codesign?-d?-r-?/Applications/Xcode.app/Contents/MacOS/Xcode
Executable=/Applications/Xcode.app/Contents/MacOS/Xcode
designated?=>?(anchor?apple?generic?and?certificate?leaf[field.1.2.840.113635.100.6.1.9]?/*?exists?*/?or?anchor?apple?generic?and?certificate?1[field.1.2.840.113635.100.6.2.6]?/*?exists?*/?and?certificate?leaf[field.1.2.840.113635.100.6.1.13]?/*?exists?*/?and?certificate?leaf[subject.OU]?=?APPLECOMPUTER)?and?identifier?"com.apple.dt.Xcode"

注意這里有不少 1.2.840.113635 開(kāi)頭的標(biāo)識(shí),它代表的是國(guó)際通用標(biāo)準(zhǔn)證書(shū)中蘋果公司的分支(iso.member-body.us.appleOID)。其中100對(duì)應(yīng)了安全相關(guān)的一些定義 appleDataSecurity,詳細(xì)內(nèi)容可以看這里oidref.com[2]

對(duì)照Xcode的簽名需求,我們可以大致推斷出這些規(guī)則的含義:

  • 由蘋果簽名且證書(shū)節(jié)點(diǎn)包含 6.1.9 即 Mac App Store App。
  • 或由蘋果簽名且證書(shū)節(jié)點(diǎn)包含 6.2.6 即 "dev_program"。(推測(cè)是開(kāi)發(fā)版本的應(yīng)用)
  • 其證書(shū)節(jié)點(diǎn)包含 6.1.13 即 Developer ID Applications。
  • 證書(shū)的團(tuán)隊(duì)標(biāo)識(shí)符(OU)為 APPLECOMPUTER 且 BundleId 為 com.apple.dt.Xcode

注意其中最后一項(xiàng)的內(nèi)容,限定了團(tuán)隊(duì)標(biāo)識(shí)符和BundleId,這樣就能夠解決應(yīng)用被重簽名的問(wèn)題了。

CMS

CMS 是Cryptographic Message Syntax的縮寫(xiě),是一種標(biāo)準(zhǔn)的簽名格式,由RFC3852[3]定義。書(shū)中并沒(méi)有提這部分內(nèi)容,但我認(rèn)為這部分恰恰是代碼簽名最關(guān)鍵的步驟。

CMS 格式的簽名中,除了包含證書(shū)之外,還承載了一些其他的信息,比如簽名屬性 signedAttrs。

上面說(shuō)了 CodeDirectory 里保存了 MachO 分頁(yè)的 Hash 值,只要保證這個(gè) CodeDirectory 不被修改就可以了。所以對(duì)代碼目錄進(jìn)行 Hash 計(jì)算,獲得 CDHash,然后對(duì)這個(gè) CDHash 進(jìn)行簽名就可以了。

注意這一步才是真正的簽名,其開(kāi)始涉及加密,前面的代碼插槽只是提供摘要信息。

注意到 jtool 的簽名輸出里有這樣一句:

CDHash:??????46cc1da7c874a5853984a286ffecb48daf2f65f023d10258a31118acfc8a3697?(computed)

這就是外部計(jì)算的 CDHash 值,用于跟 signedAttrs 里的內(nèi)容進(jìn)行對(duì)比。而更關(guān)鍵的是對(duì) signedAttrs 的加密驗(yàn)證,實(shí)際驗(yàn)證流程比較復(fù)雜,感興趣的小伙伴可以閱讀這篇細(xì)說(shuō)iOS代碼簽名(三)[4]。

我結(jié)合文中簽名校驗(yàn)內(nèi)容和上面的代碼插槽,畫(huà)出了表示簽名校驗(yàn)的整個(gè)流程:

這里有兩處 Hash 對(duì)比,一個(gè)是對(duì) signedAttrs 的解密,確保其是可信任的。另一處是 CDHash 的對(duì)比,確保代碼未被修改。

signerInfo 里包含了 signedAttrs 、簽名使用的 Hash 算法、加密算法、簽名數(shù)據(jù)等信息。再結(jié)合證書(shū)里的公鑰,我們就可以驗(yàn)證,signedAttrs 的有效性。

授權(quán)

除了確保代碼的真實(shí)性和完整性,代碼簽名還為蘋果公司及其強(qiáng)大的安全機(jī)制提供了授權(quán)(entitlement)功能。授權(quán)文件也被包含在簽名里,其散列值放在索引為-5的插槽中。授權(quán)文件是一個(gè) XML 格式的文件,我們可以使用 jtool --ent 查看其內(nèi)容,因?yàn)?ls 沒(méi)有授權(quán)文件,我們以 Mac 端微信為例進(jìn)行查看:

$?jtool?-arch?x86_64?--ent?/Applications/WeChat.app/Contents/MacOS/WeChat
"1.0"?encoding="UTF-8"?>
"-//Apple//DTD?PLIST?1.0//EN"?"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
"1.0">

?com.apple.security.app-sandbox
?<true/>
?com.apple.security.application-groups
?
??5A4RE8SF68.com.tencent.xinWeChat
?

?com.apple.security.device.audio-input
?<true/>
?com.apple.security.device.camera
?<true/>
?com.apple.security.device.microphone
?<true/>
?com.apple.security.files.downloads.read-write
?<true/>
?com.apple.security.files.user-selected.read-write
?<true/>
?com.apple.security.network.client
?<true/>
?com.apple.security.network.server
?<true/>
?com.apple.security.personal-information.location
?<true/>


這里我們可以看到其中包含了沙盒、application-groups、聲音輸入、攝像頭等一系列權(quán)限。在應(yīng)用訪問(wèn)特定 API 的時(shí)候蘋果可以根據(jù)這些授權(quán)判定該行為是否合法。因?yàn)樘O果公司是應(yīng)用的終極簽名者,所以簽名過(guò)程中也可以很容易的修改授權(quán),比如 com.apple.security.sandbox.container-required 這一表示沙盒權(quán)限的值就會(huì)被強(qiáng)制安置到授權(quán)文件中。

強(qiáng)制驗(yàn)證代碼簽名

為了使代碼簽名真正有效,非常重要的一步就是要保證驗(yàn)證過(guò)程順利執(zhí)行,沒(méi)有遺漏。當(dāng)前簽名驗(yàn)證是發(fā)生在內(nèi)核模式下,而非用戶模式下。簽名的驗(yàn)證發(fā)生在兩個(gè)階段:加載可執(zhí)行文件時(shí)、實(shí)際訪問(wèn)二進(jìn)制代碼時(shí)(Page Fault)。分成兩個(gè)階段也是出于性能方面的考慮,因?yàn)槎M(jìn)制文件是動(dòng)態(tài)加載的,對(duì)于還沒(méi)加載的部分僅當(dāng)其加載如內(nèi)存時(shí),也即發(fā)生 Page Fault 時(shí)再進(jìn)行簽名驗(yàn)證。

可執(zhí)行文件的加載

可執(zhí)行文件的加載出現(xiàn)在execve()/mac_execve()posix_spawn()系統(tǒng)調(diào)用被觸發(fā)的時(shí)候。對(duì)于MachO,exec_mach_imgact()會(huì)被調(diào)用,在解析文件時(shí)它會(huì)找到LC_CODE_SIGNATURE的位置。代碼簽名二進(jìn)制塊會(huì)被加載到內(nèi)核的統(tǒng)一高速緩存緩沖區(qū)中。

Page Fault時(shí)的處理

可以查看 osfmk/vm/vm_fault.c[5] 的代碼:

/*
?*?CODE?SIGNING:
?*?When?soft?faulting?a?page,?we?have?to?validate?the?page?if:
?*?1.?the?page?is?being?mapped?in?user?space
?*?2.?the?page?hasn't?already?been?found?to?be?"tainted"
?*?3.?the?page?belongs?to?a?code-signed?object
?*?4.?the?page?has?not?been?validated?yet?or?has?been?mapped?for?write.
?*/

#define?VM_FAULT_NEED_CS_VALIDATION(pmap,?page,?page_obj)??\
?((pmap)?!=?kernel_pmap?/*1*/?&&?????\
??!(page)->cs_tainted?/*2*/?&&?????\
??(page_obj)->code_signed?/*3*/?&&?????\
??(!(page)->cs_validated?||?(page)->wpmapped?/*4*/))

當(dāng) Page Fault 滿足以上條件時(shí)將觸發(fā)簽名驗(yàn)證過(guò)程:

1、該頁(yè)面正在用戶空間中映射

2、這個(gè)頁(yè)面還沒(méi)有被發(fā)現(xiàn)為 tainted

3、該頁(yè)屬于一個(gè)代碼簽名對(duì)象

4、頁(yè)面還沒(méi)有被驗(yàn)證,或者還沒(méi)有被映射為可寫(xiě)狀態(tài)

代碼簽名的漏洞

代碼簽名機(jī)制雖然強(qiáng)大,保護(hù)著應(yīng)用的安全,但依然被攻破過(guò),以下講解幾例曾經(jīng)出現(xiàn)的漏洞。

JIT(即時(shí)生成代碼)

該情況發(fā)生在 Page Fault 過(guò)程,如果該頁(yè)內(nèi)容是用于 JIT,將會(huì)被特殊標(biāo)記,可以創(chuàng)建和執(zhí)行任意代碼,而無(wú)需代碼簽名。

從 iOS 10 開(kāi)始,蘋果公司開(kāi)始在64位的設(shè)備上加固 JIT。采用專門的 memcpy() 將JIT映射到可執(zhí)行但不可讀的內(nèi)存上,然后可執(zhí)行的 JIT 映射為不可寫(xiě),可寫(xiě)的 JIT 映射為不可執(zhí)行狀態(tài)。

Jekyll 應(yīng)用

Jekyll 應(yīng)用的含義是應(yīng)用在提交至 App Store 時(shí)表現(xiàn)為無(wú)害,但其實(shí)它包含惡意功能,只不過(guò)這些功能處于休眠狀態(tài)。過(guò)審之后和本地服務(wù)器進(jìn)行合作,自愿公開(kāi)其地址空間和符號(hào),通過(guò)代碼注入或者返回導(dǎo)向編程(Return Oriented Programming,ROP),觸發(fā)預(yù)置的惡意程序。

目前還沒(méi)有可靠的打擊 ROP 的方法,但因?yàn)樯澈袡C(jī)制的緣故,惡意代碼的影響范圍是可控的。

蘋果公司使用 LLVM BitCode 向 App Store 提交應(yīng)用的方案,也會(huì)使惡意應(yīng)用難以事先知曉其地址空間。

內(nèi)存鎖定

從上面我們知道發(fā)生Page Fault會(huì)觸發(fā)簽名驗(yàn)證的流程,那如果沒(méi)有Page Fault就不會(huì)存在簽名驗(yàn)證了。按照mmap -> mlock -> memcpy -> mprotect 的調(diào)用順序,應(yīng)用可以修改可執(zhí)行內(nèi)存,以任何看起來(lái)合適的方式修補(bǔ)內(nèi)存。雖然XNU通常會(huì)阻止將曾經(jīng)可寫(xiě)的內(nèi)存設(shè)置為r-x,但當(dāng)內(nèi)存鎖定時(shí),會(huì)繞過(guò)該檢測(cè)。

蘋果在iOS 9.3中修復(fù)了這個(gè)漏洞。

總結(jié)

我們?cè)賮?lái)嘗試回答開(kāi)頭上面遺留的問(wèn)題:

1、如何驗(yàn)證代碼的來(lái)源是否合法?

主要通過(guò)證書(shū)來(lái)驗(yàn)證來(lái)源是否合法,所有的開(kāi)發(fā)者證書(shū)都由蘋果頒發(fā),且被 Root CA 認(rèn)證。另外依托于需求(requirements),還可以再擴(kuò)展一些其他驗(yàn)證方式。

2、如何確認(rèn)代碼是否被修改過(guò)。

主要通過(guò)代碼插槽和 CDHash,再對(duì) CDHash 進(jìn)行簽名,就可確認(rèn)其是否被修改過(guò)。注意實(shí)際驗(yàn)證流程有兩處關(guān)鍵的 Hash 比對(duì),可以再結(jié)合上面的流程圖加深理解。

引用資料

[1]

requirements.h: https://opensource.apple.com/source/libsecurity_codesigning/libsecurity_codesigning-36591/lib/requirement.h.auto.html

[2]

oidref.com: http://oidref.com/1.2.840.113635.100

[3]

RFC3852: https://www.ietf.org/rfc/rfc3852.txt

[4]

細(xì)說(shuō)iOS代碼簽名(三): http://xelz.info/blog/2019/01/11/ios-code-signature-3/

[5]

osfmk/vm/vm_fault.c: https://opensource.apple.com/source/xnu/xnu-4570.71.2/osfmk/vm/vm_fault.c.auto.html


瀏覽 57
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 3D精品啪啪一区二区免费| 成人h在线观看| 人人爽爽人人| 久久久久9999| 啪啪网站免费| 秋霞午夜福利影院| 国产操比视频| 香蕉久久久| 成人电影A片| 成人视频18| 亚洲春色一区二区三区| 毛片自拍| 无码国产精品一区二区免费96| 欧美网站在线观看| 亚洲免费成人网| 亚洲在线视频| 欧美大香蕉网| 中文字幕第6页| 69色综合| 狠狠色婷婷777| 国产成人综合自拍| 巨爆乳肉感一区二区三区| 亚洲天堂天天| 99综合网| 青青草原亚洲| 日本黄色大片| 69式荫蒂被添全过程频| 亚洲第一黄网| 亚洲精品不卡| 久久这里精品| 五月婷婷激情五月| 91超碰免费在线| 青青操b| 亚洲最新在线观看| 欧美黄色a片| 欧美狼友| 露脸偷拍AV2025| 99精品久久| 成人视频免费网站| 操逼网站免费观看| 国产一区二区三区无码| 欧美精品成人免码在线| 麻豆传媒电影| 天天爱天天爽| 97国产高清| 国产女人18毛片水真多成人如厕 | 久久国语| 91麻豆福利| 人操人碰| 六月激情丁香| 亚洲毛片亚洲毛片亚洲毛片| 99热在线观看者| 吴梦梦无码| 日韩大吊| 四季AV一区二区凹凸懂色桃花| 竹菊影视一区二区三区| 亚洲国产高清在线观看视频| 亚洲三级网站| 亚洲国产91| 中国老女人操逼| 六月婷婷五月| 无码一区二区区| 亚洲无码成人AV| 成人网站视频在线免费观看| 丰满人妻一区二区三区视频在线不卡| 操逼在线观看| 天天撸视频| 日本少妇高潮| 男男做受A片AAAA| 黄色特级毛片| 婷婷五月欧美| 河南熟妇搡BBBB搡BBBB| 日韩一级免费在线观看| 免费A片在线看| 色五月电影| 精品人妻无码一区二区三区| 欧美日韩中文在线视频| 午夜免费播放观看在线视频| 日本黄在线观看| 少妇高潮av久久久久久| 免费无码婬片AAAA片直播| 很很撸在线视频| 怡春院在线| 国产啊啊啊啊| 天天日天天日天天干| 牛牛精品一区| 天天干天天干天| 性爱视频久久| 乱伦小视频| 欧美h在线观看| 刘玥一级婬片A片AAA| 天天日天天草天天干| 永久免费黄色视频网站| 玖玖资源站中文字幕| 成人做爰A片一区二区app| 日本成人网址| 中文字幕高清AⅤ| 中文字幕第11页| 欧美大胆视频| 成人免看一级a一片A片| 嫖中国站街老熟女HD| 无码久久久| 午夜精品人妻无码| 色婷婷网| 水多多成人视频| 天天干天天日天天操| 狠狠天天| 国产美女AV| 丁香六月婷婷久久综合| 欧美A视频在线观看| 欧美成人精品在线| 白嫩在线| 东京热91| 国产小精品| 久久视频在线| 亚洲无遮挡| 日韩日逼视频| 亚洲高清电影| 老熟女17页一91| 男人亚洲天堂| 日韩成人精品在线| 操逼com| 中文在线a∨在线| 国产成人精品久久久| 精品吃奶一区二区三区视频| 精品國產一區二區三區久久蜜月| 国内毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | AAAA毛片视频| 成人免看一级a一片| 欧美日韩国| AV中文在线| 波多野结衣视频在线播放| 污污污污污www网站免费观看 | 欧美日韩一级在线观看| 高清一区二区| 免费av大全| 五月天中文字幕| 亚洲天堂一区二区| 老司机一区二区| 簧片网站免费| 国产又爽又黄网站免费观看 | 成人小视频在线| 日韩无码视频网站| 18AV在线观看| 日韩性爱A片| 麻豆视频免费观看| 男女黄网站| 特级艺体西西444WWw| 色婷婷AV一区二区三区之e本道| 中文在线高清字幕| 天堂中文字幕| 黑人巨大翔田千里AⅤ| 成人婷婷网| 久久无码人妻精品一区二区三区| 中文字幕日本成人| 日韩欧美人妻| 亚洲精品秘一区二区三小| 亚洲无码精品久久| 国产又大又粗又长| 1024在线视频| 国产高清av| 少妇做爱| 中国老女人性爱视频| 无码秘人妻一区二区三-百度| 超碰99热| 在线天堂视频| 尤物视频在线播放| 天天干强奸视频在线综合| 中文字幕永久在线视频v1.0| 国产精品一级二级三级| 在线成人毛片| 91久久精品日日躁夜夜躁欧美| 成人黄色导航| 可以免费观看的AV| 五月激情久久| 三级片亚洲无码| 国产亚洲久一区二区三区| 12——13女人毛片毛片| 校园春色亚洲无码| 中文无码一区二区三区| 伊人久久大香线蕉av一区| 热99精品| 在线中文字幕在线观看| 色婷婷AV在线观看| 婷婷导航| 91在线精品无码秘入口苹果| 国产97热人人| 激情五月色五月| 足交在线播放| 欧美精品乱码99久久蜜桃| 911国产精品| 一本一道无码免费看视频| 精品大香蕉| 亚洲小视频在线观看| 夜夜操影院| 911精品国产一区二区在线| 老妇槡BBBB槡BBBB槡| 亚洲国产精品久久人人爱| 一区免费视频| 免费在线观看中文字幕| 欧一美一婬一伦一区二区三区自慰国| 国内自拍视频网站| 欧美久久大香蕉| 国产精品免费观看视频| 亚洲成人情趣大香蕉| av人人| 天天爽夜夜爽AA片免费| 五月天无码av| 四虎综合网| 成人精品一区二区区别解析| 久久久久99精品成人网站| 久久黄色片| 色丁香视频在线观看的| 国产3p绿帽骚妻视频| 黄色A片免费观看| 午夜AV在线播放| 久热在线资源福利站| 97精品久久| 玖玖资源网站| 中国一级A片| 懂色av| 欧美熟女一区| 熟女人妻一区二区| 久操av在线| 国产一级婬乱片AV片AAA毛片| 色五月综合网| 久久精品大屁股| 香蕉操逼视频| 操逼精品| 俺也来俺也去WWW色| 午夜第一页| 91在线无码精品秘入口男同| 97碰碰碰| 免费观看色情视频| 在线视频观看一区| 免费欧美性爱| 国产三级自拍视频| 亚洲AV自拍| 久草在在线| 亚洲无码p| 午夜黄色操逼视频| 国产婬片一级A片AAA毛片AⅤ | 在线一区二区三区| 国产熟妇搡BBBB搡BBBB搡| 久久久久久久久久久国产| 性爱无码网站| 国产777| 九九九九九九国产| 久久群交| 日韩在线中文字幕| 中文字幕人妻在线中文乱码怎么解决| 国产精品色8| 嫩草在线观看| 超碰人人人| 性爱一级| 欧美色操| 日韩成人无码AV| 国产精品久久久久久久久A| 国产成人777777精品综合| 伊人久久国产| 三级片大香蕉| 超碰P| 国内自拍青青| 亚洲女同在线| 人人摸人人操人人射| 老熟女露脸25分钟91秒| 欧美成人精品无| 国产精品久久久久久99| 99热电影| 91丝袜一区二区| 曰韩精品| 国产原创精品| 日本黄色免费视频| 国产乱码在线| 影音先锋男人天堂| 婷婷五月六月| 亚洲a电影| 久久国产精品久久| AA黄色电影| 亚洲中文字幕在线视频播放| 9i看片成人免费视频| www.青青草视频| 2024无码| 亚洲小说区图片区都市| 色婷婷丁香五月| 成年人免费公开视频| 亚洲视频a| 久操大香蕉| 少妇免费视频| 麻豆蜜桃wwww精品无码| 日韩在线网址| 熟女AV888| а√最新版天堂中文在线| 亚洲国产一区二区三区四区| 一级黄色性爱视频| 4438成人网| 无码成人毛片| 肏网站| 欧美精品99| 日韩视频免费在线| 亚洲午夜在线| 欧美一级久久| 无码视频在线观看免费| 高潮喷水AⅤ| 亚洲高清无码网站| 免费人妻视频| 香蕉中文网| 波多野结衣无码一区二区| 成人伊人网| 日韩欧美在线免费| 狠狠干伊人| 97午夜福利| 亚洲视频一区二区| 91视频网站入口| 亚洲加勒比久久88色综合| 欧美国产一区二区| 日韩精品免费| 狠狠撸天天操| 特级西西人体444.444人体聚色| 日韩精品三区| 精品色播| 黄色网在线| 婷婷五月18永久免费视频| 日韩爱爱免费视频| 91日韩在线| 4438黄色| www.91自拍| 91站街农村熟女露脸| 69成人精品视频| 久久久久久久久久国产精品| 日韩福利片| 国产主播一区二区| 爆乳尤物一区二区三区| 中文字幕在线观看免费视频| 日韩黄色免费网站| 国产成人无码在线| 99精品视频北条麻妃国产版 | 国产无码电影在线观看| 午夜成人在线观看| 悠悠色综合| 91黄在线观看| 婷婷高清无码| 香蕉成人A片视频| 亚洲欧美日韩成人| 操小骚逼视频| 综合激情av| 91成人精品一区二区| 婷婷深爱五月丁香网| 狠狠躁日日躁夜夜躁A片小说免费| 欧美一级A片在线观看| 亚洲一区日韩| 久久久精品网站| 亚洲精品18禁| 欧美黄片在线| 三级成人视频| 日韩成人无码AV| 97国产精品视频| 色色免费| 成人av网站在线播放| 久久久久久9| 国产黄片免费观看| 国产主播专区| 中文字幕成人网| 天天干网址| 九九综合精品| 高清无码黄| 色色综合视频| 国产精品成人无码免费| 99精品视频在线免费观看| 午夜影音| 88av在线播放| 人人看人人射| 蕉久中文字慕| av天堂电影网| 青草草在线| 日本高清视频www| 久操福利视频| 免费成人AV| 日韩无修正| 天天爽天天日| AV草逼| 911精品人妻一区二区三区A片| 西西4444www无码精品| 婷婷五月天成人| 日韩欧美视频| 人人肏屄| 亚洲Japanese办公室制服| 男人资源网| 日韩中文字| 无码伊人| 视频一区二区免费| 男女AV在线| 好吊看视频| 中文一区二区| 人人操超碰在线观看| 中文字幕三级片| 国产成人精品777777| 亚洲天堂在线视频| 西西444WWW无码大胆知乎| 国产主播精品| 99久在线精品99re8| 中国人妻HDbute熟睡| 青青自拍视频| 青娱乐在线精品| 九九乱伦| 草久在线| 久久永久视频| 亚洲AV无码乱码| 麻豆激情视频| 欧美视频综合| 国产综合久久久7777777 | 人人艹在线| 一区二区三区在线免费观看| 久久久精品999| 九九成人电影| 成人三级片网| 在线视频中文字幕| 国产欧美黄片| 久久精品99视频| 91亚洲免费| 午夜熟睡乱子伦视频| 日韩综合精品| 欧美A片视频| 香蕉视频日韩| 黄片视频在线观看| 国产色视频一区二区三区QQ号| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 中文无码日本一级A片人| 国产香蕉视频免费| 日韩精品中文字幕无码| 俺来也俺去www色情网| 国产高清免费视频| 爱爱爱爱视频| 欧美草比| 俺去听听婷婷| 欧洲无码精品| 欧美综合国产| 天堂网av2025| 欧美国产日韩欧美亚洲国产| 婷婷国产AV| 青青草视频免费观看| 草草影院CCYYCOM屁屁影院合集限制影院 | 91视频一区二区三区| 骚逼自拍| 狠狠综合| av岛国免费| 羞羞涩漫无码免费网站入口| 日本免费在线| 天堂网免费视频| 18禁黄色免费网站| 色优久久| 亚洲在线视频观看| 女生操逼网站| 午夜无码鲁丝片午夜精品一区二区| 国产成人a亚洲精品无码| 亚洲国产精品成人综合色在线婷婷 | 色草视频| 亚洲免费视频在线播放| 欧美极品另类| 大帝AV| 无码无卡| 国产久久精品视频| av免费在线播放| 粉嫩99精品99久久久久| 天天操人人妻| 韩国久久久| 91精品国产一区二区| 性饥渴欧美老妇XXXXX| 精品1234| 精品一区二区三区毛片| 在线免费观看亚洲| 欧美高清国产| 強姧伦一区二区三区在线播放| 亚洲欧美日韩动漫| 日韩一区二区AV| 久久伊人影院| 俺去俺来也www色官网黑人 | 亚洲色图成人网| 色五月欧美| 天天色影| 欧美老妇BBBBBBBBB| 午夜福利资源| 欧一美一婬一伦一区?| 精品秘无码一区二区三区老师 | 国产激情无码视频| 成人做爰黄A片免费视频网站野外| 国内免费毛片| 免费A片在线观看| 狠狠色婷婷777| 99视频+国产日韩欧美| 在线一区二区三区| 青草无码视频| 男女精品一区| 成人黄色小电影| 亚洲国产精品18久久久久久| 国产成人aV| 国产久久精品| 91二区三区| 成人av网站在线播放| 3D动漫精品啪啪一区二区下载| 欧美婬乱片A片AAA毛片地址| 久久久精品无码| 大香蕉伊人视频| 精品视频无码| 爱搞逼综合网| 91熟女偷情| 日本a片免费| 毛片在线视频| 日韩免费看| 免费在线观看视频a| 中文无码日韩| 天天撸在线视频| 精品国产成人a在线观看| 一区二区三区四区成人| 激情一一区二区三区| 99久久久久久| 黄色免费观看网站| 一级a一级a爰片免费免免在线 | 免费观看黄色AV| youjizzcom日本| 你懂的在线播放| 日韩中文字幕免费在线观看| 成人A片免费在线观看| 热久久亚洲中文字幕| 99免费在线观看| 成人片免费看| 成年人黄色视频免费观看| 99偷拍| 国产白丝视频| 国产综合视频| 91无码人妻精品一区二区蜜桃| 成人在线三级| 中文爱爱视频| 午夜黄色电影| 成人看片| 人操人操人操| 色久影院| 欧美日韩午夜福利视频| 久在线| 天天插一插| 91人人妻人人妻人人澡| 国产一级婬片A片免费妖精视频 | 六月丁香婷| 高清无码成人视频| 亚洲成人大香蕉视频| 成人性爱在线观看| 巜痴漢電車~凌脔版2| 婷婷色五月激情| 免费肏屄| 奶大丰满一乱一视频一区二区三区在| 亚洲色综合| 日韩中文字幕av在线| 国产理论视频在线观看| 国产小视频在线观看| 国产偷拍网站| 色情片在线播放| 亚洲色图图片| 久久久久久久久免费看无码| 在线无码免费视频| 扒开让我91看片在线看| 欧美人人插| 男女爱爱动态图| 久久久国产91桃色一区二区三区| 国产精品77777| 婷婷五月色播| 免费的一级A片| 91人妻在线| 日韩视频免费| 亚洲中文字幕免费视频| 天天扣天天操| 蜜桃久久99精品久久久酒店| 97视频在线观看免费| 熟女少妇视频| 伊人精品| 久久久久久黄片| 精品國產一區二區三區久久蜜月 | 91色秘乱码一区二区| av手机在线| 国产SUV精品一区二区| 久久精品免费看| 又大又粗又爽| 91精品国产乱码久久| 中国少妇| 伊人网站| www色色| 91aaa在线观看| 日韩在线视频91| 无码蜜桃吴梦梦| 一级片电影网站| 麻豆蜜桃wwww精品无码| 操逼精品| 日日干夜夜操| 91久久久久久| www.俺去了| 综合网插菊花| 国产乱码一区二区三区的解决方法| 乱伦内射| 青娱乐av在线| 2019国产精品| 欧美黄片一区二区| 国产狂喷水潮免费网站www| JUY-579被丈夫的上司侵犯后的第7天,我 | 成人AV中文字幕| 成人丁香五月| 国产xxxx| 日本性爱一区| AV无码在线播放| 欧美一卡| 免费电影日本黄色| 爱爱中文字幕| 中国最大成人网站| 日本成片网| 日韩中文字幕| 国产一级在线| 欧美一级操逼| 国产成人精品三级麻豆| 色五月天婷婷| 国产日韩在线观看视频| 中文字幕国产在线观看| 91在线精品视频| 嫩草在线精品| 色综合天天综合| 亚洲欧美国产高清vA在线播放| 国产三级性爱视频| V片免费看| 无码视频免费播放| 中文字幕88页| 偷拍92| 加勒比黑人和翔田千里在线播放 | 欧美综合视频在线观看| 在线一级A片| 国产激情艹逼| 亚洲性爱在线| AV黄色| 五月婷婷六月丁香综合| 特级爱爱视频| 午夜成人黄色电影| 国产精品一级二级三级| 午夜福利av在线| 精品国产va久久久久久| 亚洲天堂本一| 一级黄色毛片| 国产激情久久| 三级片无码| 无码网| 影音av| 色老汉视频| 蜜桃Av噜噜一区二区| 人人操在线播放| 毛片学生妹| 免费成人AV| 中日美朝美女一级片免费看| 淫秽视频免费看| 99re99| 国产中文字幕在线观看| 99久久精品国产毛片| 久久久成人网| 一区二区视频免费| 久精品视频| 一级AV片| 在线视频亚洲| 伊人干综合| 免费看a| 丁香五月网| 俺也操| 国产欧美在线观看| 亚洲自拍小说| 蜜臀av在线免费观看| 囯产精品久久久| 日韩亚洲在线观看| 成人免费黄色片| 成人色色| 探花极品无套大学生| 国产成人精品一区二区三区视频| 色哟哟无码精品一区二区三区| 欧美性猛交XXXXⅩXX| 亚洲污污| 91麻豆一区| 日韩日韩日韩日韩| 国产成人精品av在线观看| 五月天婷婷丁香网| 亚洲中文视频在线| 韩国日本美国免费毛片| 五丁香在线观看AV| 一区二区三区操逼| 夜夜嗨av无码一区二区三区| 国产一区二区精品| 国产黄色在线视频| 亚洲AV成人片无码网站| 免费A级毛片| 亚洲视频中文字幕| 91大神久久| 国产做受精品网站在线观看| 这里视频很精彩免费观看电视剧最新| 欧美综合视频在线观看| 麻豆911精一区二区| 国产精品做爱| 亚洲天堂视频网站| 欧美三级无码| 亚洲成人在线视频观看| 亚洲AVwww| 三级电影久久麻豆| 色av网| 中文字幕有码在线播放| 国产三级黄色片| 亚洲欧美91| 无码秘蜜桃一区二区三区| 日逼视| 草逼动态图| 婷婷丁香五月亚洲| 亚洲高清无码免费观看| 中文字幕在线日亚洲9| 香蕉久久网| 成人性生活免费视频| 欧美一区二区三区视频| 青春草视频| 国产精品一卡二卡| 日韩久久综合| 成人在线免费电影| 97国产精品人人爽人人做| 亚洲免费一级| 麻豆午夜成人无码电影| 人人操夜夜操| 亚洲一区视频| 亚洲www| 免费无码A片在线观看全| 日韩在线视频不卡| 亚洲操逼图片| 无码专区亚洲| 欧美噜噜| 亚洲三级在线视频| 久久久久久高清毛片一级| 国精品伦一区一区三区有限公司 | 狠狠操狠狠色| 天天做天天爱夜夜爽| 亚洲午夜成人精品一区二区| aaa三级黄片| 色色色亚洲| 噜噜噜在线| 学生妹一级J人片内射视频| 午夜黄色| 人人干人人操人人爽| 最美人妖系列国产Ts涵涵| 99热999| 91成人小视频| 亚洲黄色一区| www.6969成人片亚洲| 免费看一级片| 午夜小电影| 强伦轩一区二区三区四区| 国产免费a| 丰满的人妻一区二区三区果冻 | 亚洲.无码.制服.日韩.中文字幕| 黄色电影中文字幕| 四川BBB搡BBB搡多人乱| 国产av黄色| 天堂a√中文8| 西西4444WWW无视频| 欧洲无码一区二区三区| 久久久久a| 911香蕉视频| AV色站| 免费A片在线观看| 中文字幕在线观看1| 欧美特黄AAA| 蜜桃人妻无码AV天堂三区| 在线观看免费黄网站| 蝌蚪窝免费在线视频| 亚洲日韩在线a成| 亚洲日韩精品无码| 亚洲乱伦图片| 北条麻妃网址| 日韩操逼网| 操逼视频一区| 欧美日韩视频一区二区| аⅴ资源新版在线天堂| 欧美中文字幕在线播放| 去干网欧美| jizz亚洲| 一级无码A片| 在线高清无码视频| 香蕉视频一区| 免费黄色网页| 国产真实乱婬A片三区高清蜜臀| 国产丨熟女丨国产熟女视频| 久久久久久精品国产三级| 免费黄网站| www.狠狠操| 九九九在线观看视频| 日本亚洲精品秘入口A片| 亚洲综合日韩| 国产中文视频| 国产久久这里只有精品视频| www.青青草视频| 岛国免费视频| 色婷婷六月| 黄片一区二区三区| 无码欧美| 又粗又硬又爽18级A片| 最近中文字幕在线观看| 无码人妻A片一区二区青苹果| 国产性爱网址| 97人妻精品一区二区三区| 苗条一区小视频| 国产一区视频18| 伊人天天日| 国产成人无码区亚洲A片356p | 蜜桃视频一区二区三区| 香蕉大综合| 三级av在线观看| 欧美日韩一二| 六月婷婷综合| 久久精品综合| 熟女资源网| 中文字幕乱码中文字幕| 成人视频在线播放| 熟女人妻一区二区三区| 夜夜骑免费视频| 香蕉中文在线| 亚洲色图欧美另类| 日本黄色视频免费观看| 韩国三级AV| 亚洲男女啪啪视频| 88AV在线播放| 免费a片在线观看| 強暴人妻一区二区三区| 无码v| 黄色自拍视频| 久久夜夜操| 亚洲AV无码国产综合专区| 欧美成人精品一区二区三区| 肏逼黄色一级| 国产乱叫456在线| 中文字幕国产精品| 天堂在线免费视频| 污视频在线观看免费| 国产在线一区二区三区四区| 五月丁香999| 精品欧美一区二区三区| 婷婷色色五月天图片| 精品成人在线观看| 久久久久久毛片| 免费在线观看黄色视频网站| 岛国av片| 影音先锋乱伦| 久久性爱网| 久久伊人春色| 中文字幕精品1| 成人A片免费在线观看| 91在线不卡| 好吊看视频| 国产精品伦理| 久久大香蕉网| 中文字幕AV播放| 久久亚洲中文字幕乱码| 中文人妻无码| 再深点灬好爽灬轻点久久国产| 丁香五月网| 无码中文字| 男人视频网站| 搡中国东北老女人视频| 国产激情综合五月久久| 黃色毛片A片AAAA级20| 国产区欧美去区在线| 天天日天天色| 爱爱视频无码| 黄网在线播放| 91偷拍视频| 最新日韩中文字幕| 久久久青草| 成人毛片在线观看| 成人五月天黄色电影| 日韩91在线视频| 亚洲日逼网站| 男女啪啪| 亚洲天堂在线视频| 人妻丰满精品一区二区| 欧美日韩国产在线播放| 久操| 久久久高清无码视频| avwww| 中文字幕无码视频| 伊人视频网| 骚五月| 台湾无码| 欧美操逼操| 久久噜噜噜精品国产亚洲综合| 正在播放李彩斐被洋老外| 91久久精品日日躁夜夜躁欧美| 日韩中文字幕不卡| 国产成人片色情AAAA片| 台湾无码片| 五月丁香综合激情| 国产无码内射视频| 天天躁日日躁狠狠| 无码欧美| 综合导航无码| 亚洲天堂在线观看视频网站| 欧美性爱天天操| 一级日韩|