Izhod vašega modela je nezaupanja vreden vhod. Poiščite mesta, kjer vaša koda na to pozabi.
Statična analiza kode okoli vašega LLM — kode, ki sestavlja poziv, kliče model in z odgovorom nekaj naredi. Ne modela. Ne odpornosti poziva na jailbreak. Kode.
Brezplačni paket vključuje 3 projekte in 30 analiz na mesec, brez omejitve števila uporabnikov in brez plačilne kartice. Ta analiza je vanj vključena.
Težava
Model ni knjižnica. Je nezaupanja vreden tolmač: podate mu niz in vrne vam drugega. Vse, kar je vplivalo na ta niz — uporabnikov lastni poziv, stran, ki mu je bila prikazana, dokument, ki ga je dobil, rezultat drugega orodja — je vplivalo na odgovor.
Odgovor je neškodljiv, dokler mu koda ne da zmožnosti delovanja. Nevarnost ni v tem, da je model nekaj rekel; je v tem, da je program temu verjel. Vsako mesto, kjer program obravnava ustvarjeno besedilo kot kodo, ukaz, poizvedbo, pot ali naslov URL, je vrivanje en skok dlje — in za razliko od vprašanja, ali je poziv mogoče zaobiti z jailbreakom, je ta skok viden v izvorni kodi.
Kaj Cybseco išče
Tam, kjer izhod modela doseže nekaj, kar deluje. To so lastne kategorije, resnosti in identifikatorji CWE pogona.
eval, exec, compile, new Function, pickle.loads, yaml.load — odgovor postane program.os.system, subprocess, child_process.exec, execSync — odgovor postane ukaz.execute, raw, createQuery — text-to-SQL je natanko ta vzorec in DROP TABLE je verjetno nadaljevanje.open, readFile, shutil.rmtree, unlink — tudi ../../etc/passwd je verjetno nadaljevanje.requests, httpx, fetch, axios, urlopen — ponarejanje zahteve na strani strežnika, ki ga izbere model.Konkreten primer
Devet vrstic in celotna oblika tveganja.
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(…) — klic, ki vrne izhod modela. Analizator veže spremenljivko, ki ji je bil dodeljen, in prav to mu omogoča slediti vrednosti skozi funkcijo brez medproceduralne analize.answer vsebuje besedilo, na katero je lahko vplival napadalec. Med klicem in ponorom ga nič ne pregleda, ne omeji in ne preslika na stalen nabor operacij.exec(…) — besedilo postane program v samem procesu aplikacije, z njenimi poverilnicami, njenim omrežjem in njenim datotečnim sistemom.task — neposredno ali prek dokumenta, prikazanega modelu — izbere, kaj se izvede. To je oddaljeno izvajanje kode en skok dlje.Pognan na trenutnem pogonu ta odlomek da eno ugotovitev: llm-output-to-code-execution, CWE-94, resnost kritična, zanesljivost visoka, v vrstici exec. Zanesljivost je visoka, ker je spremenljivka vezana na dejanski klic completion. Ime, ki je odgovoru modela le podobno — llm_response, reply — se namesto tega poroča s srednjo zanesljivostjo, saj gre za ugibanje in trditi drugače bi pomenilo lagati o dokazih.
Kaj to ni
Druga tveganja, značilna za LLM, v kodi
Vsako od njih je bilo pred zapisom sproženo na vzorcu proti trenutnemu pogonu.
api_key, geslo, IBAN ali zdravstveni zapis, postavljen v besedilo, ki ga pošiljate. Poroča se tam, kjer se dejansko gradi kontekst poziva, in ne pri vsakem f-nizu, ki slučajno vsebuje ključ.PythonREPLTool, ShellTool, tolmač kode, terminal. Dodelitev enega od njih spremeni vsako vprašanje o vrivanju pozivov v vprašanje o oddaljenem izvajanju kode.allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — ogrodje ga je izklopilo, ker je bilo nevarno.BLOCK_NONE, safety_settings=None, moderation=false.hub.pull(…), predloga poziva, naložena prek HTTP. Kdor nadzira to končno točko, nadzira navodila.sk-…, sk-ant-…, AIza…, hf_…, oddani v repozitorij.text-davinci-*, gpt-4-0314, claude-instant — šibkejša hierarhija navodil, brez ločitve sistemskega poziva.Zakaj bi čemu od tega verjeli
Neodvisen od ponudnika že po zasnovi. Analizator prepozna obliko — nekaj ustvarja besedilo, nekaj ga porablja — in ne zapisa posameznega SDK. Poimenuje ogrodje, ki ga je videl, kadar zmore (OpenAI, Anthropic, Google, Azure OpenAI, Mistral, Bedrock, Ollama, LiteLLM, LangChain, LangGraph, LlamaIndex, Semantic Kernel, AutoGen, CrewAI, Hugging Face), da lahko ugotovitev pove, od kod prihaja. To je oznaka na ugotovitvi, ne integracija za vsak SDK, in ogrodje, ki ga na tem seznamu ni, se analizira povsem enako.
Oglejte si, kako Cybseco sklepa o resničnem sistemu
Oglejte si interaktivno predstavitev, nato zahtevajte voden preizkus za svojo ekipo.