Имам много голямото желание да захвана един космат проект - GSM демодулатор/декодер/протоколен анализатор ориентиран към пасивно слухтене на трафика (hashkill трошенето на криптографията може да го прави, това го докарах отдавна). Всъщност, проблемът не е да строшиш криптографията, тя е ясна. Далеч по-големия проблем идва от протоколните особености. Има ужасно много да се желае в тази насока, airprobe е просто proof of concept, не е достатъчно мощен и не е достатъчно приятен за работа.
Така както ги виждам аз нещата (това след сериозно време за research и премисляне, включително под въздействието на наркотици), архитектурата би изглеждала приблизително така:
* Input слой, занимаващ се с четенето на входни I/Q данни от едно или повече устройства - това могат да бъдат RTLSDR пишки, hackrf (сериозно мисля да си поръчам в близките месеци една бройка, специално за целта 12-те MHz честотна лента е перфектна) или USRP. Няма никаква магия с това, с librtlsdr нещата изпробвано са доста елементарни, а и всичките са USB устройства и вярвам че управлението им ще е сходно.
Тук има един доста любопитен момент - дали комбинирането на няколко устройства с цел увеличаването на честотната лента е толкова прост момент. Има два случая - BTS дето hop-ва няколко честоти и слухтенето на два отделни канала, които нямат общо помежду си (освен че на единия ARFCN може да се установи контролен или трафик канал опериращ на честотата на другия). В случая с hop-ването опасявам се нещата няма да са толкова прости и да се решат чисто софтуерно - осцилаторите на rtlsdr тунерчетата трябва да се lock-нат към общ източник, а това изисква хардуерни умения извън моите възможности. С hackrf като гледам е по-лесно, имат си вход за референтен източник и из ebay е пълно с качествени източници на свестни цени, това дори сам мога да си го направя. В случая със ползването им за слухтене на различни независими канали, не мисля че ще има проблем.
* demod слой - I/Q стойностите минават през GMSK демодулатор и viterbi декодер. Това е вероятно най-изчислително тежката задача в цялата работа, заради трансформациите свързани с тригонометрия и floating point гадости. Допълнително, това на мен ми е най-неясната част. В момента се опитвам да смеля теорията зад цялата работа, но съм много назад - засега изцяло софтуерно съм реализирал супер прости неща - демодулиране на аналогов честотно и амплитудно модулиран сигнал, единствения ми сблъсък с цифров модулиран сигнал е с възможно най-тъпата модулация, OOK, играя си да разгадая какво изпраща дистанционното за гаража с променлив успех. Тук имам доста неща да смилам просто защото никога не съм имал вземане-даване и ми изглеждат меко казано странни. На теория, GMSK модулацията не е толкова сложно нещо и мога да схвана идеята, обаче съм сигурен че на практика нещата ще се окажат много по-дебели. Голямо предимство тук е кодовата база на airprobe - доста неща ще мога да потвърждавам/отхвърлям оттам.
Един допълнителен въпрос, отворен за research е дали би имало файда от демодулиране върху видеокарти. В момента си правя експерименти с демодулиране на FM аналогов сигнал върху видеокарта и имам много сериозен проблем с латентността при трансферите на памет. Кодът колкото и да се оптимизира, има чисто физически ограничения при трансферите. Може би ако работим с огромен dataset (десетки мегахерци sample-нати) и правим и други неща освен демодулацията (например и lowpass филтрирането) тогава ще има повече смисъл, не знам засега.
viterbi кодирането странно защо им се вижда нещо супер сложно на DSP хората, това е доста проста математика и специално на мен на фона на GMSK демодването, това ми изглежда като детска играчка, доста проста за софтуерна реализация.
* Протоколен слой - "layer 2" при GSM е относително прост, дисектор за wireshark има написан отдавна, всичко е документирано, допълнително ние се интересуваме само от подмножество от възможните фреймове. Сега отворен е въпроса как това да се визуализира нагледно за потребителя. Ми не знам как особено при положение че можем да слухтим произволно широка честотна лента съответно произволен брой канала. Допълнително не знам как понеже няма готов такъв софтуер за да имам идея как точно би трябвало да изглежда, може да е странно, но чисто функционално е доста трудно да измислиш как трябва да работи нещо при положение че няма много примери на които да стъпиш. Моята идея е за ncurses-базиран интерфейс, наподобяващ top (всъщност по-скоро kismet), който ти вади няколкото канали, върху които съответно можеш да акцентираш под формата на някакво контекстно меню или нещо от сорта. Наистина нямам идея. Крайната цел е да можем да логваме трафик след демодулация и декодиране (чистите I/Q данни биха били ужасно обемни за да ги пазим). Тях съответно след анализ да можем да ги декриптираме с hashkill и да ги възпроизвеждаме.
Та в крайна сметка това е доста амбициозен проект с много въпросителни и свързан с много работа. Примерно отворен е проблема дали да преизползвам поне малко gnuradio както airprobe прави, ако реша да го направя автоматично си качвам на главата много неща и си вкарвам доста ограничения, ако не го направя - трябва да свърша сума ти работа сам, което пак не е приятно. Дори без research-а, а такъв ще трябва, си го оценявам на поне година-две работа в свободното време докато докарам нещо, което работи, после още толкова да го рафинирам. Имам силното подозрение, че GSM като стандарт ще бъде изхвърлен през това време. Което ще обезсмисли цялата работа.
Би имало повече смисъл ако UMTS или другите следващо поколение мобилни глупости имаха нещо общо с GSM, но на практика има много малко общо. UMTS е тотално различна история. Там почти всичко е доooooста различно. Криптографията е съвсем различна на първо време, не можем да я трошим толкова безотговорно. Всъщност и по-малко безотговорно не можем, всички публикувани атаки са меко казано непрактични или практични в някакъв много ограничен контекст, чисто практически няма смисъл да се пробва засега, по-добре някоя голяма глава да го измисли първо, аз съм прост и не мога да ги измислям тия неща, само грабя идеи с пълни шепи