Объединение VPN двух межсетевых экранов Watchguard в один межсетевой экран

У меня два разных межсетевых экрана Watchguard XTM 515. В каждом из них создан собственный набор виртуальных частных сетей.

Теперь мне нужно использовать только один межсетевой экран для обработки виртуальных частных сетей обоих. Но проблема в том, что я не знаю PSK VPN (я унаследовал этот брандмауэр после того, как присоединился к моей работе). Я не могу просить клиентов изменить PSK.

Теперь я знаю , что когда я экспортирую конфигурацию (файл XML) брандмауэра, он включает PSK всех VPN. Это причина того, что восстановление этой конфигурации на другом брандмауэре работает. Но я не знаю, как получить эти PSK. Я проверяю XML-файлы конфигурации с помощью текстового редактора, и кажется, что они зашифрованы (неудивительно). Но они должны быть зашифрованы с использованием статического ключа, поскольку эту конфигурацию можно загрузить в любой межсетевой экран. Просто я не знаю схему и ключ дешифрования.

Теперь моя цель, конечно, не в том, чтобы взламывать шифрование файлов конфигурации Watchguard XML. Все, что мне нужно сделать, это объединить два межсетевых экрана в один. Я думал о ручном слиянии разделов файлов конфигурации XML, экспортированных из обоих брандмауэров, но это кажется сложной задачей.

Не могли бы вы предложить способ объединения VPN двух разных брандмауэров Watchguard в один?

1
задан 17 July 2016 в 22:26
3 ответа

Вы правы, они зашифрованы с помощью статического ключа, а схема представляет собой алгоритм переноса ключей AES (RFC 3394) . И вы можете их расшифровать.

Я взял эту публичную библиотеку C # , разделил ее до функций дешифрования и перенес на PowerShell, чтобы она соответствовала ответу StackOverflow и не нуждалась в компиляции. или двоичные файлы.

Это некрасиво, в нем нет проверки ошибок или чего-то еще, но похоже, что он работает:

<#
.Synopsis
   Decrypts a Watchguard encrypted BOVPN pre-shared-key
.EXAMPLE
   Decrypt-WatchguardPsk -EncryptedPsk '0E611DC31F2AEBB4A6E69F2641E1E83D762F514F3636E1EFA86B9BDECFEFADFB'
#>
function Decrypt-WatchguardPsk
{
    [CmdletBinding()]
    [Alias()]
    [OutputType([int])]
    Param([Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0)]$EncryptedPsk)

    Process
    {
        function Group-ByCount ($ByteArray, $n) { #BigArray -> Arrays of n items
            $NumGroups=$ByteArray.Count/$n
            $Output= @()
            0..($NumGroups-1) | ForEach-Object { $Output += @(, [byte[]]$ByteArray[($_*$n)..(($_*$n)+$n-1)]) }
            $Output
        }

        $KeyEncryptionKey = [byte[]] @(29, 3, 245, 130, 135, 152, 43, 199, 1, 34, 115, 148, 228, 152, 222, 35)
        $EncryptedPsk = $EncryptedPsk -replace '\s|(</*psk>)|\+' # trim xml line. Here so you can do: sls '<psk>' *.xml | % Line | Decrypt-WatchguardPsk
        [byte[]] $Arrby = $EncryptedPsk -split "(?<=\G\w{2})(?=\w{2})" |% { [Convert]::ToByte($_, 16) } #HexTo[byte[]]
        $C = Group-ByCount $Arrby 8  #Byte array to groups of 8 bytes (AES blocks)

        # 1) AES Key Wrap - Initialize variables
        $A = $C[0]
        $R = @($C[1..($C.Count-1)])
        $Blockn = $R.Count

        # 2) Calculate intermediate values
        for ($j = 5; $j -ge 0; $j--) {
            for ($i = $Blockn - 1; $i -ge 0; $i--) {
                $t = $Blockn * $j + $i + 1  # add 1 because i is zero-based

                #64 bit XOR
                $A2 = $A.Clone()
                [Array]::Reverse($A2)
                $A2 = [BitConverter]::GetBytes([BitConverter]::ToInt64($A2, 0) -bxor $t)
                [Array]::Reverse($A2)
                $A = $A2

                # Decrypt block
                $Alg = New-Object -type System.Security.Cryptography.RijndaelManaged
                $Alg.Padding = [System.Security.Cryptography.PaddingMode]::None
                $Alg.Mode = [System.Security.Cryptography.CipherMode]::ECB
                $Alg.Key = $KeyEncryptionKey

                $ms = New-Object System.IO.MemoryStream
                $xf = $Alg.CreateDecryptor()
                $cs = New-Object System.Security.Cryptography.CryptoStream -ArgumentList @($ms, $xf, [System.Security.Cryptography.CryptoStreamMode]::Write)

                $AConcatRi = $A + $R[$i] + (New-Object 'byte[]' (16 - $A.Count - $R[$i].Count))

                $cs.Write($AConcatRi, 0, $Alg.BlockSize / 8)

                $B = Group-ByCount $ms.ToArray() 8
                $A         = $B[0] #MSB(B)
                $R[$i]     = $B[1] #LSB(B) 64 least significant bits of a 128
            }
        }

        -join ($R | % { [System.Text.Encoding]::ASCII.GetString($_) })
    }
}

например

PS C:\> Decrypt-WatchguardPsk -EncryptedPsk '8B4B449A6D4253232C4CFC48E311B7B9DF360D5F4EAB310CAD9D7B92B4CD3CA6340841671FA9187E6AB5F4604D5E2B9319EC890A826B96EF47163B83F2294289109F8336441879416A230C26E0AEEBDC332798F54F482250'
Testing with dummy text lorem ipsum dolor sit amet, consectetur adipiscing elit

Я не думаю, что публикация этого сообщения является проблемой безопасности - любой злоумышленник, который может получить конфигурацию брандмауэра файл уже прошел защиту, на брандмауэре или на рабочей станции управления. Конфигурация не содержит учетных данных для входа в систему управления устройством. И они мало что могли бы сделать для шифрования вещей в конфигурационном файле без решения множества других проблем. Это действительно прагматичный уровень, чтобы пароли не отображались в текстовых поисках и индексах.

2
ответ дан 3 December 2019 в 17:36

Помимо ответа, отправленного @TessellatingHeckler, существует еще один нетехнический способ передачи VPN от одного охранного устройства к другому. В итоге я использовал этот метод, и он отлично сработал.

  • Экспорт конфигурации из старого брандмауэра. Храните файл в безопасности. Назовем его old.xml .
  • Сделайте VPN с такой же конфигурацией на новом брандмауэре. Очевидно, вы не знаете PSK, поэтому введите что-нибудь в поле.
  • Экспортируйте конфигурацию из нового брандмауэра. Назовем его new.xml .
  • Скопируйте зашифрованную строку PSK VPN, которую вы пытаетесь перенести из old.xml . Перезаписать строку PSK VPN в new.xml .
  • Применить new.xml обратно к новому брандмауэру.

Идея в том, что мы не интересовался, какова стоимость PSK. Мы просто хотим его перенести. Так почему бы просто не перенести зашифрованное значение? Поскольку шифрование одинаково во всех топках, мы можем просто перенести зашифрованный PSK.

2
ответ дан 3 December 2019 в 17:36

Сбросьте парольную фразу на шлюзах на обоих концах одновременно и запишите новую парольную фразу. Примените эту новую кодовую фразу к новой конфигурации и сохраните в топке.

0
ответ дан 26 December 2019 в 20:51

Теги

Похожие вопросы