Advertisement

Responsive Advertisement

TryHackMe! Advent of Cyber 3 (2021) - Day 18

Task 23  [Day 18] Cloud Playing With Containers

Xin lưu ý: Nếu bạn đang sử dụng gói miễn phí TryHackMe, hộp tấn công không có quyền truy cập internet và không thể truy cập AWS. Bạn sẽ cần cài đặt curl và AWS CLI trên máy của riêng mình để hoàn thành thử thách này. Hướng dẫn cài đặt AWS CLI tại đây: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

Tiền đề

Grinch Enterprises đã rất hả hê về cuộc tấn công của họ vào một diễn đàn ngầm. Chúng tôi biết họ đang nhắm mục tiêu cụ thể đến các tổ chức trong một chiến dịch mà họ đặt theo chủ đề "Advent of Cyber" (AOC) - thật là một sự trùng hợp đáng thất vọng. Theo dõi người dùng trở lại theo thời gian - chúng tôi cũng đã gặp tham chiếu đến việc sử dụng AWS Elastic Container Registry (ECR) để lưu trữ hình ảnh vùng chứa mà họ sử dụng làm cơ sở hạ tầng trong các cuộc tấn công của họ. Hãy xem chúng ta có thể tìm hiểu thêm về công cụ tấn công mà Grinch Enterprises đang sử dụng không nhé.

Bắt đầu

Bạn sẽ cần khởi động AttackBox của mình để chạy các lệnh bằng công cụ vùng chứa Docker. Vùng chứa là một cơ chế ảo hóa tương tự như Máy ảo (VM) và hình ảnh vùng chứa dựa trên Đặc điểm kỹ thuật phân phối sáng kiến vùng chứa mở. Tuy nhiên, khi ai đó nói về "Docker" hoặc "container", họ thường nói về nhiều công nghệ container hoạt động cùng nhau. Cụ thể, thuật ngữ "Docker" được sử dụng để mô tả:

  • Docker API - một giao diện giao tiếp cục bộ trên máy Linux đã được định cấu hình, với các lệnh chuẩn hóa được sử dụng để giao tiếp với Docker Daemon.
  • Docker Daemon - một quy trình chạy trên máy của bạn (Docker daemon), để tương tác với các thành phần vùng chứa như hình ảnh, khối lượng dữ liệu và các tạo tác vùng chứa khác.
  • Định dạng hình ảnh vùng chứa Docker - cuối cùng là tệp .tar. Đối với Phiên bản 1, định dạng hình ảnh của docker không tuân thủ nghiêm ngặt với Đặc tả Hình ảnh OCI. Đối với mục đích của chúng tôi, điều này sẽ không thay đổi cách chúng tôi tương tác với hình ảnh vùng chứa trong bài tập này, nhưng nó sẽ thay đổi một chút định dạng và nội dung của hình ảnh vùng chứa.

Bây giờ chúng ta đã nắm được một số thuật ngữ cơ bản, hãy bắt đầu với mục tiêu học tập ngày hôm nay.

Mục tiêu học tập hôm nay - Cơ quan đăng ký vùng chứa đàn hồi AWS - Thư viện công cộng ECR

Today we'll be covering the basics of container images and AWS Elastic Container Registry (ECR) - một sổ đăng ký trực tuyến cho hình ảnh vùng chứa công khai và riêng tư. Chúng ta sẽ tìm hiểu về cách truy xuất hình ảnh vùng chứa từ sổ đăng ký trực tuyến và kiểm tra các phần tử của hình ảnh vùng chứa đó để xác định các vấn đề bảo mật tiềm ẩn.

Docker Images và Amazon Elastic Container Registry

Trong môi trường điện toán đám mây gốc, vùng chứa là giải pháp được lựa chọn đầu tiên để triển khai cơ sở hạ tầng. Tương tự như máy ảo, vùng chứa đóng vai trò là cấu trúc tính toán cho nhiều ứng dụng đang chạy và các quy trình được lưu trữ trên đám mây.


Khi bạn đã đăng nhập vào AttackBox, bạn có thể chạy lệnh sau để xem các hình ảnh vùng chứa được lưu trữ theo mặc định trên AttackBox của bạn:

docker images

mà sẽ trả về một đầu ra tương tự như sau:

Docker Images
root@ip-10-10-20-249:~# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
remnux/ciphey        latest              ec11b47184f6        9 months ago        177MB
rustscan/rustscan    2.0.0               6890f34e17b0        12 months ago       41.6MB
bcsecurity/empire    v3.5.2              cbd0b10f7f55        13 months ago       2.05GB
mpepping/cyberchef   latest              36979d2c2b9e        17 months ago       639MB
root@ip-10-10-20-249:~#

Các vùng chứa Docker được lưu trữ trong "kho lưu trữ", là một tham chiếu đến các ánh xạ tệp mà daemon Docker biết cách truy cập, bao gồm các tệp .tar vùng chứa. Mỗi hình ảnh trong kho lưu trữ sẽ bao gồm một thẻ hình ảnh và hình ảnh có thể được tham chiếu bằng cách sử dụng thẻ hoặc ID hình ảnh của chúng.

ví dụ:

remnux/ciphy:latest

hoặc

ec11b47184f6

Grinch Enterprise Attack Infrastructure

Chúng tôi đã truy tìm cơ sở hạ tầng tấn công của Grinch Enterprises trở lại Cơ sở đăng ký vùng chứa đàn hồi có khả năng có thể truy cập công khai:

Link to Suspected AWS Public Container Gallery for Grinch Enterprises

Bạn có thể truy xuất hình ảnh Grinch Enterprises tiềm năng bằng cách chạy lệnh sau trên AttackBox của bạn:

docker pull public.ecr.aws/h0w1j9u3/grinch-aoc:latest

mà trả về sẽ trả về một đầu ra tương tự như sau:

Docker Pull
root@ip-10-10-20-249:~# docker pull public.ecr.aws/h0w1j9u3/grinch-aoc:latest
latest: Pulling from h0w1j9u3/grinch-aoc
7b1a6ab2e44d: Pull complete 
7181c3c4941b: Pull complete 
148b30b9ae2d: Pull complete 
6f5a7c388565: Pull complete 
ef099323cb4a: Pull complete 
de5bf7e2abf0: Pull complete 
455d5424d859: Pull complete 
b1ee65a7e02a: Pull complete 
a47021107475: Pull complete 
Digest: sha256:593c79eaaa1a905c533e389b0034022e074969da3936df648172c4efc8d421d8
Status: Downloaded newer image for public.ecr.aws/h0w1j9u3/grinch-aoc:latest
public.ecr.aws/h0w1j9u3/grinch-aoc:latest
root@ip-10-10-20-249:~#

Bạn có thể chạy vùng chứa và tương tác với nó bằng cách chạy lệnh sau:

docker run -it public.ecr.aws/h0w1j9u3/grinch-aoc:latest

sẽ mở một trình bao bên trong hình ảnh vùng chứa, như được chỉ ra bởi $. Khi vào bên trong thùng chứa, chúng ta có thể thực hiện một cuộc trinh sát nhỏ:

ls -la

cho thấy không có tệp hoặc thư mục con thông thường nào trong thư mục làm việc hiện tại.

Docker Run
root@ip-10-10-20-249:~# docker run -it public.ecr.aws/h0w1j9u3/grinch-aoc:latest
$ ls -la
total 20
drwxr-xr-x 2 newuser newuser 4096 Oct 21 20:31 .
drwxr-xr-x 1 root    root    4096 Oct 21 20:31 ..
-rw-r--r-- 1 newuser newuser  220 Feb 25  2020 .bash_logout
-rw-r--r-- 1 newuser newuser 3771 Feb 25  2020 .bashrc
-rw-r--r-- 1 newuser newuser  807 Feb 25  2020 .profile
$

Spoiler

Một nơi tốt để kiểm tra tiếp theo là các biến môi trường - trong Linux và đặc biệt là đối với vùng chứa, các biến môi trường có thể được sử dụng để lưu trữ bí mật hoặc thông tin nhạy cảm khác được sử dụng để định cấu hình vùng chứa tại thời điểm chạy.

Vì vậy, chúng tôi cố gắng thử printenv để tìm hiểu thêm về các cấu hình môi trường mà chúng tôi thấy:

printenv
$ printenv
HOSTNAME=c633e29bb404
HOME=/home/newuser
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
api_key=a90eac086fd049ab9a08374f65d1e977
PWD=/home/newuser
$

và chúng tôi đã vấp phải một api_key mà tôi đoán Grinch Enterprises không có ý định bỏ lại phía sau.

Thách thức tiền thưởng

Hình ảnh vùng chứa bao gồm một số lớp - có lẽ có thông tin nhạy cảm trong lớp chứa bên dưới mà Grinch Enterprises đã không dọn dẹp như một phần của quá trình xây dựng của họ. Một lý do chính mà các nhà phát triển (và những kẻ tấn công) có thể đóng gói ứng dụng của họ (hoặc các công cụ tấn công) trong một vùng chứa là vùng chứa cho phép nhà phát triển "đóng băng" một ứng dụng và các phụ thuộc của nó thành một hình ảnh như một phần của quá trình xây dựng. Quá trình xây dựng là một phần của Vòng đời phát triển phần mềm (SDLC), nơi các ứng dụng và các phần phụ thuộc của chúng được đóng gói cùng nhau và được kiểm tra trước khi phân phối và sử dụng.

Sau khi hình ảnh được tạo, việc chạy hình ảnh vùng chứa sẽ luôn dẫn đến trạng thái cấu hình giống như được chỉ định tại thời điểm xây dựng. Hình ảnh vùng chứa được tạo từ một tệp nguồn được gọi là Dockerfile. Dockerfiles là danh sách các hướng dẫn được phân tách bằng dòng mới hướng dẫn Docker daemon cách tạo hình ảnh vùng chứa. Bạn có thể đọc giải thích đầy đủ về cách viết Dockerfiles trong Dockerfile reference. Bạn có thể xem ví dụ về Dockerfile here>. Trong trường hợp của Grinch Enterprises, chúng tôi không có Dockerfile ban đầu - nhưng với hình ảnh vùng chứa, chúng tôi có một cái gì đó tốt như vậy. Hãy bắt đầu bằng cách tạo một thư mục mới và lưu hình ảnh đã tải xuống dưới dạng tệp .tar.

1. Tạo một thư mục mới: mkdir aoc

2. Thay đổi thư mục thành thư mục mới tạo:cd aoc

3. Lưu hình ảnh vùng chứa dưới dạng tệp .tar: docker save -o aoc.tar public.ecr.aws/h0w1j9u3/grinch-aoc:latest

Docker Save
$ exit
root@ip-10-10-20-249:~# mkdir aoc
root@ip-10-10-20-249:~# cd aoc/
root@ip-10-10-20-249:~/aoc# docker save -o aoc.tar public.ecr.aws/h0w1j9u3/grinch-aoc:latest
root@ip-10-10-20-249:~/aoc#

Sau khi đã lưu hình ảnh, chúng tôi có thể kiểm tra thêm hình ảnh bằng cách giải nén tệp nén

tar -xf aoc.tar

Lưu ý rằng tôi đã sử dụng tùy chọn -v (verbose) khi thực hiện lệnh và bạn có thể thấy các tệp khác nhau đang được giải nén:

tar -xvf
root@ip-10-10-20-249:~/aoc# tar -xvf aoc.tar
40ad0e404f6065a153d1b4d42e8b315be3504a08c21fadd6e5fde5982b45df18/
40ad0e404f6065a153d1b4d42e8b315be3504a08c21fadd6e5fde5982b45df18/VERSION
40ad0e404f6065a153d1b4d42e8b315be3504a08c21fadd6e5fde5982b45df18/json
40ad0e404f6065a153d1b4d42e8b315be3504a08c21fadd6e5fde5982b45df18/layer.tar
4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682/
4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682/VERSION
4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682/json
4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682/layer.tar
4cc7bdb0ea56d31f57a373d0e7ce0d633ae86dc327087fccf103c8d97f0cc9c4/
4cc7bdb0ea56d31f57a373d0e7ce0d633ae86dc327087fccf103c8d97f0cc9c4/VERSION
4cc7bdb0ea56d31f57a373d0e7ce0d633ae86dc327087fccf103c8d97f0cc9c4/json
4cc7bdb0ea56d31f57a373d0e7ce0d633ae86dc327087fccf103c8d97f0cc9c4/layer.tar
4f62ae56d8d3b96d5fbe86da8a3f7bf6e9195d360b922cd7b162e17619c50664/
4f62ae56d8d3b96d5fbe86da8a3f7bf6e9195d360b922cd7b162e17619c50664/VERSION
4f62ae56d8d3b96d5fbe86da8a3f7bf6e9195d360b922cd7b162e17619c50664/json
4f62ae56d8d3b96d5fbe86da8a3f7bf6e9195d360b922cd7b162e17619c50664/layer.tar
619ddb982b75f0eb6c9f48624e6a0d20be227e893599d8dea05dbdddc8b14e2b/
619ddb982b75f0eb6c9f48624e6a0d20be227e893599d8dea05dbdddc8b14e2b/VERSION
619ddb982b75f0eb6c9f48624e6a0d20be227e893599d8dea05dbdddc8b14e2b/json
619ddb982b75f0eb6c9f48624e6a0d20be227e893599d8dea05dbdddc8b14e2b/layer.tar
9dedacd92213db743681db2e8d5b3247fd79ce266495d061a381c4c0441ce15d/
9dedacd92213db743681db2e8d5b3247fd79ce266495d061a381c4c0441ce15d/VERSION
9dedacd92213db743681db2e8d5b3247fd79ce266495d061a381c4c0441ce15d/json
9dedacd92213db743681db2e8d5b3247fd79ce266495d061a381c4c0441ce15d/layer.tar
a3c1e603ab4385e0b411423e70314651bb371561c45a2bc90951fa05da9ad3c4/
a3c1e603ab4385e0b411423e70314651bb371561c45a2bc90951fa05da9ad3c4/VERSION
a3c1e603ab4385e0b411423e70314651bb371561c45a2bc90951fa05da9ad3c4/json
a3c1e603ab4385e0b411423e70314651bb371561c45a2bc90951fa05da9ad3c4/layer.tar
aa7f7d1cdeacc3a446e297814a6c13a42006dc8a99baad72c0c50383d69ac551/
aa7f7d1cdeacc3a446e297814a6c13a42006dc8a99baad72c0c50383d69ac551/VERSION
aa7f7d1cdeacc3a446e297814a6c13a42006dc8a99baad72c0c50383d69ac551/json
aa7f7d1cdeacc3a446e297814a6c13a42006dc8a99baad72c0c50383d69ac551/layer.tar
f886f00520700e2ddd74a14856fcc07a360c819b4cea8cee8be83d4de01e9787.json
fa28cd504eaba5e76b168c5149551371fbeb3bc0f51d18485fe401a411c2dd17/
fa28cd504eaba5e76b168c5149551371fbeb3bc0f51d18485fe401a411c2dd17/VERSION
fa28cd504eaba5e76b168c5149551371fbeb3bc0f51d18485fe401a411c2dd17/json
fa28cd504eaba5e76b168c5149551371fbeb3bc0f51d18485fe401a411c2dd17/layer.tar
manifest.json
repositories
root@ip-10-10-20-249:~/aoc#

Các tệp này đại diện cho các lớp hình ảnh vùng chứa khác nhau, ngoại trừ tệp manifest.json. manifest.json đại diện cho "tệp kê khai" của các lớp hình ảnh vùng chứa tạo nên hình ảnh vùng chứa cuối cùng mà chúng ta vừa ở bên trong. Chúng ta hãy xem hình ảnh này bằng cách sử dụng một công cụ có tên "jq" để "in đẹp" đầu ra để dễ đọc hơn:

Note: On an attack box, jq is now pre-installed and you can skip this step

1. Cài đặt jq: apt install jq -y

2. In nội dung của tệp kê khai.json vào thiết bị đầu cuối bằng cách sử dụng jq để in đẹp: cat manifest.json | jq

cat manifest.json
root@ip-10-10-20-249:~/aoc# cat manifest.json | jq
[
  {
    "Config": "f886f00520700e2ddd74a14856fcc07a360c819b4cea8cee8be83d4de01e9787.json",
    "RepoTags": [
      "public.ecr.aws/h0w1j9u3/grinch-aoc:latest"
    ],
    "Layers": [
      "a3c1e603ab4385e0b411423e70314651bb371561c45a2bc90951fa05da9ad3c4/layer.tar",
      "619ddb982b75f0eb6c9f48624e6a0d20be227e893599d8dea05dbdddc8b14e2b/layer.tar",
      "40ad0e404f6065a153d1b4d42e8b315be3504a08c21fadd6e5fde5982b45df18/layer.tar",
      "aa7f7d1cdeacc3a446e297814a6c13a42006dc8a99baad72c0c50383d69ac551/layer.tar",
      "4f62ae56d8d3b96d5fbe86da8a3f7bf6e9195d360b922cd7b162e17619c50664/layer.tar",
      "9dedacd92213db743681db2e8d5b3247fd79ce266495d061a381c4c0441ce15d/layer.tar",
      "fa28cd504eaba5e76b168c5149551371fbeb3bc0f51d18485fe401a411c2dd17/layer.tar",
      "4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682/layer.tar",
      "4cc7bdb0ea56d31f57a373d0e7ce0d633ae86dc327087fccf103c8d97f0cc9c4/layer.tar"
    ]
  }
]
root@ip-10-10-20-249:~/aoc#

Lưu ý rằng phần thông tin đầu tiên trong tệp là "Cấu hình", đại diện cho các cấu hình và lệnh cơ bản được sử dụng để xây dựng hình ảnh vùng chứa -

f886f00520700e2ddd74a14856fcc07a36c819b4cea8cee8be83d4de01e9787.json

Tệp cấu hình này cũng nằm trong thư mục gốc của thư mục hình ảnh vùng chứa được giải nén:

ls
root@ip-10-10-20-249:~/aoc# ls
40ad0e404f6065a153d1b4d42e8b315be3504a08c21fadd6e5fde5982b45df18
4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682
4cc7bdb0ea56d31f57a373d0e7ce0d633ae86dc327087fccf103c8d97f0cc9c4
4f62ae56d8d3b96d5fbe86da8a3f7bf6e9195d360b922cd7b162e17619c50664
619ddb982b75f0eb6c9f48624e6a0d20be227e893599d8dea05dbdddc8b14e2b
9dedacd92213db743681db2e8d5b3247fd79ce266495d061a381c4c0441ce15d
a3c1e603ab4385e0b411423e70314651bb371561c45a2bc90951fa05da9ad3c4
aa7f7d1cdeacc3a446e297814a6c13a42006dc8a99baad72c0c50383d69ac551
aoc.tar
f886f00520700e2ddd74a14856fcc07a360c819b4cea8cee8be83d4de01e9787.json
fa28cd504eaba5e76b168c5149551371fbeb3bc0f51d18485fe401a411c2dd17
manifest.json
repositories
root@ip-10-10-20-249:~/aoc#

và có thể được kiểm tra theo cách tương tự như manifest.json:

cat f886f00520700e2ddd74a14856fcc07a36c819b4cea8cee8be83d4de01e9787.json | jq

cat .json Config part 1
root@ip-10-10-20-249:~/aoc# cat f886f00520700e2ddd74a14856fcc07a360c819b4cea8cee8be83d4de01e9787.json | jq
{
  "architecture": "amd64",
  "config": {
    "Hostname": "",
    "Domainname": "",
    "User": "newuser",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
      "api_key=a90eac086fd049ab9a08374f65d1e977"
    ],
    "Cmd": null,
    "Image": "sha256:035522c2043f6036e879810cfffe0db9665ebb09e1852339231fd805daad5325",
    "Volumes": null,
    "WorkingDir": "/home/newuser",
    "Entrypoint": [
      "sh"
    ],
    "OnBuild": null,
    "Labels": null
  },
  "container": "7b422a5dd0a2a59167ae476fcc18f7ae9a094c02de40b4b4effd42a5d032bae4",
  "container_config": {
    "Hostname": "7b422a5dd0a2",
    "Domainname": "",
    "User": "newuser",
    "AttachStdin": false,

Phần đầu tiên của tệp cấu hình kê khai hướng dẫn cấu hình hình ảnh cuối cùng như dự định để chạy trên hệ thống máy chủ lưu trữ vùng chứa. Tuy nhiên, phần tiếp theo này được kẻ tấn công quan tâm đặc biệt - đây là cách hình ảnh vùng chứa được xây dựng. Bạn có thể thấy từng phần được chia nhỏ bằng dấu ngoặc nhọn và một số phần có thêm một dòng cho biết "empty_layer": true.

cat .json Config part 2
"created": "2021-10-21T20:31:17.236366166Z",
"docker_version": "20.10.7",
"history": [
  {
    "created": "2021-10-16T00:37:47.226745473Z",
    "created_by": "/bin/sh -c #(nop) ADD file:5d68d27cc15a80653c93d3a0b262a28112d47a46326ff5fc2dfbf7fa3b9a0ce8 in / "
  },
  {
    "created": "2021-10-16T00:37:47.578710012Z",
    "created_by": "/bin/sh -c #(nop)  CMD [\"bash\"]",
    "empty_layer": true
  },
  {
    "created": "2021-10-20T16:16:12.499990187Z",
    "created_by": "/bin/sh -c apt-get upgrade && apt-get update"
  },
  {
    "created": "2021-10-20T16:16:46.080121757Z",
    "created_by": "/bin/sh -c apt install curl -y"
  },
  {
    "created": "2021-10-21T20:22:41.837170259Z",
    "created_by": "/bin/sh -c apt install python3 -y"
  },
  {
    "created": "2021-10-21T20:23:42.130217528Z",
    "created_by": "/bin/sh -c apt install pip -y"
  },
  {
    "created": "2021-10-21T20:23:52.8316757Z",
    "created_by": "/bin/sh -c apt install git -y"
  },
  {
    "created": "2021-10-21T20:31:13.639594181Z",
    "created_by": "/bin/sh -c git clone https://github.com/hashicorp/envconsul.git root/envconsul/"
  },
  {
    "created": "2021-10-21T20:31:14.315738313Z",
    "created_by": "/bin/sh -c #(nop) WORKDIR /root/envconsul",
    "empty_layer": true
  },
  {
    "created": "2021-10-21T20:31:14.645450256Z",
    "created_by": "/bin/sh -c #(nop) ADD file:cba528c0d7ba7c0c89ad4ce3e550dc4b3128c2804d4dc75daaf1421759f6d664 in . "
  },
  {
    "created": "2021-10-21T20:31:15.914695012Z",

Mỗi phần trong số này mô tả một lệnh cụ thể được chạy bởi trình nền Docker tại thời điểm hình ảnh được tạo và nếu cấu hình "void_layer": true không được liệt kê như một phần của định nghĩa phần, thì lớp vùng chứa được giữ lại trong hình ảnh vùng chứa tổng thể dưới dạng một trong các lớp được liệt kê trong tệp manifest.json. Đặc biệt quan tâm - chúng tôi nhận thấy các thùng chứa một công cụ gọi là envconsul được lấy từ Github. Đánh giá kho lưu trữ Github cho envconsul - các trạng thái về mô tả envconsul là một công cụ cho phép người dùng "Khởi chạy một quy trình con với các biến môi trường bằng cách sử dụng dữ liệu từ @hashicorp Consul và Vault." Lưu ý rằng mã nguồn này đã được sao chép vào thư mục gốc - có lẽ có điều gì đó nhạy cảm liên quan đến envconsul mà một người dùng container thông thường không có ý định nhìn thấy tại Grinch Enterprises. Chúng ta hãy tìm hiểu các lớp hình ảnh và xem liệu chúng ta có thể tìm ra điều gì quá nhạy cảm về envconsul không.

Chúng ta có thể kiểm tra chặt chẽ hơn các lớp bằng cách chuyển sang các thư mục con đại diện cho các lớp trong thư mục gốc vùng chứa được giải nén. Khi chúng tôi chuyển đổi giữa các lớp này, chúng tôi nhận thấy một lớp quan tâm đặc biệt:

cat config.hcl
root@ip-10-10-20-249:~/aoc# cd 4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682/
root@ip-10-10-20-249:~/aoc/4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682# tar -xvf layer.tar
root/
root/envconsul/
root/envconsul/config.hcl
root@ip-10-10-20-249:~/aoc/4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682# cat root/envconsul/config.hcl
# This denotes the start of the configuration section for Consul. All values
# contained in this section pertain to Consul.
consul {
​
  # This is the address of the Consul agent. By default, this is
  # 127.0.0.1:8500, which is the default bind and port for a local Consul
  # agent. It is not recommended that you communicate directly with a Consul
  # server, and instead communicate with the local Consul agent. There are many
  # reasons for this, most importantly the Consul agent is able to multiplex
  # connections to the Consul server and reduce the number of open HTTP
  # connections. Additionally, it provides a "well-known" IP address for which
  # clients can connect.
  address = "127.0.0.1:8500"
​
  # This controls the retry behavior when an error is returned from Consul.
  # Envconsul is highly fault tolerant, meaning it does not exit in the face
  # of failure. Instead, it uses exponential back-off and retry functions
  # to wait for the cluster to become available, as is customary in distributed

Spoiler

Lớp này chứa tệp config.hcl - khi chúng ta xem tệp này trong lớp hình ảnh vùng chứa - rõ ràng là các cấu hình nhạy cảm được duy trì trong tệp. Hãy sử dụng công cụ dòng lệnh Linux grepand để xem liệu chúng ta có thể trả về "bí mật" hoặc "mã thông báo" ... và nó có ở dòng 4 khi grep với chuỗi 'mã thông báo' hay không. Tôi tự hỏi liệu các nhà phát triển Grinch Enterprise có biết rằng hình ảnh vùng chứa đã lưu vào bộ nhớ cache của tất cả các lớp vùng chứa không? Dù bằng cách nào, bây giờ chúng ta có thể lật ngược tình thế trên Grinch Enterprises và truy cập vào cụm Vault của họ với tất cả bí mật của nó!

grep token
root@ip-10-10-20-249:~/aoc/4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682# cat root/envconsul/config.hcl | grep 'token'
# This is the token to use when communicating with the Vault server.
# assumption that you provide it with a Vault token; it does not have the
# incorporated logic to generate tokens via Vault's auth methods.
token = "TOKEN"
# This tells Envconsul to load the Vault token from the contents of a file.
# - by default Envconsul will not try to renew the Vault token, if you want it
# to renew you will need to specify renew_token = true as below.
# - Envconsul will periodically stat the file and update the token if it has
# vault_agent_token_file = "/path/to/vault/agent/token/file"
# This tells Envconsul that the provided token is actually a wrapped
# token that should be unwrapped using Vault's cubbyhole response wrapping
unwrap_token = true
# This option tells Envconsul to automatically renew the Vault token given.
# If you are unfamiliar with Vault's architecture, Vault requires tokens be
# automatically renew the token at half the lease duration of the token. The
# you want to renew the Vault token using an out-of-band process.
# There is an exception to the default such that if vault_agent_token_file is
# set, either from the command line or the above option, renew_token defaults
# token itself.
renew_token = true
root@ip-10-10-20-249:~/aoc/4416e55edf1a706527e19102949972f4a8d89bbe2a45f917565ee9f3b08b7682#
































Answer the questions below
What command will list container images stored in your local container registry?

What command will allow you to save a docker image as a tar archive?

What is the name of the file (including file extension) for the configuration, repository tags, and layer hash values stored in a container image?

What is the token value you found for the bonus challenge?



Post a Comment

0 Comments