Izveidot bezmaksas kontu
LLM lietojumprogrammu koda drošība

Jūsu modeļa izvade ir neuzticama ievade. Atrodiet vietas, kur jūsu kods to aizmirst.

Statiska analīze kodam ap jūsu LLM — kodam, kas veido uzvedni, izsauc modeli un kaut ko dara ar atbildi. Ne modelim. Ne uzvednes izturībai pret jailbreak. Kodam.

Bezmaksas plāns ietver 3 projektus un 30 analīzes mēnesī, bez lietotāju skaita ierobežojuma un bez maksājumu kartes. Šī analīze tajā ietilpst.

Problēma

Modelis nav bibliotēka. Tas ir neuzticams interpretators: jūs tam padodat virkni, un tas atdod citu. Viss, kas ietekmēja šo virkni — lietotāja paša uzvedne, lapa, kas tam tika parādīta, dokuments, ko tas saņēma, cita rīka rezultāts — ietekmēja arī atbildi.

Atbilde ir nekaitīga, kamēr kods tai nepiešķir spēju darboties. Briesmas nav tajā, ka modelis kaut ko pateica; tās ir tajā, ka programma tam noticēja. Katra vieta, kur programma apstrādā ģenerēto tekstu kā kodu, kā komandu, kā vaicājumu, kā ceļu vai kā URL, ir injekcija vienu lēcienu tālāk — un atšķirībā no jautājuma, vai uzvedni var apiet ar jailbreak, šis lēciens ir redzams pirmkodā.

Ko meklē Cybseco

Tur, kur modeļa izvade nonāk pie kaut kā, kas darbojas. Šīs ir pašas dzinēja kategorijas, nopietnības pakāpes un CWE identifikatori.

Koda izpilde — CWE-94
kritiska
eval, exec, compile, new Function, pickle.loads, yaml.load — atbilde kļūst par programmu.
Čaula — CWE-78
kritiska
os.system, subprocess, child_process.exec, execSync — atbilde kļūst par komandu.
SQL vaicājums — CWE-89
augsta
execute, raw, createQuery — text-to-SQL ir tieši šis paraugs, un DROP TABLE ir ticams turpinājums.
Failu sistēmas ceļš — CWE-22
augsta
open, readFile, shutil.rmtree, unlink — ../../etc/passwd ir tikpat ticams turpinājums.
Izejošs pieprasījums — CWE-918
augsta
requests, httpx, fetch, axios, urlopen — servera puses pieprasījumu viltošana, ko izvēlas modelis.

Konkrēts piemērs

Deviņas rindas un viss riska veidols.

from openai import OpenAI
client = OpenAI()

def run_plan(task: str):
    answer = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": task}],
    )
    exec(answer.choices[0].message.content)
Avots
client.chat.completions.create(…) — izsaukums, kas atgriež modeļa izvadi. Analizators piesaista mainīgo, kuram tā tika piešķirta, un tieši tas ļauj tam sekot vērtībai cauri funkcijai bez starpprocedūru analīzes.
Plūsma
answer satur tekstu, ko varējis ietekmēt uzbrucējs. Starp izsaukumu un noteci neviens to nepārbauda, neierobežo un nepārveido par fiksētu operāciju kopu.
Notece
exec(…) — teksts kļūst par programmu pašas lietojumprogrammas procesā, ar tās akreditācijas datiem, tās tīklu un tās failu sistēmu.
Kāpēc tas ir svarīgi
Viss, kas var ietekmēt task — tieši vai caur dokumentu, kas tika parādīts modelim — izvēlas, kas tiks izpildīts. Tā ir koda attālināta izpilde vienu lēcienu tālāk.

Palaists pret pašreizējo dzinēju, šis fragments dod vienu atradumu: llm-output-to-code-execution, CWE-94, nopietnība kritiska, pārliecība augsta, rindā exec. Pārliecība ir augsta, jo mainīgais ir piesaistīts īstam completion izsaukumam. Nosaukums, kas tikai izskatās pēc modeļa atbildes — llm_response, reply — tiek ziņots ar vidēju pārliecību, jo tas ir minējums, un apgalvot citādi nozīmētu melot par pierādījumiem.

Kas tas nav

Tā nav modeļa pārbaude
Mēs modeli nezondējam, neveicam pret to red teaming un nevērtējam, kā tas uzvedas zem spiediena. Nekas šeit nepasaka, vai uzvedni var apiet ar jailbreak: to no pirmkoda izlemt nevar, un to apgalvot būtu tieši tāds izteikums, kura izvairīšanās dēļ šis dzinējs pastāv.
Tā nav pilnīga uzvedņu injekciju atklāšana
Netiešu injekciju ziņojam tur, kur neuzticams saturs pierādāmi nonāk uzvednē. Kanālu, ko kodā neredzam, mēs neziņojam.
Tā nav garantija par aģentu
Mēs ziņojam, ka aģentam ir piešķirts rīks, kas izpilda kodu vai komandas. Ko aģents pēc tam dara izpildes laikā, ir ārpus tā, ko statiskā analīze var izlemt.
Papildina MI drošību izpildes laikā
Aizsargbarjeras, novērtēšanas ietvari un red teaming atbild uz jautājumiem, uz kuriem šis nevar, un šis atbild uz jautājumiem, uz kuriem nevar tie. Neviens neaizstāj otru.

Citi LLM raksturīgi riski kodā

Katrs no tiem tika izraisīts uz parauga pret pašreizējo dzinēju, pirms tas tika šeit pierakstīts.

Noslēpumi un personas dati, ievietoti uzvednē — CWE-200
api_key, parole, IBAN vai medicīniskais ieraksts, ievietots tekstā, ko jūs sūtāt. Ziņots tur, kur patiesi tiek veidots uzvednes konteksts, nevis pie katras f-virknes, kas nejauši satur atslēgu.
Aģents ar rīku, kas izpilda kodu vai komandas — CWE-250
PythonREPLTool, ShellTool, koda interpretators, terminālis. Viena no tiem piešķiršana pārvērš katru jautājumu par uzvedņu injekciju jautājumā par koda attālinātu izpildi.
Ietvara aizsardzība atkal izslēgta — CWE-502
allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — ietvars to izslēdza, jo tā bija nedroša.
Izslēgtas pakalpojumu sniedzēja drošības kontroles — CWE-693
BLOCK_NONE, safety_settings=None, moderation=false.
Uzvedne vai aģenta definīcija, iegūta izpildes laikā — CWE-829
hub.pull(…), uzvednes veidne, ielādēta pa HTTP. Kas kontrolē šo galapunktu, kontrolē instrukcijas.
Neuzticams saturs ielādēts tieši uzvednē — CWE-77
Nokopēta lapa, PDF, repozitorijs, viki. Šis ir netiešās injekcijas kanāls, atpazīts pēc tā, no kurienes teksts nācis, nevis pēc tā, ko tas saka.
Modeļa API atslēga, ierakstīta pirmkodā — CWE-798
sk-…, sk-ant-…, AIza…, hf_…, iesniegtas repozitorijā.
Izņemts vai aizstāts modelis, fiksēts kodā — CWE-1104
text-davinci-*, gpt-4-0314, claude-instant — vājāka instrukciju hierarhija, bez sistēmas uzvednes nodalīšanas.

Kāpēc tam visam ticēt

Publicēts etalonrādītājs
Precizitāte, pārklājums un F1 pa CWE, pa valodām un pa analīzes slāņiem, uz versionēta, ar roku marķēta korpusa. Skatiet skaitļus.
Publicēts tvērums
Katrs slānis, ko mēs nemērām, ir nosaukts, līdz ar iemeslu. Izlasiet metodiku.
Pārbaude uz publiska koda
Analizētie repozitoriji un commiti, sastaptās valodas, pabeigtības rādītājs un determinisms — apjomi un rādītāji, nevis apgalvojumi par precizitāti. Skatiet palaišanas.
Katrs atradums nes savu pierādījumu
Fails, rinda, atrastā konstrukcija un CWE. Atradums, ko nevarat pārbaudīt, ir atradums, pēc kura nevajadzētu rīkoties.

Neatkarīgs no pakalpojumu sniedzēja jau pēc uzbūves. Analizators atpazīst formu — kaut kas rada tekstu, kaut kas to patērē — nevis viena konkrēta SDK rakstību. Tas nosauc ietvaru, ko redzēja, kad spēj (OpenAI, Anthropic, Google, Azure OpenAI, Mistral, Bedrock, Ollama, LiteLLM, LangChain, LangGraph, LlamaIndex, Semantic Kernel, AutoGen, CrewAI, Hugging Face), lai atradums varētu pateikt, no kurienes tas nāk. Tā ir etiķete uz atraduma, nevis integrācija katram SDK, un ietvars, kura šajā sarakstā nav, tiek analizēts tieši tāpat.

Redziet, kā Cybseco spriež par reālu sistēmu

Noskatieties interaktīvo demonstrāciju, pēc tam pieprasiet vadītu izmēģinājumu savai komandai.