[Translated by {Iikka}{Yli-Kuivila}
(ITKST56 course assignment at JYU.FI)]
33C3 preroll-musiikkia
Herald: Tervetuloa takaisin festivaali-
lavalle, yhä kakkospäivänä minun kelloni
mukaan vaikka olenkin kadottanut ajanta-
juni jo nyt. En tiedä, tuntuu olevan kii-
reinen vuosi niin monen hyvän esityksen
kanssa ja seuraavana meillä on super-mah-
tava estiys Jiskalta, Gerberiltä ja Matt-
hiakselta. Nämä kolme ihanaa ihmistä näyt-
tävät meille jotain VPN:stä, niin kutsu-
tuista Very Pwnable Networkeista, ja
miksi sinun VPN:si ei ole välttämättä
yhtä turvallinen kuin sinulle on sanottu.
Ja tämä ei ole pelkästään tärkeää ihmi-
sille jotka istuvat 7:n proxyn takana aja-
tellen: ettepä nappaa minua. Mutta myös
vaikka jos työantajasi sanoo, että käytä
tätä VPN-asiakasohjelmistoa: sinua voi
odottaa yllätys tai pari. Ja tämä on
ennalta nauhoitettu esitys, jonka jälkeen
voin jo nähdäkin heidät täällä työkaluis-
samme mutta esityksen jälkeen on Q&A-
sessio. Jos teillä on kysymyksiä,laittakaa
niitä IRCissä, Twitterissä tai Mastodon:sa
hashtaillä #rc3cwtv ja meidän ihana
Signaalienkeli kerää ne ja näemme
toisemme tallenteen jälkeen.
Jiska: Kaikki ja tervetuloa esitykseen
Very Pwnable Network Gerbertin, Matthiak:
sen ja minun toimesta. Mistä tämä alkoi?
No, minusta tuli vähän vainoharhainen vii-
me vuonna ja ajattelin että olisi hyvä
idea salata paljon koska Wi-Fi, LTE, TLS
voidaan kaikki kaapata, ne voidaan purkaa.
Joten meidän tulisi salata kuten kaikki
katselisivat ja sen vuoksi minun pitäisi
käyttää VPN:ää. Ja seuraava luottamusolet-
tamus oli että yhdistän yliopistoni verk-
koon joka päivä, joten minun pitäisi luot-
taa tähän joka tapauksessa. Ja jos minä
luotan tähän verkkoon, voisin käyttää tätä
verkkoa ja heidän ammattilais-VPN-palvelua
Kuulen teidän nauravan, kuulen naurua,
mutta tämä oli minun ideani, koska sitten
minun ei tarvitse asentaa enää mitään
lisää verkkoselaukseni aikana. Ja myös,
tämä AnyConnect mitä he käyttivät niin se
oli hieno ja toimi jokaisella käyttöjär-
jestelmällä. Ja se kuulostaa hyvältä, tur-
valliselta tuotteelta: AnyConnect.
Jep. Ja sitten rupesin käyttämään mobiili-
laitteitani ja yhtäkkiä minulle tulee
kaatumislokeja, jotka näyttivät tältä. eli
kun olet vainoharhainen, katsot kuitenkin
kaatumislokisi lävitse joka toinen päivä,
ja yksi niistä näytti tällaiselta.
Tämä ei näyttänyt oikein mukavalta osoit-
teelta, se näytti vähän omituiselta, ja
tässä näkyy vähän kaatuneesta säikeestä.
Jos tämän pistää IDA:an ja tekee vähän
takaisinmallinnusta voi myös liittää Any-
Connectin ekstension funktioiden nimiä,
AC-ekstensio ja kaatuminen tapahtuu jos-
sain kun se pistää VPN-konfiguraatiota
pystyyn, jossakin tunnelipuskurissa. En
tiedä. Joten, ja sitten ajattelin myös,
että tuo osotie näyttää omituiselta koska
se on IPv4 väärin päin, ja pari päivää
myöhemmin se kaatui uudestaan ja tässä
luki 68k Uusi Rivi. Se näytti todellakin
joltain konfiguraatiostringeiltä, jotka
kaatuilivat tietyissä osoitteissa,
ja se ei todellakaan näyttänyt hyvältäaikaa..
Mutta minulla ei myöskään ollut iakaa.
Joten kirjoitin Ciscolle ja sanoin, että
oletteko tosissanne, teidän ohjelmisto
kaatuu näin usein? Koska aina kun teen
pyykkiäni minulla on huono Internet-yhteys
joten minun AnyConnect-ohjelmisto alkaa
kaatuielmaan omituisissa osoitteissa.
Ja vaikka tämä on koodin ajamisen ongelma,
toinen ongelma olisi että jos pistetään
pari pakettia menemään ilmasta, hyökkääjä
voi onnistua uhrin VPN-yhteyden katkaise-
misessa. Se on myös onelma. Joten koska
AnyConnect-ohjelmisto ei ole kunnolla osa
käyttöjärjestelmää, iOS:ää, se tarkoittaa
että se vain uudelleenyhidstää sinut ja
sitten kaikki viestisi lähetetään selvä-
kielisenä verkon yli ja käyttäjä ei saa
tästä mitään ilmoitusta. Se on vain VPN-
symboli, joka on kadonnut, ja kaikki lähe-
tetään selväkielisenä. Ja halusin analy-
soida tätä pidemmälle ja siellä on debug-
valinta siinä ohjelmistossa. Mutta koska
Ohjelmisto itse katuu, lokit myöskin
katoavat sen sileän tien. Jos se kaatuu ja
sinulla on debuggaus-valinta päällä, niin
myös käyttöjärjestelmän kaatumislokit
iOS:ssä ovat menneet, niitä ei ole.
He vastasivat: "Emme saa tätä toistettua".
No, siis tietenkään he eivät
ole auttaneet minua pyykinpesussa tai
missään muussakaan niin tietnkään he eivät
saa sitä toistettua. Ja mikä vielä pahem-
paa, he jättivät tiketin istumaan pitkäksi
aikaa kunnes sanoimme, että esittelemme
tämän tänä vuonna CCC-kongressissa. Ja
sitten 10 päivää ennen puhetta he väittä-
vät että he ovat korjanneet kaksi kolmesta
kaatumisesta, ja he kysyivät että saammeko
kaatumista enää aikaan vai ei. Mutta vain
päivää ennemmin he sanoivat etteivät
olleetkaan varmoja ja niin edelleen. Se
oli hyvin omituinen tiketti, ja minulla ei
ollut tietoa että oliko se korjattu vai ei
koska tietenkin toistaakseni sen, minulla
pitäisi olla tinapaperia, pari AnyConnect:
lla varustettua älypuhelinta ja sitten
minun pitäisi odotella että Internet-
yhteyteni menee rikki tavalla, joka saa
sen kaatumaan. Joten tämä oli ihan liian
satunnaista. Kerroin myös Applelle, mutta
he vain sanoivat että vika on ohjelmassa,
eikä silloin kuulu heille, vaikka se on
verkkoekstensio, mikä kaatuu. Joten se
ei ole heidän tehtävänsä ilmoittaa käyttä-
jälle siitä, koska se on vain VPN mikä on
poissa. Ja sitten data lähteekin selväkie-
lisenä ja se on ihan ok. Se oli odotettua
käytöstä. Rupesin ärsyyntymään tästä ja
lopetin VPN:n käyttämisen, mutta minulla
oli myös idea etsiä opiskelijoita, jotka
tutkisivat tätä. Ja tiedättekin mitä
tapahtuu kun löytää erittäin motivoitunei-
ta opiskelijoita: he löytävät haavoittu-
vuuksia. Ja tämä esitys on siitä.
Gerbert: Niin me tutkimme Cisco:n AnyCon-
nect-ohjelmistoa Linuxille ja löysimme
pari mielenkiintoista asiaa. Vähän sen
jälkeen kun julkaisimme löydöksemme, usei-
ta lehtiartikkeleita ilmaantui. Mutta mitä
tapahtui Jiskan kaatumisten ja näiden ar-
tikkeledein välillä? VPN on mielenkiintoi-
nen sillä se on niin vanha tutkimuskohde.
Kuitenkin, tuon teknologian merkitys ko-
rostui myöhemmin korona-pandemian myötä.
Monet yritykset joutuivat uudelleensijoit-
tumaan kotitoimistoille turvallisuustoi-
mien vuoksi. VPN mahdollistaa käyttäjille
pääsyn ulkopuolelta firman tai yliopiston
sisäisiin resursseihin. Yleensä tarvitaan
VPN-asiakasohjelmistoa, jotta VPN-palveli-
meen saadaan yhteys. Avoimen lähdekoodin
ohjelmistojen kuten OpenVPN:n lisäksi saa-
tavilla on monia suljetun lähdekoodin tuot
-teita, erityisesti yrityssektorilla.
Käyttäjät joutuvat luottamaan tähän ohjel-
mistoon, asentamaan tämän mustan laatikon
koneilleen päästäkseen verkkoon. AnyCon-
nect secure liikkuvuus-ohjelmisto Ciscolta
on yrityskäyttöön tarkoitettu. Se voidaan
luokitella etäpääsyohjelmistoksi, joka
mahdollistaa loppukäyttäjille pääsyn verk-
koon, joka tukee SSL VPNää tai IPsec:iä.
Käytettäessä SSL VPN:ää autentikaatio ja
tunnelin muodostaminen tapahtuu SSL/TLS-
tunnelin lävitse. Ohjelmisto toimii paksu-
na clientina joka kommunikoi VPN-serverin
kanssa HTTPS:n yli. Kuten jo mainittiin,
AnyConnectin lähdekoodi ei ole julkisesti
saatavilla. Sovellus jaellaan käännettyjen
binäärien ja kirjastojen kanssa.
Vaikka sovellus on dokumentoitu, se ei
kata sisäistä toiminnallisuutta. Edes haa-
voittuvuustiedotteissa, jotka jaellaan
julkisina, ei mennä kovin syvälle tekni-
siin yksityiskohtiin. Sen vuoksi tiedämme
vain rajoitetusti sovelluksesta, ja sen
sisäisestä käyttäytymisestä. Olemme aset-
taneet itsellemme tavoitteksi tutkia Any-
Connectin äskettäisiä Linux ja iOS-sovel-
luksia. AnyConnectin päätoiminnallisuus
tulee VPN-yhteyksien muodostamisesta,
mutta se on vain jäävuoren huippu.
AnyConnect:ssa on myös muita ominaisuuksia
joista nimetään pari: skriptien jakelu
ja suorittaminen kohdelaitteilla, auto-
maattinen ohjelmiston päivittäminen kysy-
mättä käyttäjän lupaa siihen, ja yksi omi-
naisuuksista on laiteskannaus: se ei
integroidu AnyConnectiin, vaan sitä pide-
tään erillisenä ohjelmana. Se toimii Any-
Connect-infran kanssa yhdessä ja mahdol-
listaa laajan asiakaslaitteiden järjestel-
mätiedon lukemisen ja välittämisen VPN-
palvelimelle. AnyConnectiin liittyvät
työt perustuvat Cisco:n julkisiin tiedot-
teihin ja blogimerkintöihin tietyiltä tur-
vallisuustutkijoilta. Sen vuoksi päätimme
listata ja kategorisoida kaikki
haavoittuvuudet vuodesta 2011 lähtien.
Tässä kuvassa näemme listan haavoittuvuuk-
sista per vuosi, pistettynä järjestykseen
vakavuuden perusteella. Eniten raportoi-
tiin keskitason haavoittuvuuksia, mutta
myös kriittisiä haavoittuvuuksia julkais-
tiin vuosina 2011 ja 2012. 2015 ja 2016
vuosien korostuminen määrissä johtuu kir-
jastoissa kuten OpenSSL, olleista haavoit-
tuvuuksista. Haavoittuvuudet jaoteltiin
vielä edelleen kategorioihin, jotka näky-
vät tässä kuvassa. Kryptografiset haa-
voittuvuudet ovat yleisimpiä, sillä Any-
Connect käyttää OpenSSL:ää, ja OpenSSL:n
haavoittuvuudet ovat AnyConnectin haavoit-
tuvuuksia. Kun kolmansien osapuoletan haa-
voittuvuudet suljetaan pois, eniten Any-
Connectilla on käyttöoikeuksien laajennuk-
sen haavoittuvuuksia. Sitä seuraa lähellä
palvelunestohyökkäykset, jotka on usein
kohdistettu päällä olevaan ohjelmaan, jot-
ta voidaan häiritä VPN-yhteyttä. Ylivuoto-
ja versioiden alentamishaavoittuvuuksia.
Nämä tulokset antavat meille vähän tietoa
menneisiin vikoihin.
Matthias: Ennen kuin mennään takaisinmal-
linnukseen, haluamme antaa teille pienen
katsauksen Cisco:n lisensointitukeen.
Cisco ASA on tyypillinen palvelinpääte
Cisco:n AnyConnect:ille, ja sitä on saata-
villa rautalaitteistona sekä myös virtuaa-
lisena versiona esim. VMwaren päällä ajet-
tavaksi. Tutkimuksemme alussa yritimme
saada virallista arviointilisenssiä
Ciscolta ASAv:tä varten, ilman että pii-
lotimme tarkoituksenamme olleen
käyttää sitä turvallisuustutkimukseen.
Sen vuoksi naiivi lähestymistapamme oli
vain lähestyä Ciscon lisensointitukea. Se
oli enemmän tai vähemmän: Hei, teemme
turvallisuustutkimusta Ciscon AnyConnect-
asiakasohjelmistoon. Voitteko antaa meille
ilmaisia arviointilisenssejä ASAv:lle?
Cisco vastasi: okei. Montako tarvitsette?
Tässä kohdassa olimme hieman yllättyneitä
kuinka kivuttomasti kaikki tuntui menevän.
Mutta sitten saimme kolme 60-päivän li-
senssiä tilillemme. Mutta heti kun kokei-
limme ladata Cisco ASAv-imagea Virtual-
Box:lle, saimme tämän virheen. Ehkä jon-
kinlainen ongelma lisenssin aktivoinnissa,
sillä jos sinulla on lisenssi tuotteisiin
tietenkin voit ladata sen, eikös joo?
Mutta joo, se todellakin vaikutti siltä
että lähestymistapamme oli hivenen naiivi
ja olimme aliarvioineet yrityssovelluksien
lisenssoinnnin monimutkaisuutta.
Se oli vähän epätyydyttävää. Mutta meillä
oli idea. Pyytäisimme yliopistomme data-
keskuksen apua koska hekin käyttivät
Ciscon AnyConnectia. Mutta me emme
ikinä saaneet vastausta. Meillä oli vielä
joitakin vaihtoehtoja jäljellä, mutta jos-
sakin kohtaa annoimme vain periksi.
G: Koska saatavilla ei ole kunnollista
dokumentaatiota, oli tarpeen ihan alkuun
ymmärtää sovellusta ja selvittää sen kes-
keiset komponentit. Sen vuoksi meillä ei
ollut muuta mahdollisuutta, kuin takaisin-
mallintaa sovellus. Analysoimme sovellus-
tiedostoja ja verkkoliikennettä. Jotta
saisimme paremman ymmärryksen ohjelmasta,
käytimme perustyökaluja kuten Ghidraa
staattiseen koodianalyysiin. Ghidra kyke-
nee takaisinkääntämään lähdekoodin kään-
netystä binääristä tai kirjastosta. Dynaa-
mista sovellustestausta varten käytimme
työkaluja kuten Fridaa, Burppia ja Wire-
sharkkia. Frida voidaan liittää ajossa
oleviin prosesseihin, jotta ymmärretään
ohjelman virtausta. Burpia käytettiin pro-
xynä HTTPS-viestien muuttamiseen, ja Wire-
sharkkia käytettiin verkkoliikenteen kuun-
teluun ja purkamiseen. Otetaan lähempi
katsaus tiedostojen binääreihin. AnyCon-
nectin mukana tulee iso joukko binäärejä.
Takaisinmallintaessamme tunnistimme kolme
keskeistä sovelluksen osaa: vpnui on
binääri, jonka kanssa käyttäjä on vuoro-
vaikutuksessa. Se tarjoaa GUI:n, jossa
käyttäjä tekee yksinkertaisia asetuksia ja
käynnistää VPN-yhteyden. Toinen binääri on
vpnagentd. Se ajaa daemonia taustalla
kaikkina aikoina, jopa silloin kun VPN-
yhteys ei ole auki. Erikoista vpnagentd:sä
on se, että sitä ajetaan root-prosessina
ja se kuuntelee aina staattisella portilla
Sen tarkoituksena on pystyttää VPN-tunneli
ja verkkokonfiguraatio asiakaslaitteessa.
Se sisältää asetuksia kuten reitit tai DNS
-palvelimet. Kolmas ja viimeinen binääri
on vpndownloader. Kuten nimi vihjaa, sen
tarkoitus on ladata lisätiedostoja, joita
tarvitaan VPN-yhteyden muodostamiseen.
Se sisältää sellaisia kuten VPN-profiilit,
aputiedostot ja skriptit. Binäärit vaihta-
vat dataa keskenään prosessienvälisen kom-
munikaation (IPC:n) keinoin. IPC tapahtuu
TCP socket:ien välityksellä. Binääridata-
formaatti, jonka Cisco on IPC:lle määri-
tellyt, käytetään viestien vaihtoon TCP-
socketien akutta. Binäärien lisäksi Any-
Connect sisältää paljon kirjastoja.
Monet niistä ovat porttauksia olemassa-
olevista avoimen lähdekoodin kirjastoista
kuten OpenSSL:stä. Tärkein seikka niistä
on tällä dialla: libvpnapi.so sisältää
interfacet ja funktiot käyttäjäkäyttöliit-
tymien taustalogiikalle. Kirjaston tavoit-
teena on että yritykset voivat rakentaa
omat VPN-sovelluksensa AnyConnect:n infran
päälle. Se on ainoa krijasto, jolle doku-
mentaatio on saatavilla Ciscon
toimittamana. Libvpncommoncrypt on wrapper
OpenSSL ja NSS-kirjastoille. NSS on saman-
kaltainen OpenSSL:n kanssa ja sitä käy-
tetään selainten, kuten Mozilla Firefox:n
toimesta SSL/TLS-yhteyksien kytkemiseen.
Se myös tarjoaa oman sertifikaattivaras-
tonsa. Libvpncommon on toinen keskeinen
kirjasto, jota kaikki binäärit käyttävät.
Se tarjoaa luokkia ja funktioita IPC-
logiikalle. Sillä voidaan luoda, lähettää
ja validoida IPC-viestejä. Seuraava kir-
jasto, libvpnagentutilities, sisältää
luokkia ja funktioita, jotka käsittelevät
kriittisiä operaatioita, kuten verkkoase-
tuksia. Sitä käyttää ainoastaan vpnagentd.
Binäärien ja kirjastojen lisäksi on monia
muita tiedostoja, joilla on merkitystä
ja joita tutkimme tarkemmin. AnyConnect
tarjoaa AnyConnect local policy XML-tie-
doston. Tämä tiedosto sääntelee useita
turvallisuusasetuksia. Esimerkiksi sitä
voidaan käyttää määrittämään, että muita
tiedostoja ei enää ladata, tai että VPN-
palvelin voi suorittaa versiopäivityksiä.
Oletusasetuksillaan se on hyvin salliva ja
lähes mikä tahansa on sallittua. Tiedostoa
ei ylikirjoiteta päivitysten toimesta eikä
sitä voida muuttaa VPN-palvelimen toimesta
VPN-profiili on myös XML-formaatissa: se
sisältää lisäasetuksia. Vihreällä on ko-
rostettu EnableScripting-tagirivi, jossa
on boolean-arvo epätosi. Se indikoi, että
skriptejä ei tule suorittaa laitteella.
VPN-palvelin jakelee profiilitiedostoja,
ja ne ylikirjoitetan seuraavan kerran kun
käyttäjä yhdistää ja muuttaa niitä. Vii-
meinen tiedosto on VPNManifet.dat mikä on
binääridatamuodossa sisältäen AnyConnect:n
versiotiedoton. Tätä tiedostoa käytetään
kun tarkistetaan mikä on AnyConnectin
versio ennen päivitystä. Näiden tiedosto-
jen lisäksi viestinvälitys näyttelee kes-
keistä roolia. VPN-yhteyden muodostus
rakentuu kolmeen vaiheeseen. Ensimmäinen
vaihe on autentikointi.
Käyttäjä syöttää VPN-palvelimen IP/Domain-
tiedot vpnui:ssä. Kohdepalvelin lähete-
tetään sitten IPC-viestinä vpnagentd:lle.
Vastauksena vpnui saa erinäisiä järjestel-
mätietoja takaisin. Se sisältää käyttöjär-
jestelmätietoja tai kokonaisen tietovaran-
non. Myöhemmin tämä tieto ja tunnukset
lähetetään VPN-palvelimelle HTTPS:n väli-
tyksellä. ASA palauttaa palvelinparametrit
HTTPS-vastauksessa. Otetaan lähempi kat-
saus pyyntöön ja vastaukseen. Vasemmalla
puolen näette tämän pyynnön. Se on nor-
maali post-pyyntö, jossa on XML jossa
tunnustiedot välitetään. Tunnustiedot
on merkitty vihreällä.
Vasemmalla näemme vastauksen. Vastaus si-
sältää sessio-tokenin, mikä on myös mer-
kitty vihreällä. Lisäksi vastaus sisältää
URLt kaikkiin ladattaviin tiedostoihin ja
niiden hash-arvot. Oranssilla korostettu
string on yksi ladattavista tiedostoista.
Lataus-vaihe on toinen vaihe VPN-yhteyden
muodostamisessa. Ensiksi vpnui suorittaa
vpndownloader-binäärin. Sitten palvelin-
paramterit edellisestä HTTPS-vastauksesta
siirretään vpndownloaderille IPC:n väli-
tyksellä. URLt poimitaan IPC-viesteistä
ja kun tiedostot ladataan ne ladataan
väliaikaiseen kansioon HTTPS:n välityk-
sellä. Lataajaprosessi tiedottaa vpnagentd
:lle IPC:n välityksellä että sen tulee
siirtää tiedostot varsinaiseen sovellus-
kansioon. Kolmannessa ja viimeisessä
vaiheessa VPN-yhteyden muodostamista vpnui
lähettää IPC-viestin vpnagentd:lle, jossa
on pyyntö muodostaa VPN-tunneli. Sen
jälkeen tunneliparamterit vaihdetaan käyt-
täen HTTPS:ää. Kun vpnagentd on asettanut
parametrit, VPN-sessio jatkuu.
Otetaan tarkempi katsaus tunneliparamet-
reihin.
Vasemmalla puolella näemme pyynnön.
Ensimmäisellä rivillä näette HTTP-connect
-metodin. Normaalisti proxyt käyttävät
tätä metodia edelleenvälittääkseen pyynnöt
kohdepalvelimelle. Pyynnön sisällä näemme,
että sessio-token annetaan cookie:n
header:issä. Tämä on se sama sessio-token,
joka saatiin autentikaatiovaiheessa.
Eri tunneliparamterit välitetään eri HTTP-
headereissä. Osio, joka on merkitty
punaisella edustaa paikallisen laitteen
IP-osoitetta. Oikealla puolella näette
vastauksen tään pyyntöön. Esimerkiksi X-
CSTP-Address-header sisältää IP-osoitteen,
jonka laitteen tulee antaa tunneli-inter-
facelleen.
Punaisella merkatussa osiossa näemme nyt
myös DNS-palvelimen VPN-yhteydelle.
Lisäksi osoiteavaruudet, jotka pitää rei-
tittää VPN-palvelimen kautta on määritelty
X-CSTP-Split-Include-headerissä. Nyt kun
meillä on yleispätevä ymmärrys
ohjelmistosta, mennään haavoittuvuustutki-
mukseen. Me suoritimme design-analyysiä
AnyConnectille, jossa tarkastelimme IPC-
viestejä paljon yksityiskohtaisemmin.
Meidän täytyy määritellä tiettyjä oletuk-
sia turvallisuudesta ja hyökkääjästä,
ennne kuin etsimme haavoittuvuuksia. Tämä
dia näyttää useita oletuksistamme.
Kryptografiset algoritmit sovelluksen
sisällä ovat turvallisia, eikä niitä voida
murtaa eksponentiaalisessa ajassa. Hyök-
kääjä ei voi lukea tai muokata viestejä
huolimatta heidän sijainnistaan, ja me
oletamme että VPN-palvelin ei ole pahan-
tahtoinen, ja viestii vain valideja vies-
tejä, jotka noudattavat protokollaa.
Oletamme, että hyökkääjällä on paikalli-
nen pääsy ja hän voi suorittaa komentoja
laitteella, ja hänen tavoitteena on vaa-
rantaa järjestelmän tai sovelluksen
luottamuksellisuus, eheys tai saatavuus.
Käyttöoikeuksien laajennushaavoittuvuudet
käsitellään, sillä ne mahdollistavat hyök-
kääjälle tavoitteisiin pääsyn.
Cisco päätti sisällyttää sovellukseensa
automaattisten päivitysten ominaisuuden.
AnyConnect pystyy saamaan AnyConnect-päi-
vityksiä VPN-palvelimelta ilman mitään
käyttäjävuorovaikutusta. Oletusasetuksil-
laan AnyConnectia voi päivittää VPN-pal-
velin, joka tarjoaa uudempaa versiota.
Turvallisuustutkijan näkövinkkelistä täl-
lainen automaattinen päivittäminen kuulos-
taa lupaavalta, eikös vain? Katsotaan sitä
ominaisuutta tarkemmin. Ensiksi vpndown-
loader lataa suoritettavan asennustiedos-
ton ja shell-skriptin nimeltä vpndownloa-
der.sh. Sitten vpndownloader.sh suorite-
taan. Shell-skripti sisältää arkiston,
joka puretaan jotta saadaan uusi versio
vpndownloaderista ulos. Sitten IPC-viesti
lähetetään vpnagentd:lle, jossa sitä
pyydetään suorittamaan tämä asennustie-
dosto. Vpnagentd ei suorita sitä suoraan,
vaan se kutsuu vpnagentdownloader:ia root-
oikeuksin, joka puolestaan kutsuu tuota
asennustiedostoa. Ennen asennustiedoston
suorittamista vpndownloader verifioi ja
validoi tiedoston. Me saimme idean: onko
mahdollista asentaa vanhentunut versio
väärennetyn IPC-viestin avulla? Kuten
kuvassa näkyy, hyökkääjä tarvitsee vanhan
allekirjoitetun asennustiedoston ja se
lähettää IPC-viestin vpnagentd:lle pyytäen
sitä suorittamaan vanhentuneen asentajan.
Vpnagentd kutsuu vpndownloaderia kuten
normaalistikin, joka puolestaan kutsuu
hyökkääjän asennustiedostoa. Ei ole mitään
tarkistusta sille, onko asennustiedosto
uudempi kuin jo asennettu versio. Tämä
mahdollistaa versionalennushyökkäyksen.
Version alentamisen tavoitteena hyökkää-
jällä on pakottaa vanhentuneen version
asennus, version joka sisältää haavoittu-
vuuksia , joita hyökkääjä voisi hyö-
dyntää.
Raportoimme tämän haavoittuvuuden
Ciscon tuoteturvallisuustiimille ja se
korjattiin syyskuun lopussa. Haavoittuvuus
sai vain CVSS-pisteytyksen 3.1, ja oli
siten luokiteltu matalan vakavuuden
haavoittuvuudeksi. Haavoittuvuus oli
hyödynnettävissä vain Linux-versiossa.
Windows- ja Mac-versiot oli jo turvattu
tuollaiselta hyökkäykseltä. Toinen toimin-
nollisuus, jota tarkastelimme oli
skriptien jakelu ja suoritus. He kutsuvat
sitä "Bring your own Script":ksi.
Toiminnon tarkoituksena on helpottaa
skriptien jakelua tietokoneille. Jotta
skripti suoritetaan, sen pitää täyttää
kaksi vaatimusta.
Ensikin, sen pitää sijaita skriptit-kan-
siossa ja tiedostonimen tulee alkaa sa-
noilla OnConnect tai OnDisconnect. Toisek-
si, VPN-palvelimen lähettämässä profiilis-
ssa EnableScripting-tagin tulee olla ase-
tettuna tosi-arvoon.Riippuen tiedosto-
nimestä skriptit ajetaan VPN-yhteyden
muodostamisen ja terminoinnin jälkeen.
VPN-palvelin kun voi jaella profiileja,
joissa skriptien jakelu on päällä ja se
voi myös jaella skriptit: nämä kaksi yh-
dessä amhdollistvat VPN-palvelimelle etä-
ajettavan koodin siihen yhdistävillä lait-
teilla. Tämä toiminnollisuus muodostaa
suuren ongelman, sillä ihmiset joutuvat
usein luottamaan yliopsiton VPN-palveli-
miin ja heillä ei ole muuta vaihtoehtoa.
Mutta katsotaan tarkemmin skriptien jake-
lua. Tässä näemme klassisen skriptijakelun
esimerkin. Latausvaiheessa vpndownloader
lataa OnConnect- tai OnDisconnect-
skriptit. Vpndownloader sitten kysyy IPC-
viestillä ladatun skriptin siirtoa skrip-
tit-kansioon.
Vpnagentd-prosessi kutsuu vpndownloaderia,
joka sitten siirtää tiedoston.
Tarkastelimme järjestelmällisesti IPC-
viestejä ja löysimme pystysuuntaisen käyt-
töoikeuksien laajennuksen. Hyökkääjä voi
lähettää saman viestin vpnagentd-proses-
sille. Mikä tahansa hyökkääjän skrip-
teistä voidaan siirtää skriptit-kansioon.
Jos seillä on jo skripti, niin se ylikir-
joitetaan. Jos hyökkääjä siirtää On-, tai
OnDisconnect-skriptin kun käyttäjällä on
VPN-yhteys avoinna, skripti jaetaan käyt-
täjän oikeuksilla. Kun VPN-yhteys sulje-
taan, ensimmäinen valtuuttamaton käyttäjä
voi saavuttaa toisen käyttäjän kontekstin
koodiajoa.
Mikä häiritsi metiä tässä hyökkäyksessämme
oli se että se oli sidottu esiehtoihin.
Yksi ehdoista oli, että EnableScripting-
tagissa oli arvo "Tosi". Harkitsimme muita
hyökkäysskenaarioita ja saimme idean jael-
la profiileja itse. Eli, tsekkaamme tagin
uudestaan, mutta emme luo vain skriptiä
vaan myös VPN-profiilin joka sallii
skriptien ajamisen. Hyökkäys toimii näin:
kun paikallsiella käyttäjällä on VPN-
sessio aktiivisena, toinen käyttäjä jär-
jestelmässä luo pahantahtoisen skriptin ja
uuden profiilin. Uudessa profiilissa Ena-
bleScripting-tagiin on asetettu arvoksi
"Tosi". Hyökkääjä sitten lähettää IPC-
viestin vpnagentd:lle pyytäen skriptin ko-
pioimista skriptit-kansioon. Vpndownloader
käynnistetään sitten root-oikeuksin suo-
rittamaan kopiointi. Hyökkääjä voi myös
lähettää lisäksi IPC-viestin vpnaentd:lle
pyytäen olemassaolevan profiilin yli-
kirjoittamista pahantahtoisella profii-
lilla. Vaikka profiili ylikirjoitettaan,
uuden profiilin asetuksia kytketä vielä
päälle koska vanha profiili on yhä aktii-
visena.
Kuitenkin, me pystyimme määrittämään että
uusi profiili ladataan kun VPN-sessiossa
tapahtuu uudelleenyhdistäminen. Neovat
itse asiassa aika yleisiä AnyConnectissa.
Jos uudelleenyhdistys tapahtuu, uusi pro-
fiili ladataan ja kytketään päälle. Meidän
tapauksessamme se mahdollistaa skripti-
toiminnon. VPN-yhteyden alasajon jälkeen,
pahantahtoinen OnDisconnect-skripti aje-
taan VPN-sovellusta ajavan käyttäjän
oikeuksin. Kummatkin ongelmat raportoitiin
Ciscolle, mutta niitä ei voitu korjata
julkistamispäivään mennessä, vaikka an-
noimme lisäaikaa deadlinelle. Vielä
tänäänkin haavoittuvuus on yhä läsnä Any-
Connectin oletusasetuksissa.
Cisco julkisti tämän haavoittuvuuden CVSS-
pisteytyksellä 7.1, mitä pidetään
korkeana vakavuutena. Koska se julkaistiin
4. marraskuuta 2020 ilman korjausta, haa-
voittuvuus sai paljon huomiota monilla
uutissivustoilla.
Eri sivustot raportoivat haavoittuvuudesta
Raportoinnin laatu vaihteli.
Joissakin artikkeleissa oli väärää tietoa,
kuten että hyväksikäyttömenetelmä olisi
julkisesti saatavilla. Tämä ei ollut
yhtään tarkkaa, koska me olimme ainoat,
joilla oli toimiva haavoittuvuus emmekä
julkistaneet sitä vielä. Emme löytäneet
mitään muuta hyväksikäyttömenetelmää
Interntistäkään. Luulen että tällainen
raportointi - tämä tapa raportoida pitää
harkita uudelleen koska se aiheutti niin
paljon väärää tilannekuvaa haavoittuvuu-
desta. Meitä jopa kontaktoitiin huolestu-
neiden poikkeamavastetiimien toimesta,
sillä he olivat huolissaan infrastaan.
Kaikki löydetyt ja raportoidut haavoittu-
vuudet on listattu tässä taulukossa. Nämä
kolme haavoittuvuutta löydettiin design-
analyysin keinoin. Vain yksi haavoittu-
vuuksista on korjattu Ciscon mukaan. Eri
toten Bring Your Own Script-haavoittu-
vuudet on jo julkistettu. Vaikka korjausta
niihin ei vielä ole, kiertävä meaknismi
on jo julkaistu näitä haavoittuvuuksia
vastaan. Muokkaamalla paikallista poli-
tiikka-tiedostoa latausvaihe voidaan ohit-
taa kokonaan. Viimeisimmän päivityksen
myötä on myös mahdollista estää lataus- ja
jakelutoimintoja modulaarisesti.
M: Ja entäs sitten mobiilialustat? Vai-
kuttavatko löytämämme haavoittuvuudet
niissä? Pidetään tämä lyhyenä: ei. Mobiili
-alustoista puuttuu monia ominaisuuksia
verrattuna Linux, Windows ja macOS-ver-
sioihin. On tietenkin mahdollista muodos-
taa TLS ja IPsec-yhteyksiä, kuten kaikilla
muillakin versioilla. Mutta koska ominai-
suudet kuten skriptien jakelu tai auto-
maattinen päivitys puuttuvat, ei ole
mitään keinoa käyttää näitä hyväksikäyttö-
menetelmiä mobiilialustoilla. Meillä on
meineillään tarkastelu AnyConnect:n iOS-
versioon, ja sen vuoksi haluamme antaa
teille nopean ja korkean tason yleiskat-
sauksen arkkitehtuuriin. Koska olemme
Applen aknssa tekemisissä tässä, vakavat
asiat kuten VPN:n implementointi on vähän
erilaista verrattuna esimerkiksi Linux-
versioon. Jos haluaa leikkiä notifikaa-
tioilla, lisätä jakamisnappeja tai tehdä
widgetin aloitusnäytölle, pitää käyttää
sovellusekstensiota. Myös VPN-toiminnolli-
suuksia varten pitää käyttää verkkoeksten-
siokehystä. Verkkoekstensiot sisältävät
providereita ja ominaisuuksia kaikenlai-
siin verkkoon liittyviin toimintoihin,
kuten sisällönsuodatukseen, DNS:ään, Wi-
Fiin ja muuhun. Jos haluaa rakentaa oman
VPN-sovelluksen, pitää valita Personal
VPN:n, Packet Tunnel Provider:n ja App
Proxy Provider:n välillä. Meidän tapauk-
sessamme AnyConnect iOS:lle käyttää Packet
Tunnel Provideria, koska he käyttävät omaa
pakettiorientoitunutta protokollaansa.
Tässä näemme AnyConnect-sovelluspaketin
sisällön, mikä on periaatteessa .zip-tie-
dosto, joka sisältää kaikki suoritettavat
tiedostot ja assetit kuten kuvat jne. Pää-
tiedosto on nimeltään eplkkä AnyConnect.
Verkkoekstensio on implementoitu ACExten-
sion-binäärissä. Näiden lisäksi on monia
muita sovellusekstensioita, joilla imp-
lemenntoidaan iOS:n jakamis- ja Siri-toi-
minnollisuuksia. Joten mitä tapahtuu kun
painetaan connect-slideria? Kun painaa
slideriä, network-ekstensio suoritetaan,
ja VPN-session neuvottelu alkaa. Sen
jälkeen kun verkkotietoja kuten IP-osoit-
tieta, aliverkkomaski, reitit, DNS, MTU ja
muuta on saatu, ne annettaan iOS-järjes-
telmälle, joka suorittaa neuvottelun lop-
puun. Lopussa yhteys on muodostunut, ja
toivottavasti sinulla on toimiva tunneli-
interface nimeltä utun. Joten, uusi lii-
kenne sovelluksilta menee network-pinon
läpi kunnes se saapuu tunneli-interfacel-
le. Sitten network-ekstension Packet
Tunnel Provider voi käsitellä sitä. Joka
kerta kun paketti saapuu tunneli-inter-
facelle se luetaan network-ekstension toi-
mesta ja kapseloidaan tunnelointiproto-
kollalla. Joka kerta kun paketti saapuu
tunneliin, network-ekstensio lukee sen ja
kapseloi sen tunnelointiprotokollalla.
Kun se saapuu VPN-palvelimelle, paketin
kapselointi puretaan, ja se lähetetään
kohdeosoitteseensa. Samalla tavalla client
:lle lähetettävät vastaukset kapseloidaan,
jossa niiden kapselointi vasta poistetaan
ja se syötetään takaisin verkkopinoon.
Tässä iOS-clienteista, ihan vain että
annetaan teille nopea yleiskatsaus ja
korostetaan tiettyjä avaineroja eri
arkkitehtuurien välillä. Tutkimme yhä sekä
Linux- että iOS-alustoja, mutta tähän men-
nessä löydöksemme voidaan yhteenvetää
näin: AnyConnect yleisesti ottaen on laaja
sovellus jossa on paljon koodia ja myös
käyttämätöntä kirjastokoodia. Olemme löy-
täneet kolme haavoittuvuutta design-ana-
lyysillä. Vpnagentd:tä ajetaan root-
oikeuksin ja se vastaanottaa komentoja ja
operaatioita vähempiarvoisilta prosesseil-
ta autentikoimattomien ICP-viestien väli-
tyksellä, mikä on yleensä ottaen aika
riskialtista. Kaikkia turvamekanismeja ja
-korjauksia ei ole kaikilla alustoilla.
Esimerkiksi versioalennushyökkäys oli
mahdollinen vian Linuxilla, ja se oli jo
korjattu Windowsilla ja macOS-versioilla
Ciscon mukaan. Mobiililla se ei ole mah-
dollinen johtuen siitä että automaattinen
päivitystoiminto on rajoitettu Linux:lle,
Windows:lle ja macOS:lle. Samalla lailla,
Bring Your Own Script ei päde mobiiliin,
koska OnConnect ja OnDisconnect-skriptien
jakelu on myös rajoitettu vain ei-mobii-
leille alustoille. Liittyen local policy-
tiedostoon Linuxilla, meidän näkemyksemme
on että siitä pitäisi tehdä niin rajoitet-
tu kuin mahdollista, ehkä vaatia opt-in:iä
skriptaus-toiminnollisuudelle. Tämä vä-
hentäisi monia hyökkäyksiä, mutta tieten-
kin vaikuttaisi myös käytettävyyteen.
Vaikka sovellus on ollut saatavilla monia
vuosia, me näytämme että niissä on yhä
bugeja löydettäväksi. Bug bounty-ohjelmien
käyttöönotto olisi mahtava tapa motivoida
useampaa turvallisuustutkijaa tarkistamaan
sovellus haavoittuvuuksien varalta. VPN:n
käyttö lupaa turvallisuutta ja yksityi-
syyttä käyttäjille, kuitenkin tutkimuksem-
me AnyConnectiin näyttää että suljetun
lähdekoodin ohjelmistot mahdollistavat
uusia hyökkäysvektoreita järjestelmiin.
Toivomme että tulevaisuudessa tehtäisiin
tutkimusta asiakasohjelmistoihin, ja että
työmme tasoittaa matkaa sinne. Se oli sii-
nä. Kiitoksia ja kysykää vain jos niitä on
H: No niin, tervetuloa takaisin. Siinä oli
tallenne tästä supermielenkiintoisesta
esityksestä Very Pwnable Netwokrks. Olen
varma, että olette nähneet kuinka pwnatta-
via ne ovatkaan, ja onneksi meillä on
täällä tänään kanssamme Jiska, Matthias ja
Gerbert Internet-taikuuden avustuksella.
Jos et ole vielä kirjoittanut kysyymystäsi
tee se nyt, jotta voimme vielä vastata
siihen. Joko menemällä IRC-kanavalle rc3-
cwtv hackened-verkossa tai postaamalla
tweetin tai tootin suosikki-SoMellasi,
joka sisältää hashtagin #rc3cwtv ilman
väliviivaa, hyvin tärkeä huomio.
Signaalienkelimme on kerännyt joitakin
kysymyksiä meille, joidenka avulla nyt
kidutan näitä kolmea ihmistä. Katsotaan
mitä sanotte näihin.
Mutta aah, nämä ovat aika - aika vaisuja,
vai? No, eka kysymys on: onko mitään sivua
tai wikiä, jossa tämä tieto on saatavilla?
G: Tällä hetkellä sitä ei ole vielä jul-
kaistu. Luulen että julkaisemme sen lähi-
tulevaisuudessa GitHubissa tai vastaavalla
alustalla.
H: Onko mitään tapaa, jolla ihmiset voivat
löytää linkin tuohon kun sitten viimein
julkaisette sen?
G: Luulen että Jiska voi sanoa tähän.
J: Joo, eli SEEMOO:lla on Github-sivu ja
myös Twitter-tili, joten se tullaan jul-
kaisemaan. Mutta on vielä pari, pari seik-
kaa joista emme pitäneet, jotka eivät ole
vielä julkisia. Joten kyllä, sitten jul-
kaisisimme vain yhden julkaisun sen sijaan
että yksi CVE täällä, toinen tuolla.
H: Aivan, tekee enemmän vaikutusta ker-
ralla ja myös parempaa julkaisua. Pidän
tuosta. Ja seuraava kysymys on: onko tämä
VPN-tapahtuma vain Ciscosta? Joten joo,
olette vain katsoneet Ciscao, eikö vain?
Tässä tapauksessa ehkä haluatte kertoa
meille jos te olette katsoneet muita VPN-
toimittajia tai jos muilla VPN-toimitta-
jilla olisi myös ongelmia? Ehkä.
M: Joo, me olemme tehneet tätä tutkimusta
osana maisterin työtä, ja sen vuoksi se on
vain Ciscon AnyConnectista, ja joo meillä
ei ole ollut aikaa katsoa näitä muita VPN-
palveluita. Pelkästään AnyConnectia.
H: Aivan, tyypillinen maisterin näkymä -
kirjoitetaan sitä kahvin voimin pari viik-
koa ennen määräaikaa. Joo, voin kuvitella
että olette keskittyneet Ciscoon silloin.
Toinen erittäin hyvä kysymys: onko näitä
haavoittuvuuksia muissa AnyConnectin kal-
taisissa sovelluksissa, kuten niissä jotka
on integroitu Linuxin NetworkManager:iin?
Luulen että hän puhuu nimenomaan Open-
Connectista. Juu, tuo tuli juuri sisään.
Hmm, me puhuimme tästä vähän aiemmin, niin
ehkä teillä on jotain sanottavaa tästä.
G: Meidän tietääksemme siinä -
OpenConnectissa ei ole skripitoimintoja
aktvoituna tai integroituna. Joten
sanoisimme että tällaiset hyökkäykset
eivät ole vielä mahdollisia, mutta - hmm..
M: Olisi mahdollista että joku kykenevä
tarkistaa tämän, ja katsoo siihen myös,
OpoenConnectiin myös, joo.
H: Hmm, aivan, ei vielä tiedossa onko
mahdollista. Sanotaan se niin. Ikinä ei
tiedä. Onko mitään muita kysymyksiä
chatista, Twitteristä tai Mastodonista?
Nyt olisi aika antaa kysymyksenne. Muutoin
tämä olisi ollut hyvin lyhyt Q&A. joten
menkää rc3-cwtv-kanavalla hackened-IRC-
verkossa tai postatkaa tweet tai toot
hashtagilla #rc3cwtv mutta ilman välivii-
vaa. Tehkää se nyt ja toivottavasti saamme
sen vielä Signaalienkelin taikuudella,
joka kerää tätä tietoa minulle.
Ja joo, ehkä voitte kertoa onko teillä
vielä jotain lisättävää tai joitain uusia
aiheita joiden kanssa työskentelette, jot-
ka ovat tuloillaan. Ehkä voimme saada
ennakkokatselmusta. Olen varma että yhä
jatkatte tutkimustanne siihen ja -
J: Pahoittelut, minun piti ottaa mykistyk-
seni pois. Ei vielä
spoilereita mutta joo, edes yhden suljetun
koodin VPN-asiakasohjelmiston tutkinta on
hyvin, hyvin paljon työtä ja aikaavievää.
Voin kertoa teille tarinan kuinka katse-
limme binäärejä kuukausia ja se ei oikein
skaalaudu esim. 10:een eri asiakasohjel-
mistoon, ainakin jos haluaa saada merki-
tyksellisiä löydöksiä.
H: Joo, mutta eikö teillä ole sellaisia
jotain muita suunnitelmia, esimerkiksi
muiden ohjelmistojen katsomista tai jos
olette saaneet pyyntöjä katsella muita
ohjelmia tai jotain mikä ohjaa teitä
jokin omituisen ääreeen? Ei? Okei.
G: Ei vielä.
J: Jep.
G: Mutta, mutta joo Matthias yhä työsken-
telee sen parissa. Luulen että hän löytää
jotain tulevaisuudessa. M: Toivottavasti.
H: Juu, juu. No siiinä on aika pitkälti
kaikki viimeiset kysymykset, paitsi vii-
meinen: Jsika, takanasi on kaksi varjoa,
onko se varjokabinetti?
J: Ei ei ei, minulla on vain useita lamp-
puja täällä, joten -
H: Joo joo, aivan se on aika hauskaa
kaikki
J: Ainakin se näyttää vain varjoni kahtena
eikä - eikä minua.
H: Joo, mutta olemme aika onnekkaita että
ainakin tässä puhelussa yhteys näyttää
toimineen aivan hyvin. Meillä on ollut
joitakin ongelmia täällä. Mutta joo, tämä
on mahtavaa. Jos teillä on muita kysymyk-
siä niin luulen että lopettelemme tähän,
jotta emme pidä teitä kauempaa. Olen varma
että haluatte hyppiä rc3-maailmassa, ja
jos teillä on mitään muuta, ehkä voitte
liittyä kanssamme IRC:hen myöhemmin. Jos
on mitään muita kysymyksiä, ehkä he katso-
vat tänne vähän ajan kuluttua tai minä vä-
litän heille ne kysymykset. Ok sitten.
J: Kiitoksia.
H: Kiitoksia teille oikein paljon tästä
super-mielenkiintoisesta puheesta. Minäkin
opin jotian uutta VPN-ohjelmasta, johon
olen kans törmännyt työskennellessäni.
Joten tämä oli minullekin mielenkiintoista
Ja lopetellaan tähän.
postroll-musiikkia
Tekstitykset luotu c3subtitles.de:llä
vuonna 2022. Liity ja auta meitä!
[Translated by {Iikka}{Yli-Kuivila}
(ITKST56 course assignment at JYU.FI)]