
Python a kybernetická bezpečnosť – 22. časť
Táto časť seriálu sa síce bude týkať bezpečnosti, ale z trošku zvláštneho až komického, no rovnako nebezpečného uhla pohľadu. Predstavíme tzv. automatizačnú knižnicu PyAutoGUI, ktorá dokáže kontrolovať klávesnicu a myš, čím umožňuje simulovať bežné vstupy z úrovne používateľa daného zariadenia. Na prvý pohľad by sa mohlo zdať, že ide o hračku, resp. zábavný nástroj. Ovládanie klávesnice a myši však potenciálnym útočníkom otvára cestu k obrovskému množstvu rôznych príležitostí, ako poškodiť zariadenia obetí. Len si predstavme, že spustením nechceného kódu možno iba jednoduchým simulovaním pohybu a klikania myšky zmazať naše drahocenné súbory alebo poprepisovať ich obsah. Komplexným prístupom možno spustiť ľubovoľnú aplikáciu a v nej vykonať ľubovoľnú činnosť. Dá sa napríklad spustiť poštový klient a možno napísať a zaslať nepeknú správu nášmu nadriadenému. Nehovoriac o tom, že príslušnou kombináciou klávesov a klikania myškou možno kompletne znefunkčniť operačný systém zariadenia alebo jeho aplikácie.
PyAutoGUI (https://pyautogui.readthedocs.io)
Ide o knižnicu Python, ktorá je určená na automatizáciu úloh, ktoré sú plnené prostredníctvom klávesnice a myši počas interakcie s grafickým používateľským rozhraním (GUI) daného zariadenia. PyAutoGUI dokáže zabezpečiť interakciu v nasledujúcich oblastiach:
1. písanie (typing) na klávesnici, simulácia stláčania funkčných klávesov a tzv. hotkeys kombinácií,
2. pohyb (move), ťahanie (drag) a klikanie (click) myškou,
3. vytváranie snímok obrazovky (screenshots),
4. identifikácia a správa aplikačných okien,
5. zobrazovanie informačných (alert, message) okien.
Knižnica je prioritne určená na automatizáciu činností. Konkrétne môžeme spomenúť napr. automatizáciu vstupu údajov, automatizované testovanie a validáciu vrátane testovania webových aplikácií, ďalej automatizáciu opakujúcich sa aktivít, vyplňovanie formulárov, ale aj automatizáciu správcovských úloh. Ak však vezmeme do úvahy, čo všetko sa dá robiť s klávesnicou a myškou v prípade, že by sme ich dokázali ovládnuť príslušným kódom, získavame veľmi silný nástroj na riešenie rôznych záškodníckych činností. Nemusíme pritom hneď mazať súbory alebo znefunkčňovať operačný systém. Stačí, ak začneme napr. tým, že používateľovi (obeti) nakreslíme na obrazovku nejaký nepekný obrázok alebo zanecháme nechutný odkaz. Veľmi nepríjemná je už len obyčajná simulácia náhodného pohybu myšky, čím obeti totálne znemožníme interakciu so zariadením.
PyAutoGUI je dostupná na rôznych platformách vrátane Windows, Mac OS a Linuxu. Je pochopiteľné, že niektoré jej funkcie nemusia fungovať správne vo virtuálnom prostredí, kde môžeme mať problémy aj s vytváraním snímok obrazovky, resp. vykonávaním niektorých špecifických príkazov.
Funkcionalita knižnice PyAutoGUI
Inštaláciu knižnice PyAutoGUI vykonáme veľmi jednoducho spustením príkazu pip3 install pyautogui. Pretože je množstvo funkcií, ktoré knižnica ponúka, relatívne malé, môžeme si ich uviesť v jednoduchom spoločnom prehľade:
write(), typewrite() |
Simulácia zadania textu pomocou klávesnice |
press() |
Simulácia stlačenia a uvoľnenia klávesu |
keyDown(), keyUp() |
Stlačenie a podržanie klávesu, uvoľnenie podržaného klávesu |
hold() |
Podržanie klávesu v danom kontexte |
Hotkey() |
Zadanie hotkey kombinácie |
size() |
Získanie rozmeru obrazovky |
position() |
Získanie polohy myšky |
onScreen() |
Kontrola polohy oproti rozmerom obrazovky |
move(), moveTo() |
Posun myšky na určenú polohu |
drag(), dragTo() |
Tahanie myšky počas stlačenia jej tlačidla |
click(), doubleClick() |
Kliknutie tlačidla myšky |
mouseDown(), mouseUp() |
Stlačenie a uvoľnenie tlačidla myšky |
scroll(), hscroll() |
Rolovanie kolieska myšky |
screenshot() |
Získanie snímky obrazovky |
locate(), locateOnScreen() |
Získanie polohy zadaného obrázka |
getpixel(), pixelMatchesColor() |
Získanie hodnôt RGB daného pixela, kontrola zhody farieb pixela |
alert() |
Jednoduché okno so správou a tlačidlom OK |
confirm() |
Okno s otázkou a tlačidlami OK a Cancel |
prompt() |
Okno na zadanie textu s tlačidlami OK a Cancel |
password() |
Okno na zadanie hesla s tlačidlami OK a Cancel |
Poznámka: Zoznam názvov konkrétnych funkčných klávesov a hotkeys je uvedený na stránke dokumentácie knižnice PyAutoGUI v časti KEYBOARD_KEYS.
Focus a timing
Pri používaní funkcií knižnice PyAutoGUI je nesmierne dôležité pracovať s požadovaným oknom vybranej aplikácie, pretože PyAutoGUI je jedno, kde smeruje výstup svojich funkcií. Ak napríklad chceme pracovať s konkrétnym oknom aplikácie LibreOffice, pred použitím funkcií PyAutoGUI je vhodné kliknúť v rámci daného okna, čím toto okno získa focus.
Ďalšia dôležitá podmienka úspešného používania funkcií PyAutoGUI je simulácia trvania vstupov z klávesnice a myšky. Bežnému človekovi určitý čas trvá, pokiaľ stlačí konkrétne klávesy a napíše celistvý text. Rovnako mu trvá, pokiaľ pohne myškou a stlačí jej tlačidlá. Navyše bežnému počítaču trvá, kým spustí želanú aplikáciu a otvorí jej okno. Jednotlivé funkcie PyAutoGUI teda musíme spúšťať so správnym timingom, resp. so správnymi časovými medzerami tak, aby sme počítaču umožnili správne zareagovať.
zapis_do_LibreOfficeCalc.py
V našom prípade sme funkcie knižnice PyAutoGUI použili na naprogramovanie triviálneho programu Python, ktorý prepíše interné údaje do tabuľky aplikácie LibreOffice Calc. Program v úvode otvára aplikáciu LibreOffice Calc, následne klikne myškou do jej okna, čím toto okno získa focus, a pokračuje v prepisovaní údajov z vnútornej premennej do tabuľky. O ukončení prepisu v závere informuje prostredníctvom jednoduchého informačného okna. Medzi jednotlivé funkcie sú vložené časové medzery tak, aby mal operačný systém čas zareagovať na požiadavky nášho programu.
Obr. 1 Tabuľka aplikácie LibreOffice Calc naplnená naším programom Python
Poznámka: Všetky zdrojové kódy možno stiahnuť zo stránky softengine.sk.
Zobrazit Galériu