Aqua容器安全解決方案_第1頁
Aqua容器安全解決方案_第2頁
Aqua容器安全解決方案_第3頁
Aqua容器安全解決方案_第4頁
Aqua容器安全解決方案_第5頁
已閱讀5頁,還剩27頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Aqua容器安全解決方案

POC測試步驟

edvance

安領科技

2017-10-27

Version[1.0]

版權說明

包含于此篇文檔中的信息屬于商業或財務機密(或授權)信息。文檔為安

領有限公司所專有,且只用于評估目的,除非被安領有限公司授權,否則

此文檔的全部或者部分信息不得用于再版或者引用。

版本歷史

日期版本描述

2017-10-271.0

內容

1.準備工作5

2.鏡像掃描6

2.1白名單鏡像...................................................6

2.2禁止未掃描鏡像運行..........................................6

2.3鏡像安裝包的黑白名單........................................6

2.4自定義規則掃描鏡像...........................................6

2.5包含敏感信息的鏡像..........................................7

2.6結合JENKINS進行鏡像掃描......................................7

3.威脅阻止9

3.1PROCESSLIMITS..................................................................................................9

3.2只允許LINK內容器互相通信....................................9

4.徽感信息管理10

4.1自納管SECRET...............................................................................................10

4.2CYBERARK納管SECRET....................................................................................10

5.容器運行限制12

5.1以指定用戶運行容器..........................................12

5.2限制容器運行時的只讀文件...................................13

5.3限制容器運行時的可執行命令.................................14

5.4限制CONTAINER運行時的進出網絡...............................15

5.5黃金鏡像一保證CONTAINER不對容器內任何文件進行修改..........16

5.6限制CONTAINER不以特權模式運行...............................17

5.7限制CONTAINER掛我的數據卷..................................17

5.8自主學習并生成安全規則.....................................18

5.9限制容器運行時使用的資源及進程數...........................19

5.10環境變量加密...............................................20

6.網絡控制21

6.1容器與HOST之間網絡限制.....................................21

6.2容器與容器間的網絡限制.....................................21

7.主機權限管控23

7.1角色權限管控...............................................23

7.2自定義R01E角色.............................................23

7.3通過IMAGE的LABEL來分發權限.................................24

8.其他25

8.1ROOTPLEASE容器修改主機配置文件..............................25

8.2私有REGISTRY搭建............................................25

8.3SWARM部署AQUAAGENT...............................................................................26

8.4RANCHER部署AQUAAGENT.............................................................................27

1.準備工作

在DockerHost主機上安裝完AquaServer環境后,可執行以下步驟將測試用鏡像及配置文件導入到環境

中。

1.將optfolder下的文件夾上傳到DockerHost的/opt路徑下

2.通過df-h命令確保測試主機/var路徑掛載磁盤剩余空間大于10G,否則導入鏡像會導致磁盤滿

3.將測試鏡像上傳到DockerHost主機內,并通過dockerloadstar包路徑,來導入測試鏡像

4.登錄AquaWeb端>>lmages?Addimages?localengine,手動逐一添加步驟2里導入的鏡像文件。

除了imagescan/labeltest外都導入,此鏡像將用于未掃描鏡像測試。

注:如果不想逐一添加也可配置自動拉取本地鏡像,System?lntegrations?LocalEngine〉〉勾選

AutomaticallyPullNewImages。這樣AquaAgent就會在配置的指定拉取時間拉取本地鏡像進行掃描。

國Audit

Integrations

Administration

ModifyRegistry:LocalEngine

合Policiesv

RegistryTypeDockerEngine

ImageAssurance

Endpointunlx-y/ZVar/run/dockersock

ThreatMhigation

RuntimeProfilesegsix初var/run/dockersock

ContainerFlrewail

UserAccessControlQAutomat?ca?yPullNewImajes

Whenenabled,theserverwillautomaticallypullnewrepoartones/ima9esfromtheregistryevey

mSecrets

目Hosts

DailyPullTime03:00

QCompliance<

紫Systemv

Integrations

labels

AquaGatewaysSaveChangesICancel

Users

Settings

5.登錄AquaWebj^?Systerr)?Settings,點擊Import按鈕導入aqua_settings.json文件

6.通過groupadddocker添力口docker用戶組

2.鏡像掃描

2.1白名單鏡像

1.通過ImageAssurance內配置,首先設置DisallowImagesbyCVESeverity,則執行

dockerrun-v/:/hostOS-i-tchrisfosterelli/rootplease失敗

2.通過ImagiAssurance內配置,設置chrisfcsterHIi/rcctpleasa鏡像為WhiWlistlmagp,則執行

dockerrun-v/:/hostOS-i-tchrisfosterelli/rootplease成功

2.2禁止未掃描鏡像運行

1.通過ImageAssurance內配置,設置BlockUnregisteredImages,同時對應label(key=vaule)的鏡像可

以做例外,如下圖

BlockUnregisteredImages?>

QEnablebtockunregisteredimages

Donotallowtoruncontainersfromunauthorizedimages

Whitdistimageswiththefollowingpnfix(es):

+Add

Whitdistimageswiththefollowingdockb

+Add

DOCKERLABEL

license=GPLv20

2.執行dockerrun-dimagescan/labeltest未掃描鏡像可以正常運行,因為此鏡像已打了license=GPLv2

的label,如果將此例外去?■即被禁止運行

2.3鏡像安裝包的黑白名單

1.通過ImageAssurance內,設置PackageBlacklist,禁止包含黑名單Package的鏡像運行,可填寫

python包,所有版本,則執行dockerrun-dcentos被禁止

2.通過ImageAssurance內,設置PackageWhitelist,可以設置鏡像必須包含的安裝程序包,如未包含

白名單內安裝包,鏡像將被禁止執行,可填寫python包,所有版本,則執行dockerrun-dalpine被

禁止

2.4自定義規則掃描鏡像

1.通過ImageAssurance內,設置CustomChecks可以使用自定義規則腳本進行掃描,腳本返回0則禁

用鏡像。使用默認SSH包檢查腳本即可,任何安裝了SSH包的鏡像都將被禁用

CustomChecks

QEnablecustomchecks

Anyshellscriptthatresultsinexit-code10,willflagtheimageasdisallowed.

Note:Whenyoueditandsavecustomchecks,youneedtorescantheimagesmanuallyto

enforcethenewchecks.

>ManageScripts

Thispokeywillbeappliedtoimagesthat

containthefollowingword.SpecifythescriptthatwIBbeusedforthe

customcheck:_______

***willassignthepolicytoallimages.

Add

Example-nginx

PatternScript

*check_sshd_installed0

2.在Images頁面將imagescan/centoswithssh鏡像Rescan重新掃描

3.執行dockerrun-it-rmimagescan/centoswithssh/bin/bash被禁止,因為此鏡像安裝了SSH包被

Disallow

2.5包含敏感信息的鏡像

1.在System?Settings內,勾選ScanOptions1的Scansensitivedatainimages并Save

2.通過ImageAssurance內,設置DisallowImageswithSensitiveData,可以設置包含敏感信息(比如

PrivateRSAkey)的鏡像被禁止運行

3.執行dockerrun-dimagescan/sensitivedata失敗,因為其/opt路徑下有id_rsa的PrivateRSAkey

2.6結合Jenkins進行鏡像掃描

1.在Dockerhost主機上執行:

chmod-R777/opt/jenkins

dockerrun-d\

-uroot\

-v/opt/jenkins:/var/jenkins_home\

-v/var/run/docker.sock:/var/run/docker.sock\

-v$(whichdocker):/usr/bin/docker:ro\

-v/usr/lib64/libsystemd-journal.so.O:/usr/lib/x86_64-linux-gnu/libsystemd-journal.so.O\

-v/usr/lib64/libsystemd-idl28.so.0:/usr/lib/x86_64-lirux-gnu/libsystemd-idl28.so.0\

-v/usr/lib64/libdevmapper.so.l.02:/usr/lib/x86_64-linux-gnu/libdevmapper.so.l.02\

-v/usr/lib64/libgcrypt.so.ll:/usr/lib/x86_64-linux-gnu/libgcrypt.so.ll\

-v/ui>r/lib64/libdw.bo.l:/ubr/lib/x86_64-liriux-griu/libdw.j>o.l\

-v/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7\

-p9090:8080\

-namejenkins\

--restart=always\

jenkins

2.生成的ienkins可通過http:〃(DockerHostlP>:9090進入,用戶名為admin,密碼為password。

3.進入ManageJenkins?ConfigureSystem將以下各項按實際情況填寫,其中的IP地址都是docker

host測試主機的。

4.點擊test項目>>manage,諛置項目要掃描的鏡像名及其所屬Registry名,此處Registry名為在Aqua

Server?System?lntegrations?Registry里進行綁定的名字,

Imagetoscan:

OLocalimage每

@Hostedimage?

Hidebaseimagevulnecabilries

5.最后運行test項目的build即可,里面已添加了Aqua鏡像三描的步驟,從Consoleoutput杳看掃描

執行結果

3.威脅阻止

3.1Processlimits

1.通過ThreatMitigation內,勾選ForkGuadr卜.的EnableForkBombProtection,設置Processlimit為

10后保存

2.執行dockerrun-dthreattest/process,里面已開啟了超過10個進程,多余進程會被禁止生成

3.2只允許Link內容器互相通信

1.執行以下命令生成兩個容器:

dockerrun-it-v/opt/aquatest:/usr/share/nginx/html:ro-p80:80-d-namenginxweb\

networktest/nginxweb

dockerrun-it-d-nametestcentos

生成后進入test容器可以curl到nginx發布的網頁

dockerexec-ittest/bin/bash

curlhttp:〃<dockerhostip>

2.在ThreatMitigation?BlockNetworkingBetweenunlinkedContainers下勾選BlockNetwork保存后,

再次進入test容器無法curl到網頁

3.重新生成新的帶link的centos訪問容器即可curl到網頁

dockerrun-it-d-linknginxv/eb:testlinkcentos

4.敏感信息管理

4.1自納管Secret

1.通過之前的配置導入,前臺網頁Secret內應已有一個aqua.password

2.運行dockerrun-it-d-namesecretsecrettest/static_password

此容器己將aqua.passwcrd作為Password環境變量打入c用戶執行dockerinspectsecret|grpp

password只會看到Password={aqua.password),看不到真實值

3.用戶執行dockerexec-itsecret/bin/bash進入容器執行env命令后,可看到真實值。同時用戶如在

前臺網頁端對aqua.password的值進行更改后,容器內對應值也會動態刷新到,不需要重啟容器

4.2CyberArk納管Secret

1.Aqua可以CyberArk的CCP進行綁定配置,通過其獲取CyberArk平臺內保存的密碼.通過

System?lntegrations?SecretKeyStores,點擊AddSecretKeyStore進行綁定,其中的Test

Connection按鈕沒有任何實際作用。

ModifyKeyStore:CCP(CyberArkEnterprisePasswordVault)

QEnabled

*ConnectionURL

https:〃192.168.195/

*AppID

AIMWebService2

?Safe

Windows

PullInterval(minutes)①

1

Labels?

TestConnection

ConnecitionURL:CCP的訪問地址,只需要填寫IP地址,不需要后綴

AppID:CCP使用的AppID

Safe:獲取密碼賬號所/Safe

PullInterval:定期刷新時間(測試下來沒有實際功能,即無法將新值自動刷新到容器內)

2.在綁定的CyberarkVault內,創建WindowsSafe,配置CCP相關APPID和Provider用戶對此Safe有

獲取密碼權限,同時創建?個測試賬號,賬號名為CyberArkVaultTest

3.在Aqua網頁端>>Secrets?AddNewSecret,在Store處選擇步驟一新建的CyberArkStore名,在

Name處填寫Vault內賬號名,即CyberArkVaultTest

Secrets>NewSecret

CCP(CyberArkEnterprisePasswordVaUH)

4.點擊Save的同時,Aqua會嘗試獲取密碼,如有報錯會直接在頁面內顯示出來

5.運行dockerrunitdnamesecretsccrcttcst/static_password

此容器已將CCP.CyberArkVaultTest作為CyberArkPassword環境變量打入。用戶執行dockerinspect

secret|grepCyber只會看到CyberArkPassword={CCP.CyberArkVaultTest},看不到真實值

6.用戶執行dockerexec-itsecret/bin/bash進入容器執行env命令后,可看到真實值。

5.容器運行限制

5.1以指定用戶運行容器

當運行容器時沒以也參數指定運行用戶環境時,Docker默認將以root用戶運行容器,最高用戶權限所

帶來的風險可想而知。用戶可通過AquaSecurity中的Runtimeprofile來限制容器運行時只能以當前Host

用戶的UID和GID來運行

IdentityInsideTheContainer

Allowcontainertorunwithanyuser

?Runinowner'susercontext.UsetheUIDandGIDoftheuserwhoexecutedthecontainer

Restrictcontainertorunwithspecificusers

Preventrootuserfromrunningcontainers

1.不加-u參數運行容器后,得到的UID和GID為Host當前用戶docker

dockerdocxker5dockerrun-it--nanetestruntimecentos/bin/bash

WARNING:Error叮/home/docker/.docker/config.json:permissiondenied

WARNING:YourkerneldoesnotsupportswapUnitcapabilitiesorthecgroup1snotmounted,neworyHaltedwithoutswap.

bash:/root/.bashrc二:P_e_rm_issi-on-de.nied

iid-lOOO(docker)gid-1000(docker)^roups-1000(docker),4(adn),24(cdron),27(sudo),30(tape),46(plugdev)t110(lxd),115(lpadmin),116(sambashare)

2.同時我們可以限制容器不以root用戶運行。

IdentityInsideTheContainer

?Allowcontainertorunwilhanyuser

Runinowner'susercontext.UsetheUIDandGIDoftheuserwhoexecutedthecontainer

Restrictcontainertorunwithspecificusers

QPreventrootuserfromrurningcontainers

3.當以root用戶運行容器時,得至ljPermissionDenied的報錯,同時AquaSecurity內也有對應

Block日志。運彳亍命令為dockerrun-itruntime/runuser/bin/sh

root@aqua~]#dockerrun-itruntime/runuser/bin/sh

ernrissiondenied

r*ArlVfllib/iiiH_

Containerelastic_thompson'triedtochangeuidtouser(0)

imageruntime/runusef:atest

Contaner:eas*c.thompson

ConxanerID:d304266-a610

User:roo:

ProcessID:1

Runtme3rofileRuntr-e_Runuser

ReasonforBlockUnauthorizeduse,blockedbyrun:meprofie

5.2限制容器運行時的只讀文件

1.用戶通常希望在Container運行時不要對容器的一些關鍵系統或程序文件進行修改,比如/etc、

/bin目錄等。AquaSecurit/可以通過RuntimeProfile來做到這點

Read-OnlyDirectoriesandFiles

Speedydirectororftes?oe^srictedBSreadcZy

Direct?7menuj£endMmslash/

+Add

READONLYDIRECTORYORFILE

~/etc/0

/bin/0

ExcludeList

Specrfydirectooescrfies:ha:willoeexd'jdedfremtheIts:aoo.w

4-Add

2.設置對/etc目錄的只讀后,以root用戶運行容器仍舊無法對/etc目錄下的任何文件進行修改。

運行命令為dockerrun-itruntime/file/bin/sh,之后vi/etc/hostname修改文件會有如下報錯

reerror:operationnotpermitted!

Userroot-performed7bin/busybox/etc/hostname

Image:runtime,-fie:ates:

Container:AFA二也小m

ContainerID:002567-edCOD

US?r:fOOX

UserId:0

EffectiveUser:root

EffectiveUserID:0

Category:2

Action:open

Resource:exc/hostname

ResourceDigest:

Process:

ProcessID:6

Runt*reProfie:Runtm?_PeasOniyFIe

ReasonforBlockjnauthonzedactonDeckedDyruntmeprofile

5.3限制容器運行時的可執行命令

i.限制用戶在容器運行時的可執行命令是十分重要的,其能有效避免一些誤操作所帶來的嚴重后

果。AquaSecurity可通過Runtimeprofile里的AllowedExecutables來設置容器運行時的可執行

命令白名單,如下圖我們只允許執行/bin/bash命令。

AllowedExecutables

Separateallowedexecutablesforsuperandnon-supefusers

+Add

EXECUTABLEFILE

bin/besh0

bin/sh0

Ifempv.allexecuxableswi:beallc.ved

2.當用戶試圖執行Is命令時,得至Permissiondenied的報港,同時AquaSecurity處也有對應

Block日志。

[root@aquadockerrun-itruntime/command/bin/bash

bash:/usr/libexec/grepconf.sh:/bin/sh:badinterpreter:Permissiondeni?

bash:/usr/bin/tty:Permissiondenied

[root@533e4e669fc8I/]#Is

bash:/usr/bin/ls:Permissiondenied

[root@533e4e669fc8/]#

3.當用戶在AllowedExecutables處加上Is命令后,此命令即可正常在容器內執行。即使sh腳本

中有相關命令也同樣被禁止

HSeparateallowedexecutablesforsuperandnon-superusers

+Add

EXECUTABLEFILE

/bti/bash0

/bin/sh0

/bin/ls0

Ifempty,allexecutableswillbeallowed

***??*???,??一?,?*???,■??=?■??*■*?、*??①~???=、?

[root?533e4e669fc8.q*Is

anaconda-post.logbindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar

[root@533e4e669fc8/]#

5.4限制Container運行時的進出網絡

1.對于Container運行時的對外通信,用戶可以限制其進出網絡,從而隔絕容器不必要的網絡通

信。用戶可以在AquaSecurity內Runtimeprofile的Network選項禁止對應鏡像生成的Container

的對外通信。

Network

Denyinboundnetwork

QDenyoutbound旌-方產

2.這樣當Container內部嘗試與外部網絡通信時,就會失敗。同時AquaSecurity也會記錄對應的

Block事件。測試命令為dockerrun-itruntime/network/bin/sh

一?J?????一?

/#ping3

PING192168.200.33(3):56databytes

AC

—3pingstatistics—

120packetstransmitted,0packetsreceived,100%packetloss

/*

Userroot'performed11921682003342192

Image:runtrreretwork:ares:

Container:sleepy.kepler

ContainerID:73c7679d9481

User:root

UserId:0

EffectiveUserID:0

Category:network

Action:connect

IPAddress:19216820033

Port:42192

Process:

ProcessID:933

RuntmeProfeRumEjNsvork

ReasonforBlockNetworkconnectont/ockedbyruntimeprofile

5.5黃金鏡像一保證Container不對容器內任何文件進行修改

1.針對一些黃金鏡像,用戶不希望容器對其進行任何修改。則我們可以在AquaSecurity的

runtimeprofile中的ContainerEngineControls中勾選Read-onlyrootfilesystemo

ContainerEngineControls

Thefollowingcontrolswilbeenforcedwithanycontainerexecution.Notethesecontrolswillalsobeenforcedonaudit-onlyhosts.

3Read-onlyrootfilesystem①

Nonewprivileges?

Seccompprofile:

I________________________________________________________________________________________________z]

DropCapabilities:

selectcapabilitytodrop...

2.用戶嘗試修改、新增、刪除容器內的文件報錯,無法進行增刪改。測試語句dockerrun?it

runtime/goldenimage/bin/sh

/etc#touchtest

touch:test:Read-onlyfilesystem

/art-a

—>PackageIzo.x86_640:2.06-8.el7willbeerased

——>Packagepython-decorator.noarch0:3.4.0-3.el7willbeerased

-->ProcessingDependency:python-decoratorforpackage:python-firewall-0.4.3.2-8.1.el7_3.3.noa

—>Packagepython-slip.noarch0:0.4.0-2.el7willbeerased

E45:'readonly'opticxiisset(add!tooverride)

5.6限制Container不以特權模式運行

1.容器運行時如果加上‘-privileged'參數,即會以特權模式運行,可訪問Host上的所有設備,

此容器幾乎與主機上其他運行的進程一樣可訪問主機資源,這將帶來十分高的安全風險。所以

我們可以通過AquaRuntimeProfile里的配置禁用特權模式運行容器。

LockdownvX

Preventrunningexecutablenotinoriginalimage

Preventrunningcontainerwhenimageparametersarechanged①

C3Preventrunningwithelevatedprivileges(e.g.-privileged,-network:host)①

2.設置后,當用戶再次想以特權模式運行容器時得到'Blockedbvruntimeprofile'的報錯,同時

AquaAudit日志里也有相關Block信息,測試命令為dockerrun-it-privileged

runtime/nonprivileged/bin/sh。

[root@aqua~]#dockerrun-一pr~iv,leged"]runtime,'nonpr「vi~leged/bin/sh

docker:Errorresponsefromdaemon:[Aqua-security]YOUdonothavepermissiontoexecutethiscommand,

see'dockerrun--help'.

v08Nov05:USOPM*BlockUserroocrancommand-ce”onnostaqua

dockercreateruntim?/nonpnvihg?d:late3t

Host:aqud

imageName:runtfne/nonprtvle9eclaiesr

UserAccewRule:Runtime.Nonprivile^ec

ReasonforBlockOontawextendedpri?legeswLeWocKedbyruntimeprofile

5.7限制Container掛載的數據卷

1.掛載數據卷是Container容器間分享永久數據的一種方式,這些永久數據通常都會影響應用運

行時的配置,一些誤操作的寫入可能會導致Container內的應用無法正常運行,所以針對掛載

數據卷的限制也是十分必要的。我們可以通過AquaRuntimeProfile里的Allowedvolumes配置

來指定Container運行時允許掛載的數據卷及其寫入讀取權限。

Volumes

Allowedvolumes:

ReadWrite,+Add

MountPathAccess

/daxa/caxareaoonly0

2.當用戶想要掛載其他數據卷時,得到‘Blockedbyruntirreprofile'的報錯。同樣當用戶想要以

ReadWrite權限掛載時也會報錯,運行語句為dockerrun-rm-it-v/data:/dataruntime/volumes

/bin/sho必須指定ro權限才能正確掛載,,運行語句為dockerrun-rm-it-v/data:/da:a:ro

runtime/volumes/bin/sh。

[root@aquadockerrun--rm-it-vuntime/volumes/bin/sh

docker:Errorresponsefromdaemon:[Aquasecurity]YOUdonothavepermissiontoexecutethiscommand.centaln<

See'dockerrun-help".

[root@aquadockerrun--rm-it-v/data:/data:roruntime/volumes/bin/sh

5.8自主學習并生成安全規則

1.有時我們自定義的規則無法滿足一些復雜的Container運行情景,此時我們可以讓Aqua進行自

主學習,其會根據指定image生成的Container運行情況,自動生成對應的Container運行規則。

如下圖,我們在AquaSystem及image級別開啟了自動Profile生成。

AutomaticProfilingOptions

QProfileallimagesautomatically①

Enforcementmode①:EnforceAuditOnly

Learningphaseduration(inmnutes):10

Learningphaseduration(inexecutions):2

?UseDefault

>centos

QProfileAutomatically

>jenkins

UseExisting

>jiihiintii

CreateNew

>kam/pingUseProfiler

>leam/tutorial

>nginx071

7nginxG5Aqia.defaul

nginxlatest0(approved)。310

nginxvi?3A10AOSelectLab(

nginxvltestaqua①3A10AO

2.待配置的10分鐘學習時間過后,Aqua即會根據之前Container運行的情況,自動生成對應的

運行規則,用戶可在此基礎上再進行自定義調整。

,NameMnxIoolwn9iHeAvailableProfiUControh

Oeser0MAutomaticallygeneratedbyAqua

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論