Skip to content

Er GitHub Copilot sikker nok for programmering?

I denne artikkelen vurderer twodays AI-faggruppe en rekke sikkerhetsaspekter ved GitHub Copilot for Business. Målet er at du skal forstå gevinster og risiko ved å bruke verktøyet til programmering i din virksomhet.
6. des Gøte Strindler, Ludvig Lilleby Johansson & Janine Stang
Mann sitter og ser på en PC-skjerm

Hva er GitHub Copilot? 

Copilot er en skybasert Microsoft-utvidelse som gir kodeforslag og auto-fullføring, som utviklere kan bruke til å skrive kode. Copilot er utviklet av GitHub (eid av Microsoft) og OpenAI og finnes både med personlig lisens og bedriftslisens.  

I denne artikkelen tar vi utgangspunkt i Github Copilot for Business. GitHub Copilot er vurdert som best egnet til utvikling med språkene Python, JavaScript, TypeScript, Ruby og Go. Koden du jobber med blir lest og analysert av Copilot slik at den kan produsere forslag til det neste du skal skrive. Som utvikler kan du dermed jobbe raskere og potensielt produsere høyere kvalitet. 

…men er dette sikkert? Når koden du jobber i blir sendt til en server hos Microsoft, risikerer du da at bedriftens intellektuelle eiendom deles på internett? For å finne ut av om du trygt kan bruke Copilot, har vi gått gjennom en rekke sikkerhets- og opphavsrettsaspekter.

Input: Hvordan behandles data du legger inn i Copilot?

Når kode og annen data blir sendt til Copilot over internett, blir det behandlet på en trygg måte?

In-transit og at-rest kryptering
Sikkerhet i kommunikasjonen mellom deg, IDEen din (eller lignende) og Copilot sin tenant i Azure, er garantert av Microsoft.

– The transmitted data is encrypted both in transit and at rest; Copilot-related data is encrypted in transit using transport layer security (TLS), and for any data we retain at rest using Microsoft Azure's data encryption (FIPS Publication 140-2 standards).

Dette gjør at dine data er mye tryggere på vei til og hos serverene som gjør prosesseringen. Dersom dataene ikke hadde vært kryptert (enten at-rest eller in-transit) vil det være vanskelig å forsvare å bruke Copilot i mange virksomheter.

Volatilt minne brukt til prosessering av koden
Koden din ligger kun i volatilt minne, typisk RAM, til innholdet er prosessert ferdig og du som bruker har fått respons, altså et kodeforslag. Det gjør at du kan være mye tryggere på at koden din ikke blir liggende på diverse servere etter prosessering. Dersom koden din hadde blitt lagret på klassisk harddisk, ville det vært en mye større usikkerhet om sletting faktisk blir gjort rett etter prosessering.

– Prompts only persist long enough to return a response from GitHub's Azure tenant and are then immediately discarded. Prompts are never stored; all processing is ephemeral and takes place in memory.

Vi vurderer det som sikkert nok til bruk så lenge du er klar over hva som blir sendt over internett og blir prosessert, altså det som blir beskrevet av GitHub som “various elements of context”. Les hva dette betyr under “Risiko”.

Koden din blir ikke brukt til videre trening av modellene
Siden koden som blir sendt til skyen ved bruk av Copilot ikke blir lagret permanent, blir det heller ikke brukt til videre trening av modellene som genererer forslag. Github garanterer derfor at din kode ikke vil kunne dukke opp hos andre brukere.

Brukeradferden din blir langtidslagret
I tillegg til kode, sender du dine User Engagement Data til Copilot, som lagres på andre måter enn koden du deler. User Engagement Data inkluderer hvordan du bruker Copilot, hvilke av forslagene til Copilot du godtar og ikke, samt generell informasjon om konto og eventuelle feil som oppstår. Microsoft garanterer at dataen lagres på en måte som gjør det vanskelig å direkte identifisere brukeren.

User Engagement Data
When you use GitHub Copilot, it collects information about your interactions with the IDE or editor. This includes actions like accepting or dismissing suggestions, as well as general usage data and error information. The purpose of collecting this data is to measure metrics such as latency and feature engagement. Some of this information may include personal data, but it is stored in a way that does not directly identify you.

Microsoft hevder i tillegg at Copilot følger Europeisk personvernlovgivning, som GDPR:

European Data Protection Rights Notice
If you are in the European Economic Area, we process your personal data in accordance with applicable laws, and the processing of personal data about you is subject to European Union data protection law, you have certain rights with respect to that data.

Output: Hva får du ut av forslagene til Copilot?

Ikke-deterministisk generering av forslag basert på pre-trent modell
Alle forslag fra Copilot er generert av LLM’en (Large Language Model) som driver teknologien. Forslagene som blir sendt tilbake til deg er ikke kode kopiert fra andre steder, men modellen er trent på kodebaser som inneholder opphavsberettiget materiale. Det er likevel aldri hundre prosent sikkert at det ikke vil genereres noe som er identisk med deler av treningsdataene, men via sin nye “Copilot Copyright Commitment”, har Microsoft benyttet en rekke filtre og teknologier i flyten som skal minimere denne sannsynligheten.

3. We have built important guardrails into our Copilots to help respect authors' copyrights. We have incorporated filters and other technologies that are designed to reduce the likelihood that Copilots return infringing content. These build on and complement our work to protect digital safety, security, and privacy, based on a broad range of guardrails such as classifiers, metaprompts, content filtering, and operational monitoring and abuse detection, including that which potentially infringes third-party content. Our new Copilot Copyright Commitment requires that customers use these technologies, creating incentives for everyone to better respect copyright concerns.

Ifølge denne “Copilot Copyright Commitment”, vil Microsoft også påta seg det juridiske ansvaret for kode generert av Copilot. Det betyr at opphavsrettighetstvister som kan oppstå vil bli tatt hånd om av Microsoft, men det er uklart hvem, hva og hvor dette gjelder – altså om det gjelder i Norge, så vi ser på dette mer som en bonus for øyeblikket.

Les også: Bli med produktiv med Microsoft Copilot

Risiko

“Various Elements of Context”

Copilot benytter som nevnt “context” for å bygge opp innholdet som sendes til skyen, for å kunne returnere kodeforslag. For å generere dette forslaget samler Copilot kode fra filen du jobber i, samt fra andre relevante og nærliggende filer i prosjektet. Akkurat denne prosessen er noe uklart dokumentert, og du som utvikler har ikke god oversikt over hvilke data som faktisk blir samlet inn. Derfor kan nærliggende filer som inneholde sensitive data, som for eksempel access-tokens, client secrets eller passord, bli inkludert og sendt til skyen.

– Prompts used to generate a suggestion may include various elements of the context, including file content both in the file you are editing, as well as neighboring or related files within a project. Prompts may also include the URLs of repositories or file paths to identify relevant context. The comments and code along with context are then used to synthesize and suggest individual lines and whole functions.

Dette må utviklere være klar over ved bruk av Copilot. Selv er Copilot veldig klar over det, og du vil derfor få forslag om at .env- eller .json-filer ikke skal inneholde faktisk data, men heller være mål for transformasjoner, nettopp på grunn av filenes sensitive natur. Bruk av Copilot vil potensielt gjøre kodebasen sikrere, mens bruken utgjør i seg selv en slags sikkerhetsrisiko.  

Det jobbes nå med en .CopilotIgnore-fil (på samme måte som dagens .gitIgnore) som vil tvinge Copilot til å ikke inkludere visse filer og/eller filstier i sin innsamling til prompts. Foreløpig er ikke dette på plass og vår anbefaling tar utgangspunkt i nåværende situasjon.

– As suggestions are generated and before they are returned to the user, Copilot applies an AI-based vulnerability prevention system that blocks insecure coding patterns in real-time to make Copilot suggestions more secure. Our model targets the most common vulnerable coding patterns, including hardcoded credentials, SQL injections, and path injections.

– The system leverages LLMs to approximate the behavior of static analysis tools and can even detect vulnerable patterns in incomplete fragments of code. This means insecure coding patterns can be quickly blocked and replaced by alternative suggestions.

Usikre forslag

Det er absolutt mulig at Copilot generer forslag til kode og funksjoner som i seg selv inneholder sårbarheter eller representerer andre typer sikkerhetshull. Argumentet for at du fortsatt kan bruke teknologien baserer seg derfor på at nåværende programmeringspraksis, med oppslag på internett (for eksempel Stack Overflow eller Microsoft Developer Forums) inneholder den samme risikoen. Med eller uten Copilot er det viktig med kritiske og årvåkne utviklere ved bruk av kodeforslag og løsningsforslag.

Konklusjon

Vår vurdering er at du kan bruke GitHub Copilot i virksomheten din så lenge du har “Copilot for Business”-lisens og følger visse retningslinjer (se neste kapittel). I tillegg må du være bevisst på at virksomheten påtar seg risikoen som kommer med dette verktøyet.

Retningslinjer

Følgende er retningslinjer som anbefales ved bruk av Github Copilot.

For å overholde sikkerhets- og kvalitetskrav

  • Alle utviklere er ansvarlig for kode som leveres og er forventet å følge samme “Code of Conduct” som du opererer med fra før.
    • Dette innebærer at utvikleren må forstå all kode de leverer.
    • Dersom generert kode inneholder konsepter utvikleren er mindre kjent med bør andre kilder sjekkes (for eksempel offisiell dokumentasjon).
    • Kvalitetsjekking av kode må gjøres, ved QA-prosess med en annen utvikler og/eller kvalitetstverktøy.
  • Jo mindre erfaring utvikleren har, jo mer forsiktig bør du være med å bruke kode generert av Copilot. Det kan kreves mye kompetanse for å fange opp eventuelle svakheter i kodeforslag.
  • Vær oppmerksom på hvilke filer og hva slags innhold Copilot kan samle inn som sin “context".
    • Aldri legg inn informasjon som brukes til å få tilgang til produksjonsmiljøer eller andre miljøer der skarpe data ligger.
  • Tester som verifiserer kodens oppførsel bør være på plass før koden leveres.

Vurderingen er gjort med utgangspunkt GitHub sin “Customer Agreement” gjeldende Copilot: https://github.com/customer-terms/github-Copilot-product-specific-terms  

Vurderingen er gjort med utgangspunkt I GitHubs Copilot Trust Center: https://resources.github.com/Copilot-trust-center/

Bli en del av vårt team - ledige stillinger

Relaterte artikler