British Airways: maksājumu skripts, kuru neviens neuzraudzīja
22 pievienotas rindas maksājumu lapā un 15 dienas nozagtu karšu datu.
2018. gada 21. augustā plkst. 22:58 pēc Lielbritānijas laika British Airways rezervāciju lapas sāka kopēt klientu ievadītos karšu datus un sūtīt tos vēl uz vienu adresi. To paveica kods, kas bija tikai 22 rindas garš. Tas darbojās ba.com un BA lietotnē līdz 5. septembra plkst. 21:45, un BA to nepamanīja. Aviokompāniju brīdināja kāda trešā puse.
Lielbritānijas Informācijas komisāra birojs (ICO) vēlāk aprēķināja, ka uzbrucējam varēja būt pieejami 429 612 klientu un darbinieku dati. 2020. gada oktobrī birojs piemēroja BA 20 milj. £ sodu, līdz tam lielāko savā vēsturē.
Kas notika
Viss sākās divus mēnešus agrāk. 2018. gada 22. jūnijā uzbrucējs pieslēdzās BA Citrix attālinātās piekļuves vārtejai ar lietotājvārdu un paroli, ko BA bija izsniegusi kravu pārvadājumu darbuzņēmēja Swissport darbiniekam Trinidādā un Tobāgo. Bez paroles sistēma neko citu neprasīja.
Iekļuvis tīklā, uzbrucējs izlauzās no Citrix vides un nešifrētā teksta failā atrada domēna administratora konta paroli. 26. jūlijā uzbrucējs piekļuva žurnālfailiem, kuros maksājumu karšu dati glabājās nešifrēti. Tos tur atstāja testēšanas funkcija, ko neviens nebija izslēdzis. Šajos failos bija aptuveni 108 000 karšu dati.
Pēc tam pienāca kārta vietnei. Laikā no 14. līdz 25. augustam uzbrucējs izmainīja JavaScript failu vietnē britishairways.com. Drošības uzņēmums RiskIQ, kas regulāri pārmeklē tīmekļa vietnes, vēlāk noskaidroja, ka tā bija atvērtā koda bibliotēka Modernizr 2.6.2, kuras kopiju BA glabāja savā serverī. Faila beigās bija pievienots jauns kods. Kad klients nospieda maksāšanas pogu, šis kods nolasīja maksājuma veidlapu un maksātāja vārdu un nosūtīja tos uz baways.com, uzbrucēja kontrolētu domēnu. Lietotne ielādēja tās pašas tīmekļa lapas, tāpēc noplūda arī lietotnē ievadītie dati. Pati rezervācija noritēja kā parasti.
Kaitīgais kods darbojās 15 dienas. 5. septembrī trešā puse informēja BA, ka dati tiek sūtīti uz BAways.com. 90 minūšu laikā BA kodu neitralizēja, un pēc vēl 20 minūtēm tā bloķēja ceļus uz BAways.com. 6. septembrī BA notikušo atklāja publiski un sākotnēji minēja aptuveni 380 000 skartu darījumu.
2019. gada jūlijā ICO paziņoja, ka plāno piemērot BA 183,39 milj. £ sodu. Galīgais sods, ko birojs noteica 2020. gada 16. oktobrī, bija 20 milj. £. Tajā ņemti vērā BA iesniegtie argumenti un Covid‑19 ietekme uz uzņēmuma darbību.
Kāpēc tas izdevās
Šeit viena kļūme uzslāņojās otrai.
Iekšā uzbrucējs tika tikai ar paroli. BA pašas piekļuves politika, kas pieņemta 2017. gada oktobrī, prasīja daudzfaktoru autentifikāciju visai attālinātajai piekļuvei, arī darbuzņēmējiem. Swissport kontam tās nebija.
Dati aizplūda caur failu, ko neviens neuzraudzīja. BA bija ieviesta apstiprināšanas kārtība darbiniekiem, kas vēlējās mainīt vietni. Taču BA nespēja norādīt ICO nevienu tehnisku vai organizatorisku pasākumu, kas atklātu neapstiprinātas izmaiņas vietnes kodā. Pārlūks izpilda jebkuru skriptu, ko lapa tam nodod, un šis skripts var nolasīt katru veidlapas lauku. Lapā nekas nenoteica, uz kurieni datus drīkst sūtīt, tāpēc nekas neapturēja pieprasījumu uz līdzīga izskata domēnu.
Vai pārbaude to būtu pamanījusi?
Daļēji. Ārēja pārbaude redz to pašu, ko saņem jebkura apmeklētāja pārlūks, un RiskIQ saskaitīja BA rezervāciju lapā aptuveni 30 skriptus. Ar šo gadījumu saistīti trīs pārbaudes punkti: “Skripti no ārējiem domēniem”, “Ārējiem skriptiem nav integritātes paraksta” un “Nav Content‑Security‑Policy galvenes”.
Integritātes paraksts ir faila nospiedums, ko pārlūks salīdzina pirms faila izpildes, un failu, kas vairs neatbilst nospiedumam, tas neizpilda. Taču izmainītā Modernizr kopija tika ielādēta no paša BA domēna, tāpēc abas skriptu pārbaudes uz to nenorādītu. Tieši šo uzbrukumu visvairāk ietekmētu satura drošības politika. Ja tā atļautu tikai BA domēnus, pārlūks atteiktu pieprasījumu uz baways.com. Neviens no šiem pasākumiem nav nepārvarams. Uzbrucējs, kas spēj labot failu serverī, var spēt labot arī parakstu un politiku.
Ķēdes sākumu neredz neviena ārēja pārbaude. Darbuzņēmēja parole, trūkstošā divu faktoru autentifikācija un nešifrētā administratora parole atradās BA iekšējā tīklā. Pārbaude arī nevar nolasīt nodomu. Kaitīgais kods bija rakstīts tieši šim uzbrukumam, tāpēc RiskIQ bloķēšanas sarakstos tas neparādījās. Failu izdevās atrast, tikai salīdzinot katru skriptu ar tā iepriekšējām versijām.
Kā no tā izvairīties
- Pievienojiet integritātes parakstu katram skriptam, ko Jūsu norēķinu lapa ielādē no cita domēna, lai pārlūks atteiktos izpildīt izmainītu failu.
- Iestatiet satura drošības politiku, kas nosaka, no kuriem domēniem Jūsu lapas drīkst ielādēt skriptus un uz kuriem tās drīkst sūtīt datus.
- Atstājiet maksājumu lapās tikai tos skriptus, kas vajadzīgi maksājuma pieņemšanai, un noņemiet tērzēšanas logrīkus, izsekotājus un visu, kas var pagaidīt.
- Ieslēdziet divu faktoru autentifikāciju katram administratora pieslēgumam un katram attālinātās piekļuves kontam, arī tiem, ko izsniedzat darbuzņēmējiem.
Pirmos divus punktus no ārpuses var pārbaudīt mājaslapas pārbaudē.