Kā pasargāt sevi, instalējot Obsidian spraudņus
Spraudņi Obsidian ir ja ne galvenā, tad viena no galvenajām killer fīčām, kas padara šo rīku patiesi universālu. Tāda iespēja tik elastīgi pielāgot lietotni, īpaši mobilo, droši vien nav nevienai citai piezīmju lietotnei. Un es personīgi esmu ļoti pateicīgs Obsidian izstrādātājiem, ka viņi neierobežoja API un dod community spraudņiem tādas pašas iespējas kā sev, faktiski radot godīgu konkurenci starp saviem komerciālajiem risinājumiem (Sync, Publish) un trešo pušu risinājumiem.
Tomēr, iegūstot lielu elastību, mums vienmēr jāsamierinās ar vairākiem kompromisiem. Konkrēti - drošības jomā. Tāpēc ikvienam, kas izmanto spraudņus, jāsaprot, ar ko viņš maksā par šādām iespējām un kā var samazināt savus riskus.
Draudu modelis
Vispirms jāsaprot, ko tieši uzbrucējs var izdarīt caur kompromitētu spraudni. Spraudņu API šobrīd ļauj palaist jebkādu kodu bez izpildes konteksta ierobežojumiem. Tas nozīmē, ka spraudņi var:
- veikt tīkla pieprasījumus uz jebkurām vietnēm
- lejupielādēt un augšupielādēt failus
- strādāt ar failu sistēmu (ne tikai ar vault, bet visu failu sistēmu)
- palaist citus procesus
Tādējādi spraudņi var saturēt, piemēram, tādas ļaunprogrammatūras kā kriptomainerus un ransomware, un ne tikai.
Svarīgi arī saprast, kā tieši spraudņi nonāk pie mums. Trešās puses izstrādātājs augšupielādē spraudņa pirmkodu GitHub, pēc tam pieprasa review no Obsidian izstrādātājiem. Viņi pārbauda pirmkodu un, ja viss kārtībā, publicē to kopējā spraudņu sarakstā. Turpmāk izstrādātājs var atjaunināt spraudni, augšupielādējot jaunas versijas, bet cik zinu, tās vairs neiziet Obsidian komandas pārbaudi (izlabojiet mani, ja kļūdos). Process aprakstīts šeit.
Kad mēs nospiežam instalēšanas pogu, tiek lejupielādēts nevis pirmkods, bet kompilēta programma, parasti trīs failu veidā: main.js, styles.css un manifest.json. Kompilēšana parasti notiek caur GitHub Actions, kas automatizē jaunu atjauninājumu izlaišanu. Bet izstrādātājs var arī manuāli augšupielādēt gala failus, tāpēc tie ne obligāti atbilst pirmkodam, ko redzat repozitorijā.
Tādējādi es izdalītu vairākus galvenos veidus, kā ļaunprātīgs kods var nonākt jūsu datorā kopā ar kādu spraudni:
- Negodīgs izstrādātājs grib izlaist ļaunprātīgu spraudni. Viņš publicē kādu noderīgu spraudni, kas sākotnēji iziet review. Pēc tam kādā no nākamajiem atjauninājumiem viņš publicē kompilētu spraudni ar ļaunprātīgu kodu (visticamāk neatjauninot pirmkodu) un jūs to saņemat ar jauno atjauninājumu.
- Godīga spraudņa izstrādātāja, kuru izmantojat, konts (GitHub vai
npm) tiek uzlauzts un viņa vārdā tiek publicēts atjauninājums ar ļaunprātīgu kodu. Šādi uzlauzumi diemžēl notiek diezgan bieži. - Kāda no
npmpakotņu izstrādātāja, kuru izmanto kāds no jūsu spraudņiem, konts tiek uzlauzts, un automātiska atjaunināšana vai neuzmanīgs izstrādātājs to instalē un izlaiž spraudni, kas izmanto kompromitētu kodu. Tieši par šo risku un kā Obsidian izstrādes komanda no tā izvairās nesen rakstīja u/lishid. Bet tāds pats risks pastāv arī Obsidian spraudņiem, ne tikai pašai lietotnei.
Protams, ir arī citi iespējamie riski, bet attiecībā uz spraudņiem šie ir visticamākie.
Kā aizsargāties
Tagad, kad saprotam, kādi mums ir riski, varam runāt par to, kā sevi pasargāt.
Visacīmredzamākais risinājums: neinstalēt spraudņus. Tā mēs izvairāmies no visiem riskiem, bet kā rakstīju pašā sākumā, būtu ļoti žēl atteikties no visām iespējām, ko spraudņi dod.
Otrais variants: izmantot tikai populārākos, laika pārbaudītos spraudņus. Tā mēs iegūstam svarīgāko funkcionalitāti un novēršam pirmo scenāriju no iepriekš aprakstītajiem riskiem. Turklāt var samazināt 2. un 3. scenārija varbūtību, retāk atjauninot, bet arī tas ir kompromiss, jo atjauninājumos var būt svarīgi labojumi, un vecās versijas arī var būt kompromitētas un instalētas, piemēram, sinhronizējot jaunu ierīci.
Jūs varat paši kompilēt spraudņa kodu no pirmkoda. Parasti tas ir pavisam vienkārši un ātri. Tā jūs varat būt droši, ka tas, ko izstrādātājs publicēja GitHub, ir tas, ko jūs instalējat Obsidian, nevis kāda kompromitēta versija. Īsi aprakstīšu, kā to izdarīt Mac lietotājiem. Windows lietotājiem gandrīz viss tas pats, tikai komandas jāpalaiž WSL, un es nevaru tās precīzi aprakstīt, jo man nav Windows datora pie rokas. Bet Linux lietotāji jau visu to zina.
Tātad, jums būs vajadzīgi divi rīki: git (parasti instalējas kopā ar Xcode no App Store vai caur brew, sīkāk šeit) un Docker. Un standarta terminālis. Tālāk:
- Lejupielādējiet spraudņa pirmkodu (par piemēru ņemšu lielisko dataview spraudni):
git clone https://github.com/blacksmithgu/obsidian-dataview.git
- Iepriekšējā komanda lejupielādēs pirmkodu mapē
./obsidian-dataview(mape vienmēr saucas kā spraudnis). Pārejiet uz to ar komandu:
cd obsidian-dataview
- Tālāk mums jāinstalē atkarības un jākompilē projekts. Visvienkāršāk (un visdrošāk) izmantot docker attēlu, kurā jau ir viss nepieciešamais (ja neesat pazīstami ar docker, uztveriet to kā virtuālo mašīnu, kas palaiž jūsu terminālī un kurā mēs tālāk izpildīsim visas komandas):
docker run -it --rm -v ./:/app -w /app node:22 bash
- Izpildot iepriekšējo komandu, jūs nokļūsiet "virtuālās mašīnas iekšienē". Tagad instalēsim spraudņa atkarības - tās ir citas programmas, kas vajadzīgas tā darbībai. Izpildiet komandu:
npm ci
- Tagad varam kompilēt spraudni, izpildot komandu (gandrīz vienmēr, bet ir izņēmumi):
npm run build
- Ja konsolē neredzat kļūdu paziņojumus, apsveicu, jūs droši vien esat kompilējuši savu pirmo programmu. Tagad izejam no
dockerar komanduexit. - Tikko izveidotajā mapē jums jāredz jauns fails:
main.js. Tas ir kompilētais spraudņa kods. Bieži tas atrodas nevis projekta saknē, bet mapēbuildvaireleasevai retāk citā līdzīgā. Blakus tam vai projekta saknē var būt arīstyles.css. Un projekta saknē vienmēr irmanifest.json. Pēdējais ir spraudņa apraksts. Cita starpā tajā ir tāid.
- Pēdējais, kas mums jāizdara, ir nokopēt failus
main.js,styles.cssunmanifest.jsonmapē jūsu vault:./vault/.obsidian/plugins/obsidian-dataview(mape vispirms jāizveido pašiem). Ja neredzat.obsidianmapi, ieslēdziet dot-failu attēlošanu ar taustiņu kombinācijucmd + shift + .Finder. Tagad pārlādējiet spraudņus Obsidian un jums jāredz jūsu jaunais spraudnis.
Neskatoties uz to, ka no pirmkoda kompilēts zināma spraudņa kods jau daudz dara drošības labā, vienīgais veids, kā gandrīz noteikti pasargāt sevi no iepriekš minētajiem riskiem, ir šī pirmkoda pārbaude. Tas jau prasa tā izpratni, bet kopumā bieži pietiek ar ātru failu pārskatīšanu, lai saprastu, ko tas dara. Lūk, kam pievērst uzmanību:
- Tīkla pieprasījumi. Gandrīz jebkuram ļaunprātīgam kodam kaut kā jāsazinās ar tīklu. Vai nu lai augšupielādētu iegūto informāciju no upura datora, vai otrādi, lai lejupielādētu citu kodu, kas nesīs galveno payload. Paskatieties, kur spraudnis savienojas. Visvienkāršākais un ātrākais risinājums ir meklēt
http. Parasti tur būs daudz URL no komentāriem,package-lock.jsonfaila un dažādiem URL, kas tiek rādīti interfeisā (piemēram, funding un palīdzība). Bet jums jāuztraucas, ja spraudnis kaut ko lejupielādē un pēc tam izpilda saņemto kodu. Meklējiet, piemēram, komandueval. - Ļaunprātīgs kods parasti tiek maskēts. Pārejiet caur to un paskatieties, vai kodā nav nesaprotamu garu simbolu virkņu, kā:
_0x9e38=['\x28\x2E\x2B\x3F.... Paskatieties arī, vai starp failiem nav kompilētu bināro failu (nelasās kā teksts). Dažreiz spraudņi izmantowasm, tāpēc tas ne vienmēr ir slikti, bet jāsaprot vismaz, kāpēc tas tiem vajadzīgs. - Meklējiet sistēmas procesu palaišanu. Parasti tam tiek izmantotas pakotnes kā
child_process,execa,cross-spawn, bet ne tikai šīs. - Paskatieties
package.json. Protams, ne-JS izstrādātājam tur maz kas būs interesants, bet ideālā gadījumā jāpaskatās, kādas atkarības spraudnis izmanto. Pakotnes var pārbaudīt vietnē npmjs.com, kur aprakstīts, kādu funkcionalitāti tās nodrošina. Pievērsiet uzmanību pakotnēm ar mazu lejupielāžu skaitu vai funkcionalitāti, kas nesaprotami kāpēc vajadzīga dotajam spraudnim. Ir automatizēti pārbaudes rīki, bet par tiem kādreiz citreiz - šis raksts jau tā ir pietiekami garš. - Arī
package.jsonvar būt skripti, kas dažreiz izpilda tās vai citas ļaunprātīgas darbības, bet par tiem es diez vai varu dot vispārīgus ieteikumus, jo jāskatās, ko tieši tie dara.
Noslēgumā
Ja kas, ar šo rakstu es negribēju nevienu atrunāt no spraudņu izmantošanas. Tieši otrādi, es personīgi uzskatu tos par Obsidian labāko fīču un izmantoju daudzus lieliskus spraudņus, par kuriem arī esmu ļoti pateicīgs to izstrādātājiem. Bet ceru, ka šis teksts dos daudziem labāku izpratni par to, kas tieši var noiet greizi, un izkliedēs ilūzijas par drošību vai otrādi par īpašu spraudņu bīstamību. Tā ka izmantojiet spraudņus un lai tie palīdz jums jūsu uzdevumu risināšanā. Visu labu!