Regler hittar kända mönster. Säkerhetsgranskningen letar efter sådant som reglerna missar: en AI-modell läser ett projekts viktigaste kod och den kod som har ändrats sedan den senaste granskningen för att leta efter sårbarheter. Bara sådant som bekräftas av en oberoende kontroll räknas som en iakttagelse.
Aktivera
Säkerhet → Inställningar → Säkerhetsgranskning har en omkopplare och ett val för hur ofta den körs: dagligen, varje vecka (standard) eller varje månad. Tills du ändrar inställningen följer den din plan: på för betalplaner, av för Free. Du kan aktivera den för en Free-organisation eller inaktivera den för en betalande organisation, som standard för organisationen eller för ett enskilt projekt.
Granskningen läser standardgrenen för varje projekt där den är aktiverad.
Vad som händer vid en körning
- Väljer filer. Coroid rangordnar projektets källkodsfiler och läser först de viktigaste: kod i hotmodellens sökvägar och startpunkter med stor påverkan, samt kod som har ändrats sedan den senaste granskningen före kod som inte har ändrats. En körning läser högst 40 filer.
- Letar efter sårbarheter. För varje fil letar modellen efter en fast uppsättning sårbarhetstyper: SQL-injektion, kommandoinjektion och annan injektion, cross-site scripting, cross-site request forgery, server-side request forgery, sökvägstraversering, öppna omdirigeringar, osäker deserialisering, bristande åtkomstkontroll, bristande autentisering, hårdkodade autentiseringsuppgifter, svag kryptografi, informationsläckage och uttömning av resurser. Den måste ange raderna; svar som hänvisar till kod utanför det den har fått se tas bort.
- Bekräftar. Varje problem registreras som Ännu inte bekräftat. För kritiska problem och problem med hög allvarlighetsgrad härleder en oberoende kontroll problemet på nytt utifrån koden i den committen. Om den lyckas blir problemet en bekräftad iakttagelse med ett validerat statiskt fynd som belägg. Se Belägg.
- Bevisar. För en bekräftad kritisk iakttagelse eller en iakttagelse med hög allvarlighetsgrad skriver granskningen ett bevis och kör det mot din byggda applikation två gånger. Se Bevis.
- Letar efter varianter. Brister förekommer ofta i familjer. För varje bekräftad iakttagelse söker Coroid igenom repot efter samma mönster och kontrollerar varje träff på samma sätt.
Granskningens iakttagelser visar Säkerhetsgranskning som källa i Säkerhet → Iakttagelser.
Vad det kostar
Granskningen använder en AI-modell och förbrukar därför dina krediter och agenttimmar, precis som annat arbete. Den visas i Mission Control medan den körs och i Inställningar → Aktivitet tillsammans med kostnaden.
Varje körning har en budget. När den når budgetgränsen eller dina krediter eller agenttimmar tar slut stoppas den, och det som redan har bekräftats sparas. Nästa körning börjar om med den viktigaste koden. Körningen för ett stort projekt fortsätter över flera jobb, så en enskild körning aldrig upptar en agentplats särskilt länge.
Åtgärda det som hittas
En bekräftad iakttagelse med minst den allvarlighetsgrad som krävs för åtgärd öppnar automatiskt ett åtgärdsarbete under uppdraget Säkerhetsåtgärder, på samma sätt som en sårbar beroendekomponent gör. Ägare och administratörer kan också välja Åtgärda för en öppen kodiakttagelse. Se Åtgärds-PR:er.
En iakttagelse från granskningen gäller din egen kod och är därför inte offentlig. I ett offentligt repo, eller ett repo vars synlighet Coroid inte kan bekräfta, hålls åtgärden privat tills en ägare eller administratör publicerar den. Se Offentliggörande.
Bevis
För en bekräftad kritisk iakttagelse eller en iakttagelse med hög allvarlighetsgrad skriver granskningen även ett bevis: ett litet svartlådetest som visar det sårbara beteendet utifrån, från den körande applikationen, till exempel att en användare kan läsa en annan användares beställning. Modellen kan avstå om en iakttagelse inte går att visa på det sättet; då är den oberoende kontrollen fortfarande belägget för iakttagelsen.
Coroid kör beviset mot ditt projekt, byggt från den granskade committen:
- Den hämtar den committen, installerar dess beroenden och bygger projektet, precis som inför en förhandsvisning.
- Den startar bygget i en isolerad miljö utan någon väg ut: inget internet, inga externa namnuppslagningar, inga andra tjänster, inga autentiseringsuppgifter och inga kunddata. En databas, cache eller kö som applikationen behöver körs i samma miljö och är tom. Innan beviset körs kontrollerar miljön att den verkligen inte kan nå något utanför. Om den kan det stoppas körningen och inget registreras.
- Beviset, som är skrivet för att skapa egna användare och data via applikationen, körs och rapporterar om det upptäckte felet.
En andra körning i en ny, separat miljö med ett eget bygge måste också upptäcka felet. Först då får iakttagelsen reproducerat fel som belägg. Ett bevis som inte reproducerar felet, eller som inte bekräftas av den andra körningen, ändrar ingenting.
I iakttagelsens avsnitt Bevis visas vad som kördes: bevisets filer och kommando, committen och slutet av utdata. Alla som kan se iakttagelsen kan läsa det. Bevis sparas så länge iakttagelsen är öppen och i 90 dagar efter att den stängts.
Spara ett bevis som regressionstest
Ägare och administratörer kan spara ett reproducerat bevis med Kontrollera varje ändring. Därefter körs det igen i en ny, isolerad miljö vid varje Quality Graph-körning för projektet, mot den körningens commit: kontrollen godkänns så länge problemet är åtgärdat och får körningen att misslyckas om det kommer tillbaka. I GitHub visar kontrollen bara om en säkerhetsregressionskontroll godkändes eller misslyckades; vad beviset gör förblir i Coroid. Ett sparat bevis behålls så länge kontrollen är aktiv. Projektet måste ha en Quality Graph för detta (konfigureras i Kvalitetskontroll).
Bevis kräver bevisköraren, som Coroid aktiverar miljö för miljö. Där den ännu inte är aktiverad är granskningens belägg den oberoende kontroll som beskrivs ovan.
Rapporten från säkerhetsgranskningen
Nytt arbete erbjuder inte längre en skriftlig rapport från säkerhetsgranskningen. I stället länkar det till granskningens iakttagelser under Säkerhet.