Bezpečnosť hesiel v MS SQL a možnosti útoku
Hesla k používateľským účtom pre Mixed Authentication sú v MS SQL uložené v tabuľke master.dbo.sysxlogins zahešované. Na hešovanie sa používa bližšie dlhý čas nedokumentovaná funkcia pwdencrypt(), ktorej implementácia a teda aj bezpečnosť sa líši v závislosti od verzie MS SQL.
MS SQL 2000
V MS SQL 2000 vyrába funkcia pwdencrypt() 94 znakový sha-1 heš. Táto implementácia nie je veľmi bezpečná a bol uverejnený popis útoku. Ak použijeme funkciu pwdencrypt() na zašifrovanie nejakého hesla viackrát po sebe, zistíme, že výsledky nie sú rovnaké, závisia od času, ktorý sa používa ako salt. Na základe tohto pozorovania je možné 94 znakový heš
0x010034767D5C0CFA5FDCA28C4A56085E65E882E71CB0ED2503412FD54D6119FFF04129A1D72E7C3194F7284A7F3A
Rozdeliť do štyroch skupín v pomere 6:8:40:40 znakov
0x0100 - pevná hlavička
34767D5C - salt závislý od času
0CFA5FDCA28C4A56085E65E882E71CB0ED250341 - heš rozoznávajúci veľkosť písmen
2FD54D6119FFF04129A1D72E7C3194F7284A7F3A - heš nerozoznávajúci veľkosť písmen
Z tejto implementácie je viditeľná jasná zraniteľnosť. Útok vykonáme najprv na heš nerozoznávajúci veľkosť písmen, pretože nám stačí vyskúšať menej kombinácií (bez malých písmen). Ak nájdeme týmto útokom heslo, tak na zistene jeho verzie rozoznávajúcej veľkosť písmen nám stačí vyskúšať už iba relatívne málo kombinácií. Na útok je možné použiť napríklad Cain.
MS SQL 2005
V MS SQL 2005 funkcia pwdencrypt() funguje trochu inak, neukladá sa už iba heš hesla rozoznávajúci veľkosť písmen. Tento heš je dlhý 54 znakov a dá sa predvídateľné rozdeliť do 3 skupín v pomere 6:8:40 znakov
0x0100 - pevná hlavička
34767D5C - salt závislý od času
2FD54D6119FFF04129A1D72E7C3194F7284A7F3A - heš nerozoznávajúci veľkosť písmen
Útok na heslá v MS SQL 2005 je teda oveľa časovo náročnejší a pre silné hesla prakticky neuskutočniteľný. Použiť však môžete rovnako ako pri MS SQL 2005 program Cain.
MS SQL 2008
V MS SQL 2008 má heš opäť 54 znakov. Pevná hlavička ostala, nie je však už možné jednoducho oddeliť heš a útok je preto oveľa zložitejší, je nutné použiť funkciu pwdcompare() priamo v MS SQL 2008.
Záver
Najlepším odporúčaním k bezpečnosti MS SQL je nepoužívať Mixed Authentication. Ak Mixed Authentication používať musíte, dajde si záležať na dĺžke a komplexnosti hesla, najmä ak ešte stále používate MS SQL 2000.