Архів для категорії 'Статті'

Faulty using of MD5 in web applications

22:43 13.08.2010

This is English version of my Faulty using of MD5 in web applications article.

Cryptographic algorithm MD5 (Message-Digest algorithm 5), which designed for hash creation, is widely used in programming, particularly in developing of web applications, as security tool. Besides using it for hashing of passwords, MD5 is also using for other tasks which concern security (about which will be going in this article). E.g. for generating of passwords at installation or creating of new accounts, or at creating of random strings for names of files or folders.

At using of MD5 algorithm for security purposes its faulty using is possible, which will lead to decreasing of security of web applications and to appearing of vulnerabilities in them. These defects of using of MD5 algorithm I called MD5-string attack. In 2007-2008 I found two such cases, which concern WordPress (other web applications also could have such vulnerabilities).

As I already mentioned in 2008 - output alphabet of MD5 algorithm has 16 chars. So at using of e.g. function md5 (in PHP), at its output you’ll receive a string which consists of 16 chars of md5-alphabet. And at using of short string, its reliability will come out small, if to use this string for safety mechanisms (because it can be picked up relatively easy).

The number of possible combinations depending on length of md5-string:

16^1 = 16
16^2 = 256
16^3 = 4096
16^4 = 65536
16^5 = 1048576
16^6 = 16777216
16^7 = 268435456

Only at length of md5-string in 7 chars, its reliability will be acceptable (at using for safety mechanisms). If length of md5-string is less then 7 chars, then it can be picked up relatively quickly.

Examples of MD5-string attacks.

1. Using of md5-strings for creating of passwords.

As I wrote regarding Weak Password vulnerability in WordPress, in this engine (in versions WordPress 2.0.x and potentially up to 2.3.3 inclusive), the weak password was set at installation.

It consists from 6 chars of md5-alphabet. And because we have at output of function md5 the alphabet in 16 chars, then this password has 16777216 of possible combinations. And with bruteforce it can be picked up relatively quickly.

2. Using of md5-strings as path to important resources.

As I wrote regarding Information Leakage and Full path disclosure vulnerabilities in WordPress, in plugin WordPress Database Backup the function md5 is using for creating of the folder for backups.

Name of the folder looks like “backup-xxxxx” - it’s “backup-” and 5 chars of md5-alphabet. And it’s just 1048576 of possible combinations. Which can be picked up relatively quickly.

So at using of MD5 algorithm for safety mechanisms in web applications it’s needed to consider its alphabet. Because in case when short md5-string is using for creating of password (as in WP), or for name of the folder with backups of DB (as in plugin WordPress Database Backup), then it can be bruteforced relatively quickly.

P.S.

As showed my researches of work of different hash-functions (in addition to md5), in result of work of such hash-functions as gost, lm, md4, mysql323, mysql411, ntlm, ripemd128, ripemd160, ripemd256, ripemd320, sha1, sha224, sha256, sha384, sha512, tiger128_3, tiger128_4, tiger160_3, tiger160_4, tiger192_3, tiger192_4 and whirlpool the string results, which also is hexadecimal number (as in md5). So this string also has alphabet from 16 chars. And so all warnings regarding the length of string in function md5 (at using this string for safety mechanisms) in equal degree concern to these functions.

Неякісне використання MD5 у веб додатках

22:44 10.08.2010

Алгоритм шифрування MD5 (Message-Digest algorithm 5), що призначений для створення хешів, активно використовується в програмуванні, зокрема при розробці веб додатків, в якості секюріті інструмента. Окрім його використання для хешування паролів, також MD5 використовується для інших задач, що стосуються безпеки (про які йтиметься у даній статті). Наприклад, для генерації паролів при інсталяції чи створенні нових акаунтів, або при створенні випадкових рядків для імен файлів чи папок.

При використанні MD5 алгоритму в секюріті цілях можливе неякісне його використання, що призведе по погіршення безпеки веб додатків і до появи уразливостей в них. Дані недоліки використання MD5 алгоритму я назвав MD5-string атакою. В 2007-2008 роках я знайшов два таких випадки, що стосуються WordPress (інші веб додатки також можуть мати подібні уразливості).

Як я вже зазначав в 2008 році - вихідний алфавіт алгоритму MD5 має 16 символів. Тому при використанні, наприклад, функції md5 (в PHP), на її виході ви отримаєте рядок, що складається з 16 символів md5-алфавіту. І при використанні короткого рядка, його надійність вийде невилика, якщо використовувати цей рядок для захисних механізмів (тому що його можна буде відносно легко підібрати).

Кількість можливих комбінацій в залежності від довжини md5-рядка:

16^1 = 16
16^2 = 256
16^3 = 4096
16^4 = 65536
16^5 = 1048576
16^6 = 16777216
16^7 = 268435456

Тільки при довжині md5-рядка в 7 символів, його надійність буде прийнятною (при використанні для захисних механізмів). Якщо довжина md5-рядка менше 7 символів, то її можна відносно швидко підібрати.

Приклади MD5-string атак.

1. Використання md5-рядків для створення паролів.

Як я писав стосовно Weak Password уразливості в WordPress, в даному движку (в версіях WordPress 2.0.x і потенційно до 2.3.3 включно), при інсталяції задається слабкий пароль.

Він складається з 6 символів md5-алфавіту. А так як на виході функції md5 маємо алфавіт в 16 символів, то даний пароль має 16777216 можливих комбінацій. І брутфорсом його можна відносно швидко підібрати.

2. Використання md5-рядків в якості шляху до важливих ресурсів.

Як я писав стосовно Information Leakage та Full path disclosure уразливостей в WordPress, в плагіні WordPress Database Backup функція md5 використовується для створення папки для бекапів.

Ім’я папки має вигляд “backup-xxxxx” - це “backup-” та 5 символів md5-алфавіту. І це всього 1048576 можливих комбінацій. Що можна відносно швидко підібрати.

Так що при використанні MD5 алгоритму для захисних механізмів у веб додатках потрібно враховувати його алфавіт. Тому що у випадку коли використовується короткий md5-рядок для створення паролю (як у WP), або для назви папки з бекапами БД (як у плагіні WordPress Database Backup), то це можна відносно швидко забрутфорсити.

P.S.

Як показали мої дослідження роботи різних хеш-функцій (на додаток до md5), в результаті роботи таких хеш-функцій як gost, lm, md4, mysql323, mysql411, ntlm, ripemd128, ripemd160, ripemd256, ripemd320, sha1, sha224, sha256, sha384, sha512, tiger128_3, tiger128_4, tiger160_3, tiger160_4, tiger192_3, tiger192_4 та whirlpool видається рядок, що також є шістнадцятирічним числом (як і в md5). Тому даний рядок також має алфавіт з 16 символів. І тому всі застереження щодо довжини рядка в функції md5 (при використанні даного рядка для захисних механізмів) в рівній мірі відносяться до даних функцій.

Небезпека для дірявого сайта - Black SEO

22:43 07.08.2010

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

Іншою небезпекою для дірявого сайта є Black SEO. В статті SEO при дірявому сайті, як допомога зловмисникам я розповідав про одну сторону даної проблеми. Що вкладаючи в SEO при ігноруванні проблем безпеки власного сайта (не вкладаючи в безпеку), власник сайта лише допомагає зловмисникам. А зараз розповім про іншу сторону даної проблеми.

При дірявому сайті black SEO-шніки можуть використати ваш сайт для власник потреб. Тобто вони почнуть заробляти на вашому сайті. І при цьому вищезгаданий аспект вкладання в SEO також дасться в знаки - якщо ви добре розкрутите свій дірявий сайт (піднімите PR і тИЦ), то black SEO від цього буде тільки краще :-) , бо вони зможуть одразу почати більше заробляти на вашому сайті (ніж на менш розкрученому). З цього випливає, що розкручені сайти (з високими PR і тИЦ) є в більшій мірі потенційними цілями black SEO-шніків, ніж не розкручені сайти (але використати для заробітку можна будь-який сайт, тому всім власникам веб сайтів слід враховувати фактор black SEO і завжди слідкувати за безпекою власних сайтів).

Якщо ваш сайт взломають black SEO-шніки, то вони почнуть продавати лінки на ньому, щоб заробляти на цьому гроші. І при цьому гроші за продаж лінок підуть не вам, а зловмисникам (тобто ваш сайт буде приносити прибуток іншим людям). І якщо на одну маленьку лінку ви можете не звернути увагу, то на численні лінки на сайті ви маєте звернути увагу - якщо одна лінка може не сильно заважати, то якщо увесь сайт буде переповнений продажними лінками, то це вже буде заважати (не кажучи вже, що це зіпсує зовнішній вигляд сайта). До того ж black SEO можуть розмістити на сайті лінки на небажані ресурси, наприклад, на порно сайти, що може погіршити імідж сайта (а то і призвести до скандалу чи інших проблем у власника сайту). Зокрема адмінам державних сайтів потрібно не допускати розміщення лінок на порно сайти, або розміщення порнографії на сайті чи на великому екрані, що керується з сайта, як це мало місце в Індонезії.

Однією з тенденцій в діяльності black SEO є те, що вони почали використовувати веб брокерів (таких як SAPE) для розміщення лінок на сайті. Як це мало місце на сайтах www.peremoga.gov.ua та bestmaster.com.ua. Таким чином вони намагаються закосити під легальне розміщення лінок (неначе це адмін сам розміщує лінки) і при цьому автоматизувати даний процес.

Якщо раніше black SEO вручну розміщували лінки, або використовували власні скрипти, то зараз вони почали активно працювати через брокерів. В цьому році я виявив вже два випадки використання брокерів для блексео діяльності.

Книга “Визначення злого наміру”

20:26 06.08.2010

В своєму записі Detecting Malice eBook, RSnake розповів про свою нову книгу. В минулому році він випустив книгу “Визначення злого наміру”, яка була випущена як e-book (тобто вона доступна у вигляді електронної книги).

В книзі розповідається про те, як визначити злі наміри і дії відвідувачів на сайті (та як убезпечити свій сайт). В ній Роберт Хенсен aka RSnake ділиться своїм досвідом в забезпеченні безпеки веб сайтів.

Використання BeEF і PHProxy для MITM атак

22:43 05.08.2010

Продовжуючи розпочату традицію, після попереднього відео про сліпу SQL ін’єкцію, пропоную новий відео секюріті мануал. Цього разу відео про використання BeEF і PHProxy для MITM атак. Рекомендую подивитися всім хто цікавиться цією темою.

BeEF and PHProxy for web MITM with content modification

В даному відео ролику розповідається про інструменти BeEF і PHProxy. Та домонструється процес їх використання для проведення MITM-атак для підробки сайтів (що може бути використано, наприклад, для фішинга).

Рекомендую подивитися дане відео для розуміння векторів атак з використанням BeEF і PHProxy.

Цікаве чтиво на тему web security

19:06 04.08.2010

Продовжуючи традицію, пропоную вашій увазі цікаві секюріті статті. Щоб ви поповнювали свої знання з веб безпеки.

Добірка цікавого чтива на тему безпеки, в тому числі web security (статті з Вікіпедії):

Сліпа SQL ін’єкція

22:49 27.07.2010

Продовжуючи розпочату традицію, після попереднього відео про десктопний фішинг, пропоную новий відео секюріті мануал. Цього разу відео про сліпу SQL ін’єкцію. Рекомендую подивитися всім хто цікавиться цією темою.

A textbook example of Blind SQL Injection

В даному відео ролику на прикладі одного сайта розповідається про сліпі SQL Injection уразливості та методи їх використання. Рекомендую подивитися дане відео для розуміння векторів атак з використанням сліпих SQL Injection.

Цікаве чтиво на тему web security

22:41 23.07.2010

Продовжуючи традицію, пропоную вашій увазі цікаві секюріті статті. Щоб ви поповнювали свої знання з веб безпеки.

Добірка цікавого чтива на тему безпеки, в тому числі web security (статті з Вікіпедії):

Веб браузери: приватність та безпека

22:41 22.07.2010

В своїй презентації Web browser privacy and security, Ben Rothke розповідає про безпеку веб браузерів. Про стан приватності та безпеки в сучасних браузерах.

Визначення IP автора е-майл листа

22:48 20.07.2010

Як можна визначити IP автора е-майл листа? При цьому без використання будь-яких спеціальних методів, таких як зовнішні ресурси (зображення та інші) в html-листі, що можна використати лише для визначення IP отримувача листа. Особливо коли використання даних методів неможливе або недоцільне (зокрема коли потрібно визначити саме IP відправника листа). Для цього можна використати спеціальні серверні заголовки.

Визначити IP автора е-майл листа можна через заголовок X-Originating-IP або X-Sender-IP. Вперше я отримав лист з заголовком X-Originating-IP ще в 2004 році. Так що практика використання даних заголовків існує вже давно.

Формат заголовка X-Originating-IP може бути наступним:

1. Зовнішній IP (коли комп’ютер безпосередньо підключений до Інтернет):

X-Originating-IP: [xxx.xxx.xxx.xxx]

2. Внутрішній та зовнішній IP (коли комп’ютер підключений до Інтернет через інший комп’ютер (по LAN), що виступає в якості проксі):

X-Originating-IP: xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx via proxy [xxx.xxx.xxx.xxx]

Даний заголовок призводить до витоку як зовнішнього, так і внутрішного IP (тобто IP інтернет-шлюза та IP персонального комп’ютера автора листа).

Формат заголовка X-Sender-IP може бути наступним:

X-Sender-IP: [xxx.xxx.xxx.xxx]

Як показало моє дослідження, один з даних заголовків встановлюється при відправці пошти через наступні сервери: mail.ru (inbox.ru, bk.ru і list.ru), hotmail.com, gmail.com (в тому числі підключений до домена), ukr.net, inet.ua, bigmir.net та i.ua. А також поштові сервери IceWarp Web Mail та Visual Online SMTP gateway і деякі поштові скрипти, що використовуються на деяких сайтах.

Деякі поштові сервери (такі як hotmail.com) вставляють даний заголовок в кожний лист, а деякі (такі як gmail.com) лише в деяких випадках. В моїх дослідженнях Gmail жодного разу не вставляв цей заголовок, хоча я багато разів отримував листи з ящиків на Gmail з даним заголовком.

Так що сховати свій IP при використанні даних поштових серверів не вийде (особливо якщо вони вставляють дані заголовки в усіх листах). Лише використання проксі (якщо це можливо для конкретного сервера) може допомогти. З іншої сторони вищезгадані поштові сервери призводять до витоку приватних даних, що не може сподобатися шанувальникам приватності. І вони повинні врахувати цей аспект при використанні даних серверів.