Na crowdsourcingové platformě Crowd Supply byla spuštěna kampaň na podporu open source biometrického monitoru ve tvaru hodinek HealthyPi Move. Cena je 249 dolarů a plánovaný termín dodání listopad letošního roku.
Firma Murena představila /e/OS verze 2.0. Jde o alternativní sestavení Androidu bez aplikací Google. Mezi novinkami je podrobnější nastavení ochrany soukromí před sledováním aplikacemi. Murena prodává několik smartphonů s předinstalovaným /e/OS (Fairphone, repasovaný Google Pixel 5).
Do 30. května lze v rámci akce Warhammer Skulls 2024 získat na Steamu zdarma hru Warhammer 40,000: Gladius - Relics of War.
HelenOS (Wikipedie), tj. svobodný operační systém českého původu založený na architektuře mikrojádra, byl vydán ve verzi 0.14.1. Přehled novinek v poznámkách k vydání. Vypíchnou lze nabídku Start. Videopředstavení na YouTube.
BreadboardOS je firmware pro Raspberry Pi Pico (RP2040) umožňující s tímto MCU komunikovat pomocí řádkového rozhraní (CLI). Využívá FreeRTOS a Microshell.
Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 24.05. Přehled novinek i s náhledy a videi v oficiálním oznámení. Do balíku se dostalo 5 nových aplikací: Audex, Accessibility Inspector, Francis, Kalm a Skladnik.
Byla vydána (𝕏) nová verze 18.0.0 open source webového aplikačního frameworku Angular (Wikipedie). Přehled novinek v příspěvku na blogu.
V neděli 26. května lze navštívit Maker Faire Rychnov nad Kněžnou, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.
Byla vydána nová stabilní verze 3.20.0, tj. první z nové řady 3.20, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Z novinek lze vypíchnou počáteční podporu 64bitové architektury RISC-V.
Dnes jsem přemýšlel jak zařídit, aby systém pracoval jen s usb zařízeními, která si sám povolím a aby ostatní USB zařízení jenž nejsou ve whitelistu ignoroval, což se hodí pro zabezpečení počítače před nezvanými návštěvníky. Ovšem je to jen jedna z věcí, která může pomoci k bezpečnosti, o jiných metodách jako šifrování se zde zmiňovat nebudu. Zápisek dělám i pro sebe kdybych jej ještě někdy potřeboval, abych nemusel znovu hledat způsob tohoto zabezpečení.
Zápisek je pro neznalé, s udev pravidly jsem se setkal prvně, zkušenější můžou napsat poznámky.
Našel jsem řešení pomoci pravidel udev, kde první zakážu všechny usb zařízení viz 99-blacklist.rules a poté vytvořím vyjímky s 99-whitelist.rules.
/etc/udev/rules.d/99-blacklist.rules:
SUBSYSTEM=="usb", ATTR{authorized_default}="0"
SUBSYSTEM=="usb", ATTR{authorized}="0"
/etc/udev/rules.d/99-whitelist.rules:
ACTION=="add", ATTR{bDeviceClass}=="09", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
ACTION=="add", ATTR{idVendor}=="045e", ATTR{idProduct}=="076d", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
ACTION=="add", ATTR{idVendor}=="1d6b", ATTR{idProduct}=="0001", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
ACTION=="add", ATTR{idVendor}=="258a", ATTR{idProduct}=="0001", ATTRS{serial}=="AB0412323093", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
U některých usb zařízení (flash disky, UPSky...) se navíc vyskytuje parametr serial pro přesné určení zařízení, tudíž druhé usb zařízení stejného výrobku se k systému nepřipojí, k získání ATTRS{serial} použiji příkaz:
udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/003/018) |grep serial
idVendor a idProduct zjistím pomoci nástroje lsusb, viz:
Bus 001 Device 002: ID 045e:076d Microsoft Corp. LifeCam HD-5000
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 018: ID 258a:0001
Občas se mi po změně udev pravidel požadovaná změna neprojeví. Proto restartuji udev. V systémech založených na Debianu pomoci: sudo service udev restart
Když nyní zapojím například usb disk, tak jej vidím jen pomoci lsusb, ale sám se nenamountuje.
Dále se může hodit detekce vložení usb zařízení, do souboru 91-local.rules vložíme:
SUBSYSTEMS=="usb", KERNEL=="*", ACTION=="add", RUN+="/usr/bin/sudo -u user /usr/local/bin/USB %k"
Při vložení zařízení se spustí USB skript, v něm už můžete mít vlastní příkazy. Zkusil jsem zbastlit v bashi skript (je neefektivní a jistě by šel udělat lépe, tudíž je spíše jen jako příklad) jenž podle seznamu povolených zařízení zjistí zdali je zařízení povoleno a bude jej ignorovat nebo bude umožněna další akce.
Příklad spuštěného skriptu /usr/local/bin/USB:
#!/bin/bash
if ! screen -list | grep -q "USB-detect"; then
screen -S USB-detect -dm /usr/local/bin/USBdetect
fi
Screen zajistí že se nepustí instance znovu.
Příklad skriptu /usr/local/bin/USBdetect:
#!/bin/bash
sleep 2
lsusb > /tmp/lsusb-nove
cat /etc/usbdetect/lsusb-pozadovane /tmp/lsusb-nove |sort |uniq -u > /tmp/lsusb-vysledek
while read lineList; do
bus=`echo $lineList |awk '{print $2}'`
device=`echo $lineList |awk '{print $4}' |sed s/://g`
udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/$bus/$device) > /tmp/usbDeviceEcho.log
idProduct=`cat /tmp/usbDeviceEcho.log |grep ATTR{idProduct}== |sed 's/ATTR{idProduct}==//g;s/"//g;s/ //g'`
idVendor=`cat /tmp/usbDeviceEcho.log |grep ATTR{idVendor} |sed 's/ATTR{idVendor}==//g;s/"//g;s/ //g'`
serial=`cat /tmp/usbDeviceEcho.log |grep ATTR{serial} |sed 's/ATTR{serial}==//g;s/"//g;s/ //g'`
stringUsbDevice=$idVendor:$idProduct:$serial
knownUSB=0 #0=unknown 1=know
while read line; do
line=`echo $line |awk '{print $1}'`
if [ "$stringUsbDevice" == "$line" ]
then
knownUSB="1"
fi
done < /etc/usbdetect/usbDeviceList
#run script
if [ "$knownUSB" == 0 ]
then
date >> /tmp/usbdetect-alert
echo $stringUsbDevice "Zarizeni neni v seznamu!! Alert! " >> /tmp/usbdetect-alert
fi
done < /tmp/lsusb-vysledek
Soubor /etc/usbdetect/lsusb-pozadovane je vytvořen pomoci lsusb, později lze řádky přidat manuálně.
Soubor /etc/usbdetect/usbDeviceList je editován ručně v pořadí: $idVendor:$idProduct:$serial viz příklad:
04b3:310c: IBM Corp. Wheel Mouse
1d6b:0001: Linux Foundation 1.1 root hub
051d:0002:034512253091 American Power Conversion Uninterruptible Power Supply
1d6b:0001: Linux Foundation 1.1 root hub
045e:00cb: Microsoft Corp. Basic Optical Mouse v2.0
Tiskni Sdílej:
To je sice pravda, ale i přesto je to pro něj ztížení a pokud útočník o opatření nebude vědět, tak to může mít nějakou výhodu. Útočník se v tom případě musí k hardweru dostat, přečíst si jeho id a zadat jej do svého hw. V případě usb disků mohu jen polemizovat nad tím, že se k němu nedostane a nepřečte si seriové číslo. V případě klávesnice a připojených zařízení to lze řešit tím, že jakmile se jednou odpojí, vyškrtne se ze seznamu a nepůjde znovu připojit dokud to nespravím přes ssh, navíc dvě stejná zařízení by byla také zakázaná. Až tak moc paranoidní ovšem nejsem a počítám že většinu útočníku to odradí.
udevu
, takže pro detekci není třeba jeho restart. Skládá se ze tří částí, první je pravdilo 90-blockusbhid.rules
:
#Check USB HID devices ACTION=="add", ATTR{bInterfaceClass}=="03" RUN+="/usr/local/sbin/checkhid"Druhý je samotný skript
checkhid
, co kontroluje zařízení podle whitelistu:
#!/bin/sh logger -t CheckHID "Checking '$PRODUCT' ..." while read line; do if [ "$PRODUCT" = "$line" ] then logger -t CheckHID "Device OK" exit fi done < /usr/local/etc/enabled_devices.cfg logger -t CheckHID "Disabling device" echo 0 > /sys$DEVPATH/../authorizedSkript čte řádku po řádce soubor s povolenými zařízenímy a pokud najde shodu, skončí, v opačném případě zařízení zakáže. A třetí část je konfigurační soubor
enabled_devices.cfg
, což je whitelist povolených HID zařízení. Formát souboru je jednoduchý, na každé řádce je to, co skript vypíše do logu mezi apostrofy, třeba USB klávesnice má na řádku 4f2/116/300
a moje UPS 463/ffff/1
.
PS: Pokud máte pouze USB klávesnici, během testování si raději zapoznámkujte poslední řádek
Dnes vyšel článek na konkurenčním serveru a zmiňují se tam o skriptu v pythonu, tedy konkrétně USBkill, jen pro informaci.