SafeNet/Aladdin eToken Pro 64k működésre bírása Linux alatt

Első lépés a VPN kapcsolat felépítéséhez, hogy a token megfelelően működjön. Ezek után jön a VPN kliens konfigurációja.

Alapvetően magamnak írom ezt a posztot memo jelleggel de ha valaki hozzá tud szólni építőleg, az jó lehet, mert éppen el vagyok akadva a kendácsolással és a cél az lenne, hogy ne kelljen már egy XP-t vagy win7-et vagy valami szemetet raknom virtuális gépbe csak azért, hogy működjön a VPN kapcsolatom ha kell.

A történet valahol ott kezdődik, hogy van egy vpn.pityu.hu oldal (fikció, ha a valósággal egyezik, az tényleg csak a véletlen műve), amin keresztül authentikálni lehet a céges hálózat irányába. Adott egy USB-s Aladdin eToken Pro, valamint a hozzá tartozó PIN/jelszó. Bár a munkahelyemen windowst használok, otthon már évek óta nem láttam, szóval csak halvány emlékképeim vannak a windowsos működésről. Ha jól emlékszem úgy nézett ki a történet, hogy feltelepítettem egy drivert, egy AnyConnectet és a SafeNet programot, amivel a tokenen lehet megtekinteni a tanúsítvány érvényességét, valamint jelszót cserélni. Meg van adva a vpn szerver címe pl: vpn.pityuka.hu/etoken. Megnyomom a COnnect gombot anyconneten, kéri a token jelszavát és csatlakozik. Ha elavult a kliensem, akkor letölti a frissebbet.

Linux alatt régebben egy picit másként műkött. Van a cégnek egy nyilvános weboldala, ahol a linuxos és windowsos szoftverek elérhetők. Sajnos a linuxos nagyon elavult és ha jól emlékszem csak deb csomagok vannak (talán még rpm is). Csak nagyon régi 2010-2012 körüli ubuntuval működött a dolog, mert a deb csomagoknak olyan függőségei vannak, hogy downgrade-elni kellene egy csomó mindent hozzá. Valahogy nagy nehezen fél legálisan sok-sok idő alatt összekapartam a netről frissebb csomagokat és azzal úgy ahogy elmuzsikált a történet, viszont nem olyan egyszerűen mint Windows alatt.

A legutóbbi Mint esetén untam meg ezt. Nagyjából úgy működött a dolog, hogy.... nagylevegő:

Összeírtam egy kisebb listát, hogy mi kell a működéshez (pcsd és társai). Ha valakit konkrétabban érdekel, előszedem majd a listát. Az elmúlt években már nem igazán volt meg minden csomag a tárolókban, de getdeb.net-ről és innen-onnan összeszedhetők, valamint meg is vannak külön nekem a ritkább függőségek, amiknek szerencsére (eddig még) nincs olyan további függőségük, amik esetleg nem kielégíthetők. Szóval feltolunk egy marék deb fájlt a megfelelő sorrendben, lesz egy SafeNet szoftver, amiben ugyanúgy lehet kezelni a tokent mint Windows alatt. Vagy nem. Nem tudom mitől függ, de nem is érdekelt igazán, mert attól, hogy nem tudok épp jelszót változtatni, attól a kapcsolat még létrejön.
Miután az eszköz telepítve van és működik, utána sajnos nincs (vagy legalábbis nem találtam) egy létező és működő kliens szoftvert, mint az AnyConnect win alatt. Úgy működik a történet, hogy szépen bepötyögöm a böngészőbe a vpn.pityuka.hu/etoken címet és el akar indulni egy java alkalmazás, ami valahogy összehozza nekem a kapcsolatot. Sajnos a modern böngészőkben ez nem igazán fog menni, ezért kell egy NPAPI képes browser. Pale-Moon töltötte be ezt a szerepet már régóta nálam. Miután megvan a böngésző, le kell tölteni a javát is és eltenni a megfelelő helyre, valamint létrehozni a "mozilla extension" mappában a linket, ami rá mutat. Miután van egy működő javánk egy NPAPI képes böngészőben, végre el tud indulni a java app, ami egyébként azt csinálja, hogy ellenőrzi, hogy van-e a gépen AnyConnect. Ha van, akkor elindítja a megfelelő konfigurációval, ha nincs, akkor fel akarja telepíteni. Persze ez nem megy, így felajánlja, hogy töltsem le a vpnsetup.sh-t és futtassam gyalog. Miután elindítom, lepereg a mátrix, feltolja az anyconnectet az /opt/cisco/-ba, mellé pedig ha jól emlékszem a vpnagentd-t. Utána ha megnyomom a "retry" gombot, az értesítési sávra kerül az AnyConnect és létrejön a kapcsolat.

Miután bontottam a kapcsolatot, újra már nem fogok tudni csatlakozni csak ha wipe-olom az AnyConnectet és a vpn agentet, majd újra futtatom az install scriptet. Egyszer rájöttem mi volt a baja, hogy ne kelljen ezt csinálni, de már elfelejtettem. Szóval ha döcögve is, de működött a dolog Mint alatt. Viszont a fő disztróm a Manjaro, a Mintet is lényegében már csak azért tartottam, mert éppen hogy, de tudtam vele használni a VPN-t ha kellett.

 

Manjaro

KDE-ben és Gnome-ban is van lehetőség a hálózati kapcsolatoknál hozzáadni VPN kapcsolatot. Próbáltam sokféleképpen, de nem jártam sikerrel. Ekkor kezdtem el keresni, és sokat léptem előre.

Nagyjából annyi volt a történet, hogy telepítettem a szükséges szoftvereket:

sudo pacman -S opensc asekey opensc-openct sac-core

 Ezek után engedélyeztem és elindítottam a pcscd szolgáltatást:

sudo systemctl enable pcscd.service 
sudo systemctl start pcscd.service

Ha ez megvan, megnézzük, hogy látszik-e a token:

opensc-tool -l

 Valami ilyesmi kimenetet kell kapnunk:

# Detected readers (pcsc)
Nr.  Card  Features  Name
0    Yes             AKS ifdh 00 00

Az is jó jel, ha világít a LED a tokenen.

Ezek után kézzel be kell tölteni a PKCS11 libet a böngészőbe biztonsági eszközként. Firefox alatt is működik a dolog, de a fent ismertetett java, npapi problémák miatt Pale-Moon böngészőben használtam jellemzően. Ott is hasonló az eljárás:

Mivel angolul használom a szoftvereket, így nem is próbálkoznék lefordítani a menüpontokat, mert valószínűleg mellé lőnék, így csak bemásolom az angol nyelvű leírást:

  • Open the Firefox preferences dialog
  • Choose “Privacy and Security” > “Certificates > “Security Devices”
  • Choose “Load”
  • Enter a name for the security module, such as “Local PKCS#11”
  • Choose “Browse…” and load “/usr/lib/libeTPkcs11.so”

Miután ez megvan, a Security Devices alatt látszani fog az eszköz és be lehet rá jelentkezni vagy akár jelszót is változtatni. -> Nincs szükség a safenet szoftverre, viszont ez nem teljesen igaz, mert a korábban telepített sac-core annak a feladatát látja el.

Sajnos ez nem lesz elég az örömhöz. Megpróbáltam egy naprakész Firefox alól elindítani a VPN kapcsolatot. Odáig el is jutottam, hogy kérje a jelszót. Megadom, észreveszi az oldal, hogy nem tudja kofigurálni a rendszeremet, ezért felajánlja, hoy töltsem le a vpnsetup.sh-t. Látszólag rendben lefut a script, viszont rögtön jön is a hibaüzenet, hogy nincs futó vpnagent daemon. Ezt nem vizsgáltam mélyrehatóbban tovább de még úgy tekintek rá, hogy lehet ott egy lehetséges megoldás. Megnézem majd a scriptet és hogy mit akar csinálni, illetve ehhez képest mi is történik pontosan.

Inkább elindultam az openconnect vonalon.

A történet röviden annyi, hogy létrehoztam egy /etc/pkcs11/modules/opensc-module fájlt:

sudo mkdir /etc/pkcs11/modules/ && sudo touch /etc/pkcs11/modules/opensc-module

ez után ennek a tartalmát is létre kell hozni mondjuk nano-val. Mivel az előzőleg telepített lib a libeTPkcs11.so, így erre fog mutatni, ez lesz a fájl tartalma:

module:/usr/lib/libeTPkcs11.so

 P11toollal kiolvashatjuk a token tanúsítványadatait. Nekem gyanús egyébként, hogy megfelelő adatokat látok-e, de úgy tűnik, hogy igen:

p11tool --list-all                                                       
warning: no token URL was provided for this operation; the available tokens are:

pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=System%20Trust
pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=Default%20Trust
pkcs11:model=eToken;manufacturer=SafeNet%2C%20Inc.;serial=nagyontitkos;token=pityuka-vpn

A fenti adatokból nekünk a legutolsó lesz az érdekes. Az eTokennel, illetve a SafeNettel tudjuk azonosítani, valamint  esetleg a "pityuka-vpn"-el.
Győződjünk meg róla, hogy openconnect 4.05 vagy frissebb verzióval rendelkezünk, valamint a GNUtls-el OpenSSL helyett.
Ha lefuttatjuk az

openconnect --version

parancsot, akkor a PKCS#11-nek meg kell jelennie a feture listában.

Ha ez megvan, akkor jöhet(ne) a kapcsolódás. Ehhez az openconnectnek meg kell adni, hogy mely feature-t vesszük igénybe és azon belül pedig melyik eszközt.

A fentebb már említett p11tool --list-all paranccsal megkereshetjük a saját eszközünket. Mint látható, nekem csak 3db pkcs11 eszközöm van, ezek közül az első kettő valami default cucc, az utolsó a SafeNet eToken. Ezt úgy tudjuk azonosítani, hogy amikor kiadjuk az openconnect https://vpn.pityuka.hu/etoken parancsot, akkor közbeékeljük egy paramétert. A -c kapcsolóval adhatjuk meg, hogy mely eszközt szeretnénk használni. Elméletileg a fenti sort egészben is használhatjuk, de elégnek kellene lenni egy egyedi azonosításra alkalmas résznek is, pl. csak szimplán a 'pkcs11:serial=nagyontitkos'-nak. Ha entert ütünk, elindul a kapcsolódási folyamat:

openconnect -c 'serial=nagyontitkos' https://vpn.pityuka.hu/etokkken                                  [1]
POST https://vpn.pityuka.hu/etokkken
Csatlakozva ide: 371.419.284.641:443
Nem sikerült a(z) serial=nagyontitkos kulcs/tanúsítvány fájl megnyitása: Nincs ilyen fájl vagy könyvtár
A tanúsítvány betöltése nem sikerült. Megszakítás.
Nem sikerült a HTTPS kapcsolat megnyitása ehhez: vpn.pityuka.hu
Nem sikerült megszerezni a WebVPN sütit

Ezek szerint nem sikerült azonosítani a tokent vagy a rajta lévő tanúsítványt. Kimaradt a megfelelő feature a 'serial=nagyontitkos' paraméterből. Figyeljünk oda, így helyes:

openconnect -c 'pkcs11:serial=nagyontitkos' https://vpn.pityuka.hu/etokkkenn                    [1]
POST https://vpn.pityuka.hu/etokkkenn   
Csatlakozva ide: 371.419.284.641:443
PIN-kód szükséges ehhez: pityuka-vpn
Adja meg a PIN-kódot:
Hiba a tanúsítvány betöltésekor a PKCS#11 fájlból: The requested data were not available.
A tanúsítvány betöltése nem sikerült. Megszakítás.
Nem sikerült a HTTPS kapcsolat megnyitása ehhez: vpn.pityuka.hu
Nem sikerült megszerezni a WebVPN sütit

Tehát eljutottunk addig, hogy a token működik, a PIN-t bekéri, de sajnos a tanúsítványt nem találja. Megpróbáljuk megtalálni manuálisan:

p11tool --list-privkeys --login pkcs11:manufacturer=SafeNet%2C%20Inc.                           [1]
Token 'pityuka-vpn' with URL 'pkcs11:model=eToken;manufacturer=SafeNet%2C%20Inc.;serial=nagyontitkos;token=pityuka-vpn' requires user PIN
Enter PIN: 
Object 0:
	URL: pkcs11:model=eToken;manufacturer=SafeNet%2C%20Inc.;serial=nagyontitkos;token=pityuka-vpn;id=%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00;object=eTCAPI%20private%20key;type=private
	Type: Private key (RSA-1024)
	Label: eTCAPI private key
	Flags: CKA_WRAP/UNWRAP; CKA_PRIVATE; CKA_SENSITIVE; 
	ID: 00:00:00:00:00:00:...:00

Az Object 0 lesz a mi barátunk, méghozzá pontosan az id= mező. Lerövidítettem, ennél jóval hosszabb hexadecimális számsort kell kapnunk. Lent ugyanez megismételve az ID: sorban csak százalékjelek nélkül. Az URL fog kelleni nekünk a csatlakozáshoz az object és a type mezők nélkül. Fontos, hogy root jogokkal futtassuk, mert az openconnect csak úgy képes átkonfigurálni a hálókártyánkat:

sudo openconnect -c 'pkcs11:model=eToken;manufacturer=SafeNet%2C%20Inc.;serial=0123456f;token=pityuka-vpn;id=%00%00%00%00%00%00' https://vpn.pityuka.hu/etokkenn
[sudo] adamyno jelszava: 
POST https://vpn.pityuka.hu/etokkenn
Csatlakozva ide: 371.419.284.641:443
PIN-kód szükséges ehhez: pityuka-vpn
Adja meg a PIN-kódot:
A következő klienstanúsítvány használata: „pityuka-vpn”
SSL egyeztetés ezzel: vpn.pityuka.hu
Connected to HTTPS on vpn.pityuka.hu with ciphersuite (TLS1.2)-(ECDHE-SECP256R1)-(RSA-SHA512)-(AES-256-GCM)
XML POST engedélyezve
SSL egyeztetés ezzel: vpn.pityuka.hu
Connected to HTTPS on vpn.pityuka.hu with ciphersuite (TLS1.2)-(ECDHE-SECP256R1)-(RSA-SHA512)-(AES-256-GCM)
CONNECT válasz érkezett: HTTP/1.1 200 OK
CSTP kapcsolódva. DPD 30, Keepalive 20
Connected as 1.2.3.4, using SSL, with DTLS in progress
DTLS kapcsolat kiépítve (GnuTLS használatával). Titkosító alkalmazáscsomag: (DTLS0.9)-(DHE-CUSTOM)-(AES-256-CBC)-(SHA1).
Connect Banner:
| Pityuka VPN Kozpontja
| Az illegalis hozzaferest a torveny bunteti!
| Ide jön a többi bla-bla
| 
| Disconnect immediately if you are not authorized user!
| 

^CBYE csomag küldése: Aborted by caller
User cancelled (SIGINT/SIGTERM); exiting.

Mint ahogy az fent látható, létrejött a kapcsolat az 1.2.3.4 IP címmel. Teszteltem, működik végre és az egészben az a vicc, hogy amíg írtam a leírást, közben jöttem rá :D

Elméletileg van egy olyan opció, hogy valamilyen conf fájlt be lehet előre paraméterezni és akkor a NetworkManager GUI-ról is menni fog a kapcsolat. Ezügyben majd futok még egy kört, de ez az 1db parancs a terminálba megoldás is már fényévekkel jobb a korábbi java, npapi, és társai szépségektől.