国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Docker容器的電子數(shù)據(jù)取證方法

2019-11-28 08:56:38李鵬超
吉林大學學報(理學版) 2019年6期
關鍵詞:調查取證鏡像命令

李鵬超,周 凱

(1.重慶警察學院 信息安全系,重慶 401331;2.西南大學 計算機與信息科學學院,重慶 400715)

目前,虛擬化技術已廣泛應用于服務器中,Docker虛擬化技術[1-3]因其提供了輕量化的虛擬環(huán)境,與其他虛擬化工具相比更具優(yōu)越性.但Docker虛擬化技術使用過程中還有諸多問題需進一步解決[4].例如,當Docker環(huán)境遭受人為破壞或攻擊時,取證人員所進行的基于Docker環(huán)境的數(shù)據(jù)調查取證問題,目前尚未見對Docker取證技術進行深入研究的報道.取證人員為了解在一個Docker主機上發(fā)生的真實情況,除利用現(xiàn)有的主機調查取證方法外,還需要一種基于Docker環(huán)境下的特殊化取證方法.因此,本文在對Dokcer原理及相關技術分析的基礎上,提出一種基于Docker主機的調查取證模型,并根據(jù)該取證流程各環(huán)節(jié)中Docker主機所處的不同狀態(tài)制定有針對性的數(shù)字取證方法.

1 Docker技術

1.1 傳統(tǒng)虛擬機與Docker對比分析

圖1為傳統(tǒng)虛擬機與Docker對比的示意圖.由圖1可見,傳統(tǒng)虛擬機宿主主機操作系統(tǒng)上層是管理程序,管理程序上層是客戶操作系統(tǒng),最后在客戶操作系統(tǒng)上運行應用程序.而在Docker環(huán)境中,宿主主機操作系統(tǒng)上層為Docker引擎,Docker在引擎上構建一個相互隔離的容器,在容器內運行應用程序.

Docker與傳統(tǒng)虛擬技術的區(qū)別為Docker上不安裝客戶操作系統(tǒng),只設置服務器的程序和庫,且Docker引擎共享宿主機操作系統(tǒng)資源[5].

1.2 鏡像和容器的原理

Docker中的鏡像可提供服務器所需的程序、可編譯執(zhí)行文件等所有文件系統(tǒng)資源.而容器是Docker由鏡像構成的特定可運行隔離環(huán)境.鏡像以分層的形式組成,根據(jù)不同存儲數(shù)據(jù)和存儲庫的使用方式,構成鏡像的方式也不同.如Docker可通過dockerfile文件生成鏡像,dockerfile是一個可自動化生成鏡像的文件.按照dockerfile的擬定規(guī)則創(chuàng)建文件后,在該文件所屬的路徑中通過“docker build-t khs/Whserver:v2.”命令編譯并生成鏡像.在Docker中以特定的鏡像為對象組成一個容器,如圖2所示.

圖1 傳統(tǒng)虛擬機與Docker對比示意圖Fig.1 Schematic diagram of comparison between traditional virtual machine and Docker

圖2 Docker分層結構Fig.2 Layered structure of Docker

1.3 數(shù)據(jù)卷原理

容器中存儲的數(shù)據(jù)會隨著容器的消失一起被刪除.而數(shù)據(jù)卷的存在與容器無直接關系,因此用戶可將需永久保存的數(shù)據(jù)或與其他容器和主機需共享保存的數(shù)據(jù)存儲在數(shù)據(jù)卷中.Docker也支持數(shù)據(jù)卷功能.數(shù)據(jù)卷是指在容器掛載的宿主主機文件系統(tǒng)上的目錄或文件[3].配置容器時使用“-v主機內目錄:容器內的目錄”命令將主機內的相應路徑作為數(shù)據(jù)卷并映射到容器目錄內.在數(shù)據(jù)卷上保存的文件或目錄并不是存儲在容器內的文件系統(tǒng)中,而是直接保存在宿主主機的相應目錄內,即在容器內的數(shù)據(jù)卷上接觸到的行為與容器本身的文件存儲沒有關系.

通過“docker commit”命令將容器生成為鏡像,但數(shù)據(jù)卷內的數(shù)據(jù)不包含在鏡像中,數(shù)據(jù)卷中的文件和目錄即使在容器被刪除后也依然存在.此外,還可使用特定的容器作為數(shù)據(jù)卷,這種方式稱為數(shù)據(jù)卷容器[6].數(shù)據(jù)卷容器先通過命名的容器掛載數(shù)據(jù)卷,然后其他容器通過掛載該容器實現(xiàn)數(shù)據(jù)共享.

1.4 Docker網(wǎng)絡結構原理

Docker還支持多種網(wǎng)絡配置模式,包括單主機內的跨容器網(wǎng)絡模式和跨多主機間的網(wǎng)絡模式.

1.4.1 單主機內容器間網(wǎng)絡模式 當Docker進入安裝時會在主機上創(chuàng)建一個名為docker0的虛擬網(wǎng)橋,該主機上啟動的Docker會連接到虛擬網(wǎng)橋[7].主機上的所有容器都通過虛擬網(wǎng)橋連接在一個二層網(wǎng)絡中,用戶可以通過使用網(wǎng)橋連接網(wǎng)絡命令“docker network create-d bridge網(wǎng)橋名”創(chuàng)建新的虛擬網(wǎng)絡.此外,容器組成時指定了“-network=網(wǎng)絡名稱”選項,可將相應的容器連接到特定網(wǎng)絡.雖然容器可同時連接多個網(wǎng)絡,但容器僅能在網(wǎng)絡內通信,不能跨網(wǎng)絡通信.此外,還可以在容器組織中指定“-link容器或id:連接時使用的別稱”,這樣構成的網(wǎng)絡在容器間不僅可以使用IP地址通信,而且還可以通過指定的別稱進行通信.如果使用link選項,所有相關DNS的信息會反映在相關內容中,可用于調查取證.

1.4.2 多主機中容器組成的網(wǎng)絡

1) Ambassador跨主機間容器通信技術.針對不同主機上的兩個容器間通信,Docker通過Ambassador模式實現(xiàn)[8].圖3為使用Ambassador模式實現(xiàn)兩個不同主機上容器間的網(wǎng)絡連接模型.

圖3 Ambassador網(wǎng)絡模式Fig.3 Network pattern of Ambassador

不同主機的容器建立連接還需借助socat程序將TCP連接傳達到另一個容器,實現(xiàn)步驟如下:

① 主機A創(chuàng)建使用端口號x的服務端容器;

② 使用“docker run-d -link A: servercontainer -nameambassadorforserver -p端口(x): 端口(x)服務端ambassador”命令啟動服務端Ambassador容器;

③ 在另一臺客戶端主機上使用“docker run -d-name ambassadorforclient -expose 端口(y)-e SERVER_PORT_TCP=tcp://A主機IP地址: 端口(x)服務端ambassador”命令,在客戶端主機B上啟動另一個客戶端Ambassador容器;

④ 通過“-link客戶端Ambassador容器: 別稱”命令連接在主機B上的客戶端容器.

通過以上4步可實現(xiàn)Docker間的Ambassador模式網(wǎng)絡連接.

2) Overlay網(wǎng)絡模式.Overlay網(wǎng)絡是不同主機間容器實現(xiàn)通信的網(wǎng)絡[9].Docker自帶的Swarm是一種Docker集群的管理和編排模式[10].Swarm將在多個主機上創(chuàng)建容器并實現(xiàn)容器間的跨主機通信.集群分管理節(jié)點和工作節(jié)點兩部分,一般的操作在管理節(jié)點上執(zhí)行.Swarm模式運行步驟如下:

① 管理節(jié)點主機使用“docker swarm init -advertise -addr主機IP地址”命令初始化集群,節(jié)點間相互通信的IP地址為主機IP地址,默認端口為2377;

② 工作節(jié)點主機使用命令“docker swarm join -token 步驟①中使用的IP地址: 2377端口”加入到初始化的集群中;

③ Swarm集群組成后,管理節(jié)點主機使用“docker service create -name Websever -replicas 3 -publish 8080:80 Nginx”命令在Swarm集群中發(fā)布應用服務,并將容器中的80端口映射到Swarm集群的8080端口,此時Swarm內的節(jié)點中端口被公開,可通過Swarm技術操作提供服務.

通過上述方式Docker實現(xiàn)了在集群模式下的網(wǎng)絡連接.

2 基于Docker主機的取證技術

在對Docker進行調查取證時,可能會出現(xiàn)部署在Docker容器中的一個網(wǎng)站服務器受到惡意攻擊的情形.例如,某企業(yè)為了提供服務,需要一個服務器提供全部周期更新的服務,該服務器可能受到攻擊,使調查人員提取到可能出現(xiàn)惡性程序的鏡像.此外,作為基礎設施提供服務的主機自身也可能受到攻擊.這種情形下,取證人員在進行取證過程中不僅要分析主機自身,還要調查提供服務的Docker環(huán)境.

在對Docker主機進行取證過程中,存在Docker守護進程啟動或停止兩種情形.前者可通過使用基本指令進行取證;后者如果允許重啟Docker服務也可使用基本命令進行調查.但如果出現(xiàn)以下情形時,取證人員則需利用Docker相關的技術和方法提取證據(jù):

1) 將Docker的宿主主機硬盤復制后,用克隆硬盤重新運行Docker服務,由于當時各服務的運行情形已不存在,因此需要對當時情形提供的信息進行調查取證;

2) 將特定容器文件系統(tǒng)中存儲的已刪除文件以傳統(tǒng)取證工具恢復后進行調查取證;

3) 為取證先克隆宿主主機的文件系統(tǒng),然后利用存在主機內的容器進行快速調查取證.

取證人員在調查取證過程中如果出現(xiàn)以上3種情形,就需要收集相關Docker服務留下的痕跡信息并掌握其含義.在調查取證過程中,取證人員不但要掌握使用Docker的主機及其間的網(wǎng)絡信息,還要掌握各主機內容器的實際運行信息.本文針對Docker環(huán)境取證的特殊情形,有針對性地提出了Docker取證流程.無論Docker服務運行正常與否,取證人員對基礎主機的Docker取證過程都如圖4所示.

圖4 基于Docker主機的取證流程Fig.4 Forensics process based on Docker host

2.1 多主機網(wǎng)絡信息取證調查

取證人員在取證調查時,不但要了解多主機組成網(wǎng)絡所提供的Docker服務,也要掌握在單一主機上運行的Docker所提供的服務.在前者情形下,取證人員先要掌握基礎主機Docker間的網(wǎng)絡結構,然后再進行單主機Docker的調查取證.

取證人員首先分析基于Docker網(wǎng)絡間的連接方式.如果連接方式來自Overlay網(wǎng)絡,則可在調查對象主機上利用“docker network”命令顯示容器的Overlay網(wǎng)絡ID,并分析相同Overlay網(wǎng)絡其他主機內的容器是否屬于同一網(wǎng)絡.如果所有主機都是以Swarm模式進行網(wǎng)絡連接,且在調查過程中使用“docker info”命令檢測到Swarm的狀態(tài)信息顯示為Active,則在對Swarm模式分析時還要掌握該集群所提供的服務信息,因此需要查找管理節(jié)點,這是因為Swarm的信息查詢命令只在管理節(jié)點有作用.在管理節(jié)點上以“docker service ls”命令顯示在Swarm中執(zhí)行的服務內容,并通過“docker service ps服務名”命令顯示提供服務的進程列表.取證人員可以用“docker service inspect服務名”命令掌握該服務的詳細內容.此外,取證人員也可以在管理節(jié)點上以“docker&ls”命令顯示該Swarm內所有的目錄狀態(tài)并以“docker node inspect節(jié)點名稱”命令顯示特定節(jié)點的詳細信息.因此,取證人員可通過執(zhí)行上述命令,在Docker的網(wǎng)絡環(huán)境中提取重要信息和證據(jù).

如果取證人員所調查的Docker環(huán)境處于Inactive狀態(tài),則需要在“/var/lib/docker/container/”的目錄內查詢Config.v2.json文件以確定容器Overlay模式的網(wǎng)絡信息.如果是Swarm模式,則需要確定主機所屬Swarm執(zhí)行的服務信息和應用程序.可以在主機的“/var/docker/swarm/docker-state.json”文件內查看管理節(jié)點、工作節(jié)點的本地IP地址及管理節(jié)點的遠程IP地址信息.取證人員還可通過advertiseaddr命令監(jiān)聽IP地址和端口的狀態(tài),以獲取Docker在Inactvie時的網(wǎng)絡情形和信息.

2.2 單主機Docker的取證調查

取證人員在掌握了多主機間的網(wǎng)絡連接信息后,即可進行單主機的Docker調查取證工作.

2.2.1 分析容器基本信息 取證人員需要收集相關主機內Docker容器的基本信息,以判斷Docker的運行情形.取證人員可先通過“docker version”命令獲取Docker的版本信息,然后使用“docker info”命令調查Docker上的容器數(shù)量、鏡像數(shù)量、存儲驅動程序、網(wǎng)絡模式等基本信息,最后以“docker stats”命令獲取各容器的主機資源使用信息.特別是在Docker服務Active的情形下“docker info”命令可以提供給取證人員關于Docker的整體信息.

2.2.2 主機內Docker網(wǎng)絡調查取證 在單主機內也可以組成各容器間的網(wǎng)絡連接,因此需要調查其網(wǎng)絡狀態(tài).與多主機間的網(wǎng)絡結構調查部分類似,取證人員先使用“docker network ls”命令列出網(wǎng)絡結構包括跨Swarm多主機網(wǎng)絡,然后利用“docker network inspect網(wǎng)絡名”命令調查該網(wǎng)絡的詳細信息,最后得到在相關網(wǎng)絡上連接的正在運行的容器相關信息.取證人員在取證過程中如果發(fā)現(xiàn)容器創(chuàng)建了一個網(wǎng)橋且掛載為docker0,則可進一步分析在網(wǎng)絡上連接的容器功能.因此,取證人員需要利用“docker port”命令或“docker ps”命令掌握容器和主機的映射端口信息.

如果Docker的服務處于Inactive狀態(tài),則取證人員可在“/var/lib/docker/contaiers”目錄內分析config.v2.json文件的相關信息.通過對config.v2.json文件內容進行分析可獲取容器的bridge network信息,并知道該容器及其主機的端口狀態(tài).在同一路徑的hosts文件內,容器建立時使用的“-link選項”提供了容器的相關信息,以“l(fā)inks: [連接容器名稱: 指定別稱]”形式存在.通過指定別稱還可獲取連接到其他容器的關鍵信息,所以取證人員可以此進行深入取證分析.

2.2.3 鏡像及容器的調查取證 基于Docker的容器和鏡像分析是Docker主機取證研究的核心部分.取證人員獲取鏡像和容器的狀態(tài)信息后,與上文所獲取的網(wǎng)絡取證結果相結合,不僅能查明主機的作用而且可以在存儲相關內容的文件系統(tǒng)中獲得更直接的證據(jù).

1) 鏡像和容器基本信息調查.Docker在Active的情形下,取證人員可以使用“docker images”命令查詢已存在的鏡像信息,使用“docker ps”命令獲取在激活狀態(tài)下的容器信息.如果取證人員想查詢主機上被指定的容器信息,可以使用“docker ps -a”命令.如果需要進一步收集各個鏡像或容器的詳細信息,則需要使用“docker inspect鏡像或容器名”命令.

2) 特定容器的取證分析.在基于Docker主機的取證過程中關鍵是要掌握容器在執(zhí)行時的服務信息.取證人員可利用“docker top”命令掌握特定容器內運行的進程信息,用“docker attach容器名”命令獲取當前容器中輸出的內容.為了檢查在現(xiàn)有鏡像上進行容器實例化后文件結構是否發(fā)生更改,取證人員可使用“docker diff 容器名”命令查看文件結構的更改信息,其中A表示增加,C表示變更,D表示被刪除的文件或目錄[11].如果在刪除文件中發(fā)現(xiàn)需要深入分析的文件,則可使用“dockercopy 容器路徑:容器名 主機路徑”命令復制相應目錄或文件到宿主主機后再進行分析.最后,取證人員還可通過調查容器內的進程和文件結構的變更事項,發(fā)現(xiàn)該容器的運行是否有異常.

3) 文件系統(tǒng)信息調查.在Docker服務Active的狀態(tài)下,取證人員可對鏡像或容器的文件系統(tǒng)以文件為單位進行提取分析.取證人員可利用“docker save -o文件名.tar鏡像名”命令將特定的鏡像提取成tar文件后,在其他主機的Docker中使用“docker load文件名.tar”命令將該鏡像重新加載分析.如果把需要進一步調查的容器原樣地提取,則需要使用“docker export容器名稱>文件名.tar”命令,然后使用“cat文件名.tar|docker import-指定的名稱”命令在本地重新生成容器.但即使將容器的文件系統(tǒng)重新裝入到Docker內,在此狀態(tài)下鏡像內存在的被刪除文件或容器形成后被刪除文件仍然無法恢復.因此,為了恢復在特定容器內被刪除的文件,取證人員需使用其他方法提取文件系統(tǒng)中被刪除的文件信息.根據(jù)Docker使用存儲驅動程序的不同恢復容器內被刪除文件的方法有差異[12].

2.3 數(shù)據(jù)卷信息取證調查

調查鏡像和容器的文件系統(tǒng)后發(fā)現(xiàn)有些文件不被保存在相應的文件系統(tǒng)中,因此需進行對容器創(chuàng)建的數(shù)據(jù)卷進行調查.數(shù)據(jù)卷用于容器間的數(shù)據(jù)共享,其本身存儲的信息與容器無關,因此對數(shù)據(jù)卷保存的信息需另外進行調查取證.在容器處于Active狀態(tài)下,取證人員使用“docker volume ls”命令和“docker volume inspection卷名”命令可獲得數(shù)據(jù)卷的信息.

如果取證人員需要在Docker處于Inactive狀態(tài)中確認特定容器使用的數(shù)據(jù)卷文件,則可通過“/var/lib/docker/containers/”目錄內config.v2.json文件中的sha256值確認容器名稱,然后從同一文件內容中查詢mount的sha256值即可獲取要進一步分析的文件信息.此外,取證人員還可以從“/var/lib/docker/volumes/”中查看該容器在數(shù)據(jù)卷上留下的文件或目錄.

2.4 容器日志信息調查取證

關于容器內各種行為軌跡的信息調查,以時間為調查主線可獲取更多的線索.因此,要了解各時間段在容器內的操作痕跡,必須分析其操作日志信息.容器在生成時以“-log-driver”選項指定了日志方式,記錄了容器在運行過程輸出的數(shù)據(jù)信息.取證人員可通過“docker logs容器名稱”命令查看容器的日志信息.

如果容器處于Inactive狀態(tài),則可以通過查詢“/var/lib/docker/containers/container-jsonlog”命令獲取相關的日志信息.如果登錄驅動程序不是默認選項,而是被指定為另一個主機,則被指定容器的“docker logs”無法使用,要調查登錄另一個主機.日志驅動程序選項“gelf,fluentd,awslogs,splunk,etwlogs,gcplogs”可作為外部主機傳送的選項[13-14].在此情形下,取證人員需掌握登錄主機的位置和運行原理提取該容器的日志.由于日志對容器具有標準輸入輸出記錄,因此可通過日志調查該系統(tǒng)的系統(tǒng)管理器在容器內部進行的活動,得到關于一個惡意行為以及應用程序發(fā)生錯誤的相關線索.

綜上所述,本文以Docker容器的數(shù)據(jù)存儲原理和網(wǎng)絡環(huán)境分析為基礎,針對Docker作為服務環(huán)境的主機在受到惡意攻擊或破壞時,取證人員應以何種角度進行取證進行了研究.通過建立切實有效的取證模型和工作流程,闡述了在Docker守護進程處于活動時,取證人員可根據(jù)取證模型并通過使用Docker守護進程的相關命令完成對Docker的調查取證工作.

猜你喜歡
調查取證鏡像命令
只聽主人的命令
鏡像
當代黨員(2020年20期)2020-11-06 04:17:52
鏡像
小康(2018年23期)2018-08-23 06:18:52
移防命令下達后
江蘇江陰:多舉措破解公益訴訟調查取證難
方圓(2018年24期)2018-01-07 09:06:08
律師調查取證權的實施難題及出路
檢察機關調查取證權運行失靈問題研究
東南法學(2016年2期)2016-07-01 16:42:49
這是人民的命令
鏡像
小康(2015年4期)2015-03-31 14:57:40
鏡像
小康(2015年6期)2015-03-26 14:44:27
五台县| 南雄市| 黄梅县| 平度市| 民乐县| 河间市| 乐陵市| 静宁县| 涞源县| 怀远县| 栾川县| 绵阳市| 自贡市| 泾阳县| 交城县| 芮城县| 如东县| 灵石县| 永安市| 武川县| 咸阳市| 贺州市| 勐海县| 安顺市| 舒兰市| 筠连县| 肇庆市| 新闻| 万盛区| 宁国市| 泾川县| 东至县| 昆明市| 交口县| 临江市| 辽中县| 芜湖县| 海林市| 临汾市| 灵武市| 兴业县|