18. jūlijā RubyGems reģistrā parādījās pakotne git_credential_manager ar versiju 2.8.0. Nosaukums, apraksts un pat ikona atkārtoja Microsoft rīku Git Credential Manager. Drošības firma StepSecurity to izsekoja un secināja, ka pakotne no īstā rīka nedara neko — tā lejupielādē un palaiž svešu kodu uz izstrādātāja datora. Kampaņu pētnieki nosauca par SleeperGem.
Aiz viltus pakotnes stāv vēl divas: Dendreo (versijas 1.1.3 un 1.1.4) un fastlane-plugin-run_tests_firebase_testlab (versija 0.3.2). Visas trīs uzvedas vienādi, un visas gaida tieši uz cilvēka darbstaciju.
Šīs trīs pakotnes nav nejauša izvēle. Divas no tām reģistrā pastāv jau gadiem — Dendreo pirmās versijas ir no 2017. gada oktobra, fastlane spraudnis no 2018. gada februāra. Tas nozīmē, ka uzbrucējs vai nu pārņēma pamestus pakotņu nosaukumus, vai piekļuva to autoru kontiem un uzspieda jaunu, inficētu versiju virsū vecajam, uzticamajam nosaukumam.
Kā darbojas ielādētājs
Kods nostrādā brīdī, kad projekts pakotni pieprasa ar require. Tas dodas uz publisku Forgejo instanci git.disroot.org, kur uzbrucējs izveidojis kontu ar nosaukumu, kas atgādina īstu Git ekosistēmas kontu. No turienes tas paņem divus failus: čaulas skriptu deploy.sh un bināru failu, kuram dots tāds pats nosaukums kā rīkam, ko pakotne atdarina.
Binārais fails ir pats aizmugures durvju kods. Skripts to novieto lietotāja mājas mapē un palaiž fonā. Pakotne pati par sevi ir tikai palaidējs — īstā slodze visu laiku atrodas ārpus RubyGems, uz uzbrucēja servera, tāpēc pakotnes koda apskate reģistrā neko aizdomīgu neatklāj.
Versija 2.8.2 gaida, versija 2.8.3 uzbrūk
Uzbrucējs slodzi ieviesa pakāpeniski. Versijā 2.8.2 rinda, kas palaiž lejupielādēto skriptu, ir izkomentēta — tā pakotne payload tikai lejupielādē un apstājas. Versijā 2.8.3 komentārs noņemts, un izpildās viss ķēde: skripts palaiž bināro failu kā fona dēmonu un ķeras pie noturības.
Uzbrucēji tēmē uz izstrādātāju datoriem — īslaicīgie CI izpildītāji tos neinteresē, secina StepSecurity.
Kāpēc serverī tas klusē
SleeperGem izvairās no automātiskās analīzes ar vienkāršu pārbaudi. Pirms jebko darīt, kods pārbauda aptuveni trīsdesmit vides mainīgos, ko iestata nepārtrauktās integrācijas platformas — starp tiem GITHUB_ACTIONS, GITLAB_CI un CIRCLECI. Ja atrod kaut vienu, kods iziet un neko nedara.
Tas nozīmē, ka lielākā daļa drošības skeneru un CI konveijeru pakotni redz kā nekaitīgu. Ļaunais kods pamostas tikai tad, kad gems tiek uzstādīts uz parasta portatīvā datora, kur nav CI pazīmju. Tieši šī klusēšana serverī un aktivizēšanās uz cilvēka mašīnas deva kampaņai nosaukumu.
Loģika uzbrucējam ir vienkārša. CI izpildītājs ir īslaicīgs — tas pēc darba beigām pazūd, un tajā glabātās akreditācijas datus var atsaukt. Izstrādātāja portatīvais dators dzīvo mēnešiem, tajā ir SSH atslēgas, mākoņa tokeni un pieeja privātiem repozitorijiem. Tieši tur ir vērts iekārtot noturīgas aizmugures durvis, un tieši tur automātiskie skeneri neskatās.
Noturība un ko darīt
Kad binārais fails ir palaists, tas iekārtojas uz palikšanu ar diviem paralēliem paņēmieniem. Pirmais ir systemd lietotāja serviss ar nosaukumu git-credential-manager. Otrais ir cron ieraksts, kas palaiž to pašu servisu. Abi norāda uz dēmonu mapē $HOME/.local/share/gcm/git-credential-manager. Ja viens paņēmiens tiek noņemts, otrs kodu atjauno.
Pēc palaišanas dēmons noskaidro, cik daudz varas lietotājam ir uz sava datora — tas nolasa sudo un wheel grupas, lai saprastu, vai upuris var iegūt root tiesības. Šī informācija uzbrucējam ļauj izvēlēties nākamo soli: mašīnā ar administratora tiesībām aizmugures durvis paver plašāku piekļuvi nekā parasta lietotāja kontā.
StepSecurity iesaka rīkoties šādi tiem, kas kādu no pakotnēm uzstādījuši:
- Atinstalēt un piespiest drošu versiju:
gem uninstall git_credential_manager -v 2.8.3. - Izdzēst
systemdlietotāja servisu uncronierakstu ar nosaukumugit-credential-manager. - Izdzēst mapi
~/.local/share/gcm/. - Nomainīt visas akreditācijas datus, kas datorā glabājušies — SSH atslēgas, tokenus, paroles.
SleeperGem iekļaujas gadā, kad uzbrukumi pakotņu reģistriem kļuvuši par ikdienu. The Hacker News norāda, ka git_credential_manager īpaši uzskatāmi atdarina Microsoft oficiālo rīku, tāpēc izstrādātājs, kas to meklē pēc nosaukuma, viltojumu var pieņemt bez šaubām. RubyGems pievienojas npm un PyPI sarakstam, kur nosaukuma atdarināšana ir izplatīta pieeja.
Praktiskā mācība ir vienkārša: pakotnes nosaukums, kas atgādina pazīstamu rīku, vēl neko negarantē. Pirms gem install ir vērts paskatīties, kas pakotni publicē un cik ilgi tā pastāv — divas no trim SleeperGem pakotnēm bija reģistrā kopš 2017. un 2018. gada, gaidot brīdi, kad tajās ievietos ļauno kodu.
Palīdz arī tehniski soļi: fiksēt versijas Gemfile.lock failā un pārbaudīt to izmaiņas kodu recenzijā, tā ka pēkšņs lēciens no 2.8.1 uz 2.8.3 nepaliek nepamanīts. Uzbrukuma modelis, kur pakotne uz require dodas pēc koda uz svešu serveri, atkārtojas jau vairākos reģistros, un SleeperGem to tikai vēlreiz apstiprina.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.