Mở khóa sức mạnh của Kali Linux trên các mạng Docker bằng cách thêm GUI trở lại vùng chứa và tăng cấp độ thu thập thông tin bằng tính năng quét web ẩn danh được cung cấp bởi Python, Selenium và Tor Browser.
Là một Kỹ sư DevOps, tôi vừa vận chuyển vừa hỗ trợ các Kỹ sư khác vận chuyển hàng trăm nghìn công-ten-nơ. Tôi sử dụng Phân phối liên tục và nhiều phương pháp điều phối khác nhau: Kubernetes, Lambda Container trên AWS, Dịch vụ bộ chứa đàn hồi (ECS) được hỗ trợ bởi cả Đám mây điện toán đàn hồi (EC2) và Fargate. Vùng chứa hữu ích cho các hệ thống xây dựng tùy chỉnh, triển khai tự động, quét lỗ hổng, mục đích nghiên cứu, phân tích dữ liệu, học máy, lưu trữ phần mềm cũ, phát triển cục bộ và quét web.
Trong hướng dẫn này, tôi sẽ thực hiện các bước tôi đã thực hiện để thêm GUI vào bộ chứa Kali Linux chính thức từ DockerHub bằng Xvfb và máy chủ VNC. Mã tôi thảo luận ở đây được xuất bản trong kho lưu trữ nguồn mở kalilinux-xvfb và liên tục được gửi tới Docker Hub để sử dụng chung. Cuối cùng, trong Phần 2 của loạt bài này, mọi thứ trong các thùng chứa sẽ được đưa vào thử nghiệm. Tôi sẽ sử dụng tập lệnh Python tùy chỉnh, Pytest và Selenium để tự động hóa phiên bản Trình duyệt Tor và thu thập dữ liệu từ web.
Một phần động lực đằng sau việc có Kali Linux trong vùng chứa là để có được khả năng hiển thị vào không gian mạng riêng do máy chủ tạo cho vùng chứa. Thiết lập mặc định từ Docker Desktop là sử dụng mạng NAT. Trừ khi (các) cổng được liên kết với máy chủ, với docker run -p , dịch vụ đó sẽ không thể truy cập được từ máy chủ.
Dưới đây là các phần tóm tắt được thêm vào với các liên kết cho từng gói phần mềm sau:
KaliLinux
Máy tính để bàn Docker
Trình duyệt tor
Trình khởi chạy trình duyệt Tor
xvfb
selen
Các liên kết bổ sung cho phần mềm tôi đã sử dụng:
Kali Linux là một bản phân phối Linux dựa trên Debian nhằm mục đích Kiểm tra thâm nhập và Kiểm tra bảo mật nâng cao. 1
Tôi đã chọn Kali Linux vì có rất nhiều công cụ tập trung vào bảo mật. Nhóm Kali Linux cung cấp hình ảnh Docker được cập nhật thường xuyên. Phần lớn phần mềm cần thiết có sẵn cho hình ảnh Kali Linux Docker và tôi sẽ sử dụng trình quản lý gói để cài đặt chúng.
Docker Desktop là một framework để chạy các container cục bộ. Bộ chứa là một cách đóng gói trạng thái hệ điều hành và ứng dụng trong một hình ảnh hệ điều hành có thể tái sử dụng. Tài nguyên bổ sung có sẵn trên trang web Docker .
Bộ chứa và máy ảo có các lợi ích phân bổ và cách ly tài nguyên tương tự nhau, nhưng hoạt động khác nhau vì bộ chứa ảo hóa hệ điều hành thay vì phần cứng. 2
Vì bộ chứa Docker nhẹ hơn máy ảo nên tôi rất ưu tiên chúng trong nỗ lực phát triển của mình. Về lâu dài, trạng thái này có thể được lưu trữ dưới dạng một tệp văn bản nhỏ và dễ dàng hơn rất nhiều để theo dõi các thay đổi theo thời gian bằng git và các công cụ tương tự. Khả năng lấy lại hình ảnh từ tệp văn bản rất mạnh mẽ. Tuy nhiên, Dockerfile hoàn toàn có thể rơi vào tình trạng hư hỏng theo thời gian và có thể không xây dựng được vào một ngày sau đó. Giống như bất kỳ Hệ điều hành nào khác và Cơ sở hạ tầng dưới dạng Mã, điều quan trọng là phải luôn cập nhật mọi thứ.
Một giải pháp thay thế cho Docker là sử dụng Máy ảo hoặc cài đặt kim loại trần. Tuy nhiên, tôi tin rằng các vùng chứa là nơi thử nghiệm hoàn hảo để chạy các trình thu thập dữ liệu web tạm thời vì chúng dễ dàng cung cấp và dọn dẹp. Tôi có thể chạy song song nhiều vùng chứa trên một máy duy nhất, có thể khởi động và dừng gần như ngay lập tức. Sau đó, bất cứ khi nào tôi yêu cầu cách ly bổ sung, toàn bộ thiết lập này cũng có thể được chạy từ bên trong máy ảo.
Onion Router (Tor) là một mạng máy tính toàn cầu định tuyến lưu lượng truy cập thông qua một loạt các bước được mã hóa. Điều này cho phép người dùng duyệt internet một cách ẩn danh và cũng cho phép người dùng truy cập các trang web chỉ khả dụng trên Mạng Tor.
Tor Browser là một phiên bản Firefox được cấu hình mạnh, tập trung vào quyền riêng tư và bảo mật. Nó có thể sử dụng Mạng Tor ngay lập tức.
torbrowser-launcher được bao gồm trong nhiều hệ điều hành Linux và giúp khởi động trình duyệt web trên Mạng Tor cực kỳ dễ dàng.
Selenium là một công cụ để tự động hóa trình duyệt web. Tôi đã sử dụng Python trong ví dụ này, nhưng có rất nhiều ngôn ngữ và công cụ có sẵn.
Tôi sẽ sử dụng Selenium để tự động hóa Trình duyệt Tor này trên Mạng Tor. Tôi đang cố gắng tận dụng cấu hình hiện có của trình duyệt có ý thức bảo mật để hạn chế chia sẻ thông tin tới các mục tiêu. Tôi sẽ có thể dọn sạch các trạng thái thời gian chạy của vùng chứa bằng cách dừng chúng. Kết quả phiên WebDriver sẽ có một địa chỉ IP ngẫu nhiên được bán tự động thông qua Tor, khiến nó trở thành một công cụ rất mạnh để quét web.
Thành phần XOrg Xvfb có thể được sử dụng để mô phỏng màn hình cho hệ thống cửa sổ X. Sau đó, tôi sẽ sử dụng màn hình này để khởi động máy chủ X trong vùng chứa. Kỹ thuật mô phỏng này không đặc biệt nhanh và các ứng dụng nặng về đồ họa sẽ được hưởng lợi từ GPU.
Dockerfiles nên được xây dựng trên bất kỳ bản phân phối Linux, macOS hoặc Windows nào có thể chạy Docker. Tôi đã thử nghiệm điều này trên Docker Desktop bằng bộ xử lý Intel. Có một biến thể ARM cho bộ chứa cơ sở Kalilinux chính thức. Tôi sẽ đánh giá cao phản hồi từ bất kỳ ai thử chạy ứng dụng này trên ARM.
Đây là Dockerfile mà tôi đã sử dụng để xây dựng hình ảnh cơ sở. Tôi đã thêm một vài nhận xét để giải thích chức năng của từng dòng.
# From the official Kali Linux Docker image rolling release FROM kalilinux/kali-rolling # Leaving this here for now, but it's not needed ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # Install the packages we need # Got lucky with this one, there was a ticket about this: # https://github.com/dnschneid/crouton/issues/4461 `xfce4 dbus-launch not found` in this version of the image so installing dbus-x11 RUN apt-get update -y -q \ && apt-get install -y -q xvfb xfce4 xfce4-goodies tightvncserver net-tools curl openssh-server dbus-x11 # This line copies the shell scripts from the local directory to the container, and makes them executable. COPY *.sh /opt/ RUN chmod 755 /opt/*.sh # This line runs the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash
Giúp khởi động máy chủ X. Tôi đang sử dụng lệnh Xvfb để khởi động máy chủ X. Nếu có PID và khi xảy ra sự cố với máy chủ X, tôi có thể hủy quy trình và bắt đầu lại. Tôi đã thử nghiệm chặn các phiên X khỏi mạng, mặc dù có thể không cần thiết nhưng tôi vẫn đang thêm nó: -nolisten tcp Discussion on super user
#!/bin/bash FILE=/opt/.x.pid if [[ -f "$FILE" ]]; then echo "$FILE exist" echo "PID: " `cat $FILE` else Xvfb -nolisten tcp $DISPLAY & echo $? > $FILE fi
Máy khách VNC không lý tưởng để sao chép và dán văn bản. Điều này có thể được khắc phục bằng cách thêm các khóa SSH vào vùng chứa để giúp các máy chủ khác kết nối với nó. Điều này mở ra khả năng sử dụng các đường hầm SSH để kết nối với vùng chứa.
Lệnh ssh-keygen
sau đây được tham chiếu từ Bài viết trao đổi ngăn xếp này
#!/bin/bash # Generate SSH keys ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" cat ~/.ssh/id_rsa >> ~/.ssh/authorized_keys
Nếu tôi định sử dụng các khóa này, tôi cần có khóa riêng trên máy trạm của mình. Tôi đang sử dụng các lệnh sau để sao chép khóa riêng vào máy chủ của mình từ docker, nhưng có vô số cách để thực hiện việc này. Đã có một cuộc thảo luận tốt xung quanh vấn đề này trên Stack Overflow .
Tìm ID vùng chứa bằng lệnh ps :
docker ps
Sử dụng ID vùng chứa để sao chép bằng lệnh cp :
# For root docker cp <containerId>:/root/.ssh/id_rsa /target/path/on/host # Otherwise for the user configured in the Dockerfile docker cp <containerId>:/home/username/.ssh/id_rsa /target/path/on/host
Phần này cần được sao chép vào vùng chứa, nhưng chỉ là các phần không có chú thích từ cấu hình soạn sẵn mà Dự án Tor cung cấp tại đây .
# /etc/tor/torrc ## Tor opens a SOCKS proxy on port 9050 by default -- even if you don't ## configure one below. Set "SOCKSPort 0" if you plan to run Tor only ## as a relay, and not make any local application connections yourself. SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections. #SOCKSPort 192.168.0.1:9100 # Bind to this address:port too. ## Uncomment this to start the process in the background... or use ## --runasdaemon 1 on the command line. This is ignored on Windows; ## see the FAQ entry if you want Tor to run as an NT service. RunAsDaemon 1 ## The port on which Tor will listen for local connections from Tor ## controller applications, as documented in control-spec.txt. ControlPort 9051 ## If you enable the controlport, be sure to enable one of these ## authentication methods, to prevent attackers from accessing it. #HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C CookieAuthentication 1
Dockerfile này được xây dựng trên Dockerfile trước đó và thêm Trình duyệt Tor và Python vào hỗn hợp. Tôi đang sử dụng gói torbrowser-launcher để cài đặt Tor Browser.
# From the base Dockerfile: FROM excitingtheory/kalilinux-xvfb ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # More info about torbrowser-launcher: # https://github.com/micahflee/torbrowser-launcher RUN apt-get update -y -q \ && apt-get install -y -q torbrowser-launcher python3 python3-pip # Create a user and add them to the sudo group, sudo still TBD but leaving for now, will not be able to switch users in this container. RUN useradd -s /bin/bash -m username \ && usermod -aG sudo username # Install python packages RUN pip3 install selenium pytest COPY torrc /etc/tor/torrc # Set the user and home directory for the container USER username ENV USER=username ENV HOME=/home/username # Run the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash
Giống như trước đây nhưng với cấu hình ít hơn. Sẽ sử dụng người dùng root.
# From the base Dockerfile: FROM excitingtheory/kalilinux-xvfb ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # More info about torbrowser-launcher: # https://github.com/micahflee/torbrowser-launcher RUN apt-get update -y -q \ && apt-get install -y -q torbrowser-launcher python3 python3-pip # Install python packages RUN pip3 install selenium pytest # Copy the tor config file into the containera COPY torrc /etc/tor/torrc # Run the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash
Tệp quy trình công việc Github Actions xây dựng hình ảnh Docker và đẩy nó vào Docker Hub. Đây là quy trình công việc stock từ tài liệu của Docker , với các thẻ bổ sung được đẩy. Tôi đã thêm mộtlịch trình để kích hoạt Hành động này mỗi ngày một lần.
name: docker build and push on: push: branches: - "main" schedule: - cron: '20 16 * * *' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and push base image uses: docker/build-push-action@v4 with: context: . file: ./Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:latest - name: Build and push torbrowser root image uses: docker/build-push-action@v4 with: context: . file: ./TorBrowser-root.Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:torbrowser-root - name: Build and push torbrowser image uses: docker/build-push-action@v4 with: context: . file: ./TorBrowser.Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:torbrowser
Bây giờ tôi có thể kiểm tra các thùng chứa và xem chúng có hoạt động không. Tôi sẽ sử dụng thẻ torbrowser
cho ví dụ này.
Xem Tài liệu xây dựng Docker CLI để biết thêm thông tin về lệnh docker build
. Để tạo vùng chứa cục bộ, tôi sử dụng các lệnh sau, nếu không, chúng có thể được lấy từ Docker Hub theo yêu cầu trong các bước tiếp theo.
docker build -t excitingtheory/kalilinux-xvfb . docker build -t excitingtheory/kalilinux:torbrowser -f TorBrowser.Dockerfile . docker build -t excitingtheory/kalilinux:torbrowser-root -f TorBrowser-root.Dockerfile .
Tôi cần gắn một ổ đĩa vào vùng chứa để có thể truy cập các tệp mà tôi đang làm việc. Tôi đang sử dụng thư mục ${HOME}/src
làm ổ đĩa.
Một số lưu ý ngắn gọn về các cờ mà chúng tôi đang sử dụng được bao gồm bên dưới, nếu không, hãy xem Tài liệu chạy Docker CLI để biết thêm thông tin về lệnh docker run
.
-it
được sử dụng để chạy vùng chứa ở chế độ tương tác.
--rm
được sử dụng để loại bỏ các lớp chứa khi nó thoát.
-p
được sử dụng để ánh xạ cổng từ vùng chứa sang máy chủ.
-v
được sử dụng để gắn một ổ đĩa từ máy chủ vào vùng chứa.
# Run the base container docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb # Run the container with the default user docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser # Run the container with the root user docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser-root
Tiếp theo, tôi muốn mở vùng chứa người dùng, đăng nhập qua VNC và chạy Trình khởi chạy trình duyệt Tor để xác minh rằng mọi thứ đang hoạt động cho đến nay. Trình khởi chạy trình duyệt Tor sẽ không hoạt động với người dùng root.
Bắt đầu vùng chứa với người dùng mặc định:
docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser
Khởi động máy chủ VNC trong vùng chứa, máy chủ sẽ nhắc nhập mật khẩu chính, tôi đang đặt mật khẩu chỉ xem bổ sung.
/opt/start-vnc-server-once.sh
Dưới đây là một ví dụ về đầu ra.
Có thể tìm thấy hộp thoại kết nối với máy chủ từ menu tìm kiếm: Go
-> Connect to Server
.
Khi hộp thoại được mở, hãy nhập địa chỉ vnc://localhost:5901
và nhấp vào Connect
. Tôi đã lưu địa chỉ này làm địa chỉ yêu thích để dễ dàng truy cập.
Một ứng dụng khách vnc như TightVNC có thể kết nối với ứng dụng này trên localhost:5901
.
Sau khi kết nối, tôi có thể thấy màn hình nền xfce4.
Bây giờ tôi có thể khởi động Trình khởi chạy trình duyệt Tor từ thiết bị đầu cuối trong phiên VNC.
torbrowser-launcher
Khi trình duyệt được mở, tôi có thể kiểm tra xem nó có hoạt động hay không bằng cách truy cập Trình kiểm tra kết nối dự án Tor
Đây là phần thiết lập Hệ điều hành mà tôi muốn hoàn thành trước khi bắt đầu làm việc với Selenium và Python. Tóm lại, tôi đã làm như sau:
Bây giờ có một môi trường vùng chứa đang hoạt động. Hãy xem bài đăng tiếp theo trong loạt bài này về tìm kiếm bí mật trên web bằng Python.