Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Serwer poświadczeń STM32F103

ex-or 16 Jan 2021 22:11 3012 25
  • Serwer poświadczeń STM32F103

    Pracujący przy komputerze w firmie o korporacyjnej "kulturze pracy" zapewne rozpoznają ten obraz. Wiele programów z dostępem chronionym hasłem (oczywiście każdy swoim). Do tego jakieś udziały sieciowe (znów hasło), korporacyjny serwer www, pocztowy, harmonogramów (kolejne hasła, hasła, hasła). Część programów wymusza okresowe zmiany hasła. Część programów ma krótkie timeouty. Ciągle trzeba coś tam wpisywać. Człowiek z głową zaabsorbowaną ważkim problemem, przełącza się do programu X by coś szybko sprawdzić a tam oczywiście timeout (Jakie tu, k...., jest hasło?...Ok...co ja tu właściwie chciałem...). Motywem wykonania urządzenia była potrzeba poradzenia sobie tą sytuacją.

    Podstawowym założeniem było uczynienie czynności wpisywania danych autoryzacyjnych maksymalnie szybkim i nieabsorbującym. Dlatego odpadły rozwiązania programowe. I dlatego sposób obsługi urządzenia jest uproszczony do maksimum.

    Urządzenie ma formę pudełka z 10 klawiszami i trzema różnokolorowymi diodami na wierzchu. Pod każdy przycisk "podpięty" jest ciąg znaków. Wciśnięcie przycisku wysyła do komputera tenże ciąg, tak jakby był on wpisany z klawiatury. Ciąg może składać się z dowolnych znaków ASCII. Maksymalna długość to 150 znaków. Długie wciśnięcie dowolnego batona aktywuje symulację ruchów myszki, co bywa przydatne przy dłuższej obserwacji ekranu bez aktywności na urządzeniach wejściowych (nie, nie chodzi o oglądanie filmików na jutubie). LEDy dają podstawową informacje zwrotną: tryb myszki, brak definicji ciągu, wyprowadzenie ciągu na wyjście, błąd krytyczny urządzenia.

    Softwareowo jest to urządzenie kompozytowe USB składające się z trzech klas: HID klawiatura, HID mysz oraz CDC. Przejściowo zamiast dwóch oddzielnych HIDów zaimplementowałem HID z dwoma raportami, ale to rozwiązanie się nie sprawdziło. Nie wspomniałem o tym wcześniej więc teraz powiem, że podstawowym wymaganiem była praca urządzenia na standardowych sterownikach Windows (brak uprawnień administratora). HID dwuraportowy, niestety, domaga się sterowników więc skleciłem dwa oddzielne HIDy i to działa na sterownikach defaultowych. (Z CDC jest podobna kołomyjka, niestety, ale o tym może trochę dalej). CDC jest w charakterze interfejsu do wpisywania haseł. Po stronie urządzenia nasłuchuje prosty CLI realizujący kilka niezbędnych komend. Są to głównie komenda SET ustawiająca lub kasująca hasło, LIST listująca wszystkie hasła oraz HELP wyświetlający listę dostępnych komend z krótkim opisem.

    Schemat ideowy jest bardzo prosty.
    Serwer poświadczeń STM32F103

    Sercem urządzenia jest płytka Black Pill z klonem STM32F103, zawierająca większość potrzebnych elementów (w tym gniazdo USB) co bardzo upraszcza wykonanie. Płytka wpięta w płytkę bazową z rozmieszczonymi pozostałymi elementami układu (LED, switche). Płytka bazowa jest przyśrubowana do obudowy Kradex Z-73.
    Serwer poświadczeń STM32F103 Serwer poświadczeń STM32F103 Serwer poświadczeń STM32F103 Serwer poświadczeń STM32F103 Serwer poświadczeń STM32F103 Serwer poświadczeń STM32F103

    Urządzenie kompozytowe zostało złożone do kupy z trzech oddzielnych urządzeń wyklikanych w CubeMX. W tym zadaniu bardzo pomogły mi informacje z tej strony:
    https://sudonull.com/post/68144-CDC-MSC-USB-Composite-Device-on-STM32-HAL
    W większym lub mniejszym stopniu przydały się także:
    https://ep.com.pl/kursy/tutoriale/12577-stm32cubemx-tworzenie-urzadzen-usb-hid
    https://ep.com.pl/kursy/tutoriale/10890-stm32-urzadzenie-usb-cdc.-wykonanie-za-pomoca-cubemx
    https://community.arm.com/developer/tools-sof...-forum/31001/2-hids-in-one-composite-usb-code
    http://kevincuzner.com/2018/01/29/bare-metal-stm32-writing-a-usb-driver/
    https://damogranlabs.com/2018/02/stm32-usb-hid-mouse-keyboard/

    Moduł CLI to moje własne wypociny sklecone kiedyś tam na AVR, które okazały się trochę nieprzystające do wymogów pracy asynchronicznej. Adaptacja nie do końca się udała i zabrała za dużo czasu. Ta część firmware jest pierwsza do ewentualnych modyfikacji, jeśli kiedyś nastąpią.

    Aplikacja została napisana przy użyciu frameworka Quantum Leaps QP/C (Link).

    Koszty materiałowe to ok 25 zł, z tego obudowa 6.94, Black Pill 6.77, laminat 3.43

    W załączniku projekt Eclipse z kodem źródłowym. Dla zbudowania binarki potrzebne są także źródła frameworka (w załączniku ich nie ma). Najnowsza wersja prawdopodobnie nie będzie działać (framework jest mocno rozwijany, API jest dosyć dynamiczne), trzeba użyć wersji 6.3.8 (Link). W Eclipse trzeba ustawić dwie zmienne środowiskowe ze ścieżką dostępu do frameworka, są to:
    QPC_SRC w Window > Preferences > General > Workspace > Linked Resources
    QPC_PATH w Window > Preferences > C/C++ > Build > Build Variables

    Filmik z działania: https://youtu.be/VQ_yNAAg3ck

    Urządzenie jest wykorzystywane od kilku miesięcy i, wg relacji użytkownika, spełnia swoje zadanie. Ma jednak dwa mankamenty.
    Pierwszy, iż sposób definiowania haseł jest dosyć trudny do ogarnięcia przez przeciętnego użytkownika Windowsów. Samo znalezienie w Windowsach portu COM pod którym urządzenie siedzi jest zadaniem niemal niemożliwym. Wpisywanie zaś komend w terminalu to rzecz totalnie nerdowska.
    Drugim mankamentem jest fakt iż Windows 7 domaga się sterownika dla VCP w urządzeniu kompozytowym.
    Dlatego powstała druga wersja w którym są dwa tryby pracy z przełączaniem się pomiędzy USB kompozytowym 2xHID oraz CDC. Powstała także aplikacja okienkowa Qt, w której można połączyć się z urządzeniem oraz podefiniować hasła w bardziej przyjazny sposób. Ale o tym może innym razem.

    === Edit 21.01.2021 ===

    Mała aplikacja Qt na PC: https://github.com/m-xor/cserv.git Ułatwia znalezienie urządzenia i edycję haseł.
    Kompilacja w Qt Creator https://www.qt.io/product/development-tools
    Serwer poświadczeń STM32F103
    Deployment na Windows: https://doc.qt.io/qt-5/windows-deployment.html Aplikacja nie stosuje niestandardowych wtyczek więc 'windeployqt katalog_z_binarką' bez dodatkowych parametrów. Kompilacja statyczna też nie jest specjalnie potrzebna. Na komputery z zainstalowanym Qt wystarczy sama binarka.
    Attachments:

    Cool! Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    ex-or
    Level 25  
    Offline 
    ex-or wrote 509 posts with rating 82, helped 98 times. Been with us since 2017 year.
  • Computer ControlsComputer Controls
  • #2
    piotr_go
    DIY electronics designer
    ex-or wrote:
    płytka Black Pill z klonem STM32F103

    Black Pill jest na STM32F4.
  • #5
    romulus73
    Level 24  
    Założenie miało być proste ale " Samo znalezienie w Windowsach portu COM pod którym urządzenie siedzi jest zadaniem niemal niemożliwym. Wpisywanie zaś komend w terminalu to rzecz totalnie nerdowska.
    Drugim mankamentem jest fakt iż Windows 7 domaga się sterownika dla VCP w urządzeniu kompozytowym."- gdzie tu prostota i wygoda z tytułu spodziewałem się czegoś Pluginplay
    Używam SafeInCloud i nie widzę aby przejście na hardware było prostsze. A już miałem nadzieję.
  • #6
    andrzejek23
    Level 19  
    Korpo stosują logowanie domenowe do wszystkich swoich usług, a zdalne połączenie do sieci firmowej po VPN. Hasło jest zatem jedno.
  • Computer ControlsComputer Controls
  • #7
    freebsd
    Level 38  
    Co to ma wspólnego z serwerem poświadczeń?
  • #8
    ex-or
    Level 25  
    @romulus73 Przede wszystkim to dwie rożne ligi. SafeInCloud to pełnowartościowy manager haseł, moje pudełko to zwykła klawiaturka nie zapewniajaca bezpieczeństwa przechowywanych haseł. To taki jakby elektroniczny odpowiednik Sticky Note z hasłem, na ramce monitora. Plus że wpisanie hasła zajmuje sekundę i nie angażuje szarych komórek. Przy założeniu "żadnych sterowników" nie widzę sposobu żeby to zrobić inaczej.Pudełko było szyte pod konkretną osobę i dla niej jest to wystarczające.
    Co do mankamentów z zacytowanego tekstu: jak wspomniałem powstała wersja nr 2, która je usuwa (taka przynajmniej jest nadzieja bo jeszcze nie jest w żytkowaniu).
    @andrzejek23 Usługi domenowe to jedno, a oprogramowanie użytkowe to co innego.
    @freebsd Szumną nazwę.
  • #9
    freebsd
    Level 38  
    @ex-or Tytuł wprowadza w błąd.
  • #10
    omin172
    Level 14  
    andrzejek23 wrote:
    Korpo stosują logowanie domenowe do wszystkich swoich usług, a zdalne połączenie do sieci firmowej po VPN. Hasło jest zatem jedno.


    Tylko teoretycznie. W praktyce masz jeszcze przecież loginy/hasła do firm współpracujących: że wspomnę chociażby benefitowe Sodexo, albo programy od kurierów DHL czy UPS, na stronach dostawców jak TME też chyba się trzeba logować...? Itd., itp.... Z teoretycznego jednego robi się kilkanaście...

    romulus73 wrote:
    Używam SafeInCloud i nie widzę aby przejście na hardware było prostsze. A już miałem nadzieję.


    Jak pracodawca zablokuje dostęp do stron typu SafeInCloude to takie rozwiązanie będzie jedyne możliwe...
  • #11
    Dragas
    Level 26  
    Pomysł jak najbardziej OK, ale jednak jak dla mnie mało mobilny. Dodatkowo mało bezpieczne rozwiązanie, ktoś podejdzie wciśnie przycisk i ma hasło - gdyby hasła znajdowały się w jakiejś pamięci szyfrowanej (np. AT88SC0104C) i były autoryzowane chociażby mifare a karta/brylo leżałby ma urządzeniu (na środku jest troche miejsca).
    Przy okazj ciekawi mnie, że w firmie jest brak rozwiązania typu autoryzacji SSO (single sign-on) - jedno hasło do wszystkiego i ewentualnie MFA. W firmie której pracuję mamy jedno hasło (zmieniane cyklicznie) do kilkudziesięciu usług, począwszy od komputera, poczty i VPN, a kończąc na usługach firm trzecich (np. Slack, AWS)
  • #12
    ex-or
    Level 25  
    Dragas wrote:
    gdyby hasła znajdowały się w jakiejś pamięci szyfrowanej (np. AT88SC0104C) i były autoryzowane chociażby mifare a karta/brylo leżałby ma urządzeniu (na środku jest troche miejsca).

    O, i to jest pomysł którego mi brakowalo! Dzięki za podpowiedź. Zastanawiałem się nad jakąś formą autoryzacji, ale nie podobał mi się żaden własny pomysł. A skoro nie ma autoryzacji to i szyfrowania, bo i po co.
    Dziwne że na to nie wpadłem, bo firma stosuje kontrolę dostępu na kartę i może nawet dało by się ją wykorzystać W kolejnej wersji pudełka na pewno to zastosuję.
  • #13
    Andrzej_;)
    Level 13  
    Nawet fajna sprawa takie urządzenie.

    Dałoby się to zrobić nawet na arduino.

    Obecnie są dość tanie czytniki linii papilarnych.
    Gdyby uzupełnić Twój gadget o taki czytnik można by uznać urządzenie za mniej lub bardziej "bezpieczne" i można by zostawić je, na biurku w pracy bez opieki.
  • #14
    Jawi_P
    Level 35  
    andrzejek23 wrote:
    Korpo stosują logowanie domenowe do wszystkich swoich usług, a zdalne połączenie do sieci firmowej po VPN. Hasło jest zatem jedno.

    A Ty znasz wszystkie korpo? Ja znam 3 korporacje, w każdej było wiele haseł, wiele aplikacji, logowanie domenowe w części oprogramowania. Nawet do softu po WWW, nie wszędzie było przez domenę.
    ex-or wrote:
    Urządzenie ma formę pudełka z 10 klawiszami i trzema różnokolorowymi diodami na wierzchu. Pod każdy przycisk "podpięty" jest ciąg znaków. Wciśnięcie przycisku wysyła do komputera tenże ciąg, tak jakby był on wpisany z klawiatury.


    Rozwiązanie Twoje jest złamaniem zasad bezpieczeństwa. W wielu firmach, gdzie bezpieczeństwo danych jest priorytetem, takie "udogodnienie" jest złamaniem regulaminu pracy. W mojej firmie chyba bardzo poważnym.
    No bo co robisz jak odchodzisz od komputera, odłączasz pudełko i nosisz w kieszeniach? Nosisz je codziennie do domu?
    Rozwiązanie nie dla mnie. Natomiast znalazłoby zastosowanie w giercowaniu ;)
    Jest pełno softu - menedżerów haseł, nawet przeglądarki mają wbudowane swoje. Napisać własny soft w postaci skryptu, AutoIt, Python itp. to żaden problem pewnie dla Ciebie skoro napisałeś program pod STMa.

    I najważniejsze, we współczesnych laptopach często są tylko 3 porty USB, ja wykorzystuje wszystkie 3. Mysz, token i słuchawki. A to urządzenie dodatkowo zabiera mi port :(
  • #15
    Ibuprom
    Level 26  
    Token Yubikey - może nie należy do najtańszych, ale po spięciu tego z keepass-em mamy podobne rozwiazanie - i co najważniejsze wielokrotnie bezpieczniejsze. Tu wystarczy otworzyć notatnik, klepnać wszystkie przyciski i mamy komplet haseł. Wiem że taka miała być funkcjonalność, ale nie przyzwyczajajmy siebie ani ludzi mało obeznanych z komputerami do złudnej wygody.
  • #16
    andrzejek23
    Level 19  
    Jawi_P wrote:
    A Ty znasz wszystkie korpo? Ja znam 3 korporacje, w każdej było wiele haseł, wiele aplikacji, logowanie domenowe w części oprogramowania. Nawet do softu po WWW, nie wszędzie było przez domenę.

    Widocznie znamy różne korporacje :)
  • #19
    S_Goryl
    Level 13  
    Dragas wrote:
    Pomysł jak najbardziej OK, ale jednak jak dla mnie mało mobilny. Dodatkowo mało bezpieczne rozwiązanie, ktoś podejdzie wciśnie przycisk i ma hasło - gdyby hasła znajdowały się w jakiejś pamięci szyfrowanej (np. AT88SC0104C) i były autoryzowane chociażby mifare a karta/brylo leżałby ma urządzeniu (na środku jest troche miejsca).

    Widzę, że mniej więcej nadajemy na tych samych falach. W czasach "szału" przy wprowadzaniu RODO popełniłem właśnie coś takiego dla moich kadrówek: autoryzacja breloczkiem Mifare, emulacja klawiatury i transfer hasła przez USB. Co 60 s sprawdzanie, czy breloczek leży na czytniku. W przypadku jego braku: wysłanie sekwencji Win+L. Klucze od pomieszczenia przypięte do breloka, więc się o nim raczej się nie zapomni. Całość złożona z gotowych chińskich klocków: klon Arduino Pro Micro, konwerter poziomów logicznych, czytnik RFID. Hasła przechowywane w dwóch zewnętrznych EEPROM-ach, szyfrowane. W dużej mierze zainspirował mnie projekt https://www.instructables.com/PasswordPump-Passwords-Manager/
    Uznałem jednak, że taki sposób wprowadzania hasła jak w w/w projekcie jest co najmniej upierdliwy dla prostych użytkowników, zdecydowałem się na autoryzację kartą na codzień służącą do wchodzenia do pomieszczeń biurowych.
  • #20
    romulus73
    Level 24  
    omin172 wrote:
    andrzejek23 wrote:
    Korpo stosują logowanie domenowe do wszystkich swoich usług, a zdalne połączenie do sieci firmowej po VPN. Hasło jest zatem jedno.


    Tylko teoretycznie. W praktyce masz jeszcze przecież loginy/hasła do firm współpracujących: że wspomnę chociażby benefitowe Sodexo, albo programy od kurierów DHL czy UPS, na stronach dostawców jak TME też chyba się trzeba logować...? Itd., itp.... Z teoretycznego jednego robi się kilkanaście...

    romulus73 wrote:
    Używam SafeInCloud i nie widzę aby przejście na hardware było prostsze. A już miałem nadzieję.


    Jak pracodawca zablokuje dostęp do stron typu SafeInCloude to takie rozwiązanie będzie jedyne możliwe...

    A jak pracodawca może zablokować dostęp do mojego serwera NAS, o co kaman? Jedno konto kilka urządzeń.
  • #21
    omin172
    Level 14  
    Zwyczajnie. Nie wiesz, że dostawca Internetu może blokować dostęp do określonych stron?

    Jawi_P wrote:
    Rozwiązanie Twoje jest złamaniem zasad bezpieczeństwa. W wielu firmach, gdzie bezpieczeństwo danych jest priorytetem, takie "udogodnienie" jest złamaniem regulaminu pracy. W mojej firmie chyba bardzo poważnym.


    Aha. Ale w takich firmach ta surowość przepisów jest przecież złagodzona mozliwością ich nieprzestrzegania ;). A poważnie: śrubowanie nierealnych wymagań bezpieczeńśtwa wcale nie zwiększa, bo ludzie są ludźmi i nie są w stanie zajmować się robotą i dodatkowo regularnie uczyć się na pamięć dziesiątków bezsensownych zbitków liter.
  • #22
    Jawi_P
    Level 35  
    omin172 wrote:
    A poważnie: śrubowanie nierealnych wymagań bezpieczeńśtwa wcale nie zwiększa, bo ludzie są ludźmi i nie są w stanie zajmować się robotą i dodatkowo regularnie uczyć się na pamięć dziesiątków bezsensownych zbitków liter.

    A które to wymaganie jest nierealne?
    Rozmawiamy w kontekście urządzenia które klikiem w przycisk loguje Cię do aplikacji.
  • #23
    sstasinek
    Level 12  
    Jednego nie rozumiem.
    https://en.wikipedia.org/wiki/Touch_memory
    https://www.fujitsu.com/jp/group/frontech/doc...igent-society/rfid/ait64k/brochure-ait64k.pdf

    W sumie nie znam się na kartach elektronicznych czy też NFC, dlatego nie znalazłem informacji po polsku ani też jakichś konkretnych aplikacji. Ale są raczej dwa istniejące i używane w korporacjach rozwiązania (stąd wiele klawiatur Dell, HP ma wbudowane czytniki kart) w których hasła są zapisane w bazie danych serwera haseł lub (bo nie wiem) dostpępne bezpośrednio na karcie. Wystarczy tylko czytnik kart. Metoda bardziej elegancka bo karta jest kluczem. Po co wymyślać jakiś nowy system? Może to jest nawet praktyczne, ale oczywiste ulepszenie byłaby aplikacja odczytująca dane z takiej karty. Można by to nawet używać na telefonie - wypozażone w NFC, karta w futerale na pleckach telefonu. Kwestia tylko zastosowania jakiegoś standardu,

    Podejrzewam - bo nie wiem że gdyby powiązać przechowywanie danych na karcie można byłoby to z łatwością powiązać z managerem haseł typu KeePass https://keepass.info/plugins.html#smartcert W linku fujitsu breloczek o pojemności 64kB w pierwszym linku stykowe rozwiązanie które widziałem w wielu wózkach widłowych - kluczyk Dallas 1-wire.
  • #24
    Dragas
    Level 26  
    Znalazłem przypadkiem chyba bardzo podobne o ile nie identyczne urządzenie, tylko w miniaturowej wersji https://onlykey.io/
    I co fajne, posiada 6 przycisków, działających jako klawiatura do wpisywania PINu
  • #25
    ex-or
    Level 25  
    Dragas wrote:

    Ciekawe urządzonko, trzeba się przyjrzeć.
    Porównując je z moim pudełkiem:
    Dragas wrote:
    tylko w miniaturowej wersji

    Miniaturyzacja była wykluczona na starcie. User ma mieć klawisze pod ręką, dostępne do wymacania nawet na ślepo. Dlatego odpadły klawiatury membranowe, dotykowe itp. I dlatego taka wielkość pudełka. (NB. O ile nie mam dobrego zdania o obudowach Kradexa, to akurat z tego pudła jestem zadowolony - nieźle leży w ręku, tworzywo nawet dosyć miłe w dotyku, sztywne, ciężar taki jak trzeba, nie przesuwa się po stole, punkty mocowania tam gdzie trzeba. Jest OK)
    Dragas wrote:
    6 przycisków, działających jako klawiatura do wpisywania PINu

    Rozważałem jakaś konfigurowalną sekwencję do uzyskania autoryzacji, ale odrzuciłem to jako wnoszące, W TYM KONKRETNYM PRZYPADKU, więcej problemów niż korzyści. Jeszcze raz podkreślam: W TYM KONKRETNYM PRZYPADKU wygoda usera miała nadrzędne znaczenie.

    W tej chwili zastanawiam się nad dodaniem albo czytnika kart/breloka albo wykorzystaniem bluetootha. Oba tematy są mi nieznane, sprawa do rozpoznania od zera więc temat na razie leży.
    Co do bluetootha - w smartfonach jest opcja odblokowywania telefonu w zasięgu zaufanego urządzenia bluetooth. Wygląda to fajnie więc skłaniam się ku temu rozwiązaniu. W tej chwili ludzie nigdzie się nie ruszają bez smartka przy tyłku więc teoretycznie powinno spełnić zadanie.
  • #26
    romulus73
    Level 24  
    omin172 kolego jedno konto wiele urządzeń, jak zablokuje mi dostęp do mojego serwera na moim telefonie, przecież wszystko można wklepać ręcznie.
    Słowo moje jest tu kluczowe.