Непреодолимое желание копнуть поглубже (Cisco WLC)

Работая работу на работе хочется иногда оживить обстановку и заодно узнать что‑то новое. Возьмем например миграцию беспроводной сети на контроллере Cisco WLC работающего на AireOS на новый Catalyst 9800 на IOS‑XE.

Есть несколько способов перенести конфигурацию на новый контроллер. Но при любом из них, что конфигурирование, а нуля, что использование Cisco TAC Tool — WLC Config Converter придется искать или запрашивать у клиента RADIUS и TACACS+ секреты, PSK (pre‑shared key/passphrase) ключи, и т. д. Хорошо, когда хранение этого добра организовано удобно и безопасно.

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

config radius auth add encrypt 10.10.10.10 1812 password 0 0 0 11 746573745f73656372657400000000000000000000000000

CyberChef → From Hex в помощь. Другое дело если используется шифрование типа »1», пример:

config mgmtuser add encrypt admin2 1 5082d27dd0048bf167d04b96b9f2aad1 fbf57db49db49643897d14cd89d7ba14e96a4fbd 16 d20d07b60ff785d718b47837f1915dbe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 read-write

Если есть доступ к контроллеру и разрешено делать некритичные изменения, то просто отключаем обфускацию из забираем конфиг:

(Cisco Controller) >config switchconfig secret-obfuscation disabled
(Cisco Controller) >config passwd-cleartext enable

Если изменения делать не разрешено или согласование изменения может занять продолжительное время, тоже не беда. Непродолжительный гуглёж и вот статья от мая 2014 года, спасибо что не на корейском. При обфускации используется шифрование AES‑CBC 128 бит с постоянным ключем 834 156f9940f09c0a8d00f019f850 005.

В примере выше 5082d27dd0048bf167d04b96b9f2aad1 это вектор инициализации AES‑CBC, fbf57db49db49 643 897d14cd89d7ba14e96a4fbd это HMAC‑SHA1 вычисленная с постоянным ключем 44c60 835e800ec06ffff89 444ce6f789, 16 это длина зашифрованного блока, d20d07b60ff785d718b47 837f1915dbe это шифротекст с добавлением нулей или мусора в конце. Используем тот же CyberChef → AES Decrypt и практически все секреты и пароли у нас в кармане.

PSK в конфигурации хранится в HEX формате и тут нет простых способов получить изначальный ASCII пароль кроме брутфорса (hashcat PBKDF2), но можно попробовать перенести PSK на новый контроллер как есть. Вот только он должен быть точно 64 символа (32 байта), а мы имеем 80. Известно, что PSK HEX получается из PSK ASCII при помощи функции PBKDF2 (Password‑Based Key Derivation Function 2). Проведем эксперимент, созадим беспроводную сеть с известным нам SSID: «test» и PSK ASCII:»12 345 678», и получим следующую конфигурацию:

config wlan security wpa akm psk set-key hex encrypt 1 01f736574aca7b081b2a43e49ffd965c 974cf6aff6491ca30e5d8ed82dfcbc71bee6f712 48 a4dca11d5539de3b182aecd667a7fed1cf28f975f1173aaa0da4b9a2a70a73b3a25b9fb03c3319233fa54661937bac6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1

Расшифруем уже известным нам ключём и получим следующий PSK HEX:

fe727aa8b64ac9b3f54c72432da14faed933ea511ecab15bbc6c52e7522f709ac5ff48363a04e75b

Теперь применим функцию PBKDF2 со следующими параметрами:

Passphrase: 12345678 
Salt: test 
Iterations: 4096 
Hash: sha1 

Результат функции для 256 бит (64 символа):

fe727aa8b64ac9b3f54c72432da14faed933ea511ecab15bbc6c52e7522f709a

Результат функции для 320 бит (40 символов):

fe727aa8b64ac9b3f54c72432da14faed933ea511ecab15bbc6c52e7522f709ac5ff48363a04e75b

Теперь ясно, что контроллер хранит результат PBKDF2 для 320 бит, но непонятно почему, когда достаточно только 256 бит. Если кто‑то знает — поделитесь в комментариях.

Пробуем использовать полученный PSK HEX для 256 бит или просто первые 64 символа из расшифрованного PSK HEX на новом контроллере, используя CLI:

wlan   
security wpa psk set-key hex 0 

или WebGUI:

c9800-WLAN-PSK.jpg

C9800 WebGUI

Тестируем, … и все работает.

Напишем небольшой скрипт, который расшифровывает в конфигурации Cisco AireOS WLC все что сможет.

В итоге можно перенести на новый контроллер практически всю конфигурацию, даже не зная реальный PSK пароль в ASCII формате. Но в тоже время можно получить ох как много интересного, если конфиграция контроллера случайно окажется в публичном доступе. Храните резервные копии конфигураци в безопасном месте. «encrypt 0» и «encrypt 1» в конфигурации это открытый текст и обфускация, но никак не шифрование.

© Habrahabr.ru