В данной статье будет рассмотрено как  сгенерировать саморазворачивающийся ISO-образ агента для создания VPN-туннеля до нашего Kali Rolling сервера из тестируемой подсети заказчика (back-connect + bridged VPN).

Введение

Когда-то мы предложили идею кастомизации Kali Linux продемонстрировав Kali Linux ISO of Doom. Наш сценарий охватывал установку пользовательской конфигурации Kali, которая содержала выбранные инструменты, необходимые для удаленной оценки уязвимостей. Настроенный ISO-образ Kali-агента будет проходить автоматическую установку на удаленном сервере клиента и автоматически подключаться к нашему OpenVPN-серверу через 443 TCP-порт. Соединение OpenVPN способно соединить удаленную и локальную сети, предоставляя нам полный доступ 3 уровня (модели OSI) к внутренней сети из нашего удаленного местоположения. Полученный собранный ISO-образ может быть отправлен клиенту, который развернет шаблон виртуальной машины, и вся установка будет происходить автоматически, без вмешательства — как изображено на рисунке ниже.

Когда мы проверяли эти инструкции, мы заметили, что необходимо произвести некоторые изменения, которые необходимы для работы с Kali Rolling, они связаны с изменениями live-build версий, а также конфигураций с ответами для установщика.
Итак, вот обновленный рецепт, чтобы получить Kali Rolling ISO of Doom.

Настройка сервера OpenVPN

Прежде чем мы начнем, мы создадим OpenVPN-сервер — который имеет публичный IP-адрес (a.b.c.d). Это тот сервер, на котором мы будем настраивать и генерировать ISO файл модифицированного агента.
Следующие действия необходимы для настройки OpenVPN на удаленном сервере Kali:

apt-get install openvpn
cd /root/
cp -rf /usr/share/easy-rsa/ test
cd test
cp keys/{server.crt,server.key,dh2048.pem,ca.crt} /etc/openvpn/
cd /etc/openvpn
cat << EOF > server.conf
tls-server
port 443
proto tcp
dev tap
ca ca.crt
cert server.crt
key server.key # Этот файл должен быть засекречен
dh dh2048.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
client-config-dir static
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
EOF
mkdir -p static
cat << EOF > static/client
ifconfig-push 10.8.0.200 255.255.255.0
EOF

Далее мы создаем SSH-ключ, разрешаем перенаправление портов на сервере VPN и настраиваем iptables. Как только это будет сделано, мы запускаем сервер OpenVPN.

ssh-keygen
openvpn --cd /etc/openvpn --config /etc/openvpn/server.conf
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Сборка ISO-образа Kali Rolling

Теперь мы создаем пользовательский ISO-образ, который будет автоматически устанавливать себя и автоматически подключатся назад к серверу на основе конфигурации OpenVPN. Прежде чем будет инициализированна установка через ISO, нам нет необходимости создавать обратное подключение (back-connect) к нам (на сервер Kali). Начнем с установки живой сборки и изменения стандартной конфигурации, чтобы включить только необходимые нам пакеты и файлы конфигурации.

apt-get install git live-build cdebootstrap
git clone git://git.kali.org/live-build-config.git build
cd build

Затем мы определяем пакеты, которые необходимо предустановить в ISO-образ агента. В данном случае, это минимальное количество инструментов, а также необходимые демоны SSH и OpenVPN:

echo nmap > kali-config/variant-default/package-lists/kali.list.chroot
echo openssh-server >> kali-config/variant-default/package-lists/kali.list.chroot
echo openvpn >> kali-config/variant-default/package-lists/kali.list.chroot
echo metasploit-framework >> kali-config/variant-default/package-lists/kali.list.chroot<iframe width="560" height="315" src="https://www.youtube.com/embed/xoCZ07hwoZ4" frameborder="0" allowfullscreen></iframe>

После этого, мы копируем ключи OpenSSL и OpenVPN и конфигурационные файлы в chroot overlay:

mkdir -p kali-config/common/includes.chroot/etc/openvpn
cp /root/test/keys/{ca.crt,client.crt,client.key} kali-config/common/includes.chroot/etc/openvpn/
mkdir -p kali-config/common/includes.chroot/root/.ssh/
cp /root/.ssh/id_rsa.pub kali-config/common/includes.chroot/root/.ssh/authorized_keys
# Создание файла конфигурации клиента OpenVPN
cat << EOF > kali-config/common/includes.chroot/etc/openvpn/client.conf
client
dev tap
proto tcp
remote a.b.c.d*443 # IP-адрес удаленного сервера
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3
EOF

Введем новые опции загрузки, которые будут обрабатывать файл с ответами, и загружать эти параметры без вмешательства пользователя:

cat << EOF > kali-config/common/includes.binary/isolinux/install.cfg
label install
menu label ^Install
linux /install/vmlinuz
initrd /install/initrd.gz
append vga=788 -- quiet file=/cdrom/install/preseed.cfg locale=en_US keymap=us hostname=kali domain=local.lan
EOF
cat << EOF > kali-config/common/includes.binary/isolinux/isolinux.cfg
include menu.cfg
ui vesamenu.c32
default install
prompt 0
timeout 5
EOF

И создадим пару хуков для запуска SSH и OpenVPN во время загрузки:

echo 'update-rc.d -f ssh enable' > kali-config/common/hooks/01-start-ssh.chroot
echo 'update-rc.d -f openvpn enable' > kali-config/common/hooks/01-start-openvpn.chroot
chmod +x kali-config/common/hooks/*.chroot

Наконец, мы включаем файл автоматической установки, который пропустит все общие вопросы по установке:

mkdir -p kali-config/common/includes.installer
wget https://www.kali.org/dojo/preseed.cfg -O ./kali-config/common/includes.installer/preseed.cfg

Теперь, когда все наши утки встали в ряд, мы генерируем ISO-файл агента. После того как файл будет готов, мы посылаем его для установки в локальной сети и создадим мост (bridged connect) к нашему серверу.

./build.sh --distribution kali-rolling —verbose

Мост через «разрыв» сети от агента к серверу

После того как соединение VPN устанавливается клиентом, мы имеем SSH-доступ к нашему внутреннему агенту Kali Linux и остается последняя потребность: соединить удаленную и локальную сети.

На стороне сервера

Мы создаем маршрут к удаленной сети на сервере OpenVPN:

oot@kali:~# route add -net 192.168.101.0/24 gw 10.8.0.200

На стороне агента

Мы переходим к включению IP Forwarding наряду с IP-masquerade на удаленном агенте Kali:

root@kali:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@kali:~# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Поздравляю, мы справились, наша удаленная целевая сеть в настоящее время полностью доступна через 3 слой модели OSI, и мы можем использовать любые инструменты, которыми мы можем взаимодействовать с удаленной сетью.

И, наконец, еще раз, небольшая дань Морбо:

Источник Offensive Security
Перевод на русский язык A888R