Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2018-08-21 14:35:06

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Autoryzacja urządzeń USB podłączanych do komputera

Ostatnio na niebezpieczniku pojawił się [url=https://niebezpiecznik.pl/post/usbharpoon-kablom-usb-tez-nie-mozna-ufac/]artykuł na temat badUSB[/url], który przypomniał mi, że kiedyś w przeszłości miałem się zając urządzeniami podłączanymi do portu USB, a konkretnie chodziło o to by tylko określone urządzenia mogły być obsługiwane przez system, a reszta powinna być zrzucana domyślnie. Tego typu rozwiązanie po części z urządzeń USB (pendrive, karty sd, zewnętrzne dyski twarde, etc) można było ogarnąć za pomocą udisks2 i policykit. Niemniej jednak, pozostawała kwestia całej masy innych urządzeń, np. myszy, klawiatury, telefony, które po podłączeniu do kompa mogły wejść z nim w interakcję nawet bez świadomej i dobrowolnej zgody użytkownika.

Szukając jakiegoś sensownego rozwiązania tego problemu natrafiłem na coś co nazywa się [url=https://www.kernel.org/doc/Documentation/usb/authorization.txt]USB device authorization[/url]. Krótko rzecz ujmując, jest to mechanizm kernela, który umożliwia autoryzacje urządzeń USB podłączanych do kompa. xD Działa on w niższej warstwie niż udisks2 w połączeniu z polkit'em.

W systemie są dwa pliki, które sterują autoryzacją:

Kod:

/sys/bus/usb/devices/usb2/authorized
/sys/bus/usb/devices/usb2/authorized_default

Ten usb2 w ścieżce to może być również usb1, usb3, itd. [url=https://morfikov.github.io/post/struktura-plikow-urzadzen-usb-w-katalogu-sys/]Każde urządzenie USB ma swoją osobną ścieżkę[/url], więc można także skorzystać z indywidualnego pliku zamiast bawić się wszystkimi urządzeniami USB. W tym jednak przypadku, ja chciałem sobie zablokować dostęp domyślnie dla wszystkich nowo podłączanych urządzeń do systemu. I do tego celu właśnie jest potrzebny wyżej widoczny plik authorized_default, Można go zapisać standardowo:

Kod:

# echo 0 > /sys/bus/usb/devices/usb2/authorized_default

Po wydaniu tego polecenia, wszystkie urządzenia usb2, które są podłączone do kompa, będą działać jak przedtem ale wszystkie nowe sprzęty (czy nawet replug tych już podłączonych) już z systemem nie będą mieć możliwości komunikacji. Poniżej jest log z podłączenia pendrive:


kernel: usb 2-1.3: new high-speed USB device number 47 using ehci-pci
kernel: usb 2-1.3: New USB device found, idVendor=0951, idProduct=1666, bcdDevice= 1.00
kernel: usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
kernel: usb 2-1.3: [b]Product: DataTraveler 3.0[/b]
kernel: usb 2-1.3: Manufacturer: Kingston
kernel: usb 2-1.3: SerialNumber: 0019E06B9C8ABE41C7A2C3EC
kernel: usb 2-1.3: [b]Device is not authorized for usage[/b]
mtp-probe[35953]: checking bus 2, device 47: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3"
mtp-probe[35953]: bus: 2, device: 47 was not an MTP device[/quote]
Widać wyżej, że do kompa został podłączony pendrive, oraz, że urządzenie nie ma autoryzacji. Nie pojawił się też żaden nowy nośnik w systemie (np. /dev/sdc1) i nie można z nim wejść w żaden sposób w interakcję.

Tak samo jest w przypadku smartfona:

kernel: usb 2-1.3: new high-speed USB device number 48 using ehci-pci
kernel: usb 2-1.3: New USB device found, idVendor=2357, idProduct=0365, bcdDevice=ff.ff
kernel: usb 2-1.3: New USB device strings: Mfr=3, Product=4, SerialNumber=5
kernel: usb 2-1.3: [b]Product: Neffos X1 Max[/b]
kernel: usb 2-1.3: Manufacturer: MediaTek
kernel: usb 2-1.3: SerialNumber: OFHENBYTVGOJ4STS
kernel: usb 2-1.3: [b]Device is not authorized for usage[/b]
mtp-probe[37552]: checking bus 2, device 48: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3"
mtp-probe[37552]: bus: 2, device: 48 was not an MTP device[/quote]
Nawet nie da rady się połączyć ze smartfonem via ADB. xD

Ważne, że logi z podłączania urządzeń są zapisywane, więc jakby ktoś coś chciał podłączyć bez naszej wiedzy, to będzie to widoczne.

I to w zasadzie działa całkiem nieźle, choć przydałaby się jeszcze biała lista urządzeń, które mogłyby być podłączane do kompa, by tego typu autoryzacje można było założyć jak najwcześniej przy starcie systemu i tylko zezwolić na dostęp urządzeniom o określonych numerach seryjnych. Póki co nie wiem jak to zrobić. xD

No i też jeśli ktoś wie czym się różni interface_authorized_default od authorized_default to też byłbym wdzięczny za wyjaśnienie. xD

Offline

 

#2  2018-08-21 15:07:27

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoryzacja urządzeń USB podłączanych do komputera

Czyli jakby lapek szedł w uśpienie czy blokadę ekranu w hotelu, to przy wejściu w [b]pm_suspend[/b] albo blokadę ekranu można wyłączyć dostęp nowych urządzeń USB?
Żeby nie dalo się obejść logowania przez podłaczenie pendraka, ktorego Nautilus albo Dolphin automatycznie zamontuje włączajac przy tym aktywną sesję?

Dosyć dawno powstał DENY_NEW_USB w Grsecurity, był właśnie w tym celu zrobione, zarządzalny przez interfejs sysctl grseca.

W Andku do połączenia USB ADB też musisz autoryzować urządzenie na cegłofonie.
Tylko tam zapamiętuje jakiś klucz kryptograficzny urządzenia.

Ostatnio edytowany przez Jacekalex (2018-08-21 15:09:16)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2018-08-21 15:27:05

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoryzacja urządzeń USB podłączanych do komputera

[quote=Jacekalex]Czyli jakby lapek szedł w uśpienie czy blokadę ekranu w hotelu, to przy wejściu w [b]pm_suspend[/b] albo blokadę ekranu można wyłączyć dostęp nowych urządzeń USB?[/quote]
Napisz to tak bym zrozumiał. xD

[quote=Jacekalex]Żeby nie dalo się obejść logowania przez podłaczenie pendraka, ktorego Nautilus albo Dolphin automatycznie zamontuje włączajac przy tym aktywną sesję?[/quote]
Jeszcze uśpienia i hibernacji nie sprawdzałem, będę wieczorem patrzył to zobaczę jak to działa ale raczej powinno zablokować. Chyba, że te wartości się zresetują po odhibernowaniu/wybudzeniu, wtedy pewnie trzeba by je tuż po tej akcji wpisać na nowo, tak jak to miało/ma miejsce z wartościami w sysctl.

[quote=Jacekalex]W Andku do połączenia USB ADB też musisz autoryzować urządzenie na cegłofonie.
Tylko tam zapamiętuje jakiś klucz kryptograficzny urządzenia.[/quote]
Tak wiem, tylko nawet przy zezwoleniu system odmawia. :]

Ostatnio edytowany przez morfik (2018-08-21 15:29:14)

Offline

 

#4  2018-08-21 18:43:41

  wikingagressor - Użytkownik

wikingagressor
Użytkownik
Skąd: Józefów k.Błonia, mazowieck
Zarejestrowany: 2015-02-03

Re: Autoryzacja urządzeń USB podłączanych do komputera

Fajnie by bylo wykombinowac, tak zeby jakis demon systemowy sprawdzal czy jest wlaczona blokada i kiedy zostanie podpiete nowe urzadzenie na usb to zeby wysylal monit w postaci powiadomienia: "hej masz wlaczona blokade usb a zostalo podpiete nowe urzadzenie, czy deaktywowac blokade na czas jego podpiecia? Tak/Nie?" Po odmontowaniu urzadzenia blokada samoczynnie powinna byc wlaczana.


Peace, Love and Debian for the World!!!

Offline

 

#5  2018-08-21 18:51:44

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoryzacja urządzeń USB podłączanych do komputera

Chyba raczej tego się nie da zrobić, bo to by wymagało kontroli zwykłego użytkownika, a to już nie jest fajne. xD

Offline

 

#6  2018-08-21 19:28:09

  091619EE - Użytkownik

091619EE
Użytkownik
Zarejestrowany: 2018-07-09

Re: Autoryzacja urządzeń USB podłączanych do komputera

Jak w Debianie mając kontrole nad klawiaturą można w sposób niewidoczny wywołać polecenie z uprawnieniami użytkownika ?

Offline

 

#7  2018-08-21 19:44:00

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoryzacja urządzeń USB podłączanych do komputera

Kilka linków, które póki co znalazłem i zawierają ciekawe info.

Prezentacja na temat USB i ataku BadUSB:
https://www.youtube-nocookie.com/embed/JLhcE0O4bt0?rel=0&wmode=transparent

Kawałek appki, która ma za zadanie whitelistować urządzenia:
https://github.com/USBGuard/usbguard

I jeszcze dwa artykuły:
https://codedump.net/blog/using-the-linux-kernels-usb-authorization-support-to-lockdown-usb
https://www.beyondlogic.org/usbnutshell/usb5.shtml#DeviceDescriptors

To tak by mi nigdzie nie zginęło to. xD

Jeszcze jedno zagadnienie, które się wiąże pośrednio z urządzeniami podłączanymi do kompa, to ograniczenie ilości urządzeń typu INPUT (klawiatura, mysza) bezpośrednio w ustawieniach Xserver'a. Póki co, to ten temat mi lekko obił się o oczy i nic jeszcze nie szukałem ale na pewno coś znajdę. xD

Offline

 

#8  2018-08-21 20:17:57

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoryzacja urządzeń USB podłączanych do komputera

Z tego co widzę [url=https://www.kernel.org/doc/Documentation/usb/authorization.txt]tutaj[/url], to można na bazie regułek UDEVA naskrobać coś na kształt FW dla USB, do filtrowania urządzeń.
echo 0 > autorized_default i UDEV wpuszcza na podstawie cech urządzenia.

Ostatnio edytowany przez Jacekalex (2018-08-21 20:22:33)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9  2018-08-21 21:29:17

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoryzacja urządzeń USB podłączanych do komputera

Nie trzeba się bawić udev'em. Ten usbguard jest całkiem zajebistą zabawką (jest w repo). To co on potrafi, to jest w zasadzie to czego ja oczekiwałem od tego mechanizmu. W zasadzie to jest to zwykły demon, który patrzy na urządzenia podłączane do portów USB. I po ich wykryciu (wszystko jedno czy dopiero podłączone czy już obecne) uzupełnia odpowiednio pliki od autoryzacji. Ten demon ma konfigurację w postaci tego typu reguł:

Kod:

allow id 046d:c30f serial "" name "Logitech USB Keyboard" hash "AeboMPFm0qeQNL+6ww7irtu8VKDsn9h09OoUYahjoR8=" parent-hash "xe96rjr8V53Jw+g7q/yi0C1czVxatehiq7r4gn2dH6s=" with-interface { 03:01:01 03:00:00 }

Można dopasowywać w zasadzie po wszystkim co się chce (komunikaty są w logach systemowych, więc można wyciągnąć).

Do tego, ten usbguard ma graficzną appkę usbguard-applet-qt (też w repo). W ustawieniach demona, można określić użytkowników który mogą się za pomocą tej appki łączyć z usbguard, i w ten sposób zarządzać polityką urządzeń, co wygląda mniej więcej tak:

[img]https://i.imgur.com/Lyndvok.png[/img]

I tutaj już można sobie wyklikać co ma być blokowane i zezwolone, a jeśli się zaznaczy permanent, to reguła powędruje do konfiguracji i w zasadzie plik z regułami się może w ten sposób automatycznie uzupełnić. Można pododawać określone urządzenia i odebrać możliwość połączenia appce z demonem albo ją wywalić zupełnie. Trzeba też pamiętać, że przy bardziej restrykcyjnych regułach ma znaczenie nawet do którego portu się wepnie myszę czy klawiaturę i jak się wepnie ją do innego, to nie będzie ona działać i trzeba będzie się przepiąć. Także można sobie poczarować jeśli się ma sporo portów USB. xD

No i oczywiście politykę domyślną demona można też ustawić w jego pliku konfiguracyjnym, by domyślnie blokował wszelkie urządzenia nowe. Są także notyfikacje powiadamiające usera o tym, że nowe urządzenie zostało wykryte i jaką akcję podjąć.

Tak, ten mechanizm jest iście zacny i "approved by morfik". xD

-----
A i jeszcze jak coś jest:

Kod:

# usbguard generate-policy > rules.conf

Co generuje reguły zezwalające na dostęp wszystkim aktualnie podłączonym do portów USB urządzeniom. To tak by szybciej sobie reguły napisać. xD

Ostatnio edytowany przez morfik (2018-08-21 22:54:39)

Offline

 

#10  2018-08-22 00:16:56

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoryzacja urządzeń USB podłączanych do komputera

Sprawdziłem też hibernację i uśpienie maszyny i wygląda, że działa bez zarzutu i nic nie trzeba się dodatkowo bawić.

Ja tylko sobie jeszcze dodałem ekstra blokadę wszystkich urządzeń USB domyślnie podczas pracy systemu za pomocą takiej usługi:


Kod:

[Unit]
Description=Block USB devices by default after repluging them
Requires=usbguard.service
After=usbguard.service
Documentation=man:usbguard(8)

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/usbguard set-parameter InsertedDevicePolicy block
ExecStop=/usr/bin/usbguard set-parameter InsertedDevicePolicy apply-policy

[Install]
WantedBy=basic.target

W takim przypadku, po starcie systemu wszystkie urządzenia, które są podpięte do kompa przechodzą weryfikację w oparciu o reguły i te, które nie są dodane, to będą blokowane, no i dodatkowo każdy replug któregoś z działających urządzeń będzie powodował, że już drugi raz w systemie się ono nie pojawi. xD To taki miły mechanizm, który ma na celu dbanie o to by nikt czasem czegoś nie podłączył między wtykę USB (np. klawiatury) a port USB (np. gdy ekran kompa jest zablokowany, a my poszliśmy se do kibla na 30s), bo wtedy klawiatura wysiądzie i będzie można mieć uzasadnione podejrzenia popełnienia czynu nieskazanego i moralnie nieakceptowalnego, przynajmniej z punktu widzenia administratora systemu. xD

No a by urządzenia móc podpiąć pod kompa, to trzeba pierw te usługę dezaktywować ale to nie powinno być problemem. xD

Ostatnio edytowany przez morfik (2018-08-22 00:18:20)

Offline

 

#11  2018-08-22 14:07:27

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoryzacja urządzeń USB podłączanych do komputera

Usbguard jest dobry tak dlugo, jak długo  się nie popsuje np z powodu aktualizacji jakieś biblioteki, od której zależy.

Jeżeli da się to zmontować w Udevie, to wolę porzeźbić w Udevie, troszkę pewniejsza opcja, bo Eudev sam z siebie jest bardziej powszechnie używany i bardziej niezawodny.
W przypadku awarii UDeva aktualizacja z poprawką to kwestia niemal minut.

Chociaż widzę, że Usbguard w Debianie już jest w repo, w Gentoo na razie tylko w overlayu Pentoo.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#12  2018-08-22 16:50:05

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoryzacja urządzeń USB podłączanych do komputera

Nie wiem czy się da w udev, na pewno można przepisać sobie autoryzacje w oparciu o subsystem usb ale raczej ciężko by było osiągnąć samym udev'em taką konfigurację jaką ja u siebie machnąłem. Pamiętaj też, że usbguard to w zasadzie tylko kawałek demona, a ta graficzna nakładka jest w pełni opcjonalna, także zależności to tu nie ma za wiele znowu.

Offline

 

#13  2018-09-19 11:56:33

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoryzacja urządzeń USB podłączanych do komputera

Jak tak dalej pójdzie to ten usbguard wyleci z debiana:
https://tracker.debian.org/pkg/usbguard

Bo ten mój zgłoszony bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908037 dostał parę dni temu status grave. xD

Offline

 

#14  2018-09-19 14:14:37

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoryzacja urządzeń USB podłączanych do komputera

Udeva do autoakceptacji myszki i klawiatury  próbowałeś zatrudnić?

Czy w udevie są takie same problemy, jak z usbguardem?

Ostatnio edytowany przez Jacekalex (2018-09-19 14:14:53)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#15  2018-09-19 14:58:50

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoryzacja urządzeń USB podłączanych do komputera

No sam udev nie zrobi takiej konfiguracji co ja sobie zrobiłem na pstryk przy pomocy usbguard. :] Mógłbyś sprawdzić to rozwiązanie z udev, i zobaczyć jako ono jest użyteczne dla przeciętnego kowalskiego. Bo usbguard jest dość miły dla usera, udev nie jest. xD

Offline

 

#16  2018-09-20 06:47:01

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoryzacja urządzeń USB podłączanych do komputera

[quote=morfik]No sam udev nie zrobi takiej konfiguracji co ja sobie zrobiłem na pstryk przy pomocy usbguard. :] Mógłbyś sprawdzić to rozwiązanie z udev, i zobaczyć jako ono jest użyteczne dla przeciętnego kowalskiego. Bo usbguard jest dość miły dla usera, udev nie jest. xD[/quote]
Nie za bardzo mi się chce, zwłaszcza, ze Morfik ma owsiki w d..., także w ciągu tygodnia porobi regułki dla wszystkich urządzeń USB i jeszcze pewnie zgłosi przy okazji ze dwa bugi w systemd-udev. xD


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.011 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00011 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00098 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.146.152.119' WHERE u.id=1
0.00072 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.146.152.119', 1732188796)
0.00048 SELECT * FROM punbb_online WHERE logged<1732188496
0.00045 SELECT topic_id FROM punbb_posts WHERE id=320743
0.00021 SELECT id FROM punbb_posts WHERE topic_id=30594 ORDER BY posted
0.00058 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30594 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00259 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30594 ORDER BY p.id LIMIT 0,25
0.00143 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30594
Total query time: 0.00764 s