BETA
My accountGet started
Nov 142023
CodeCon
6 min read

Novinku z dielne GitHubu už využívajú v Descartes

Softvérovému vývoju pre spoločnosť Descartes sa venuje viac ako 700 ľudí vo vývojových centrách po celom svete.

Novinku z dielne GitHubu už využívajú v Descartes

Autor: Robert Zuberec, riaditeľ vývojového centra Descartes v Žiline, zabezpečuje implementáciu riešení vývojového cyklu pre vývojové tímy pomocou nástrojov Azure DevOps a GitHub

Softvérovému vývoju pre spoločnosť Descartes sa venuje viac ako 700 ľudí vo vývojových centrách po celom svete. Najväčšie vývojové centrum našej spoločnosti sídli v NordCity na Poštovej ulici v Žiline. Našimi klientmi sú významní svetoví hráči v oblasti logistiky. To predstavuje výzvy pre využívanie najmodernejších riešení a požiadavky na vývoj kvalitného kódu s použitím automatizovaných nástrojov.

Našim základným nástrojom pre správu vývojového cyklu je Azure DevOps. V roku 2018 prebehla akvizícia spoločnosti GitHub. Microsoft sa tak rozšíril o veľkú základňu nástrojov, ktoré by vďaka tomu mohli byť čoskoro dostupné z jednej platformy.

Ak riešime bezpečnosť kódu a využívame Azure DevOps, mohlo sa stať, že sme nemohli využívať niektoré integrované nástroje na detekciu zraniteľností, ktoré boli dostupné priamo v GitHube.

Na úvod niekoľko základných faktov…

Azure DevOps je pokračovateľom známeho nástroja pre správu a plánovanie TFS (Team Foundation Server) od Microsoftu. Azure DevOps predstavuje cloudové aj on-prem riešenie, ktoré ponúka okrem plánovania úloh (Azure Boards), automatizáciu testovania a nasadzovania (Pipelines) aj správu kódu. Azure DevOps stále podporuje TFVC (centralizovaný systém pre správu zdrojových kódov) a zároveň aj GIT (distribuovaný systém).

GitHub je osobitná platforma (cloud), ktorá nemá natoľko rozvinuté možnosti pre plánovanie úloh, má však dlhoročné skúsenosti so správou zdrojových kódov GIT. Ponúka aj mnoho vylepšení dostupných pre viac ako 100 miliónov používateľov na celom svete.

Je potrebné, aby sa Microsoft naďalej zdokonaľoval v oboch systémoch a ako už teraz cítiť, cieľom bude čo najviac integrovať oba systémy tak, aby sme oba mohli „seamlessly“ využívať súčasne.

Dôležitý prvok, ktorý pri vývoji softvérových systémov nemôže byť vynechaný: Bezpečnosť.

Obrázok2.png

Prelom v oblasti statickej analýzy kódu pre GitHub nastal na začiatku roka 2023, keď prišli s novinkou GitHub Advanced Security a keďže si všetky názvy radi skracujeme hovoríme o GHAS (čítaj GAZ).

GHAS totiž spojil 3 základné piliere statickej analýzy kódu do jedného balíka. Prepáčte, nedá mi inak, zas budeme skracovať 🙂 Skrátene teda hovoríme o SAST (Static Application Security Testing). Znamená to, že vieme pár klikmi na GitHube v repozitári zapnúť:

  • kontrolu kvality kódu, ktorú zabezpečuje CodeQL
  • automaticky vyhľadávať zabudnuté heslá v kóde Secret Scanning
  • a zároveň nás Dependabot bude automaticky upozorňovať na to, že používame balíčky tretích strán, ktoré majú bezpečnostnú dieru.

Obrázok3.png

CodeQL je systém kúpený GitHubom v roku 2019. Vyvíjal ho dlhé roky tím v Oxforde v spoločnosti Semmle. Podporuje rôzne programovacie jazyky od C cez C# až po JavaScript. Kvalitu kódu zabezpečuje tak, že ak CodeQL nájde chybu v kóde, ktorá predstavuje potenciálne riziko, vytvorí varovanie. Spolu s varovaním nám ukáže, ako by sme mohli daný problém vyriešiť. CodeQL pracuje na princípe spúšťania takzvaných queries, ktoré si môžeme napísať aj sami a tak sa kontrola kvality stala open-source projektom. Obrovská komunita má možnosť rozširovať to, čo sa má v kóde kontrolovať. Ako to celé funguje by bolo na ďalší blog.

Kontrola hesiel alebo Secret Scanning prechádza cez všetky súbory v repozitári, zároveň cez celú GIT históriu a cez všetky vetvy (branche). Je dôležité uvedomiť si, že GIT nezabúda. Ak sme nejaké zabudnuté heslo prepísali ďalším commitom, v histórii GITu je ho možné stále odhaliť. Ak sa niekto nepovolaný dostane k nášmu GIT repu, ľahko si v histórii nájde všetky naše prehrešky.

Vždy preto musíme naše hard-coded secrets vymazať z kódu, následne zmeniť a ak sme naozajstní puntičkári, prepíšeme GIT históriu napríklad cez filter-repo. GitHub spolupracuje s partnermi, servisnými providermi, ktorí mu poskytujú patterny ich vlastných typov hesiel a tokenov. To má za úlohu eliminovať množstvo falošných poplachov – false positives, takže ak máte pocit, že vaše heslo malo byť detekované a nebolo, určite sa pozrite na zoznam podporovaných hesiel.

Obrázok4.png

Alert ktorý upozorní na výskyt hardcoded hesiel v našej kódovej základni

Posledným pilierom je kontrola závislostí alebo Dependency Scanning. Čo sa tým myslí? Ak používate Nuget, Maven, npm alebo iné platformy, ktoré ponúkajú hotové softvérové knižnice, hovoríme, že máte závislosti na týchto externých kódoch. Okrem toho, že sú dávno preč časy, keď sme si dll-ky nechávali ako súčasť nášho kódu, spomenuté platformy na správu knižníc nám umožňujú ich automatickú aktualizáciu a zároveň nainštalujú všetky knižnice, ktoré potrebujeme. Nemusíme ich jednotlivo sťahovať a hlavne nemusia byť súčasťou repozitára, pretože sa automaticky stiahnu (restorujú).

GitHub má vlastný spravovaný zoznam zraniteľností, ktorý sa ukladá do GitHub Advisory Database (pre úplnosť dodávam, že ju môžeme nájsť pod skratkou GHSA – GitHub Security Advisory). GHSA je napojená na iné zdroje napríklad na CVE zoznamy od MITRE. To im umožňuje automaticky detekovať publikované zraniteľnosti a upozorniť nás, keď má daná knižnica vážny problém. Zároveň nám ponúkne, aby sme si knižnicu aktualizovali na správnu verziu. Skenovanie závislostí generuje upozornenie na akýkoľvek komponent s otvoreným zdrojovým kódom, priamo alebo nepriamo, ktorý je zraniteľný a od ktorého váš kód závisí. Priame zraniteľnosti direct-dependencies sú knižnice, ktoré váš kód priamo používa. Nepriame závislosti transitive-dependencies sú knižnice alebo iný softvér, ktoré priame závislosti využívajú.

Obrázok5.png

Celkový pohľad na stav zabezpečenia vašich repozitárov, ktoré majú zapnutú Advanced Security.

Na záver to najdôležitejšie. Všetko niečo stojí, ale ak vyvíjame open-source projekt, teda naše repozitáre sú verejne dostupné (public) máme všetko zadarmo. To platí pre GitHub a od septembra 2023 aj pre Azure DevOps, ktorú si zapamätáme pod skratkou GHAzDO (čítaj GAZDO). Takže GHAS je pre GitHub a GHAzDO pre Azure DevOps. Dva systémy s rôznymi názvami ale jedným cieľom, ktorým je statická analýza kódu.

Treba si uvedomiť, že GHAzDO sa musí implementovať do Azure DevOps, ktorý má iný kódový základ (v porovnaní s GitHub platformou), UI a UX, API a tak podobne. Takže GHAzDO stále dobieha to, čo je v GHAS už hotové.

Iný základ má aj pricing. Zatiaľ čo u GHAzDO je to model Pay-as-You-Go, pri GHAS je licencia postavená na vopred určenom počte Active Commiters. Cena sa v súčasnosti (2023) pohybuje okolo 50$ za mesiac za aktívneho prispievateľa do repozitára. Ako presne sa počíta kto je Active Commiter nájdete na GitHube.

GHAzDO má určite čo doháňať. Microsoft a jeho nový tím z GitHubu však sľubujú, že všetky features, ktoré tak dobre fungujú na GitHube, by mali byť v priebehu roka 2024 hotové. Napríklad GHAzDO nemá úplnú integráciu s Pull-Requestom, čo znamená, že zatiaľ nám zraniteľnosti len oznamuje. Pull-Request musíme spraviť sami.

Podľa čoho teda vieme, že knižnica ktorú sme si stiahli, napríklad z Nugetu, obsahuje zraniteľnosť? Kto zraniteľnosť odhalil a kde sa údaje ukladajú? Ak Vás zaujímajú odpovede na tieto otázky, zamierte na prednášku o Bezpečnosti kódu na žilinský CodeCon. Teším sa na Vás.