Tento článok je edukatívny a popisuje potenciálne nežiadúci softvér na úrovni toho, čo dokáže. V článku sa nenachádza program, ani jeho zdrojový kód, či jeho štruktúra. Nepopisujú sa konkrétne funkcie, ktoré umožňujú získavanie údajov o počítači, či narábanie s nimi. Aplikácia bola výhradne pre osobné použitie prevádzkovateľa fotopasce. Zodpovednou osobou za prevádzku takéhoto softvéru je osoba prevádzkujúca fotopascu, ktorá ho umiestni na vlastnú SD kartu, svoj majetok. Cieľom článku je aj poukázať na potenciál nebezpečných aplikácii, ktoré je možné vytvoriť pod Pythonom. Rovnako tak poukazuje aj na fakt, že na takúto škodlivú aplikáciu nezareagoval ani vstavaný antivírusový softvér Windows Defender vo Windowse 10.
Pred časom ma oslovil pán, ktorý sa venuje vo voľnom čase fotografovaniu prírody, zvierat a aj prevádzke fotopascí v lesoch. Bol už zúfalý, nakoľko mu v poslednej dobe zmizlo viacero fotopascí z lesa a malo to prvky, že to robila tá istá osoba. Nejde len o finančnú ujmu, ale tiež o stratu audiovizuálnych materiálov za rozsiahle časové obdobie. Pán prevádzkuje fotopasce, ktoré majú solárny panel (výrobcu, ani model si popisovať nebudeme), vďaka čomu bývajú umiestnené v lese aj niekoľko mesiacov, nakoľko majú možnosť pripojenia veľkých SD kariet až do veľkosti 256 GB a tiež nevyžadujú výmenu batérii, nakoľko sa sama dobíja + má aj záložnú batériu pre každý prípad.
Ilustračný obrázok fotopasce - NEREPREZENTUJE POUŽITÉ FOTOPASCE
Takto bezprízorné fotopasce môže ktokoľvek odcudziť, ak sa k nim dostane, alebo si ich všimne. Fotopasce nemajú 3G / 4G konektivitu pre vzdialené informovanie používateľa o tom, že sa niečo deje. Preto aj pri odcudzení a následnom zistení tejto skutočnosti nie je jasné, či fotopasca zmizla včera, alebo pred 2 mesiacmi, existujú len malé vodítka ako: cestička v tráve k stromu, kde bola fotopasca umiestnená, dorastený mach na strome, kde to predtým ošmirgloval sťahovací popruh fotopasce.. Ak je fotopasca v lese niekoľko mesiacov a má aj svoju kamufláž, môže dôjsť k jej odhaleniu už len tým, že sa zmení okolitá vegetácia, najmä v období skorej jesene až zimy. Samotné fotopasce tohto typu majú veľa neduhov, o ktorých sa až tak nehovorí. Istá verzia fotopasce má IR prísvit, ktorý je vo viditeľnom spektre. To znamená, že diódy IR prísvitu uvidíte aj voľným okom svietiť v tme, čo nepridáva na bezpečnosti voči krádeži.
Druhou nevýhodou fotopasce je stály WiFi hotspot, ktorý fotopasca vysiela a slúži pre pozeranie toho, čo fotopasca nahrala na diaľku, ak ste v jej dosahu s kompatibilnou aplikáciou pre smartfón. Ak si potenciálny zlodej všimne v strede lesa, že je na blízku WiFi sieť, navýši to šancu na odhalenie fotopasce. Metódou RSSI dokáže zistiť približnú vzdialenosť od fotopasce pre Line of Sight a potom to je už len otázka času, kedy sa k nej dostane. Fotopasca nemá žiadny spôsob ochrany SD karty. Samotná fotopasca má možnosť zaheslovania grafického rozhrania a menu, čo zabráni ovládaniu fotopasce, no žiadnym spôsobom neochráni obsah záznamov na SD karte. SD karta je chránená záklopkami fotopasce + možno prípadnou kladkou, ktorá bráni otvoreniu zariadenia a vytiahnutiu SD karty.
Pán mal vyhotovené už aj vlastné experimentálne riešenie ochrany fotopasce, ktoré testoval na vlastnom počítači a to formou HTML súborov, ktoré uložil na SD kartu a kde prepokladá, že na ne záujmová osoba klikne, keď bude prezerať SD kartu. Tieto súbory imitujú rozhranie fotopasce pre nastavovanie parametrov, resetovanie PIN kódu. V skutočnosti toto fejkové rozhranie nerobí nič, iba sa tvári že funguje a na pozadí beží Javascript, ktorý funkciou fetch posielal informáciu o verejnej IP adrese človeka do jeho databázy. Pán pôvodne očakával, že dostane polohu verejnej IP adresy na konkrétne miesto na ulici a chcel pomôcť s vylepšením tohto už existujúceho systému pre dosiahnutie vysokej presnosti. Bol otvorený aj iným riešeniam formou experimentálnych aplikácii pre vlastné použitie na svojom počítači s ktorými si už naloží ďalej tak, ako uzná za vhodné.
Vysvetlil som mu, že reálnu polohu určite nezíska, keďže verejná IP adresa sa mení a iba provider internetu vie, kto (aká konkrétna prípojka) ju v danom čase mala nastavenú. Taktiež som poznamenal nevýhodu HTML súborov, nakoľko ich ktokoľvek môže otvoriť v editore ešte pred spustením a zistiť, čo skutočne robia a môže ho to odradiť od spustenia. Navrhol som preto alternatívne riešenie s využitím Pythonu, kde sa výsledná experimentálna aplikácia vyexportuje ako .exe súbor. Teda pôjde o binárny spustiteľný súbor, kde je výhoda aj v tom, že nikto netuší, čo urobí, lebo sa nedá prečítať. Pri otvorení cez editor vyzerá obsah súboru ako rozsypaný čaj a je možné vylúštiť naozaj len minimálne časti, najmä textového charakteru (výpisy, nadpisy, systémové hlásenia...).
Nevýhoda je v podobe toho, že aplikácia je nepodpísaná, teda od neznámeho vydavateľa. To nie je nezvyčajné a používatelia Windowsu sa s tým stretávajú bežne, napríklad aplikácie bývajú nepodpísané, ak ide o rôzne utility od malých vývojárov. Stačí len vyskakovacie okno SmartScreenu odkliknúť pre spustenie aplikácie a odvtedy už Windows aplikácii dôveruje navždy. Vyššiu dôveryhodnosť zabezpečí aj fakt, že .exe súbor bude mať určitú veľkosť (niekoľko MB) a nebude pôsobiť prázdno, ako HTML súbor s veľkosťou 1 kB. Rovnako tak .exe aplikácia môže mať ľubovoľnú ikonu a tiež názov, ktoré zvýšia dôveru používateľa v spustenie tohto súboru.
Porozmýšľali sme, čo by sa dalo získať o počítači, na ktorom softvér beží a aj na forme, v akej by tento softvér dokázal bežať. Štandardne má Python script príponu .py, alebo .pyw. Formát .py otvára konzolové okno a .pyw ho neotvára a dokonca môže bežať na pozadí, kedy si ho ani nikto nevšimne, že je aktívny, nakoľko beží iba ako proces a nie je aktívny ani dole na lište aplikácii. Idea bola .exe súbor po spustení nakopírovať do počítača, konkrétne do priečinka Pri spustení a spúšťať ho pri štarte Windowsu automatizovane.
Z toho bolo ale nutné upustiť, nakoľko takáto forma kopírovania je typická pre vírusy typu Trojan, čo aj obdobnou formou vyhodnotil Windows Defender bez ohľadu nato, čo script robí. Danú .exe aplikáciu dal Defender do karantény a z priečinka Pri spustení súbor odstránil. Obdobne to bolo aj v prípade, ak sa .exe vložil do menej závažnej zložky a do zložky Pri spustení sa nakopíroval len .bat súbor. Skončilo to rovnako, karanténou súboru.
Rovnako tak pre experimentálnu aplikáciu prevádzkovateľ fotopasce uvažoval aj o tom, že sa na počítači, kde došlo k spusteniu súboru nastaví iné pozadie, prípadne bude v pravidelných intervaloch vyskakovať okno s informáciou o prosbe pre vrátenie fotopasce spolu s kontaktom na majiteľa. Od toho sa ale tiež upustilo.
Nakoniec sme došli k záveru, že chce aplikáciu pre vlastné použitie, ktorá bude mať:
Takáto aplikácia bude mať základ ako .pyw, keďže nepotrebujeme konzolové okno. Áno, všetky tieto veci dokáže Python a vie ich zbierať aj bez vedomia používateľa. Zo svojej podstaty je takáto experimentálna aplikácia spyware vírusom, i keď beží prakticky 3 sekundy. Nevykonáva sa opakovane a beží už len GUI. Na takúto nebezpečnú aktivitu scriptu nezareagoval ani Windows Defender so svojou heuristickou analýzou. Rovnako tak sa nestalo nič ani po tom, čo Defender tento súbor odoslal na analýzu Microsoftu, čo štandardne robí, avšak ani po overení nedošlo ku karanténe súboru, skrátka žiadna reakcia od antivírusového softvéru. Samotný Python potrebuje doinštalovanie knižníc (závislostí), aby bolo možné program vykompilovať do .exe, resp. spustiť aj ako .pyw.
Nižšie popisujem najpoužívanejšie knižnice, ktoré sa v aplikáciách vyskytujú:
Je veľký rozdiel pri prevádzkovaní .pyw súboru a pri prevádzke finálneho .exe súboru po kompilácii, pretože nebežia identicky. Je to dané tím, že .pyw beží v procese Python, ale .exe beží samostatne. Problém sa preto prejaví až pri ostrej .exe appke. Pri volaní podprocesov sa stane, že sa rekurzívne bude .exe aplikácia otvárať znova prakticky donekonečna. Aplikácia pri zavolaní podprocesu znova spustí .exe. Riešením je vytvorenie mechanizmu s tzv. lock file, ktorý zamedzuje viacnásobnému otváraniu .exe, ak už raz beží, už sa znova neotvorí. Pri ukončení scriptu sa lock file zmaže. Lock file sa zvyčajne vytvorí v rovnakej zložke, alebo v inom umiestnení v PC, ktoré sa definuje. To je bežná prax u Python .exe aplikácii.
Treba poznamenať, že architektúra výslednej aplikácie závisí na architektúre Pythonu, ktorá je nainštalovaná v počítači. Ak máte 64-bitový OS a vyexportujete aplikáciu z 64-bitového Pythonu, budete mať 64-bitové .exe. To znamená, že sa na 32-bitových operačných systémoch nespustí. Aj na 64-bitový systém si môžete doinštalovať 32-bitový Python, nakoľko 64-bitový OS vie spúšťať aj 32-bitové aplikácie. V takomto prípade aplikácia exportovaná na 64-bitovom OS s 32-bitovým Pythonom vytvorí 32-bitový .exe súbor, vďaka čomu pobeží na 32 aj 64-bitových Windowsoch. A logicky na 32-bitový Windows nemôžete nainštalovať 64-bitový Python...
Rovnako tak všetky použité knižnice sú kompatibilné s Windowsom Vista až 10, prakticky 11, majú ten istý základ a API volania. Takáto aplikácia pobeží na všetkých dnes bežne používaných Windowsoch. U Windowsu XP takáto aplikácia už zrejme nepobeží, alebo len čiastočne, API asi nebude plne kompatibilné. Preto sa v programoch musí myslieť aj nato, že ak volá niečo neexistujúce, nedôjde k pádu aplikácie, ale daná premenná sa nastaví napr. na N/A, None... Nižšie GUI experimentálnej aplikácie pre "nastavovanie" parametrov fotopasce.
Samotný request so získaním všetkých popísaných informácii a screnshotom zaberie pár sekúnd. Vykoná sa to skôr, ako sa otvorí GUI okno s "nastaveniami" fotopasce. Nastavovanie parametrov dokonca aj koreluje s používateľom. Po nastavení sa zobrazí okno, ktoré mu dá na známosť, že akcia prebehla a vypíše napr: "Nastavenia uložené", "Úspešne vyresetovaný PIN", "Úspešne zmenený pin na 1234". Ak používateľ nemá internet bezprostredne po otvorení aplikácie, vyskočí mu hláška o tom, že potrebuje internet. Tieto alerty môžu byť rôzneho významu a závažnosti. Od informačných (i v modrom krúžku) až po chybové (krížik v červenom krúžku). Po alerte sa aplikácia ukončí, teda aj ak už nabehne internet, používateľ musí alert okno zavrieť a opätovne spustiť .exe experimentálnu aplikáciu.
Na strane servera som vytvoril PHP aplikáciu s API, ktorá umožňuje tieto dáta prijať POST metódou a vie ich vhodne uložiť. Obrázky sa ukladajú do preddefinovaného priečinka, pričom je im priradený náhodný názov za prefixom image_, kde sa kontroluje aj to, či už takýto náhodný názov neexistuje. Screenshot sa vytvorí ako .jpg, ale sú podporované aj ďalšie obrázkové formáty, napr. .png. Screenshot má reálnu veľkosť obrazovky počítača, na ktorej bol vytvorený, Nevykonáva sa resizing. Vďaka tomu je možné vedieť aj to, či používateľ má Full HD monitor, prípadne 4K a tiež či má širokouhlú obrazovku s pomerom strán 16:9, prípadne ultrawide monitor, či ešte starý monitor s pomerom strán 4:3 a samozrejme máme informáciu aj o konkrétnom počte pixelov ako rozlíšenie obrazovky.
Webaplikácia má aj samostatnú PHP podstránku, kde je zoznam všetkých záznamov s preklikom na screenshot, ktorý je uložený na príslušnom serveri s ktorým komunikuje experimentálna aplikácia. Ako môžeme vidieť, počas testovania sme využili 3 operačné systémy Windows 10 s rôznym hardvérom, ktorý sa líšil v procesore, jeho generácii, veľkosti RAM. Pri RAM je možné vidieť zaujímavý detail, že je to použiteľná RAM. Počítač, ktorý má 7,87 GB RAM má v skutočnosti 8 GB RAM. Prečo je to tak? Počítač nemá grafickú kartu a využíva iGPU z procesora Intel HD Graphics 4600, ktorá využíva 130 MB RAM pamäte pre svoj beh. V momente, keď do databázy prídu nové dáta, odošle sa skrz mail server e-mail na adresu prevádzkovateľa, ktorý dostane info + sa môže aj rovno prekliknúť na zaznamenaný screenshot. Mail server musí byť súčasťou hostingu, aby došlo k automatizovanému odoslaniu.
Vyzerá to byť celkom ako efektívny a rýchly spôsob získania informácii o počítači z ktorého bola experimetnálna aplikácia spustená. Na základe verejnej IP adresy je možné získať konkrétnu prípojku na internet (dom, kancelária), skrz názov počítača je možné identifikovať konkrétny počítač v sieti za touto prípojkou a to aj s prispením informácii o hardvéri (procesor, RAM pamäť, Windows a jeho verzia). Konto používateľa, vrátane screenshotu obrazovky môže identifikovať konkrétnu osobu. Častokrát býva používateľské konto s krstným menom človeka, ktorý ho prevádzkuje.
Poďme si ale zrekapitulovať, ako to bude z pohľadu použitia. Vložením SD karty do počítača sa súbor (script) nespustí. Dnes už nefunguje Autorun ako to bolo pri Windowse XP, ktorý bol vychýrený tým, že spustil čokoľvek spustiteľné na USB kľúči, aby používateľ nemusel čakať. Typický príklad zavírovania počítača v tej dobe. Windowsy od tej doby vyspeli a dnes pre spustenie musíte súbor spustiť manuálne.
Používateľ pri prehliadaní SD karty s fotografiami narazí na .exe súbor s názvom, ktorý bude pôsobiť dôveryhodne. Rovnako tak uvidí, že .exe súbor má určitú veľkosť (pre túto aplikaćiu vychádza cca na 22 MB v 64-bitovej a 20 MB v 32-bitovej verzii). Rovnako tak uvidí aj dôveryhodne pôsobiacu ikonu. To ho bude nabádať k spusteniu. Po spustení súboru sa mu za krátku chvíľu otvorí GUI okno nastavení fotopasce. V tom čase už budú všetky informácie o jeho počítači, vrátane screenshotu na serveri majiteľa fotopasce, ktorý dostane okamžitú e-mailovú notifikáciu o tom, že niekto spustil tento softvér a môže sa preklinúť aj na screenshot, ktorý môže napovedať viac.
Ako vyhotovený screenshot teda vyzerá?
Ide o normálny screnshot vyhotovený bezprostredne pred zobrazením GUI okna. Neurobil sa cez PrintScreen, ale skrz Python, ktorý sa spustil a screenshot sa následne poslal na server, kde bude uložený. V pravej spodnej časti je vidieť odporúčanie od Windows Defendera na odoslanie informácii o spustenom súbore, ale ani po odoslaní neprišlo k zablokovaniu súboru, ani po hodine, ani po 3 dňoch. Screenshot má plnú veľkosť 1920x1080 px, čo napovedá aj o tom, že sa používa štandardný širokouhlý monitor s pomerom strán 16:9.
Legálna stránka veci
Je legálne takto zbierať dáta? Nie, ak je to robené bez vedomia používateľa. Je dôležité si uvedomiť, že takéto zbieranie dát je zásah do súkromia a zber osobných údajov. Bez výslovného súhlasu danej osoby je nelegálny, aj keď by išlo o zlodeja, ktorý tento súbor spustil z vášho majetku - SD karty, ktorú ste mali riadne zabezpečenú voči odcudzeniu vo vlastnej fotopasci. Rovnako tak experimentálna aplikácia vykonáva zásah do cudzieho počítačového systému, čo tiež nie je legálne. Keďže túto zodpovednosť na seba preberá prevádzkovateľ fotopasce, ktorý chcel experimentálnu aplikáciu na osobné použitie, je na ňom, ako ďalej s aplikáciou naloží. Rovnako tak nie je možné jednoznačne preukázať, že popisovaná experimentálna aplikácia aj reálne existuje.