HW zamykátor pro Windows - IT security jinak

ZamykátorMůj zaměstnavatel je posedlý bezpečností - tak, jako většina zaměstnavatelů v poslední době bývá. Takže vyžaduje, aby, pokud člověk opouští kancelář, měl zamčenou obrazovku počítače. A protože je pruda na to myslet, vznikl Zamykátor.


Když si jdu ven zapálit, ode dveří se podívám na obrazovku mého počítače a uvidím, že není zamčený, tak se musím vrátit, stisknout kombinaci na klávesnici a až teprve potom můžu odejít. Automatické zamykání je nepraktické, protože často pracuju na vedlejším stole a na PC mám jen zobrazené schéma nebo jinou dokumentaci, do které průběžně od druhého stolu koukám, takže bych asi vyskočil z kůže, kdyby se mi počítač sám periodicky zamykal.

No ale co s tím? Jedna věc je se na to vykašlat (popravdě - pokud se útočník dostal až k mému počítači, má firma daleko vážnější bezpečnostní problém, který zamčení PC nijak nevyžehlí), druhá varianta byla pojmout to jako příležitost něco si ubastlit :)

Zamykátor - tenhle modul s CH552 jsem měl po ruce...A protože mi dorazily moduly s čínskými superlevnými procesory řady CH552, které jsou výrobcem primárně určeny právě pro spolupráci s USB, emulaci HID, CDC a podobně, od nápadu k realizaci nebylo daleko (mimochodem - celá řada procesorů CH55x je dobře použitelná na podobné drobnosti a má pár zajímavých vlastností - k tomu se snad časem ještě vrátím v samostatném článku).

Princip zařízení je jednoduchý: Procesor, příïpojený k USB, se tváří jako HID, na volném GPIO pinu 33 má připojené tlačítko, po stisku tlačítka vyšle emulací klávesnice kombinaci "Windows+L" (tj. lock) - a "Hasta la vista, baby!", mašina se zamkne.

Pro realizaci stačilo přiohnout jeden example pro daný procesor a za pár minut bylo hotovo (nejvíc času zabralo hledání, jak se ta pitomá windowsí klávesa vlastně správně jmenuje). Samozřejmě, nemuselo to být zrovna CH552 - stačí cokoli s HID emulací (co já vím - Arduino Leonardo, Pro Micro, Teensy, ATtiny84 Digistump, Raspberry Pi Pico atd.), ale tohle mi ve správnou chvíli zrovna "překáželo" na stole.

Tlačítko mi leží u dveři, při odchodu ho stisknu, PC se zamkne. S postupem času se kolegové rádi odnaučili mi zamykat počítač, kdykoli šli kolem (jestli jste někdy viděli naštvaného hrocha, tak je určitě chápete a na jejich místě byste se to odnaučili taky) a aktuálně mají stisk tlačítka pouze za odměnu :)

... a tenhle modul by byl daleko lepší.Fakt je, že tohle je už tak dlouho nasazené v ostrém provozu, že by si to zasloužilo nějaký kabátek - lepší, než volně pohozený modul s tlačítkem na připájených drátech. Moc by se mi líbil nějaký důstojný spodek, vysosustružený nebo vyfrézovaný z namořeného ořechového dřeva, na něm vyleštěný mosazný hmatník, textilem opletený kabel - prostě luxus, za který by se nemusela stydět ani prvorepubliková záložna... Představa by byla. No jo, ale znáte to, materiál by byl, stroje jsou - jenom na to nejsou lidi.

Třeba jednou, časem...


Jenom drobnost ke konstrukci - použil jsem, co bylo po ruce, tedy modul s USB-C konektorem. Na Ali se ale dají najít i moduly s USB-A, přímo určené pro zasunutí do USB portu. Výhoda a rozdíl je v tom, že zatímco v případě modulu s USB-C je v případě potřeby delší vzdálenosti od počítače potřeba použít delší USB kabel, v případě varianty přímo do portu je delší už ten obyčejný kabel, vedoucí ke tlačítku. Ale jo, jasně, já vím, že i v tom prvním případě se dá použít krátká USB-C kšandička mezi modul a port PC, a následně dlouhou dvoulinku k tlačítku, ale už to nevypadá tak elegantně.

A druhá drobnost - připojit dvoumetrovou dvoulinkou ke tlačítku samozřejmě jde, jen to má jeden háček: Na druhé straně vede přímo do procesoru. A když pak někdo na vedlejším stole zapne zdroj, rozsvítí lampičku nebo zapne mikropájku, vzniklý proudový ráz naindukuje do té volné dvoulinky napětový impuls, který jednak bezpečně přesvědčí procesor, že na druhém konci někdo stiskl tlačítko a tedy je potřeba zamknout připojený počítač, jednak může příslušný GPIO pin (a vlastně i celý procesor - a v případě hodně blbé konstelace třeba i USB port PC) odeslat do křemíkového nebe. Bylo by tedy dobré příslušný vstup procesoru nějak ošetřit - ochranné diody závěrně proti zemi i proti VCC, do série nějaký odpor, proti zemi nějaký malý keramický kondenzátor, nějakou feritovou perličku na vstupní drát a tak podobně - s tímhle už se dá experimentovat do aleluja.

Ďábel se skrává v detailech - a taková hezky jednoduchá konstrukce to byla. A protože tam žádné ochrany (alespoň zatím) nemám, tak se mi právě to "nevyžádané zamykání" děje...


Jednoduchý kód viz níže - používám rozšíření Arduino IDE pro CH55x. Do Properties přidat řádek:

https://github.com/DeqingSun/ch55xduino/blob/ch55xduino/package_ch55xduino_mcs51_index.json

Poté doinstalovat knihovnu CH55x. Funguje pro 551, 552 a (neoficiálně) i 554.

Pokud je to úplně nový procesor, pak stáhnout WCHISPTool a obsah naprogramovat přes něj: https://www.wch-ic.com/downloads/WCHISPTool_Setup_exe.html

#include "USBHIDKeyboard.h"

#define BUTTON_PIN 33
#define LED_BUILTIN 32 //version USB-C, LED active-high
#define LED_BUILTIN 30 //version USB-A, LED active-low

bool buttonPressPrev = false;

void setup() 
{
    USBInit();
    pinMode(BUTTON_PIN, INPUT_PULLUP);
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
}

void loop() 
{
    bool buttonPress = !digitalRead(BUTTON_PIN);
    if (buttonPressPrev != buttonPress) 
    {
        buttonPressPrev = buttonPress;
        if (buttonPress) 
        {
            Keyboard_press(KEY_LEFT_GUI);
            Keyboard_press('l');
            digitalWrite(LED_BUILTIN, HIGH);
            delay(100);             
            Keyboard_releaseAll();
            digitalWrite(LED_BUILTIN, LOW);
        }
    }
}


Komentáře:


ZB

A co to takhle spínat tlačítkem ledku optočlenu?

Odpovědět

bitovod

Bezpečné a jednoduché, ale zase potřebuje napájení toho primárního okruhu, takže buď nějakou knoflíkovou baterku, nebo DC/DC měnič s napájením z toho USB. Měnič by se mi tm líbil víc, mám jich z pracovního šrotu dost, obvykle ve stavu, kdy fungují, ale už jsou mimotoleranční pod větší zátěží - pro LEDku dobrý.

Odpovědět

Vložit komentář





R8rrIg