Зашто мало соли може бити сјајно за ваше лозинке (али не и бибер!)

Кратка напомена - овај чланак говори о теорији како провалити хеширане лозинке. Разумевање начина на који цибер криминалци извршавају нападе изузетно је важно за разумевање начина заштите система од таквих врста напада.

Али покушај хаковања система који није у вашем поседу вероватно је незаконит у вашој надлежности (плус хаковање сопствених система може [и често] крши било какву гаранцију за тај производ).

Овај чланак претпоставља одређени ниво знања о функцијама хеширања и основним техникама разбијања лозинки - ако не разумете те теме, погледајте ове чланке.

Дакле, добили сте сет хешираних лозинки. Грубо форсирање хеширања трајаће јако дуго. Како можете убрзати овај процес?

Чекај, мислио сам да су хасх функције једносмерне! Како се разбијају хеш функције?

Нажалост, функције хеширања које се користе за хеширање лозинки нису увек толико сигурне као генерално одобрене хеш функције. На пример, функција хеширања која се користи за старе Виндовс уређаје позната је под називом ЛМ Хасх, која је толико слаба да може да се разбије за неколико секунди.

Такође, не требате обрнуто дизајнирати хеш. Уместо тога, можете користити унапред израчунати скуп лозинки за отворени текст и одговарајућу хеш вредност (,). Ово хакеру говори која вредност отвореног текста даје одређено хеширање.

Помоћу овога ћете знати која вредност отвореног текста даје хеш који тражите. Када унесете лозинку, рачунар ће хеширати ову вредност и упоредити је са сачуваном вредношћу (где ће се подударати) и моћи ћете да се аутентификујете. Стога заправо не треба да погађате нечију лозинку, већ само вредност која ће створити исти хеш.

Ово се назива сударом. У основи, како хеш може да узима податке било које дужине или садржаја, постоје неограничене могућности за податке који се могу хеширати.

Будући да хеш претвара овај текст у садржај фиксне дужине (на пример, 32 знака), постоји коначан број комбинација хеша. Веома је велики број могућности, али не и бесконачан.

На крају ће два различита скупа података дати исту хеш вредност.

Претходно рачунане табеле су веома корисне у постизању овога, јер штеде значајно време и рачунарску снагу. Коришћење унапред израчунатог скупа хеширања за тражење хеша лозинке назива се „напад на табелу претраживања“. Ове табеле системски администратори користе за тестирање снаге лозинки својих корисника и често су доступне на мрежи или за куповину. Међутим, могу их користити и подли хакери.

Ако је лозинка несигурна (рецимо да неко користи лозинку дугу 5 знакова), може се релативно лако разбити. На пример, лозинка од 5 малих слова може се користити само за креирање 11.881.376 различитих лозинки (26 ^ 5).

За хеш ове лозинке, чак и ако је хеш криптографски сигуран (користи одговарајући алгоритам), и даље би било врло лако израчунати све могуће лозинке и њихове одговарајуће хешеве. Табеле за претрагу врло добро функционишу за ове врсте хеширања лозинки.

Међутим, како се лозинке повећавају, складиште (а самим тим и трошкови складиштења) требају вам све могуће лозинке и одговарајуће хеширање расте експоненцијално.

На пример, ако је лозинка коју покушавате да провалите дугачка 8 знакова, али користи бројеве (10 цифара), мала слова (26), велика слова (26) и неке посебне знакове (10), број могућих лозинки скочи на 722,204,136,308,736 - што је МНОГО простора за складиштење, када схватите да је сваки хеширан функцијом хеширања попут СХА-256.

Раинбов табеле решавају овај проблем нудећи смањене потребе за складиштењем, али им треба више времена за израчунавање потенцијалних лозинки. На најосновнијем нивоу, ово су у основи унапред израчунате табеле претраживања које вам омогућавају да брзо пронађете отворени текст који одговара хешу који имате. Ако су хеш и отворени текст садржани у табели коју имате - слично нападима на речник - само тражите да ли је лозинка садржана у табели коју имате. Ако није, нећете моћи да разбијете лозинку. На мрежи их можете пронаћи бесплатно или за куповину.

У овом чланку потражите водич за стварање сопствених дугиних табела.

И даље ме занима. Како функционишу дугини столови?

Ако желите прескочити детаљно објашњење како то функционира, слободно се помакните до одељка „Како се заштитити од ових напада“.

Да бисте се спасили од хеширања и чувања сваког могућег отвореног текста док не пронађете хеш који вам је потребан (попут табеле за претрагу), хеширате сваки отворени текст и резултат смештате у табелу да бисте их касније тражили, без потребе да их поново генеришете. Ово траје дуже, али штеди меморију.

Да бисте генерисали табелу, креирате 'ланце' хеширања и отвореног текста користећи функцију хеширања и редукцију. Функција редукције само креира отворени текст из хеша (не врши инверзно пројектовање хеша, већ ствара другачији отворени текст из хеша). То је такође једносмерна функција.

Дакле, да бисте израчунали табелу, користите један од својих хешева, х1, у својој редукционој функцији, Р (), да бисте креирали отворени текст п1.

Р (х1) = п1.

Затим користите хеш функцију Х () са п1 да бисте креирали ново хеширање.

Х (п1) = х2.

Користећи наш пример од раније:

Ако је скуп отвореног текста [абцдефгхијклмнопкрстуввкиз] {5} (тражимо дугину табелу свих лозинки састављених од малих слова дужине 5) и користимо МД5 (алгоритам хеширања):

Хасх може бити аб56б4д92б40713ацц5аф89985д4б786 (х1). Сада примењујемо функцију смањења, која би могла бити једноставна узимајући последњих 5 слова у хешу.

Р (аб56б4д92б40713ацц5аф89985д4б786) = цафдб

Х (цафдб) = 81а516едабф924цд0ф727д329е855б1ф

Зашто се називају дугиним столовима?

Свака колона користи другачију функцију смањења. Дакле, да је свака колона обојена, била би то врло дугачка, мршава дуга.  

Коришћење различитих функција смањења смањује број ланчаних спајања (судара) који су се често дешавали са хеш-ланцима, претходником дугиних столова. То у суштини значи да ако наставите да користите исту функцију смањења, постоји шанса да ћете завршити са два различита ланца која се конвергирају у исти отворени текст. Коришћење различитих функција смањења смањује шансу да се то догоди, али то није немогуће.

Супер, како се ствара ланац?

Да бисте креирали ланац, користите своју функцију смањења и функцију хеширања (у једном смеру) да бисте креирали 'ланац' хеша и отвореног текста. Сваки од ових 'ланаца' наставио би се к корака, а када се ланац заврши, чуваће само први отворени текст и последње хеш у ланцу.

Дакле, узорак ланца изгледа овако:

п1 -> х1 = Х (п1) -> Р1 (х1) = п2 -> Х (п2) = х2 -> Р2 (х2) = п3 -> Х (п3) = х3

Свака редукциона функција је различита (представљена Р1, Р2, Р3, итд.) Пример табеле ланаца (сваки ред је ланац дужине 5) изгледа овако. Имајте на уму да се ово попуњава лажним подацима само да би вам дали пример - функција хеширања није хеш функција коју бисте користили за хеширање лозинки.

Функције редукције, Р1 и Р2 су дефинисане на следећи начин - Р1 узима прве 3 цифре хеша, а Р2 последња 2 слова хеша:

п1 -> х1 = Х (п1) -> Р1 (х1) = п2 -> Х (п2) = х2 -> Р2 (х2) = п3 -> Х (п3) = х3

2 -—> абду2934 -—> 293 -—> 83кдниф8 -—> иф -—> ике83јд3

15 -—> дкс2не94 -—> 294 -—> лд932нд9 -—> лд -—> лдие938д

20 -—> лд93мд8д -—> 938 -—> лккед93к -—> лк -—> 93мдкг8д

У дугиној табели чувају се само прва почетна и крајња тачка ради уштеде на складишту, на пример:

почетна тачка (отворени текст) крајња тачка, након к корака кроз ланац (хеш)

п1 -—> х1к

п2 -—> х2к

п3 -—> х3к

Онда када имате хеш (х) где не знате отворени текст (?), Упоредићете га са ланцима.

  1. Прво ћете проверити да ли се хеш налази на листи завршних хеширања (х1к, х2к итд.). Ако је то случај, можете прећи на корак 3.
  2. Ако не, можете смањити хеш на различити отворени текст (Р1), а затим хеширати тај отворени текст (користећи хеш функцију и следећу функцију редукције горе) и упоредити га са листом завршних хеширања (х1к, х2к, х3к итд.). Када се подудара са једним од последњих хеширања, тај ланац ће вероватно садржати оригинални хеш.
  3. Да бисте пронашли оригинални хеш у ланцу, узмите почетни отворени текст тог ланца (па ако се подудара са х1к, почните са п1) и примените функције хеширања и редукције да бисте се кретали дуж ланца док не дођете до познатог хеша и одговарајућег отвореног текста. На овај начин се можете кретати кроз хешеве у ланцу, а да вам не заузимају простор за складиштење на вашој машини.

Иако не можете бити сигурни да ће ланци садржати хеш који вам је потребан, што сте више ланаца створили (или референцирате), то ћете бити сигурнији. Нажалост, сваки ланац генерише дуго, а повећање броја ланаца повећава време које вам треба.

Како се браните од ове врсте напада?

Прво, слојевита одбрана свих система. Ако можете спречити компромитовање система другим методама (тако да нападач не може добити копију ваших распршених лозинки), нападач их неће моћи разбити.

Можете да користите и сољење, које лозинки додаје случајну вредност пре него што је шифрише. То значи да унапред израчуната вредност коју сте пронашли (која се подудара са хешем) неће радити. Шифровани текст се не заснива само на нешифрираном тексту. Будући да се сол разликује за сваку лозинку, свака мора да се крекује појединачно.

Сољење је сада укључено у већину главних типова хеширања као опција. Иако Виндовс тренутно не користи сољење, они могу да шифрују сачуване хешеве ако користите алатку „СИСКЕИ“.

Такође можете да користите „рунде“ или више пута хеширање лозинке. Коришћење рунди (нарочито ако је број рунди насумично одабран за сваког корисника) отежава посао хакера. Ово је најефикасније у комбинацији са сољењем.

На несрећу, хакер који има хеширане лозинке такође ће имати приступ броју коришћених рунди и употребљене соли (јер да би добили тај списак вероватно су угрожени. Сол и број коришћених рунди чувају се са лозинком хасх, што значи да ако нападач има један, има и други. Међутим, неће моћи да користе унапред израчунате дугине табеле доступне на мрежи и мораће да израчунају своје табеле (што изузетно дуго траје).

Још један метод дизајниран да повећа потешкоће при пробијању лозинке је употреба папра. Бибер је сличан соли, али иако сол није тајна (чува се са хешираном лозинком), бибер се чува одвојено (на пример, у конфигурационој датотеци) како би спречио хакер да му приступи. То значи да је паприка тајна, а њена ефикасност зависи од тога.

Бибер треба да се разликује за сваку апликацију за коју се користи и треба да буде довољно дугачак да буде сигуран. Национални институт за стандарде и технологију препоручује најмање 112 бита.

Иако употреба бибера у неким случајевима може бити ефикасна, постоје неке недостатке. Прво, ниједан тренутни алгоритам не подржава паприку, што значи да је то практично немогуће применити у опсегу. Односно, осим ако не креирате сопствене алгоритме. Слушајте Бруцеа Сцхнеиера. Не ради то.

За дужи чланак о проблемима са паприком, погледајте ову тему.

На крају, користите јаке (најмање 12 знакова), сложене лозинке и примените јаке политике лозинки на свим системима. То може укључивати присиљавање корисника да креирају јаке лозинке, редовно тестирање њихове снаге, коришћење менаџера лозинки на нивоу предузећа, наметање употребе 2ФА итд.

Збуњени шта чини снажну лозинку?

Чини се да је заиста лако бити хакован. Да ли бих требао бити забринут?

О хаковању је најважније запамтити да нико не жели да ради више посла него што мора. На пример, израчунавање дугиних табела је велики посао. Ако постоји лакши начин да добијете лозинку, вероватно ће то нечасни глумац прво покушати (попут пецања!).

То значи да је омогућавање најбољих пракси у сајбер безбедности вероватно најлакши начин за спречавање хаковања. У ствари, Мицрософт је недавно известио да ће само омогућавање 2ФА блокирати 99,9% аутоматизованих напада.

Срећно хаковање!

Додатно читање:

Више детаља о хеш ланцима

Још једно објашњење дугиних столова

Листа дугиних столова на мрежи