paint-brush
Sử dụng Bộ chứa Docker Kali Linux để hỗ trợ Quét web bí mậttừ tác giả@csfx
3,410 lượt đọc
3,410 lượt đọc

Sử dụng Bộ chứa Docker Kali Linux để hỗ trợ Quét web bí mật

từ tác giả Colin Barrett-Fox13m2023/07/23
Read on Terminal Reader

dài quá đọc không nổi

Mở khóa sức mạnh của Kali Linux trên mạng Docker bằng cách thêm GUI trở lại vùng chứa. Nâng cao khả năng thu thập thông tin với tính năng quét web ẩn danh được hỗ trợ bởi Python, Selenium và Tor Browser. 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.
featured image - Sử dụng Bộ chứa Docker Kali Linux để hỗ trợ Quét web bí mật
Colin Barrett-Fox HackerNoon profile picture
0-item
1-item

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ạng vùng chứa

Tổng quan về Mạng Container và Kết nối



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ủ.


Phần mềm

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:


KaliLinux


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.


Máy tính để bàn Docker

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.


Trình duyệt tor

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.


selen

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.


xvfb

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.

Tổng quan về tệp

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.


  1. Dockerfile
  2. TorBrowser.Dockerfile
  3. TorBrowser-root.Dockerfile
  4. startx-once.sh
  5. start-vnc-server-once.sh
  6. ssh-keys.sh
  7. torrc
  8. .github/workflows/main.yml


Dockerfile

Đâ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



startx-once.sh

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


ssh-keys.sh

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 


đầu ra lệnh 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


torrc

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


TorBrowser.Dockerfile

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


TorBrowser-root.Dockerfile

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


.github/workflows/main.yml

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.


Sử dụng các hành động GitHub để phân phối liên tục các vùng chứa



 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


Sử dụng Container

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.


Xây dựng các thùng chứa (Tùy chọn)

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 .


Chạy các Container với một Volume

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


Sử dụng Tor Browser từ Container

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.

Đầu ra khi khởi động Máy chủ VNC


Kết nối trên macOS

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 .

Ví dụ về Hộp thoại 'Kết nối với Máy chủ' của macOS được trỏ tới vnc://localhost:5901


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.

Kết nối trên Windows

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 .

Đã kết nối với Máy tính để bàn Kali Linux Xfce4

Sau khi kết nối, tôi có thể thấy màn hình nền xfce4.

Máy tính để bàn được lưu trữ trên vùng chứa, được truy cập thông qua Máy khách VNC.


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 


Chạy torbrowser-launcher trong Docker thông qua VNC Client


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

Một ví dụ về thử nghiệm thành công:

Kiểm tra kết nối thành công trên https://check.torproject.org/




Tôi đã mở trang web trên máy chủ của mình, không được kết nối, để so sánh:

Kiểm tra kết nối không thành công trên https://check.torproject.org/




Tiến bộ cho đến nay

Đâ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:


  1. Đã cài đặt các phụ thuộc cho Selenium, Python và môi trường máy tính để bàn xfce4 đơn giản.
  2. Đã xây dựng và đẩy ba hình ảnh Docker phụ thuộc lẫn nhau bằng GitHub Actions.
  3. Khởi động thành công Máy chủ VNC trong vùng chứa Docker.
  4. Đã kết nối với môi trường máy tính để bàn của vùng chứa đang chạy với ứng dụng khách VNC.
  5. Đã thử chạy Tor Browser Launcher từ bộ chứa và xác minh rằng nó đang kết nối với mạng Tor.


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.