Небезопасное хранение паролей в IBM WebSphere

в 9:13, , рубрики: java, WebSphere, websphere application server, информационная безопасность, криптография, метки:

По работе часто сталкиваюсь с продуктами IBM: WebSphere Application Server (WAS) и другими на его основе. И как и все иногда забываю пароли, в особенности это касается тестовых систем или тех, которым не уделяешь должного внимания.

В очередной раз не вспомнив пароля, решил посмотреть, а как его хранит наш сервер приложений. Проанализировав несколько файлов конфигурации, таких как security.xml, wimconfig.xml и resources.xml обнаружил все пароли когда-либо введённые в консоли администрирования, в том числе и пароль главного админа. Хранились они во вполне безобидном на первый взгляд виде.

serverPassword="{xor}KD4sPjsyNjE="


Xor, конечно, настораживает, но мы ведь не знаем ключа и соли, которую могли бы использовать (но не использовали). Помня со студенческих лет свойство xor, что:

если a ⊕ b = c, то a ⊕ c = b

… нашёл ключ для той системы, где пароль известен:

283E2C3E3B323631 ⊕ 77617361646D696E = 5F(ASCII код _)

Конечно же он всегда одинаков, то есть пароль хранится фактически отрытым текстом, xor на _ не скрывает его даже от пользователей не понимающих ничего в шифровании. Напомню, что так хранятся все пароли: для хранилищ ключей, для доступа к Active Directory, для доступа к базе, которая ввиду специфики использования WAS зачастую хранит информацию, доступ к которой должен быть максимально ограничен. Любой, получивший доступ к файлам конфигурации, становится автоматически администратором сервера приложений и получает пароли от баз данных и других ресурсов.

Продукты линейки WebSphere достаточно дороги и недоступны малым и даже средним компаниям. Например, на сегодняшний день лицензия WAS для среднего 2-х сокетного сервера x86 стоит порядка $200 000, WebSphere Portal в несколько раз дороже. Обычно его не ставят на x86, для RISC лицензия стоит ещё дороже. В основном их используют в госорганах и банковской сфере, а в таких организация требования к безопастности особые, например, разделение ролей (администратор ОС, БД, сервера приложений). В такой ситуации это технически нереализуемо.

Написал небольшой скрипт, чтоб «вспоминать» пароли на лету.

import base64

char = ''

input = raw_input("Enter: ")

data = base64.b64decode(input)

for character in data:

    hex_char = hex(int(character.encode('hex'), 16) ^ int('_'.encode('hex'), 16))[2:]

    char = char + hex_char.decode('hex')

print 'Password:', char

Алгоритм неизменен во всех версия WAS, включая самую последнюю 8.5.5 и во всех продуктах на его базе: Portal Server, BPM, ESB и другие. Надеюсь, в версии 8.6 или хотя бы 9 пароли будут шифроваться AES.

Автор: mirwide

Источник

Поделиться

* - обязательные к заполнению поля