Tuesday, March 06, 2007

Где пароли?

Самолёт без крыльев

Я всегда говорил, что спроектировать OLTP-систему без bind-переменных - это всё равно, что построить самолёт без крыльев. В том смысле, что построившие самолёт без крыльев инженеры знают о самолётостроении столько же, сколько такие разработчики знают о СУБД Oracle.

Конечно, можно приклеить крылья. К сожалению, нельзя точно так же "приклеить" дизайн. Летать, скорее всего, всё равно ничего не будет.

Вы уже поняли - я не буду ожидать от такой системы ничего хорошего.

Можно не шифровать?

Среди прочего, в ссылке чуть выше, я упоминаю, что они использовали фиксированный ключ DES для шифрования пароля, который можно легко достать просто сделав rewrap пакета.

Оказалось, что даже такое шифрование скорее выглядит как пустая потеря времени.

Последний раз я видел нечто подобное, когда последний раз был в Екатеринбурге. Разработчики (или я должен называть их кодерами?) забыли использовать bind-переменные в функциях аутентификации. В итоге, все имена пользователей с соответсвующими паролями были просто видны в v$sql.

Пришло время для очередной вариации. Заглянув в v$sql, я обнаружил там следующее:

select CHR(98)||CHR(117)||CHR(108)||CHR(107)||CHR(105)||
CHR(110)||CHR(97) from dual
select CHR(112)||CHR(111)||CHR(122)||CHR(100)||CHR(110)||
CHR(101)||CHR(118) from dual
select CHR(74)||CHR(117)||CHR(107)||CHR(111)||CHR(118)||
CHR(97) from dual

и так далее... Угадайте что это. Это пароли.

Не выглядят ли все попытки обеспечить безопасность на фоне таких систем как бронирование парадной двери, в то время как с чёрного хода к вам уже ломятся мародёры?

5 comments:

  1. Тем не менее тебе же нужен доступ к этому самому v$sql, восстановив с дампа тут уж ничего не увидишь, но в любом случае они не усложнили взлом паролей, а просто усложнили процедуру аутентификации. Это то, что называется code obfuscation, некоторые пользуются. Но в данном случае совершенно безграмотно. Правда я совершенно не понимаю, зачем надо делать выборку "select 'пароль' from dual"

    ReplyDelete
  2. exo,

    эта же информация про пароли может быть получена и из v$open_cursor, например...

    Ограничивать доступ к этим вьюшкам исключительно из целей безопасности - на мой взгляд, не более чем security through obscurity.

    Как показывает практика, понимание вовсе не обязательное условия для того, чтобы это кто-то реализовал :)

    ReplyDelete
  3. Ну... как говортся, нет предела человеческой глупости ©не помню кто сказал

    ReplyDelete
  4. Я плакаль...

    bulkina
    pozdnev
    Jukova

    case-sensitive? :)

    ReplyDelete
  5. Alex,

    "case-sensitive? :)"

    Да, регистр остаётся как есть.

    ReplyDelete