Normal view

There are new articles available, click to refresh the page.
Before yesterdayMain stream

Povezava Mikrotik usmerjevalnika v Wireguard omrežje

21 August 2024 at 00:00

WireGuard je sodoben in hiter VPN, ki je bil tudi formalno verificiran, kar pomeni, da za Wireguard protokol obstaja matematični dokaz, da je varen. V tokratnem prispevku si bomo ogledali kako Mikrotik usmerjevalnik povežemo v Wireguard omrežje, a ne kot strežnik, pač pa kot tim. vrstnika (angl. peer).

Mikrotik je blagovna znamka zmogljivih in cenovno dostopnih omrežnih naprav, na katerih teče poseben operacijski sistem RouterOS. Mikrotik omrežna oprema je na voljo tako za domača omrežja (domači usmerjevalniki, WiFi dostopne točke,…), kot tudi za omrežja manjših ali večjih podjetij, na voljo pa so tudi zelo zmogljivi izdelki, ki jih uporabljajo tudi nekateri ponudniki dostopa do interneta.

A najprej vprašanje, zakaj bi Mikrotik usmerjevalnik sploh želeli povezati v Wireguard (VPN) omrežje kot vrstnika? En scenarij uporabe je, da želimo oddaljeno dostopati do njegovega administrativnega vmesnika. To bi sicer lahko naredili tudi preko njegovega javnega IP naslova, a težava je, če ta ni stalen (no, to je sicer rešljivo), predvsem pa, če je usmerjevalnik “skrit” za NAT-om, torej ni neposredno dostopen iz interneta. Rešitev je torej na dlani - usmerjevalnik nastavimo tako, da se bo sam povezal na VPN strežnik, nato pa bomo do njega dostopali preko njegovega VPN naslova.

Na Mikrotik se lahko povežemo preko spletnega vmesnika, preko aplikacije Winbox ali preko SSH povezave. A najprej nekaj predpriprave.

Če želimo na Mikrotik napravah uporabljati Wireguard, moramo imeti nameščen RouterOS v7 ali novejši. Ker bomo Mikrotik povezali v Wireguard omrežje, potrebujemo Wireguard strežnik - predpostavljamo, da ga že imate postavljenega. Iz njega bomo potrebovali:

  • zunanji IP naslov in vrata kamor se bodo tim. vrstniki povezovali;
  • njegov javni ključ;
  • PSK ključ Mikrotik odjemalca (ki ga ustvarimo kar na Wireguard strežniku);
  • razmislimo pa tudi kateri VPN IP naslov bomo dodelili Mikrotiku.

Zdaj pa se vrnimo na Mikrotik. V spletnem vmesniku ali Winboxu odpremo konzolo (če se povežemo preko SSH samodejno vstopimo vanjo) in najprej ustvarimo nov omrežni vmesnik z menom wireguard1, ki posluša na nekih vratih (nastavimo lahko katerakoli, ki niso zasedena, v našem primeru 51821):

/interface/wireguard/add listen-port=51821 name=wireguard1

Če želimo videti seznam Wireguard omrežnih vmesnikov, vpišemo ukaz:

/interface/wireguard/print

Dobimo izpis, kjer vidimo tudi zasebni in javni ključ Mikrotik vrstnika:

Flags: X - disabled; R - running 
 0  R name="wireguard1" mtu=1420 listen-port=51820 private-key="zasebni-kljuc-Mikrotik-vrstnika" public-key="javni-kljuc-Mikrotik-vrstnika"

Opomba, če bi želeli Wireguard vmesnik z imenom wireguard1 odstraniti, to storimo z ukazom: /interface/wireguard/remove wireguard1.

Zdaj dodamo povezavo do Wireguard strežnika:

/interface/wireguard/peers add allowed-address=10.10.7.0/24 endpoint-address=xx.xx.xx.xx endpoint-port=51194 interface=wireguard1 persistent-keepalive=5s public-key="javni-kljuc-wg-streznika" preshared-key="PSK-kljuc-Mikrotik-vrstnika

Razlaga:

  • allowed-address: tukaj vpišemo Wireguard podomrežje (iz Wireguard strežnika), v našem primeru je to 10.10.7.0/24;
  • endpoint-address: javni IP naslov Wireguard strežnika;
  • endpoint-port: vrata, kamor se povezujejo Wireguard vrstniki (privzeto so 51194);
  • interface: Wireguard vmensik za katerega veljano nastavitve (v našem primeru wireguard1);
  • persistent-keepalive: določimo, da bo odjemalec do strežnika ohranjal aktivno povezavo tako, da bo vsakih 5 sekund (5s) na strežnik poslal ping;
  • public-key: javni ključ Wireguard strežnika;
  • preshared-key: PSK ključ Mikrotik vrstnika.

Seznam vrstnikov lahko tudi pogledamo (v našem primeru imamo seveda samo enega):

/interface/wireguard/peers print
Columns: INTERFACE, PUBLIC-KEY, ENDPOINT-ADDRESS, ENDPOINT-PORT, ALLOWED-ADDRESS, PRESHARED-KEY, PERSISTENT-KEEPALIVE      
# INTERFACE   PUBLIC-KEY                                    ENDPOINT-ADDRESS  ENDPOINT-PORT  ALLOWED-ADDRESS  PRESHARED-KEY                                 PE
0 wireguard1  javni-kljuc-Mikrotik-vrstnika                 xx.xx.xx.xx               51194  10.10.7.0/24     PSK-kljuc-Mikrotik-vrstnika                   5s

Kratka opomba, če bi želeli ta vnos (z zaporedno številko 0, označeno na začetku) odstraniti, uporabimo ukaz: /interface/wireguard/peers> /interface/wireguard/peers/remove numbers=0.

Zdaj je na Wireguard strežniku potrebno v nastavitveno datoteko wg0.conf dodati:

  • javni ključ Wireguard strežnika
  • PSK ključ Mikrotik vrstnika
  • IP naslov Mikrotik vrstnika (v našem primeru smo uporabili 10.10.7.155)

Primer (nastavitvena datoteka /etc/wireguard/wg0.conf):

[Peer]
# MojMikrotik
PublicKey = javni-kljuc-Mikrotik-vrstnika
PresharedKey = PSK-kljuc-Mikrotik-vrstnika
AllowedIPs = 10.10.7.155/32

Na tej točki na Wireguard strežniku ponovno naložimo nastavitve:

systemctl reload wg-quick@wg0.service

Vrnemo se na Mikrotik. Zdaj je na Mikrotiku na Wireguard omrežni vmesnik potrebno dodati IP naslov, ki smo ga določili na strežniku:

/ip address add address=10.10.7.155/32 interface=wireguard1

Nato pa še tim. omrežno pot (angl route):

/ip route add dst-address=10.10.7.0/24 gateway=wireguard1

S tem je Mikrotik povezan v Wireguard omrežje. A verjetno boste opazili, da povezava iz Wireguard omrežja do Mikrotika ne deluje, saj jo onemogoča požarni zid. Treba je torej dodati pravilo, da Mikrotik dovoli povezave iz Wireguard omrežja:

/ip firewall filter add action=accept chain=input comment="Access from Wireguard network" in-interface=wireguard1 src-address=10.10.7.0/24

Vendar pa verjetno povezava kljub temu ne bo delala, saj se vsako novo pravilo samodejno doda na konec seznama pravil. Pravilo je potrebno prestaviti nekoliko višje navzgor, točneje, takoj pred pravilo, ki zavrže vse paketke, ki ne prihajajo iz LAN omrežja. Najprej izpišemo seznam pravil:

/ip firewall filter print

Nato pa to zadnje pravilo premaknemo na višje mesto:

/ip firewall filter move N destination=D

Razlaga:

  • N je trenutna zaporedna številka pravila
  • D je na katero mesto naj se prestavi to pravilo

Primer trenutnih pravil, s katerimi blokiramo vse zunanje povezave (razen iz Wireguard omrežja), dovolimo pa povezave znotraj LAN omrežja in povezave navzven:

/ip firewall filter print

Izpis seznama pravil:

Flags: X - disabled, I - invalid; D - dynamic 
 0  D ;;; special dummy rule to show fasttrack counters
      chain=forward action=passthrough 

 1    ;;; defconf: accept established,related,untracked
      chain=input action=accept connection-state=established,related,untracked 

 2    ;;; defconf: drop invalid
      chain=input action=drop connection-state=invalid 

 3    ;;; defconf: accept ICMP
      chain=input action=accept protocol=icmp 

 4    ;;; defconf: accept to local loopback (for CAPsMAN)
      chain=input action=accept dst-address=127.0.0.1 

 5    ;;; Block new connections from outside
      chain=input action=drop connection-state=new in-interface-list=WAN 

 6    ;;; Access from Wireguard network
      chain=input action=accept src-address=10.10.7.0/24 in-interface=wireguard1 

 7    ;;; defconf: drop all not coming from LAN
      chain=input action=drop in-interface-list=!LAN 

 8    ;;; defconf: accept in ipsec policy
      chain=forward action=accept ipsec-policy=in,ipsec 

 9    ;;; defconf: accept out ipsec policy
      chain=forward action=accept ipsec-policy=out,ipsec 

10    ;;; defconf: fasttrack
      chain=forward action=fasttrack-connection hw-offload=yes connection-state=established,related 

11    ;;; defconf: accept established,related, untracked
      chain=forward action=accept connection-state=established,related,untracked 

12    ;;; defconf: drop invalid
      chain=forward action=drop connection-state=invalid 

13    ;;; defconf: drop all from WAN not DSTNATed
      chain=forward action=drop connection-state=new connection-nat-state=!dstnat in-interface-list=WAN 

S tem je Mikrotik postal povezan v Wireguard omrežje. Do njega lahko dostopamo preko IP naslova 10.10.7.155.

Vsekakor se iz nekega zunanjega strežnika in iz Wireguard omrežja splača preveriti ali požarni zid deluje. Najprej preverimo odprta vrata na Mikrotiku iz Wireguard omrežja: nmap 10.10.7.155. Izpis:

Starting Nmap 7.93 ( https://nmap.org ) at 2024-08-20 13:33 UTC
Nmap scan report for 10.10.7.155
Host is up (0.057s latency).
Not shown: 993 closed tcp ports (reset)
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
53/tcp   open  domain
80/tcp   open  http
2000/tcp open  cisco-sccp
8291/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 1.15 seconds

Nato pa še preko zunanjega IP naslova Mikrotika (nmap xx.xx.xx.xx):

Starting Nmap 7.93 ( https://nmap.org ) at 2024-08-20 13:33 UTC
Nmap scan report for xx.xx.xx.xx
Host is up (0.052s latency).
All 1000 scanned ports on xx.xx.xx.xx are in ignored states.
Not shown: 1000 filtered tcp ports (no-response)

Nmap done: 1 IP address (1 host up) scanned in 53.08 seconds

Iz nmap izpisa je razvidno, da administrativni in drugi vmeniki Mikrotika iz njegovega javnega IP naslova niso dosegljivi, iz Wireguard omrežja pa je vse dosegljivo.

Z opisanim postopkom smo torej Mikrotik napravo nastavili, da se ob zagonu samodejno poveže v VPN omrežje in nam je potem iz VPN omrežja tudi vedno dosegljiva.

GrapheneOS - zaščita pred zasegom podatkov iz telefona

18 July 2024 at 00:00

Večina posameznikov na mobilnih telefonih hrani številne zelo osebne podatke, od fotografij, elektronske pošte, do sporočil, ki si jih izmenjujejo s svojimi bližnjimi. Nekateri, npr. preiskovalni novinarji in politični aktivisti, pa imajo na svojih mobilnih telefonih tudi druge občutljive podatke, ki jih ne bi želeli razkriti, saj bi njihovo razkritje lahko ogrozilo njihove vire ali aktivnosti. Enako velja tudi za odločevalce, uslužbence v podjetjih, itd.

Uporabniki zato svoje mobilne telefone zaklepajo, za odklep telefona (in s tem dostop do podatkov) pa so na voljo različne metode: odklep z geslom, s PIN kodo, z vzorcem za odklepanje, s pomočjo prstnega odtisa ali s pomočjo prepoznave obraza.

Slednji dve metodi sta biometrični in za uporabnike zelo priročni, a s stališča varnosti precej problematični. S stališča varnosti je namreč pomembno, da identiteta (“Kdo si?”) in avtentikacija (“Kako lahko to dokažeš?”) ostaneta ločeni vprašanji. Pri uporabi biometrije temu ni tako, saj se biometrični parametri smatrajo kot dokaz identitete. To je še posebej problematično v primeru, da biometrične parametre nekdo ponaredi oz. ukrade, saj jih v takem primeru - za razliko od gesel ali šifrirnih ključev - ni mogoče spremeniti ali preklicati. Poleg tega so biometrični podatki praviloma sami po sebi javni.

Sodobni telefoni za prvi odklep po zagonu (tim. BFU - Before First Unlock) večinoma zahtevajo eno izmed ne-biometričnih metod. Ko pa je telefon po zagonu prvič uspešno uspešno odklenjen, se za odklep zaslona lahko uporablja ena izmed biometričnih metod.

To lahko predstavlja težavo. Znani so namreč primeri, ko je naključni mimoidoči posnel nezakonito ravnanje policije, policist pa je nato posamezniku vzel mobilni telefon, ga prisilno odklenil s pomočjo prepoznave obraza in potem zanj sporne fotografije ali posnetke izbrisal.

Dodaten izziv za zasebnost predstavlja tudi tim. forenzični zaseg podatkov. Gre za skupek tehnik, ki se uporabljajo v digitalni forenziki, s katerimi je mogoče s pomočjo različnih orodij in (hekerskih) tehnik mobilni telefon odkleniti in potem dostopati do datotek na njem. Žal teh tehnik ne uporabljajo samo “uradni” digitalni forenziki in policija v demokratičnih državah, pač pa tudi hekerji, kiberkriminalci in različni avtoritarni režimi.

Večino mobilnih telefonov, tako z operacijskim sistemom Android, kot tudi iOS, je mogoče odkleniti s pomočjo različnih hekerskih tehnik (s tim. vdorom) ali z ugibanjem PIN kode/gesla. Večina telefonov ima sicer omejeno število poskusov za ugibanje gesla, vendar orodja kot na primer GrayKey podjetja Magnet Forensics ali Universal Forensic Extraction Device podjetja Cellebrite te omejitve pri večini telefonov odstranijo in potem z metodo grobe sile gesla ugibajo brez omejitev.

GrapheneOS ima zato implementirane številne tehnike in izboljšave s katerimi otežuje tako vdore v telefon (tim. “hekanje”), kot tudi neomejeno ugibanje PIN kode/gesla. Posledično je v mobilne telefone z nameščenim GrapheneOS izjemno težko vdreti, kar priznavajo tudi vodilni ponudniki opreme za digitalno forenziko mobilnih telefonov. Pobegli dokumenti podjetja Cellebrite (pa tudi dokumenti podjetja Magnet Forensics) razkrivajo, da za forenzični zaseg podatkov iz telefonov z nameščenim GrapheneOS ta podjetja nimajo rešitev (razen v primeru soglasja uporabnika oz. tim. prostovoljnega odklepa telefona s strani uporabnika).

V takih primerih torej napadalcu ne preostane nič drugega kot to, da telefon skuša odkleniti prisilno. Kar je pravzaprav v primeru biometrije relativno enostavno in vsaj v ZDA tudi povsem zakonito.

Prisilno odklepanje mobilnih naprav

Prvi dokumentirani primer prisilnega odklepa telefona s pomočjo biometrije sega v leto 2018, ko je policija 28-letnega Američana Granta Michalskega osumila razširjanja otroške pornografije. Policija mu je telefon zasegla, sodišče pa je v odredbi dovolilo, da telefon (šlo je za iPhone X) tudi prisilno odklenejo s pomočjo Face ID tehnologije.

Sicer v večini demokratičnih držav velja privilegij zoper samoobtožbo, v skladu s katerim se nihče ni dolžan izpovedati zoper sebe ali svoje bližnje. To pomeni, da osumljenec preiskovalnim organom ni dolžan povedati svojega gesla. V ZDA je ta pravica opredeljena v tim. Petem amandmaju, v EU v Charter of Fundamental Rights and Freedoms v 37. členu, v Sloveniji pa je opedeljen v četrti alineji 29. člena Ustave Republike Slovenije.

Vendar pa so ameriška (in tudi druga) sodišča že večkrat presodila, da privilegij zoper samoobtožbo ne velja v primeru biometričnih podatkov (in tudi DNK vzorcev), saj v tem primeru ne gre za pričanje (primer United States v. Jeremy Travis Payne).

Drugačna pravila veljajo tudi ob prehodu meje. V ZDA ima recimo US Customs and Border Protection pravico pregledovati potnike brez suma za kakršnokoli kaznivo dejanje. Res je sicer, da je ameriško Vrhovno sodišče leta 2014 presodilo, da sta preiskava mobilnega telefona in zaseg digitalnih podatkov na njem brez sodne odredbe nezakonita (primer Riley v. California, 573 U.S. 373 (2014)), vendar trenutno te odločitve ni še nihče testiral v primeru tim. izjeme pri preiskovanju ob prehodu meje (angl. border search exception).

V praksi se sicer najbolj pogosto dogaja, da mejni organi uporabnika skušajo prepričati, da telefon odklene prostovoljno, to prepričevanje pa lahko vključuje tudi krajše pridržanje, zavajanje, da je uporabnik dolžan odkleniti mobilno napravo (kar ne drži), daljšo (a na trajno) zaplembo telefona, predvsem pa lahko potniku v takem primeru zavrnejo vstop v državo. Prav tako lahko mejni organi sami skušajo forenzično zlomiti tak telefon in tako priti do podatkov, v primeru da je naprava zaklenjena z biometrijo, pa jo lahko tudi prisilno odklenejo. Podobna pravila ob prehodu meje sicer veljajo pri večini držav.

Nekatere države pa so celo sprejele zakonodajo, ki bi od osumljencev zahtevala obveznost posredovanja šifrinih gesel. Tak primer sta npr. britanski Regulation of Investigatory Powers Act ter francoski tim. ““decryption orders”, ki pa so trenutno v presoji na Evropskem sodišču za človekove pravice (primer Minteh v. France)). Vendar pa ostaja dejstvo, da osumljenca ne more nihče prisiliti, da pove geslo, če ga je (npr. zaradi stresa) preprosto pozabil.

Obstaja pa še druga možnost. Na forumih GrapheneOS opisujejo vsaj en primer nekoga na Švedskem, ki je imel na svojem mobilnem telefonu nameščen GrapheneOS. Policija je vedela, da telefona s forenzičnimi orodji ne bodo mogli odkleniti, zato so ga tajno opazovali in počakali, da je telefon odklenil, v tistem trenutku pa so ga zagrabili in mu telefon zasegli.

Zaščita pred odklepanjem telefonov z GrapheneOS

GrapheneOS ima sicer implementiranih kar nekaj zaščitnih mehanizmov, ki otežujejo tovrstne napade.

Kot omenjeno, ima GrapheneOS implementirane številne mehanizme, ki blokirajo forenzična in hekerska orodja. Eden izmed njih (obstajajo pa tudi številni drugi) je možnost, ki onemogoča nove USB povezave ko je telefon zaklenjen. Če torej napadalec zaklenjen telefon preko USB vmesnika poveže z računalnikom (oz. forenzično napravo), taka USB povezava sploh ne bo mogoča in forenzična naprava sploh ne bo zaznala povezave do telefona.

Naslednji zanimiv mehanizem je tim. PIN scrambling oz. “premešanje” PIN številke. Če omogočimo to možnost, bodo številke za vnos PIN kode naključno razporejene. Ugotavljanje PIN-a s pomočjo opazovanja uporabnika (tim. shoulder surfing napad) je torej v tem primeru oteženo, še posebej, če uporabnik uporablja zaščitno polarizacijsko folijo.

PIN scrambling (premešanje PIN številke)

PIN scrambling (premešanje PIN številke).

Še en zanimiv mehanizem je samodejni ponovni zagon telefona (angl. auto reboot feature).

Za kaj gre? Ko se operacijski sistem na telefonu zažene, je telefon v stanju imenovanem BFU (Before First Unlock) - torej “stanje pred prvim odklepom”. V tem stanju je v telefon praktično nemogoče vdreti in iz njega s forenzičnimi ali hekerskimi orodji izvleči podatke. Ko pa uporabnik prvič vnese PIN kodo ali geslo, pa gre telefon v stanje imenovano AFU (After First Unlock) - stanje po prvem odklepu. Ob tem se podatki na notranjem pomnilniku telefona dešifrirajo, šifrirni ključi pa so nato shranjeni v notranjem pomnilniku telefona.

GrapheneOS ima sicer implementirane številne mehanizme, ki forenzičnim in hekerskim orodjem onemogočajo, da bi uspešno izvlekla šifrirne ključe iz notranjega pomnilnika. Vendar pa je - vsaj v teoriji - uspešen napad na telefon v AFU stanju bolj verjeten, kot če je telefon v tim. BFU stanju.

GrapheneOS ima nastavitev, ki omogoča, da se telefon, ki je v AFU stanju, a po določenem času ni bil odklenjen - samodejno ponovno zažene. S tem se telefon vrne v BFU stanje, in ekstrakcija podatkov iz njega je praktično nemogoča.

Privzeto je ta čas 18 ur (če zaslon telefona v tem času ne bo odklenjen, se bo telefon samodejno ponovno zagnal), vendar pa je ta interval mogoče poljubno spremeniti - celo na samo 10 minut.

Praviloma namreč traja nekaj časa, da preiskovalci začnejo forenzično preiskavo naprav, ki so jih zasegli. Tipično je to lahko nekaj dni. Če bo torej od samega zasega (ali pa kraje oz. izgube) telefona, pa do začetka postopka forenzičnega zasega preteklo dovolj časa, se bo telefon samodejno ponovno zagnal, se s tem vrnil v BFU način, zaseg podatkov iz njega pa bo praktično nemogoč.

Še en zanimiv varnostni mehanizem pa so pri GrapheneOs uvedli pred kratkim. Gre za tim. “prisilna gesla/PIN šteilke” (angl. duress password/PIN).

Prisilno geslo oz PIN koda je posebno geslo (oz. PIN koda), ki si ga nastavimo v nastavitvah. S tem geslom oz. PIN kodo pa se telefona ne odklene, pač pa se ob vnosu nepovratno pobriše (vključno z eSIM karticami).

Prisilna gesla lahko pridejo zelo prav v primeru, ko napadalec mobilni telefon uporabniku nasilno (nezakonito) vzame in od njega zahteva, da ga odklene. V primeru, da mobilni telefon zaseže policija z odredbo, pa bi vnos prisilnega gesla lahko predstavljal tim. uničevanje dokazov (angl. tampering with evidence) oz. tim. oviranje pravice (angl. obstruction of justice).

Vendar pa kot rečeno, osumljencu gesla za odklep ni potrebno povedati. Lahko pa ima uporabnik prisilno geslo oz. PIN kodo zapisano na kakšnem listku, zataknjenem za ovitek telefona. In če bo napadalec listek našel in PIN kodo vnesel sam, bo s tem tudi sam pobrisal telefon.

Zaščita v primeru uporabe biometrije

Kot smo torej videli, v primeru, da za zaklep telefona uporabljamo PIN kodo ali geslo, obstaja kar nekaj zaščit, ki otežijo uspešen zaseg podatkov iz telefona. Težava pa je, če za odklep zaslona uporabljamo biometrijo - torej prstni odtis.

Vendar obstaja rešitev tudi za to. Najdemo jo v obliki posebne aplikacije Private Lock (dostopna je na tržnici F-Droid).

Aplikacija PrivateLock

Aplikacija PrivateLock.

Aplikacija zahteva res minimalno dovoljenj (ne zahteva niti dostopa do omrežja), deluje pa tako, da ko telefon zaklene takoj, ko ga dovolj močno stresemo. Stopnjo občutljivosti tresenja lahko nastavimo med nastavitvami. Telefona, ki je zaklenjen na ta načina, pa naslednjič ni več mogoče odkleniti z biometrijo (prstnim odtisom) oz. vzorcem za odklepanje (vlečenjem), pač pa je potrebno vnesti geslo. (Po uspešnem vnosu gesla je biometrično odklepanje oz. vzorec za odklepanje spet normalno aktiven.)

Nastavitve PrivateLock

Nastavitve PrivateLock.

Aplikacija torej omogoča naslednji scenarij uporabe: če skuša napadalec uporabniku telefon na silo vzeti iz rok, ali pa nanj na silo pritisniti prst, uporabnik telefon samo dovolj močno zatrese (ali ga spusti na tla) - in telefon se bo samodejno zaklenil.

Odklep sedaj ne bo več mogoč z biometrijo, pač pa samo s PIN kodo ali geslom. Tega pa uporabniku ni treba povedati, oziroma lahko vpiše prisilno geslo ali zavede napadalca, da prisilno geslo vnese sam - in telefon se bo pobrisal.

In če odklep ne bo izveden v času do naslednjega samodejnega zagona, se bo telefon samodejno vrnil v tim. BFU način, zaseg podatkov s forenzičnimi in hekerskimi orodji iz njega pa bo praktično nemogoč.

Vse opisani mehanizmi seveda ne nudijo absolutne zaščite pred dostopom do podatkov na mobilnem telefonu. Vseeno pa v kombinaciji pokrijejo številne scenarije napadov in s tem precej izboljšajo zaščito zasebnosti uporabnika mobilnega telefona.

Reševanje ZFS

16 July 2024 at 00:00

Prejšnji teden sem se odločil posodobiti operacijski sistem Debian na enem izmed svojih strežnikov. Posodobitev je načeloma preprosta - v datoteko sources.list je treba vpisati nova skladišča programskih paketov, nato pa se požene apt-get -y update, apt-get -y upgrade ter apt-get -y full-upgrade (pa še kakšno malenkost). Vse to sem lepo naredil in na koncu je preostal le še ukaz reboot, ki ponovno zažene sistem. Minuta ali dve čakanja - in strežnik bi se moral zbuditi s posodobljenim operacijskim sistemom. Le da se to ni zgodilo. Niti po petih, niti po desetih minutah. Kar je… znak za alarm. Še posebej, če se strežnik nahaja na drugem koncu… Slovenije (ali pa Evrope, saj je vseeno).

PiKVM

No, na srečo je bil na strežnik priključen PiKVM. Gre za napravico, ki omogoča oddaljen dostop in oddaljeno upravljanje računalnikov. PiKVM je v osnovi dodatek (tim. “klobuk” oz. angl. hat), ki ga priklopimo na RaspberryPi. Nato pa PiKVM priključimo na računalnik namesto monitorja in tipkovnice/miške - v tem primeru nam PiKVM predstavlja virtualni monitor, virtualno tipkovnico, miško, CD, USB ključek, itd. Preko tega nato lahko računalnik ali strežnik oddaljeno upravljamo (vstopimo lahko tudi v BIOS, virtualno pritisnemo gumb za izklop ali gumb za reset) - in to kar preko spletnega brskalnika. Programska oprema je popolnoma odprtokodna, zadeva pa podpira tudi priklop na KVM razdelilec, kar nam omogoča oddaljeno upravljanje več računalnikov - to je recimo idealno za montažo v podatkovni center.

PiKVM ob nakupu

PiKVM ob nakupu.

Skratka, ko se strežnik nekaj časa ni več odzival, sem se povezal na PiKVM in šel pogledat kaj se je dejansko zgodilo. In zgodila se je… katastrofa.

Težava

Strežnik je namreč po ponovnem zagonu obstal v initramfs. Aaaaaa! Na dnu zaslona pa se je svetilo še zadnje opozorilo preden je sistem dokončno izdihnil - ALERT! ZFS=rpool/ROOT/debian does not exists. Dropping to a shell!. V obupu sem spregledal tisti “s” in prebral “hell”…

V tistem trenutku sem se spomnil, da je bil na korenskem razdelku strežnika seveda nameščen ZFS datotečni sistem - in to šifriran - ob nadgradnji pa sem seveda pozabil ročno omogočiti tim. jedrne module (angl. kernel modules), ki bi omogočili, da operacijski sistem ob zagonu prepozna ZFS. In da bi bila stvar še hujša - na strežniku je teklo (no, zdaj pač ne več) več virtualnih strežnikov. Ki so bili sedaj seveda vsi nedosegljivi.

Opomba. ZFS (Zettabyte File System) je napreden datotečni sistem, ki je znan po svoji zanesljivosti, razširljivosti, uporabi naprednih tehnik za preverjanje in popravljanje napak (kar zagotavlja, da so podatki vedno dosledni in brez poškodb), uporabi kompresije in deduplikacije, itd. Skratka, idelaen za strežniška okolja.

Dobro, zdaj vemo kaj je problem, ampak kako ga rešiti?

Načrt za njeno rešitev

Da si vsaj malo opomorem od pretresa, sem si najprej pripravil močno kavo. Odločitev se je izkazala za strateško, saj se je reševanje sistema zavleklo pozno v noč (in še v naslednje dopoldne).

Po krajšem razmisleku se mi je v glavi zarisal naslednji načrt. Najprej sistem zaženem iz “Live Debian CD-ja”, na ta začasni sistem namestim podporo za ZFS, priklopim ZFS diskovje, se “chroot-am” v stari sistem, tam popravim nastalo škodo in vse skupaj ponovno zaženem. In to je to!

Na tej točki bi se v kakšnem starem filmu samo še vsedel na konja in odjahal v sončni zahod, ampak kot se je izkazalo, je bila pot do konja (in njegovega sedla)… še precej trnova. Pa pojdimo po vrsti.

PiKVM v akciji

PiKVM v akciji.

Najprej sem na PiKVM prenesel datoteko debian-live-12.6.0-amd64-standard.iso, jo priklopil kot navidezni CD, ter zagnal strežnik. To je bilo resnično enostavno in PiKVM se je ponovno izkazal za vreden svojega denarja.

Se je pa že kar na začetku izkazalo, da strežnik prepoznava samo ameriško tipkovnico. In ker imam jaz slovensko, je bilo treba najprej ugotoviti katero tipko moram pritisniti, da dobim točno tisti poseben znak, ki ga potrebujem. No, tule je nekaj v mojem primeru najpogosteje uporabljenih znakov na slovenski tipkovnici in njihovi “prevodi” na ameriško tipkovnico:

- /
? - 
Ž |
+ =
/ &

Luč na koncu tunela

Naslednji korak je bil, da v /etc/apt/sources.list tim. “živega sistema” dodam še skladišče contrib. Nato pa sem že lahko namestil podporo za ZFS: sudo apt update && sudo apt install linux-headers-amd64 zfsutils-linux zfs-dkms zfs-zed.

Po minuti ali dveh, pa sem že lahko naložil ZFS jedrne module: sudo modprobe zfs. Ukaz zfs version je pokazal, da podpora za ZFS zdaj deluje:

zfs-2.1.11-1
zfs-kmod-2.1.11-1

No, prvi korak je uspel, sedaj pa je bilo v sistem potrebno “samo še” priključiti obstoječe diskovje. Najprej sem naredil ustrezno mapo, kamor bom priklopil diskovje: sudo mkdir /sysroot.

Nato pa sem skušal nanjo priključil svoj “rpool” ZFS. Spodnji ukazi so zgolj približni (verjetno je treba narediti še kaj, recimo nastaviti tim. mountpoint), so pa lahko vodilo komu, ki bo imel podobne težave. Naj seveda dodam, da ni šlo povsem enostavno in je bilo potrebno kar nekaj telovadbe, da sem uspel priti do končnega cilja.

sudo zpool import -N -R /sysroot rpool -f

sudo zpool status
sudo zpool list
sudo zfs get mountpoint

Na tej točki sem vnesel šifrirno geslo: sudo zfs load-key rpool… in preveril, da je ZFS odklenjen: sudo zfs get encryption,keystatus.

Sedaj pa priklop: sudo zfs mount rpool/ROOT/debian. In evo, podatki so bili vidni in kot je kazalo ni bilo nič izgubljenega!

Oživljanje “pacienta”…

Končno je sledil chroot v stari sistem:

sudo mkdir /sysroot/mnt
sudo mkdir /sysroot/mnt/dev
sudo mkdir /sysroot/mnt/proc
sudo mkdir /sysroot/mnt/sys
sudo mkdir /sysroot/mnt/run
sudo mount -t tmpfs tmpfs /sysroot/mnt/run
sudo mkdir /sysroot/mnt/run/lock

sudo mount --make-private --rbind /dev /sysroot/mnt/dev
sudo mount --make-private --rbind /proc /sysroot/mnt/proc
sudo mount --make-private --rbind /sys /sysroot/mnt/sys

sudo chroot /sysroot/mnt /usr/bin/env DISK=$DISK bash --login

Zdaj sem bil torej uspešno povezan v stari (“okvarjeni”) sistem. Najprej je bilo vanj potrebno namestiti ZFS podporo:

apt install --yes dpkg-dev linux-headers-generic linux-image-generic
apt install --yes zfs-initramfs
echo REMAKE_INITRD=yes > /etc/dkms/zfs.conf

…z manjšimi težavami

Seveda se je vmes pojavila še ena napaka, in sicer nameščanje programske opreme ni bilo možno zaradi okvarjenega systemd paketa. To sem rešil z:

sudo rm /var/lib/dpkg/info/systemd*
sudo dpkg --configure -D 777 systemd
sudo apt -f install

Potem so se seveda pojavile še nerešene odvisnosti… kako točno sem to uspel rešiti se niti ne spomnim več, pomagali pa so naslednji ukazi (ne nujno v tem vrstnem redu):

dpkg --force-all --configure -a
apt --fix-broken install
apt-get -f install

Zdaj je bilo potrebno priklopiti še efi razdelek (za katerega je bilo potrebno najprej ugotoviti kje točno se sploh nahaja):

cp -r /boot /tmp
zpool import -a
lsblk
mount /dev/nvme0n1p2 /boot/efi
cd /tmp
cp * /boot/

Zdaj pa zares!

Končno sem lahko pognal ukaze s katerimi sem dodal ZFS jedrne module v jedro operacijskega sistema:

update-initramfs -c -k all
dkms autoinstall
dkms-status
update-grub
grub-install

No, in končno je sledil ponovni zagon sistema, po njem pa je bilo treba popraviti še mesto priklopa ZFS sistema (zfs set mountpoint=/ rpool/ROOT/debian)… še en ponovni zagon - in stari sistem je vstal od mrtvih.

Postfestum sanacija nastale škode

Zaradi silnega čaranja in ne povsem dokončane nadgradnje, je bilo potrebno namestiti manjkajoče programske pakete, ponovno namestiti nekaj systemd paketov in odstraniti stara jedra operacijskega sistema. Vse seveda ročno.

Aja, pa iz nekega razloga je ob posodobitvi izginil SSH strežnik. Ampak to rešiti je bila sedaj mala malica.

Sledil je reboot in nato še enkrat reboot, da vidim, če res vse deluje.

Konec dober, vse dobro

In zdaj deluje. O, kako lepo deluje! ZFS je kriptiran, sistem se po vnosu gesla za odklep lepo zažene, prav tako se samodejno zaženejo virtualni strežniki. PiKVM pa je dobil prav posebno mesto v mojem srcu.

Pa do naslednjič, ali kako že rečejo! :)

P. S. Hvala tudi Juretu za pomoč. Brez njegovih nasvetov bi vse skupaj trajalo precej dlje.

GrapheneOS and forensic extraction of data

29 May 2024 at 00:00

GrapheneOS is an Android-based, open source, privacy and security-focused mobile operating system for mobile phones. It is one of the most secure and privacy protecting operating systems (and yes, it does this task comparable and in some scenarios - especially regarding privacy - even better than iOS, but we will come to that later).

However, in the beginning of May, someone started an attack on GrapheneOS across social media platforms. The perpetrators were misrepresenting consent-based data extraction as GrapheneOS being compromised. Which would be funny if it wasn’t so stupid. So let’s see what happened and what actually consent-based data extraction means.

Digital forensics

Digital forensics is the process of uncovering and analysing electronic data in order to gather evidence for legal proceedings. It involves the use of various techniques and tools to examine digital devices such as computers, smartphones, and storage media to identify, preserve, analyse, and present digital evidence.

Digital evidence refers to any data or information that is stored or transmitted in digital form and can be used as evidence in a legal investigation or trial. Digital evidence is often used in criminal investigations to help establish a suspect’s guilt or innocence, and can also be used in civil litigation, regulatory investigations, and other legal proceedings.

Unfortunately, sometimes digital forensics can be abused. It can be used against investigative journalists or political activists, it can be used for privacy violation, to intimidate or harass someone, to tamper with evidence, etc. That is why GrapheneOS developers are working hard to protect mobile phones from tampering and try to make data extraction without user’s consent as hard as possible.

Cellebrite

Cellebrite is a leading Israeli company in the digital intelligence and digital forensics field. Their main digital forensics tool is called Universal Forensic Extraction Device (UFED), and is used to extract and analyze data from mobile devices for investigations.

They are selling their equipment to governments all around the world, and their tools are mostly used for legitimate purposes. Unfortunately they are selling their tools to authoritarian regimes too. Cellebrite’s customer list has included authoritarian regimes in Belarus, Russia, Venezuela, and China, death squads in Bangladesh, military juntas in Myanmar and those seeking to abuse and oppress in Turkey, UAE, and elsewhere.

Data extraction

As mentioned, digital forensics tools first try to extract data from mobile device. This is the initial step in a digital forensics investigation.

The problem for digital forensics is, what if mobile phone is locked? How to extract data from a locked device?

There are several options, but basically three approaches exist.

First option is so called consent-based data extraction. This simply means that user voluntary unlocks their device (or provides PIN code or password), and forensic tool then extracts data from unlocked device.

Why would someone voluntary unlock their device? Well, maybe the owner of the device wants to cooperate with the investigators. Maybe he is a victim of criminal activity and wants to provide evidence against the perpetrators. Maybe he knows that data will prove his innocence. Or something else.

The question is of course, what if user do not want to provide PIN code or password or to unlock their phone?

In that case, there are two general approaches of digital forensic examination. The first option is to try to hack a mobile device so it gets unlocked (and then extract the data). And the other is to try to guess PIN code or password in order to unlock the device and the extract the data.

Companies like Cellebrite are offering various tools, that can try to hack into the locked mobile phone and then extract the data. And their tools also offer a possibility to “guess” PIN code or password, in order to unlock the device.

But first we need to understand that from the digital forensics point of view, mobile phone can basically be in two states.

First is called BFU (Before First Unlock), and it simply means a device that has been turned off or rebooted and never subsequently unlocked by entering the correct PIN or passcode. The second is called AFU (After First Unlock), and it means that device has been unlocked after reboot (meaning that encryption keys are stored in internal memory of the device).

Technically, there is important difference between the two. BFU devices (that hasn’t been unlocked with a PIN or passcode) mostly contains encrypted data. Since the first unlock of the device also decrypts the device (technically: unlocks the decryption key, so device can access the data stored in internal storage), most data on the device in that case is inaccessible for forensic analysis. Technically that means that data are encrypted at rest.

AFU devices (that has been unlocked with the correct passcode after powering on, or restarting) contains decryption key in it’s internal memory, and that key is used to decrypt files in internal storage. In that case most data on the device becomes accessible for forensic analysis, because data in that state are decrypted for normal use. However, in that case screen lock could still been activated, meaning, that forensic investigator needs to unlock the screen first, and then can extract the data.

From the user’s point of view this simply means that a locked device in BFU state presents significant challenges for data extraction, while an unlocked device (in AFU state) offers greater access to extract the data.

Data extraction approaches

As already mentioned, AFU devices are easily approached for extraction. General approach here is to hack into the locked mobile phone (by exploiting some software vulnerability) in order to disable or bypass a screen lock, and then extract the data.

In case of BFU devices, where data in internal storage are still encrypted, the forensic examinator needs to “guess” PIN code or password, in order to unlock the device. Usually this is done by so called brute forcing. This simply means that a forensic tool tries to guess the correct PIN or password by going through all possible combination, until the correct one is found.

Cellebrite’s capabilities

In April 2024 Cellebrite published a list of their capabilities provided to customers. The list shows that they can successfully exploit every non-GrapheneOS Android device brand. They can do this for devices in AFU and BFU states. This means, that Cellebrite’s tools can unlock (and then extract data) every Android device on the market.

Android capabilities

Android capabilities.

Android capabilities

Android capabilities.

According to Cellebrite’s documents, they have similar capabilities for iOS devices too. Not all, but for many of them. In fact, it is only the latest device generation and OS versions which are not fully supported yet (however, it is fair to mention, that most iPhone users are getting iOS updates automatically). Will they be able to develop exploits for the later iOS devices too? We do not know that, but we know, that NSO (an Israeli company developing Pegasus spyware) already did that, right after iOS 17 has been released in September 2023.

iOS capabilities

iOS capabilities.

iOS capabilities

iOS capabilities.

Which is interesting, because Apple is advertising iOS as “the world’s most personal and secure mobile operating system”.

What about GrapheneOS? According to the documents, Cellebrite admits they can not hack GrapheneOS if users had installed updates since late 2022. This is important, because GrapheneOS is releasing security updates and improvements quite frequently - sometimes even several times a month. And GrapheneOS is designed in such a way, that updates are automatically enabled, and if users want to disable them, they need to do that manually. This means that very likely vast majority of users have GrapheneOS updated to the last version automatically and their phones can not be hacked by Cellebrite’s tools.

GrapheneOS capabilities

GrapheneOS capabilities.

On the other side, Cellebrite claims that they can do so called consent-based full filesystem extraction with iOS, Android and GrapheneOS. As already mentioned, this simply means they can extract data from the device once the user voluntary unlocks their device. For GrapheneOS that means, that when they get unlocked phone, they just enable developer options and use standard ADB tool (ADB lets you communicate with Android devices through a computer) to extract the data.

So, according to Cellebrite documents, they can not unlock fully patched GrapheneOS phone, unless user voluntary unlocks the phone. In fact, analysis of Cellebrite’s documents shows, that they even can not brute force a random 6-digit PIN on Pixel 6 and later phones (which are the phones supported by GrapheneOS). Cellebrite’s documents reveal, that Pixel 6 phones and later with GrapheneOS (and the latest iPhones also), are the only devices where a random 6 digit PIN can not be brute forced.

The attack on GrapheneOS on social media?

As we mentioned at the beginning, in the beginning of May, someone started an attack on GrapheneOS across social media platforms. The perpetrators claimed that GrapheneOS has been compromised, and the “proof” has been, that data extraction from GrapheneOS is successful when it is consent-based.

It is unclear who has been behind this social media attack, but in December 2020 something similar happened. At that time, various media (including BBC) reported, that Cellebrite claimed to have cracked Signal’s encryption. Signal is a free, encrypted messaging application, which is widely considered one of the most secure messaging apps due to its strong encryption and focus on privacy.

However, at that time it turned out, that the claims were completely false - Cellebrite has been able to extract Signal messages only if user unlocked the phone and Signal app and hand it to the forensic examinator. Which is by definition consent-based extraction and does not really require some specific technical excellence from the forensic acquisition tool.

Short notice: Signal’s local database on a phone is encrypted. So you need to need to extract the Signal database from the filesystem first, and then to you need to obtain three values ​​to decrypt the database. The first is stored in so called Keystore system, and the other two values ​​are stored in the XML file on the phone’s file system. It is important to know that cryptographic keys stored in a Keystore system are more difficult to extract from the device, because once keys are in the Keystore, you can use them for cryptographic operations, with the key material remaining non-exportable.

Defense against forensic hacking tools in GrapheneOS

Now let’s dive into GrapheneOS security countermeasures against described attacks.

Protection against hacking into the phone

GrapheneOS has implemented many security features. You can get a glimpse of them from my presentation on GrapheneOS security.

However, regarding various forensic tools, it is important to mention, that GrapheneOS has a special feature that disallows new USB connections in AFU mode (After First Unlock) after the device is locked, and fully disables USB data at a hardware level once there aren’t active USB connections. This means that if an attacker would connect GrapheneOS device to the computer through USB, GrapheneOS device will not allow any connection at all.

Users can set it to do this in BFU (Before First Unlock) mode or even when the phone is fully unlocked. And users with a high threat model can even fully disable USB, including USB-PD/charging, while the OS is booted. So they can decide to only allow charging while powered off or booted into the fastboot/fastbootd/recovery/charging modes. This is the feature no other phone has, and can be completely customized by the user.

GrapheneOS is constantly improving security, and since beginning of 2024 they massively improved security against various possible exploits. In April 2024 they also helped to implement several firmware improvements for Pixel phones.

Protection against brute force attacks

As we mentioned, in case of BFU devices, where data in internal storage are still encrypted, the forensic examinator needs to “guess” PIN code or password, in order to unlock the device. This is done by so called brute force attack (guessing every possible combination of PIN code or password).

However, Pixel 6 and later phones contain a dedicated security chip Titan M2, also called hardware security module, which is storing the decryption keys. This chip will unlock the internal phone storage only if user will enter the correct PIN or password.

But here is the catch. If an attacker try to perform brute force attack (i. e. try to go through all possible PIN/password combinations), the chip will limit the number of attempts. After 5 failed attempts, chip will add 30 second delay before next guessing attempt is allowed. Then delay gets increased (after 30 failed attempts the delay doubles after every 10 attempts), and after 140 failed attempts, GrapheneOS and its secure element will limit brute force to 1 attempt per day. This is called secure element throttling.

So if an attacker would like to test all different combinations to guess a 6-digit PIN, there are one million possible combinations, so brute forcing would take a long, long time. Unless, the attacker is extremely lucky and guesses the correct PIN at the few first attempts.

Of course, the question is, is it possible to somehow hack this secure element or unlock the limited number of attempts? The answer is - very unlikely. Why? Because this secure element has been developed specifically to protect against those types of attacks. And it has passed the highest hardware vulnerability assessment (AVA_VAN.5) by an independent and accredited evaluation lab.

In fact, GrapheneOS is so successful in this area, because it is doing far more hardening than iOS against these attacks. iPhones also have security element, but the companies developing attacks, had successfully bypassed secure element throttling from Apple for years (and are doing the same with Samsung and Qualcomm implementation of secure element). These companies were successfully bypassing the secure element throttling on 2nd through 5th generation Pixels. Pixel 2 used NXP secure element and Pixel 3 moved to a custom ARM secure element. But Pixel 6 and later phones are using a custom RISC-V secure element. It seems that moving away from the standard ARM Cortex secure element cores was the correct decision, because it blocked these companies from successfully exploiting the secure element for several years.

Auto reboot feature

GrapheneOS also has an auto-reboot feature, meaning that after some time, phone gets automatically rebooted. Default auto reboot time is 18 hours (if phone is not unlocked in that time, it will reboot), but user can set it to a different interval, even as low as 10 minutes.

This technically means that the data after this period are put back to rest, or, to put it differently, phone gets from AFU to BFU state. And as we already explained, a locked device in BFU state presents significant challenges for data extraction, much more than unlocked device in AFU state.

After reboot, it is almost impossible to extract decrypted data from the phone. So the focus of GrapheneOS’s team is defending against exploitation long enough for auto-reboot to work, and after that your data are even safer than before. That means that if an attacker develops a successful exploit, their window of opportunity to use it to get data from user profiles is until next reboot from when the phone was locked.

Conclusion

In the last year, GrapheneOS started to put much more effort into defending your phone against these attacks. Users who need their data secure, should definitely use a strong passphrase. To make that more convenient, GrapheneOS is developing 2-factor fingerprint unlock feature, which will allow people to combine a strong passphrase with convenient fingerprint and PIN unlock. They are also planning to offer an UI for generating random passphrases automatically. This will vastly improve security and make access to the user’s data on a phone much more difficult.

The actors that want to hack into GrapheneOS are rightfully desperate. So it is no surprise, that they try to play dirty, by spreading misinformation. But knowledge is power and misinformation could be successfully fought with facts.

Digitalno podpisovanje dokumentov v LibreOffice

16 January 2024 at 00:00

V enem prejšnjih prispevkov smo si ogledali kako v okolju Linux (in Windows) lahko digitalno podpisujemo PDF dokumente, v tokratnem prispevku pa si bomo ogledali, kako s SIGEN-CA lahko digitalno podpišemo LibreOffice dokumente.

Predpriprava

Najprej seveda potrebujemo SIGEN-CA digitalno potrdilo, korensko potrdilo slovenske državne uprave in vmesno potrdilo izdajatelja SIGEN-CA, in ta potrdila moramo prenesti v NSS sistemsko shrambo v Linuxu. V okolju Windows pa lahko uporabimo Thunderbirdovo shrambo digitalnih potrdil.

Nastavitve LibreOffica

Sedaj zaženemo LibreOffice in v meniju Orodja izberemo Možnosti in nato v razdelku LibreOffice izberemo Varnost.

Nastavitve NSS baze v LibreOffice

Nastavitve NSS baze v LibreOffice.

Nato poleg Pot digitalnega potrdila kliknemo na gumb Potrdilo in nastavimo dostop do NSS baze.

LibreOffice bo sedaj potrebno ponovno zagnati.

Digitalno podpisovanje v LibreOffice

Zdaj v LibreOffice odpremo dokument, ki bi ga želeli digitalno podpisati in v meniju Datoteka izberemo Digitalni podpisi - Digitalni podpisi ter kliknemo gumb Podpiši dokument.

Digitalno podpisovanje dokumentov v LibreOffice

Digitalno podpisovanje dokumentov v LibreOffice.

V naslednjem koraku izberemo svoj digitalni podpis in dokument podpišemo.

LibreOffice omogoča tudi digitalno podpisovanje PDF dokumentov. To naredimo preko menija Datoteka, kjer izberemo Digitalni podpisi ter Podpiši obstoječi PDF. Zažene se aplikacija LibreOffice Draw, kjer lahko podpišemo obstoječi PDF.

Digitalne podpise lahko preverimo preko menija Datoteka izberemo Digitalni podpisi - Digitalni podpisi.

Digitalni podpisi dokumenta v LibreOffice

Digitalni podpisi dokumenta v LibreOffice.

LibreOffice prikaže, če so dokumenti veljavno podpisani.

Veljavno podpisan dokument v LibreOffice

Veljavno podpisan dokument v LibreOffice.

Če pa je bil dokument po podpisu spremenjen, bo LibreOffice to ravno tako takoj ustrezno prikazal.

Digitalni dokument, ki je bil spremenjen po podpisu

Digitalni dokument, ki je bil spremenjen po podpisu.

Digitalno podpisovanje PDF dokumentov v Linuxu (in Windows)

7 January 2024 at 00:00

Ena glavnih prednosti digitalnega podpisovanja PDF-jev je zmanjšanje potrebe po tiskanju, pošiljanju in shranjevanju papirnatih dokumentov. V Sloveniji lahko PDF dokumente digitalno podpišemo s pomočjo SIGEN-CA digitalnih potrdil, ki se uporabljajo za e-storitve državne uprave, oddajo dohodnine, dostop do geodetskih in katastrskih podatkov, itd. Kvalificirana digitalna potrdila SIGEN-CA izdaja država in sicer fizičnim osebam (starejšim od 15 let, ki imajo slovensko davčno številko) ter poslovnim subjektom. V tokratnem prispevku si bomo pogledali kako PDF dokumente s pomočjo SIGEN-CA potrdil podpisujemo v Linuxu (v grafičnem okolju, ne v terminalu) in sicer z odprtokodno in brezplačno aplikacijo Okular. Na koncu pa še, kako aplikacijo z Okular PDF dokumente digitalno podpisujemo v okolju Windows

Digitalno podpisovanje PDF v okolju Linux

Prvi korak je, da si SIGEN-CA digitalno potrdilo, pa tudi korensko potrdilo slovenske državne uprave in vmesno potrdilo izdajatelja SIGEN-CA prenesemo v sistemsko shrambo v Linuxu. Gre za sistemsko shrambo NSS (Network Security Services). NSS je nabor kriptografskih knjižnic, ki je v Ubuntu Linuxu že privzeto nameščen, je pa za lažji uvoz potrebno namestiti še nekatera dodatna orodja.

Namestitev digitalnih potrdil v NSS sistemsko shrambo

Najprej torej namestimo pki-tools. Odpremo terminal in vpišemo ukaz: sudo apt install pki-tools

Nato si iz spletne strani si-trust.gov.si na svoj računalnik prenesemo Korensko potrdilo SI-TRUST Root ter Vmesno potrdilo SIGEN-CA G2.

Obe potrdili (si-trust-root.crt in sigen-ca-g2.xcert.crt) je nato potrebno pretvoriti iz DER formata v PEM zapis:

openssl x509 -inform der -in si-trust-root.crt -out si-trust-root.pem

openssl x509 -inform der -in sigen-ca-g2.xcert.crt -out sigen-ca-g2.xcert.pem

Zdaj ti dve potrdili (v PEM formatu) uvozimo v NSS sistemsko shrambo (spodnji ukazi predvidevajo, da ste potrdila shranili neposredno v svojo domačo mapo):

cd $HOME/.pki/nssdb
PKICertImport -d . -n "SI-TRUST Root - Republika Slovenija" -t "CT,C,C" -a -i $HOME/si-trust-root.pem -u L
PKICertImport -d . -n "SIGEN-CA G2 - Republika Slovenija" -t "CT,C,C" -a -i $HOME/sigen-ca-g2.xcert.pem -u L

Končno pa uvozimo še naše osebno SIGEN-CA potrdilo (tudi ta naj bo shranjen neposredno v vaši domači mapo): pk12util -d ~/.pki/nssdb -i $HOME/Matej_Kovacic_SIGEN-CA.p12

Zdaj lahko uvožena potrdila pregledamo: certutil -L -d sql:.

Dobimo takšen izpis:

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Matej Kovačič’s Republika Slovenija ID                   u,u,u
SIGEN-CA G2 - Republika Slovenija                            CT,C,C
SI-TRUST Root - Republika Slovenija                          CT,C,C

Podrobnosti posameznega potrdila sicer lahko pogledamo z ukazom, kjer kot parameter podamo tim. vzdevek oz. ime potrdila, ki ga želimo pregledati:

certutil -L -d sql:. -a -n "Matej Kovačič’s Republika Slovenija ID" | openssl x509 -text -noout

Pomembno: certutil ukaz moramo poganjati v mapi $HOME/.pki/nssdb.

Pa še dva uporabna ukaza. Če želimo digitalno potrdilo preimenovati (oziroma preimenovati njegov vzdevek (angl. nickname), to storimo z ukazom:

certutil --rename -d sql:. -n "Matej Kovačič’s Republika Slovenija ID" --new-n "Matej Kovacic (staro potrdilo)"

S stikalom -n moramo navesti trenuten vzdevek (ki ga vidimo na izpisu ukaza certutil -L -d sql:.), s stikalom --new-n, pa nastavimo nov vzdevek.

Pa še brisanje potrdil:

certutil -D -d sql:. -n "Matej Kovacic (staro potrdilo)"

Nameščanje aplikacije Okular v Linux

Zdaj lahko namestimo aplikacijo Okular. Aplikacijo lahko namestimo preko sistema Snap, vendar v mojem primeru aplikacija ni znala dostopati do NSS sistemske shrambe potrdil. Druga možnost je namestitev preko sistema APT, kjer digitalno podpisovanje deluje brez težav, a če bi radi najnovejšo različico aplikacije, je najbolje, da jo namestimo preko sistema Flatpak.

To je mogoče preko aplikacije Programi Ubuntu.

Programi Ubuntu

Programi Ubuntu.

Če te aplikacije in Flatpat dodatka nimamo nameščenega, to lahko storimo z ukazi:

sudo apt install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
sudo apt install gnome-software-plugin-flatpak gnome-software

Namestitev je nato preprosta. Zaženemo aplikacijo Programi Ubuntu in kot vir namestitve izberemo Flathub ter Okular namestimo.

Namestitev Okularja preko Programi Ubuntu

Namestitev Okularja preko Programi Ubuntu.

Digitalno podpisovanje v okolju Linux

Ko Okular zaženemo, v meniju Nastavitve - Nastavi zaledja v zavihku PDF preverimo ali je dostop do zalednega NSS sistema pravilen (v mojem primeru je /home/matej/.pki/nssdb) in ali vidimo svoje digitalno potrdilo.

Nastavitve zaledja v Okularju

Nastavitve zaledja v Okularju.

Zdaj v Okularju odpremo PDF dokument, ki ga želimo digitalno podpisati ter v meniju kliknemo Orodja - Digitalno podpiši.

Digitalno podpisovanje v Okularju

Digitalno podpisovanje v Okularju.

Nato bomo na dokumentu najprej narisali kvadratek kjer bo prikazan digitalni podpis, v naslednjem koraku pa še izberemo s katerim digitalnim podpisom želimo podpisati dokument (če jih imamo več), lahko pa dodamo tudi tim. vizualni podpis oz. svoj fizični podpis nastavimo za ozadje značke digitalnega podpisa. Na veljavnost digitalnega podpisa to sicer ne vpliva, lahko pa ta funkcija pride prav, ko je dokument natisnjen na papir.

Podpisan PDF dokument v Okularju

Podpisan PDF dokument v Okularju.

Opomba: na sliki se ne nahaja moj dejanski podpis, pač pa je le-ta umetno ustvarjen z generatorjem podpisov.

S tem je PDF dokument digitalno podpisan s SIGEN-CA.

Digitalno podpisovanje v okolju Windows

Aplikacijo Okular lahko namestimo tudi v okolju Windows, digitalno potrdilo pa lahko uporabimo če smo ga namestili v kriptografsko shrambo aplikacije Firefox.

Najprej je torej potrebno namestiti Firefox in vanj SIGEC-CA digitalna potrdila, nato pa Okular namestimo preko Microsoftove trgovine s programsko opremo. Podporo za digitalno podpisovanje PDF dokumentov ima namreč namestitev Okularja iz Trgovine.

Zaženemo Okular in v Settings - Configure Backends v zavihku PDF preverimo ali je dostop do zalednega NSS sistema pravilen oziroma ali pod Available Certificates vidimo svoje digitalno potrdilo.

Nastavitve zaledja v Okularju

Nastavitve zaledja v Okularju.

Če ga je, je potrebno nastaviti pot do baze potrdil v profilu Firefoxa.

Pot do mape z nastavitvami Firefoxa dobimo tako, da v Firefoxu kliknemo na ikonico s tremi črticami, izberemo Pomož za Firefox in nato Več podatkov za odpravljanje težav. Spodaj nato vidimo lokacijo Mape s profilom, in to lokacijo nato prekopiramo v Okular med nastavitve zaledja.

Lokacija profilne mape v Firefoxu

Lokacija profilne mape v Firefoxu.

Podpisovanje nato poteka na enak način kot v Linuxu.

Digitalno podpisovanje PDF v okolju Windows

Digitalno podpisovanje PDF v okolju Windows.

Veljavnost digitalnega podpisa

Po standardu eIDAS (electronic identification and trust services) obstajajo tri ravni podpisov, ‘enostavni’ elektronski podpis, napredni elektronski podpis ter kvalificiran elektronski podpis. Glede na standard je le tretji enak lastnoročnemu podpisu.

Z opisanim postopkom ustvarjen digitalni podpis velja za napredni elektronski podpis, podprt z kvalificiranim digitalnim potrdilom.

To lahko preverimo tudi preko portala EU za preverjanje veljavnosti elektronskega podpisa, ki ta elektronski podpis prepozna kot napredni elektronski podpis, podprt z kvalificiranim digitalnim potrdilom (angl. Advanced electronic Signature supported by a Qualified Certificate (AdES/QC)).

Preverjanje podpisa na spletni strani EC

Preverjanje podpisa na spletni strani EC.

Če bi želeli najvišjo stopnjo podpisa, bi morali uporabiti SIGEN-CA potrdilo zapisano na tim. pametni USB ključek. A vseeno opisan način podpisovanja v praksi zadostuje za veliko večino uradnih opravil.

Mimogrede, dokument podpisan v Linuxu lahko preverimo še v bralniku Adobe PDF v okolju Windows, kjer tudi vidimo, da je veljavno digitalno podpisan.

Preverjanje podpisa v Adobe PDF bralniku

Preverjanje podpisa v Adobe PDF bralniku.

Kot smo torej videli, je digitalno podpisovanje PDF datotek v Ubuntu Linux res enostavno, le uvoz digitalnih potrdil je nekoliko bolj okoren. Na srečo je ta postopek treba narediti samo enkrat (oz. občasno, ko zamenjamo svoje digitalno potrdilo), upam pa, da bo enkrat bo bližnji prihodnosti tudi ta del poenostavljen oziroma bo vse skupaj veliko tesneje integrirano v operacijski sistem.

V Ubuntu vgrajeni LibreOffice zna shranjevati dokumente, preglednice in predstavitve v PDF zapis z enim klikom, te dokumente v PDF zapisu pa sedaj lahko enostavno digitalno podpišemo z Okularjem.

Zaznavanje tihih SMS sporočil

11 July 2023 at 00:00

Ko sem se pred dobrimi tremi meseci vrnil v Makedonijo, sem v svojem telefonu aktiviral lokalno SIM kartico. A še preden sem uspel svoj predplačniški račun napolniti in aktivirati paket mobilnega interneta, sem na svoj telefon dobil zanimivo obvestilo. Aplikacija, ki jo pomagam razvijati, mi je poslala obvestilo, da sem na telefon prejel tim. tihi SMS.

Silent SMS detector

Silent SMS detector.

V Makedoniji uporabljam predplačniško SIM kartico, vendar pa izključno za mobilni internet. Klasične telefonije praktično ne uporabljam, svoje makedonske telefonske številke nisem delil z nikomer, za vsakdanjo komunikacijo pa uporabljam Signal registriran na svojo slovensko telefonsko številko. Zato me je obvestilo o prejemu tihega SMS sporočila na mojo makedonsko številko malce presenetilo. Še posebej, ker sem tihi SMS prejel iz - madžarske telefonske številke.

Kaj so tiha SMS sporočila?

Tiho SMS sporočilo (angl. silent SMS) je poseben tip sporočila, ki ga mobilni telefon prejemnika sicer sprejme, a ga uporabniku ne prikaže. Tiha SMS sporočila so tako nevidna za prejemnika, kar pomeni, da jih je na prejemnikov telefon mogoče pošiljati brez njegove vednosti.

V resnici pa pri tem ne gre za kakšno posebno zlorabo neke varnostne ranljivosti, pač pa so tim. tiha SMS sporočila (uporablja se tudi izraz binarna SMS sporočila) del dveh mobilnih telekomunikacijskih standardov, 3GPP 23.040 (originalno GSM 03.40) in 3GPP 23.038 (originalno GSM 03.38).

Kaj je torej mogoče narediti s tihimi SMS sporočili? Napadalec, ki na neko telefonsko številko pošlje tiho SMS sporočilo, lahko ugotovi, ali je ta telefonska številka aktivna v omrežju. Ker pa sprejem tihega SMS sporočila mobilni telefon prisili v aktivno komunikacijo z mobilnim omrežjem, to pomeni, da ob prejemu tihega SMS sporočila mobilni telefon izmenja podatke z najbližjo (dostopno) bazno postajo, s čimer razkrije svojo lokacijo. Pošiljanje tihih SMS sporočil tako lahko razkrije tudi lokacijo mobilnega telefona, zato se tiha SMS sporočila uporabljajo tudi za prikrito sledenje uporabnikov mobilne telefonije. V preteklosti je tako nemška policija tiha SMS sporočila uporabljala za sledenje osumljencev kaznivih dejanj.

Kaj se je (najverjetneje) zgodilo?

Obstaja več vrst tihih SMS sporočil, in vseh brez specializirane opreme ni mogoče zaznati. Kljub temu pa je nekatera tiha (binarna) SMS sporočila mogoče zaznati. Aplikacija, ki jo pomagam razvijati (na telefonu sem imel nameščeno razvojno različico aplikacije), je na mojem telefonu zaznala sprejem enega izmed takih sporočil.

Zakaj bi nekdo na mojo makedonsko predplačniško telefonsko številko želel poslati tihi SMS? Ena možnost je, da bi nekdo želel preveriti kdaj bo moja tukajšnja telefonska številka spet povezana v mobilno omrežje. Povedano drugače - nekdo bi želel preveriti kdaj sem se vrnil nazaj iz Slovenije.

Druga možnost pa je, da nekdo - morda kakšna prevarantska kriminalna združba - naključno preverja katere mobilne številke so aktivne in potem to informacijo uporablja za izvajanje phishing napadov.

Podatki iz dekodiranega tihega SMS sporočila so pokazali, da je pošiljateljeva telefonska številka iz Madžarske. To mi je bilo zanimivo, saj te države nisem še nikoli obiskal. Vsebina sporočila je bila šestmestna (najverjetneje naključna) številka. Iskanje po spletu je nato pokazalo, da je leta 2021 nekdo iz te telefonske številke različnim uporabnikom pošiljal navadna SMS poročila z naključnimi šestmestnimi številkami. Najverjetneje zato, da je ugotavljal ali so ciljne telefonske številke aktivne.

Dekodirani podatki tihega SMS sporočila

Dekodirani podatki tihega SMS sporočila.

Glede na navedeno lahko sklepam, da je bil tihi SMS, ki sem ga prejel del kakšne prevarantske (phishing) kampanje, v okviru katere ena izmed kriminalnih združb skuša ugotoviti katere telefonske številke so aktivne in katere ne. Ker je bilo pošiljanje običajnih SMS sporočil zaznano, pa so zdaj verjetno preklopili na pošiljanje tihih SMS sporočil. Sploh glede na dejstvo, da je bilo prejeto tiho SMS sporočilo tipa Class-0 in ne Type-0, a o tem malo kasneje.

Aplikacija

Aplikacija, ki jo pomagam razvijati, se imenuje Silent SMS detector in je dostopna na mojem Github računu. Gre za nadaljevanje razvoja aplikacije Android Silent SMS Ping, ki je bila razvita leta 2016, omogočala pa je pošiljanje in zaznavo tihih SMS sporočil (sicer samo točno določenega tipa).

Aplikacija se nato dlje časa ni več razvijala, originalni avtor pa je Github skladišče aplikacije dokončno arhiviral leta 2020.

V začetku leta 2023 je bilo aplikacijo še vedno mogoče namestiti preko skladišča F-Droid, vendar pa je Virustotal analiza pokazala, da je namestitvena APK datoteka na F-Droid okužena.

V začetku 2023 smo se nato s kolegi odločili, da aplikacijo posodobimo. Najprej smo posodobili SDK (na verzijo 33) in Javo (na verzijo 11), posodobili dovoljenja aplikacije, izboljšali obvestila in pričeli z implementacijo novega dizajna.

Obvestilo Silent SMS detectorja

Obvestilo Silent SMS detectorja.

Glavni del sprememb programske kode je prispeval znanec iz IRC-a, Jure, ki ima že kar nekaj izkušenj z razvojem različnih aplikacij, na novo pa smo oblikovali tudi ikone aplikacije.

Vrste SMS sporočil

Obstaja več vrst SMS sporočil in aplikacija Silent SMS detector zna zaznavati samo določene vrste.

  • Class 0 SMS: Ta SMS sporočila se prikažejo neposredno na zaslonu mobilnega telefona, vendar se ne shranijo na telefon. Za ta SMS sporočila se uporablja tudi izraz Flash SMS. Določeni parametri takega tipa SMS sporočila povzročijo, da se sporočilo na telefonu ne prikaže (niti se ne shrani na telefon), pošiljatelj pa vseeno prejme potrdilo o prejemu. Class-0 sporočila tako ob uporabi ustreznih parametrov služijo kot tiha SMS sporočila. Aplikacija Silent SMS detector ta sporočila lahko zazna.

  • Class 1 SMS: Gre za običajno SMS sporočilo. To SMS sporočilo se shrani na mobilni telefon ali SIM kartico.

  • Class 2 SMS: To sporočilo je namenjeno prenosu podatkov na SIM kartici. Gre za pošiljanje tim. tehničnih podatkov s strani mobilnega operaterja. Potrdilo o prejemu pomeni, da so bili podatki uspešno prenešeni na SIM kartico.

  • Class 3 SMS: Gre za običajna SMS sporočila, ki pa so posredovana na zunanjo napravo.

  • Type 0 SMS: Gre za prava tiha SMS sporočila, ki na telefonu ne sprožijo nobenega dogodka, vendar pa pošiljatelju vrnejo potrdilo o prejemu. Ta SMS sporočila imajo ti. TP_PID polje nastavljeno na vrednost 0x40. Namen teh sporočil je izključno eden - sledenje uporabnikom.

Maja 2010 je Google v kodi Androida naredil spremembo, ki povzroči, da Type-0 SMS sporočila ostanejo popolnoma skrita pred uporabnikom. To pomeni, da se ne prikažejo, se ne shranijo na telefonu in uporabnika ne obvestijo o prejemu. Teoretično bi bilo torej mogoče ta sporočila zaznati s spremembo Android kode. Vendar pa so raziskave pokazale, da prejem Type-0 sporočil v Androidovih dnevniških zapisnikih (angl. log) sprožijo zapis (GsmInboundSmsHandler: Received short message type 0, dont display it or store it. Send ACK.). Žal je za to potrebno imeti odklenjeno Android napravo (angl. rooted device). Aplikacija Silent SMS detector teh sporočil ne zmore zaznati, bi pa ob ustrezni spremembi programske kode in odklenjenem (tim. “rootanem”) Androidnem telefonu to bilo mogoče.

Kaj torej aplikacija dela (in česa ne)?

Aplikacija omogoča pošiljanje določene vrste tihih SMS sporočil (tim. SMS ping), s katerimi lahko ugotovimo ali je prejemnikova SIM kartica oz. telefonska številka aktivna v omrežju ali ne.

Hkrati pa ta aplikacija lahko zazna sprejem takega tihega SMS sporočila in o tem obvesti uporabnika. O tem tihem SMS sporočilu prikaže tudi cel kup podatkov, ki jih je mogoče uporabiti za tim. analitiko groženj (angl. threat analytics).

Aplikacija teče na običajnih Androidnih mobilnih telefonih in ne zahteva odklenjene naprave (angl. rooted device).

Se je pa potrebno zavedati kaj obvestilo, da smo prejeli tihi SMS pomeni in česa ne pomeni. Prejem tihega SMS ne pomeni, da je vaša telefonska številka tarča kakšnega napada. Tiha SMS sporočila se pošiljajo iz različnih (tudi povsem tehničnih) razlogov, zato prejem tihega SMS sporočila ni nujno indikator, da vam skuša kdo slediti.

Ta sporočila se namreč uporabljajo za pošiljanje binarnih podatkov, kot na primer tonov zvonenja, slik, WAP Push sporočil ter za Over The Air (OTA) programiranje in za pošiljanje konfiguracijskih podatkov. Preko tihega SMS sporočila tako na primer lahko dobite nastavitve za gostovanje (angl. roaming), itd. Na večini kartic SIM so namreč shranjene nastavitve, ki določajo prednostna omrežja. Operaterski seznam omrežij PLMN (Public Land Mobile Network), tako imenovani OPLMN, namreč operater domačega omrežja pogosto posodablja kar preko radijske povezave (tim. OTA). Do tega običajno pride, ko z vključenim mobilnim telefonom vstopite v novo državo in imate vključeno gostovanje. V tem primeru bo operater na vaš mobilni telefon poslal binarni SMS, Silent SMS detector pa ga bo zaznal in vas o tem obvestil. Seveda pa to ne pomeni, da vašo SIM kartico nekdo skuša locirati ali da vam nekdo skuša slediti.

Kot smo pokazali, pa po drugi strani obstaja več vrst tihih SMS sporočil in naša aplikacija zaznava samo določen tip le-teh. Če torej obvestila aplikacije niste prejeli, to ne pomeni, da na vašo telefonsko številko nekdo ni poslal tihega SMS sporočila (npr. kakšnega drugega tipa) ali da ni skušal izvesti kakšne druge oblike sledenja. Odsotnost obvestila torej ne pomeni, da vas nekdo ne spremlja.

Morda niste vedeli, a tudi vaša SIM kartica lahko naokrog samostojno pošilja SMS sporočila brez vaše vednosti. Leta 2021 je namreč raziskovalec David Allen Burgess ugotovil, da SIM kartice v nekaterih primerih pošiljajo SMS sporočila, ne da bi operacijski sistem telefona to sploh zaznal. O tem ni javno dostopne dokumentacije, uporabniki teh sporočil ne vidijo, operaterji pa o tem ne govorijo.

Burgess je do odkritja prišel pri preiskavi primera prometne nesreče, kjer je tožilstvo trdilo, da je do nesreče prišlo zaradi nepremišljene vožnje, saj naj bi voznik tik pred nesrečo pošiljal SMS sporočila. A izkazalo se je, da je SMS sporočila brez vednosti lastnika pošiljala njegova SIM kartica, preko SMS sporočila pa je pošiljala serijsko IMEI številko trenutnega telefona in telefona v katerega je bila vstavljena pred tem, ter še nekatere druge tehnične podatke. To vse kaže na to, da se v ozadju mobilne telefonije dogaja marsikaj, česar običajni uporabniki brez specializiranih znanj in opreme ne zmorejo zaznati. Mimogrede, to tudi pomeni, da si SIM kartica lahko zapomni v kateri mobilni telefon je bila vstavljena, kar pomeni, da menjavanje telefonov ni ravno učinkovita taktika zaščite pred sledenjem.

Če se želite popolnoma izogniti sledenju je pravzaprav edina možnost, da mobilni telefon izključite oziroma na njem vklopite tim. letalski način. Seveda pa to močno poslabša uporabniško izkušnjo, niti ni preveč praktično, zato ni pričakovati, da bodo uporabniki, ki se želijo izogniti sledenju okrog hodili z ugasnjenimi mobilnimi telefoni. Smisel in namen mobilnega telefona je vendarle v tem, da je prižgan. :) Je pa res, da obstajajo tudi druge strategije in tehnične rešitve s katerimi lahko otežimo sledenje in nadzor nad svojim mobilnim telefonom, a o tem kdaj drugič.

Aplikacija Silent SMS detector je tako predvsem zanimiv prikaz tehnologije, saj z njo lahko dobite vsaj delen vpogled v to kaj se dogaja “v ozadju”. Silent SMS detector vam namreč prikaže (nekatera) SMS sporočila, ki bi vam sicer ostala skrita. To pa je kar precej kul, kajne?

Aplikacijo si lahko namestite iz mojega Github skladišča, kdor ima čas, voljo in znanje, pa lahko pomaga tudi pri nadaljnjem razvoju in testiranju. Kot smo pokazali, bi bilo z nekaj dodatnega truda mogoče zaznavati tudi Type-0 tiha SMS sporočila, verjetno pa bi se dalo implementirati še kakšno drugo zanimivo funkcijo.

Dva tedna po prejemu prvega tihega sporočila sem obiskal Bolgarijo in za en dan izključil svojo makedonsko SIM kartico. Ko sem se vrnil domov in ponovno vključil mobilni telefon, sem čez slabih 20 minut prejel nov tihi SMS in sicer iz iste (madžarske) telefonske številke kot prvič. Drugačna je bila le naključna koda v poslanem sporočilu. Sem pa potem nazaj na pošiljateljevo telefonsko številko poslal navaden SMS z vprašanjem kaj se dogaja in od takrat naprej tihih SMS sporočil ne dobivam več… :)

Umetna inteligenca in slovenski jezik

31 May 2023 at 00:00

Medijske predstavitve orodij umetne inteligence so pogosto senzacionalistične in negativistične, saj novinarji in splošna javnost v splošnem slabše razumejo delovanje novih tehnologij. Umetna inteligenca seveda prinaša tudi mnoge nevarnosti, vendar so te pogosto predstavljene skozi prizmo popularne kulture, zlasti filmov, kjer umetna inteligenca skoraj praviloma predstavlja grožnjo človeštvu. Kot je nekoč zapisal Arthur C. Clarke, “vsaka dovolj napredna tehnologija je neločljiva od magije”. Magija pa praviloma pomeni nekaj slabega, kajne?

V resnici pa na tehnologije umetne inteligence lahko gledamo kot na orodje. Orodje, ki je lahko uporabljeno za nekaj dobrega, ali orodje, ki je lahko uporabljeno za nekaj slabega. V tokratnem prispevku si bomo pogledali, kako je tehnologije umetne inteligence mogoče uporabiti za ohranjanje in digitalizacijo slovenskega jezika.

Jezikovni viri in tehnologije za slovenski jezik

Za razvoj in preživetje jezika je v današnjem času zelo pomemben razvoj jezikovnih tehnologij.

Skupina slovenskih raziskovalcev je zato leta 2019 pričela delati na projektu Razvoj slovenščine v digitalnem okolju, v okviru katerega razvijajo metode za analizo jezika, metode večjezičnosti ter metode za izboljšanje bralne pismenosti v digitalnem okolju.

Vse razvite tehnologije so na voljo pod odprtimi licencami, raziskovalci pod vodstvom Simona Kreka, med katerimi so tudi moji sodelavci, pa so jih postavili na demonstracijskem portalu slovenščina.eu. Na hitro si poglejmo, kaj so pripravili.

Prepoznavanje govora

Na demonstracijskem portalu je sicer na voljo več modulov, osebno sem se odločil preskusiti Razpoznavalnik, ki omogoča avtomatsko transkripcijo govora.

Demonstracijska spletna stran ima omejitev, in sicer omogoča samo transkripcijo 300 sekund (5 minut) govora, a za testiranje je to povsem dovolj. Kdor želi več, si lahko vso potrebno kodo brezplačno prenese in namesti iz Githuba.

Za test sem pognal avtomatsko transkripcijo mojega predavanja iz leta 2017 z naslovom Phonebusters - kako varni so v resnici mobilni telefoni (objavljeno je na portalu Videolectures.net.

Iz videoposnetka je bilo najprej treba izločiti zvok ter nato odrezati prvih 5 minut govora, kar lahko preprosto storimo z orodjem ffmpeg:

ffmpeg -i predavanje.mp4 -ac 2 -f wav predavanje.wav

ffmpeg -ss 1 -t 300 -i predavanje.wav predavanje300.wav

Datoteko predavanje300.wav nato naložimo na Razpoznavalnik, in čarovnija se lahko začne.

Razpoznavalnik na slovenscina.eu

Razpoznavalnik na slovenscina.eu.

Rezultat sploh ni slab, a poglejmo, če se ga da še izboljšati.

Za hitro rešitev za izboljšanje bomo zaprosili kar umetno inteligenco, tokrat ChatGPT.

ChatGPT smo zaprosili za pomoč pri povečanju razumljivosti besedila

ChatGPT smo zaprosili za pomoč pri povečanju razumljivosti besedila.

Pri tem je potrebno povedati, da kot nadomestek ChatGPT že obstajajo kvalitetne odprtokodne alternative, ki jih lahko poganjamo na lastni infrastrukturi. Vendar pa jih je potrebno namestiti, zato bo za hiter test ChatGPT povsem zadostoval.

Poravnan in izboljšan tekst

Poravnan in izboljšan tekst.

Kot vidimo, je besedilo tokrat še bistveno bolj berljivo in pravzaprav potrebno res minimalnih popravkov.

Za konec pa lahko storimo še nekaj drugega. Besedilo, ki ga je izboljšal ChatGPT prekopiramo v Wikifier, ki je še eno izmed orodij umetne inteligence, ki ga razvijajo moji sodelavci iz Laboratorija za umetno inteligenco.

Wikifier besedilo analizira in iz njega izlušči ključne besede (in to v več jezikih), na podlagi česar lahko potem besedilo samodejno klasificiramo oz. ugotovimo tematiko predavanja.

Klasifikacija besedila z Wikifierjem

Klasifikacija besedila z Wikifierjem.

Na koncu besedilo prekopiramo še v prevajalnik na slovenscina.eu in ga prevedemo v angleščino.

Samodejni prevod besedila v angleščino

Samodejni prevod besedila v angleščino.

Za prevod v šoli morda res ne bi dobili čiste petice, vendar pa je za tiste, ki slovenskega jezika ne razumejo povsem zadovoljiv, da se seznanijo z vsebino predavanja.

Vse to z zgolj nekaj kliki in z brezplačnimi orodji!

In prihodnost?

V bližnji prihodnosti si ni težko zamisliti sistema, ki bi imel ta orodja že povsem integrirana in bi vsak videoposnetek samodejno podnaslovil, hkrati pa ponudil še možnost prikaza podnapisov v angleškem jeziku. In to na vašem telefonu.

Namesto ChatGPT bi lahko že danes uporabili Vicuna, ki dosega 90% kvalitete GPT-4 in je odprtokoden, za ostale jezike pa si lahko ogledamo Massively Multilingual Speech (MMS) projekt, ki že sedaj podpira transkribiranje več kot 1100 jezikov. In da, Wikifier trenutno podpira že 138 jezikov.

S takšnimi projekti je prihodnost slovenskega jezika svetla. Hkrati pa vsi ti projekti kažejo, da so orodja umetne inteligence lahko v praksi zelo uporabna tudi za običajne smrtnike.

Je sistem mogoče zlorabiti oziroma ali prinaša kakšne nevarnosti? Gotovo da. Enako kot tudi avtomobili in avtobusi prinašajo številne nevarnosti. A prednosti odtehtajo in zato se danes ne pogovarjamo o prepovedi avtomobilov in avtobusov, čeprav se zavedamo nevarnosti prometnih nesreč.

Podobno velja tudi za umetno inteligenco. Gotovo je potrebna regulacija (za kar bo med drugim poskrbel tudi Artificial Intelligence Act, ki ga pripravlja EU). A tehnologije umetne inteligence prinašajo številne koristi, in prav je, da spodbujamo uporabo tehnologije za dobre namene, omejujemo pa njene zlorabe.

Dostop do HomeAssistant preko VPN

27 May 2023 at 00:00

Problem: v lokalnem omrežju je postavljen HomeAssistant, ki je dostopen preko spletnega vmesnika, na njem pa teče tudi medijski strežnik (ki ga v HomeAssistantu najdemo pod Media sources), za katerega bi želeli, da omogoča souporabo datotek preko omrežja. HomeAssistant je iz varnostnh razlogov dostopen samo preko lokalnega omrežja. Ker ni dostopen preko interneta, na njem tudi ne moremo poganjati VPN strežnika. Kljub temu pa bi želeli, da je dostop do spletnega vmesnika in souporabe datotek dostopen napravam “v divjini”. Torej mobilnim telefonom in računalnikom v drugih omrežjih. Rešitev? Uporaba VPN in posredniškega strežnika na ločeni napravi. Kako? Berite dalje.

Kot rečeno, je rešitev uporaba posebne naprave, mini računalnika, ki je povezan v VPN omrežje (Wireguard, OpenVPN ali kaj tretjega), ki služi kot vmesnik med napravami v VPN omrežju in napravami v našem lokalnem omrežju. Za to napravo smo izbrali napravico OrangePi PC Plus, na kateri teče Armbian Linux operacijski sistem. Na to napravo smo namestili OpenVPN in Wireguard odjemalca (naprava je povezana na dve različni VPN omrežji) ter omogočili ssh dostop.

Še nekaj pojasnil za lažje razumevanje omrežne arhitekture: LAN omrežje ima IP naslove v območju 192.168.200.0/24, VPN omrežje pa ima IP naslove v območju 10.10.6.0/24.

Nastavitev Nginx posredniškega strežnika

Najprej je na napravo treba namestiti nginx spletni strežnik nato pa urediti datoteko z nastavitvami spletnega strežnika: sudo nano /etc/nginx/sites-enabled/default.

Vpišemo naslednje nastavive:

# Redirection to HomeAssistant on LAN

server {
	listen 8123 default_server;
	listen [::]:8123 default_server;

	root /var/www/html;
	index index.html index.htm;
	server_name _;
        location / {
                # Enter the LAN IP of your local HomeAssistant device:
                proxy_pass http://192.168.200.xxx:8123/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
                proxy_redirect     off;
        }
}

Datoteko shranimo in preverimo če so nastavitve pravilne (sudo nginx -t) ter ponovno zaženemo Nginx spletni strežnik (sudo service nginx restart), po potrebi pa tudi omogočimo njegov samodejni zagon ob ponovnem zagonu sistema (sudo service nginx enable).

Če bomo sedaj iz VPN omrežja odprli spletno stran te Armbian naprave (npr. http://10.10.6.2:8123/), bo naš spletni zahtevek posredovan na HomeAssistant napravo v LAN omrežju. S tem je spletni vmesnik HomeAssistant naprave postal dostopen napravam v VPN omrežju, saj Armbian naprava služi kot nekakšen posrednik med obema omrežjema. Če imamo npr. na telefonu stalno vključenega VPN odjemalca, lahko sedaj do lokalne HomeAssistant naprave varno dostopamo od koderkoli.

Prvi del problema smo tako rešili. Sledi nastavitev dostopa do medijskega strežnika.

Nastavitev dostopa do medijskega strežnika preko SFTP

Eden izmed najbolj znanih protokolov za izmenjavo datotek v lokalnih omrežjih je tim SMB protokol, znan tudi kot Samba protokol. Storitev SMB teče na preko TCP vratih 445 in 139 in načeloma bi lahko na Armbian napravi uredili samo posredovanje teh vrat iz VPN v LAN omrežje. Žal SMB protokol do različice 3.0 ne podpira šifriranja, na kasnejših različicah pa ga je potrebno posebej vključiti in konfigurirati. Zato je bolj smiselno, da omogočimo dostop do deljene mape preko SFTP protokola (Secure File Transfer Protocol), ki omogoča močno šifriranje. Žal pa HomeAssistant ne omogoča SFTP dostopa.

Rešitev? Nastavitev SFTP dostopa do HomeAssistanta preko Armbian naprave in Sambe!

Prvi korak je namestitev podpore deljenja datotek na medijskem strežniku na napravi HomeAssistant preko omrežja. Pri tem bomo uporabili dodatek Samba share.

Samba share je storitev, ki omogoča deljenje datotek preko omrežja in sicer med sistemi Windows in Linux preko omrežja. Deljenje datotek poteka preko SMB/CIFS protokola (Server Message Block/Common Internet File System), ki je standardni protokol za deljenje datotek v okolju Windows.

V HomeAssistantu gremo najprej na Settings - Add-ons ter namestimo dodatek Samba share.

Nato v zavihku Configuration tega zavihka vnesemo uporabniško ime, geslo in delovno skupino ter določimo dovoljena omrežja ter (po potrebi) nedostopne datoteke. Dodatek nato ponovno zaženemo.

Zdaj bi morala biti v LAN omrežju že vidna skupna deljena mapa na napravi HomeAssistant. Potrebno jo je le še narediti dostopno iz VPN omrežja.

To naredimo tako, da na Armbian napravi najprej namestimo podporo za SMB/CIFS protokol: sudo apt install cifs-utils.

Na tej Linux napravi sedaj v posebno datoteko vpišemo uporabniško ime in geslo za dostop do mape v skupni uporabi na napravi HomeAssistant:

sudo nano /root/.smbcredentials

Vanjo vpišemo uporabniško ime in geslo iz Samba share dodatka iz HomeAssistant:

username=smb_username
password=smb_password

Nastavimo (zaklenemo) ustrezne pravice na tej mapi: chmod 400 /root/.smbcredentials ter ustvarimo lokalno mapo na katero bomo priklopili deljeno mapo na HomeAssistant: sudo mkdir /media/homeassistant.

Sedaj oddaljeno deljeno mapo ročno priklopimo (pišemo seveda ustrezen IP naslov HomeAssistant naprave):

sudo mount -t cifs -o rw,vers=3.0,credentials=/root/.smbcredentials,file_mode=0777,dir_mode=0777 //192.168.200.xxx/media /media/homeassistant

Če želimo, da se bo ta Samba share mapa samodejno povezala ob vsakem zagonu Armbian naprave, pa je potrebno podatke za povezavo vpisati v datoteko /etc/fstab.

Če se sedaj na Armbian napravo povežemo preko SFTP protokola in odjadramo na mapo /media/homeassistant, bomo tako pravzaprav videli vsebino Media sources mape na HomeAssistantu!

Na ta način lahko datoteke preko vmesne Armbian naprave preprosto prenašamo iz VPN omrežja preko SFTP in nato naprej na LAN omrežje preko SMB/CIFS. S tem pa smo uspešno rešili tudi naš drugi problem.

❌
❌