Особливості використання crypt

22:48 18.09.2010

В своїй статті Використання захисних механізмів для блокування доступу до сайта я розповів про некоректне використання захисних механізмів, що дозволяє атакувати користувачів та адмінів сайтів. У даній статті я роповім про інший приклад неякісного використання захисних механізмів, що призводить до уразливостей у веб додатках.

При використанні функції crypt, зокрема для створення хешів паролів, можуть виникнути секюріті проблеми. Якщо в статті Неякісне використання MD5 у веб додатках я розповів про обрізання рядків, що використовуються для секюріті потреб, самими розробниками, то в даному разі мова йде про обрізання рядків (зокрема паролів) самим алгоритмом. Що потрібно враховувати всім веб розробникам, які використовують crypt.

Функція crypt (при використанні стандартного DES алгоритму, що є по замовчуванню) урізає паролі до 8 символів. При створенні хеша функцією crypt враховуюється лише перші 8 символів паролю. Це задокументований функціонал crypt.

Але при цьому дана особливість не є достатньо відомою. І існує велика кількість додатків, зокрема на Perl та PHP, які використовують crypt (з DES). Я сам використовую Perl з січня 2001 року, але лише в 2010 році дізнався про цю особливість crypt. В літературі, яку я читав, ні слова про обмеження crypt не було сказано, і в основному лише рекомендувалося її використовувати для хешування паролів (тобто як надійний метод хешування). В своєму Посібнику з безпеки, написаному в 2005, я також порадив використовувати crypt, не зазначивши про дану особливість (але в цьому році я додав інформацію про обмеження crypt).

В Інтернеті можна знайти чимало статтей, де рекомендується використовувати функцію crypt, але при цьому рідко коли згадується про її обмеження. А в тих довідниках де про це згадується, це робиться без достатнього акцентування, тому читачі можуть на це просто не звернути уваги. Зокрема в perldoc лише в одному реченні згадується про цю особливість (чого недостатньо), зате в керівництві по PHP на це звертається більше уваги (і радиться використовувати інші алгоритми замість DES, чого цілком достатньо для привернення уваги розробників).

Тому хеш пароля довжиною більше 8 символів буде таким самим, що і хеш пароля в 8 символів (при ідентичних перших 8 символах). Що зпрощує підбір паролів і може бути використаним для атаки на Perl та PHP додатки, які використовують crypt для перевірки хешів (зокрема, хешів паролів), або при брутфорсі викрадених хешів. А також на папки на серверах з Apache, що захищені htpasswd.

Пароль в 8 символів може бути в деяких випадках достатнім, а в інших випадках - недостатнім, до того ж нападник може проводити атаку тривалий час і підібрати навіть 8 символьний пароль. А якщо використовується пароль (навіть достатньо довгий), в якому перші 8 символів легко вгадуємі і лише наступні символи не є легко вгадуємими (наприклад, “password_randomchars”), то він буде легко підібраний, тому що при створенні хеша враховуються лише перші 8 символів (”password”).

Дана ситуація має місце в Perl та PHP. В інших мовах програмування, що підтримують стандартний DES алгоритм, ситуація подібна. А також в Apache htpasswd.exe, якщо він використовує DES, при використанні на сайті htpasswd-функціонала Apache (зокрема в версії для Linux та Unix систем, бо на Windows використовується MD5 алгоритм, але є спеціальна версія htpasswd.exe, що використовує DES алгоритм). Тому при використанні даних інструментів, потрібно замість DES використоувати інший алгоритм.


Одна відповідь на “Особливості використання crypt”

  1. MustLive каже:

    You can read this article on English in The Web Security Mailing List: Nuances of using of crypt.

Leave a Reply

You must be logged in to post a comment.