• XSS.stack #1 – первый литературный журнал от юзеров форума

Защита хоста от стилеров + killswitch на докере

Mikeclover

RAM
Пользователь
Регистрация
25.01.2021
Сообщения
140
Реакции
79
Гарант сделки
1
Депозит
1.4306
lan.png

Приветствую всех форумчан!
Идея защиты Windows хоста от всевозможных угроз уже давно не давала покоя. Антивирусы, файерволы - все круто, но как говориться нет человека интернета - нет проблем)))

Если машина используется только для общения на форумах и в ТГ (web версия) то представляю вашему вниманию свою схему.
1. Необходима серверная (подойдет даже RPI) часть для развертывания VPN и Killswitch на докере. Причем изначально доступ в инет имеет только Router/VPN container (выбирайте на свой вкус и цвет используемую технологию для VPN). Одновременно с ним запускается Client container/proxy server на котором инета нет. Configuration container запускается и создает и настраивает macvtap соединения с ip адресами, правилами и т.д. и отключается. Важно чтобы в NAT Router/VPN container был прописан MASQUERADE только на VPN интерфейс (это основа Killswitch: нет интерфейса- нет пинга линка).
2. Хостовая часть не имеет доступа в инет, но есть линк до Client container/proxy server, а соответственно в браузере настраивается socks5 proxy который открывает путь и мир наших форумов. Не забываем про галочку proxy DNS.

Для примера выложу часть docker-compose файла. Сразу прошу прощения за то что не выкладываю готовый POC (интеллектуальная собственность так сказать). А опытным админам ничего не стоит повторить схему.

Код:
version: '3.8'

services:
  # Container 1: Router (starts with no network)
  router:
    image: alpine
    command: sleep infinity
    network_mode: "none"
    container_name: router
    cap_add:
      - NET_ADMIN  # Required for network/routing config
    sysctls:
      - net.ipv4.ip_forward=1  # Enable IP forwarding

  # Container 2: Network Configurator
  macvtap-configurator:
    image: alpine
    privileged: true
    depends_on:
      - router
      - client
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /proc:/hostproc
    command: >
      sh -c "
        # Get router and client PIDs
        ROUTER_PID=$$(docker inspect -f '{{.State.Pid}}' router)
        CLIENT_PID=$$(docker inspect -f '{{.State.Pid}}' client)

        # Create macvtap interfaces
        ip link add router-macvtap link eth0 type macvtap mode bridge
        ip link add client-macvtap link eth0 type macvtap mode bridge

        # Assign MAC addresses
        ip link set router-macvtap address 02:42:ac:11:00:01
        ip link set client-macvtap address 02:42:ac:11:00:02

        # Move interfaces to containers' network namespaces
        ip link set router-macvtap netns /hostproc/$$ROUTER_PID/ns/net
        ip link set client-macvtap netns /hostproc/$$CLIENT_PID/ns/net

        # Configure IP addresses
        nsenter -t $$ROUTER_PID -n ip addr add 192.168.1.100/24 dev router-macvtap
        nsenter -t $$CLIENT_PID -n ip addr add 192.168.1.101/24 dev client-macvtap

        # Bring interfaces up
        nsenter -t $$ROUTER_PID -n ip link set router-macvtap up
        nsenter -t $$CLIENT_PID -n ip link set client-macvtap up

        # Set client's default route through router
        nsenter -t $$CLIENT_PID -n ip route add default via 192.168.1.100

        # Configure NAT on router
        nsenter -t $$ROUTER_PID -n iptables -t nat -A POSTROUTING -o router-macvtap -j MASQUERADE
      "

  # Container 3: Client (starts with no network)
  client:
    image: alpine
    command: sleep infinity
    network_mode: "none"
    container_name: client
    cap_add:
      - NET_ADMIN
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Как думаешь будет работать такой docker-compose (POC)
Код:
version: '3.8'

services:
  # 1. Контейнер VPN (маршрутизатор)
  vpn-router:
    image: dperson/openvpn-client
    restart: always
    cap_add:
      - NET_ADMIN
    sysctls:
      - net.ipv4.ip_forward=1
    environment:
      - VPN_CONFIG=/vpn/config.ovpn  # Укажи конфиг
    volumes:
      - ./vpn:/vpn
    network_mode: "none"
    container_name: vpn-router

  # 2. Настройка сети
  macvtap-configurator:
    image: alpine
    privileged: true
    depends_on:
      - vpn-router
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /proc:/hostproc
    command: >
      sh -c "
        # Получаем PIDs
        VPN_PID=$$(docker inspect -f '{{.State.Pid}}' vpn-router)
        PROXY_PID=$$(docker inspect -f '{{.State.Pid}}' proxy)

        # Создаем интерфейсы
        ip link add vpn-macvtap link eth0 type macvtap mode bridge
        ip link add proxy-macvtap link eth0 type macvtap mode bridge

        # Назначаем MAC-адреса
        ip link set vpn-macvtap address 02:42:ac:11:00:01
        ip link set proxy-macvtap address 02:42:ac:11:00:02

        # Перемещаем интерфейсы в namespace контейнеров
        ip link set vpn-macvtap netns /hostproc/$$VPN_PID/ns/net
        ip link set proxy-macvtap netns /hostproc/$$PROXY_PID/ns/net

        # Назначаем IP-адреса
        nsenter -t $$VPN_PID -n ip addr add 192.168.1.1/24 dev vpn-macvtap
        nsenter -t $$PROXY_PID -n ip addr add 192.168.1.2/24 dev proxy-macvtap

        # Включаем интерфейсы
        nsenter -t $$VPN_PID -n ip link set vpn-macvtap up
        nsenter -t $$PROXY_PID -n ip link set proxy-macvtap up

        # Прокси использует VPN как шлюз
        nsenter -t $$PROXY_PID -n ip route add default via 192.168.1.1

        # NAT через VPN
        nsenter -t $$VPN_PID -n iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
      "

  # 3. Контейнер с SOCKS5 прокси (Клиент)
  proxy:
    image: seregasox/dante
    restart: always
    command: ["-D"]
    network_mode: "none"
    container_name: proxy
    cap_add:
      - NET_ADMIN
    environment:
      - SOCKS_USERNAME=user
      - SOCKS_PASSWORD=pass
    ports:
      - "1080:1080"  # SOCKS5 прокси порт
 
"Сразу прошу прощения за то что не выкладываю готовый POC..."

Я сразу предупредил что это часть
 
that would work, but i dont see the reason to do this in docker.
Since docker shares the same kernel as the host, and due the way it works with cgroups, namespaces, etc ... the isolation is weak, using NET_ADMIN, other capabilities required by vpn/proxy and the graphical browser that requires sharing the display will make it very easy to escape the docker environment
vms would be better for this, to escape it would require a 0day...
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх