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.
eval, exec, compile, new Function, pickle.loads, yaml.load — atbilde kļūst par programmu.os.system, subprocess, child_process.exec, execSync — atbilde kļūst par komandu.execute, raw, createQuery — text-to-SQL ir tieši šis paraugs, un DROP TABLE ir ticams turpinājums.open, readFile, shutil.rmtree, unlink — ../../etc/passwd ir tikpat ticams turpinājums.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)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.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.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.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
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.
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.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.allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — ietvars to izslēdza, jo tā bija nedroša.BLOCK_NONE, safety_settings=None, moderation=false.hub.pull(…), uzvednes veidne, ielādēta pa HTTP. Kas kontrolē šo galapunktu, kontrolē instrukcijas.sk-…, sk-ant-…, AIza…, hf_…, iesniegtas repozitorijā.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
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.