====== FORENZIKA PROMPTOVA I POVIJESTI INTERAKCIJA U CLOUD AI CHATBOTOVIMA ======
===== Sažetak =====
\\
Rad se bavi forenzičkom analizom promptova i povijesti interakcija korisnika s AI chatbotovima. Analizu ćemo izvršiti na tri najpoznatija AI chatbota koje danas veliki broj korisnika koristi: **OpenAI ChatGPT**, **Microsoft Copilot** i **Google Gemini**.
Ova tri chatbota predstavljaju cloud AI chatbotove zbog **udaljenog načina obrade i pohrane korisničkih upita u cloud okruženjima**. Kako bismo mogli provesti forenzičku analizu na spomenutim chatbotovima, najprije moramo upoznati način na koji se promptovi bilježe, gdje se pohranjuju te koje metapodatke generiraju tijekom korištenja.
Istaržit ćemo **audit logove (tragove)** koje generiraju chatbotovi, **politike zadržavanja podataka (engl. data retention policies)**, identifikatore sesija i sigurnosne zapise koji nastaju tijekom interakcija s modelima.
Praktično ćemo istražiti lokalnu pohranu u web preglednicima (**IndexedDB, localStorage, cache i kolačiće**) koji mogu sadržavati dijelove razgovora, identifikacijske tokene ili tragove prethodnih sesija koji nam mogu pomoći u forenzičkoj analizi.
Osim navedenog, istražit ćemo **što se događa s podacima nakon brisanja**, koliko dugo i gdje ostaju pohranjeni te je li ih moguće pronaći u cacheu, RAM-u i cloud zapisnicima kako bismo mogli **rekonstruirati obrisane podatke**.
__Ključne riječi__: AI chatbotovi, povijest interakcija, prompt forenzika, audit logovi, retention politika, browser forenzika, ChatGPT, Google Gemini, Microsoft Copilot
===== Uvod =====
\\
Svakodnevno svjedočimo sve većem razvoju AI modela i sustava te povećanoj primjeni AI sustava u svakodnevnom životu ljudi. AI modeli se primjenjuju u različite svrhe, primjerice u programiranju, u automatizaciju procesa, u sigurnosti i dr. Ipak za većinu korisnika poznatija primjena je AI Chatbot.
**AI Chatbot** je **računalni sustav baziran najčešće na velikim jezičnim modelima (LLM)**, a osnovna svrha je „razgovor“ chatbota s korisnikom preko promptova, tj. **chatbot pokušava razumjeti korisničke upite i generirati prikladan odgovor u stvarnom vremenu**. Najjednostavniji opis tijeka rada chatbota unutar jedne sesije možemo pogledati na modelu ispod.
{{ :racfor_wiki:seminari2025:promptanaliza:chatbotwork.png?nolink |}}
Korisnik postavlja upit Chatbotu. Chatbot analizira i obrađuje upit pomoću velikih jezičnih modela (LLM) i kao rezultat generira odgovor koji je gramatički i kontekstualno ispravan s obzirom na postavljeni upit. Pritom Chatbot pamti generirani sadržaj te upite korisnika unutar jedne sesije kako bi moga što preciznije odgovarati na sljedeće upite. Također osim odgovora Chatbot najčešće postavlja i **dodatne podupite** korisniku kako bi što preciznije i točnije odgovorio korisniku na postavljeni upit. Cijeli proces se ponavlja dok korisnik postavlja upite ili sesija ne završi.
U opisu rada chatbota možemo primijetiti nekoliko ključnih pojmova bitnih za razumijevanje kasnije analize. **Promt** predstavlja **svako pitanje, naredbu, tekst ili neki drugi oblik ulaznih podataka** koje korisnik predaje chatbotu na obradu. **Sesija** je **vremenski ograničeni skup interakcija između korisnika i chatbota** (**razgovor**) koji traje od trenutka prvog poslanog prompta do trenutka kada korisnik ili chatbot prekine sesiju.
Razlikujemo dvije vrste AI chatbotova: **lokalni i cloud AI chatbotovi**. Korisnici u svakodnevnom životu najčešće koriste cloud AI chatbotove zato ćemo u ovom radu obraditi tri najpoznatija cloud AI chatbota te analizirati podatke koje pohranjuju, a koji su nam povoljni za računalnu forenziku. Tri cloud AI chatbota koja ćemo obraditi su: **OpenAI ChatGPT, Microsoft Copilot i Google Gemini**.
===== Teorijska pozadina AI chatbota =====
\\
Prije početka analize pojedinačnih cloud AI chatbotova koje smo naveli u Uvodu, moramo se upoznati s pojmom cloud AI chatbota, načinom njegova rada i pohrane podataka te razlikama u odnosu na lokalni AI chatbot.
**Cloud AI chatbot** je **AI chatbot koji korisničke promptove ne obrađuje lokalno već šalje udaljenom računalu** (serveru) na obradu pomoću velikih jezičnih modela te rezultat vraća korisniku. Pritom nastaju **cloud i lokalni forenzički tragovi** koje analiziramo u računalnoj forenzici.
Glavne razlike u izvršavanju, pohrani, privatnosti i sigurnosti te potrebnim performansama cloud i lokalnog AI chatbota možemo vidjeti u tablici.
\\
^ Razlike ^ Cloud AI chatbot ^ Lokalni AI chatbot ^
^ Izvršavanje | Udaljeni server | Lokalno, vlastito računalo |
^ Pohrana | Cloud infrastruktura | Lokalni disk |
^ Privatnost i sigurnost | Podaci napuštaju vlastito računalo, pohrana podataka na udaljenim serverima | Veća privatnost, ali i odgovornost korisnika |
^ Forenzika | Audit logovi, cloud zapisnici i browser artefakti | Lokalne datoteke, RAM analiza i konfiguracijski folderi |
^ Performanse | Vrlo snažni modeli, ovisi o internetu | Ograničen hardverom korisnika, manji modeli, brži odziv |
\\
Jednostavan prikaz rada cloud AI chatbota možemo pogledati na modelu ispod.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:cloudchatbot_1.png?nolink |}}
\\
{{ :racfor_wiki:seminari2025:promptanaliza:cloudchatbot_2.png?nolink |}}
\\
Korisnik unosi prompt. Prompt šalje korisnikov browser prema cloudu (udaljenom serveru) na API Gateway, drugim riječima, prompt se ne obrađuje lokalno. U ovom trenutku kako **prompt prolazi mrežom, nastaju browser i mrežni artefakti**. Kada prompt pristigne na server, prompt se dijeli na manje jedinice tzv. **tokene** koji se prosljeđuju većem broju moćnih servera s LLM modelima u klasterima te se upit obrađuje. Nakon obrade generira se odgovor i metapodaci koji se pohranjuju u cloudu te se odgovor šalje natrag kroz API korisnikovu browseru. U browseru se također pohranjuju lokalno metapodaci. Ovaj proces se ponavlja novim promptovima te završava prekidom sesije.
Za računalnu forenziku su u cijelom opisanom procesu ključni podaci koje pohranjuje browser lokalno i cloud na udaljenom računalu, a nužni su za analizu i rekonstrukciju scenarija. Podaci koji se pohranjuju u pojedinom spremniku prikazani su u tablici.
^ Lokalna pohrana ^ Cloud pohrana ^
| Cache | Promptovi |
| IndexedDB zapisi | Generirani odgovori |
| localStorage postavke | Audit logovi |
| Cookies | Sigurnosni zapisi |
| Tragovi u RAM memoriji | Metapodaci o sesiji |
Već smo ranije naveli kako je sesija vremenski ograničeni skup interakcija između korisnika i chatbota, no nismo naveli njenu važnost u forenzici. Na početku sesije, sesiji se obično dodjeljuje **ID sesije** (engl. Session ID) kojim se sesija identificira pri pohrani u sustavu. ID sesije nam je jako važan jer nam on **jednoznačno određuje sesiju (razgovor) između korisnika i chatbota** te nam poznavanje tog ID u forenzici može pomoći pri pretrazi specifičnog razgovora i dolaska do promptova. Glavni session id koji povezuje sve promptove i odgovore u toj sesiji kao i audit logove se sprema u cloudu i ono predstavlja najvrijednije podatak za računalnu forenziku. ID sesije se pohranjuje i lokalno, no u drugačijem obliku i nije toliko informativan kao onaj u cloudu.
**Token** je **osnovna jedinica teksta** koju AI modeli koriste za obradu i generiranje odgovora. AI modeli ne razumiju cijele rečenice kao mi ljudi već ih **razbijaju na manje tokene i obrađuju token po token na način da predviđaju sljedeći i tako generiraju odgovor**. Tokeni su također ključni u računalnoj forenzici jer se u ovom obliku pohranjuju promptovi. Audit log bilježi broj stvorenih tokena što nam može pomoći ustvrditi koliko je korisnik poslao teksta za rekonstrukciju razgovora.
==== Audit logovi ====
\\
**Audit logovi** su prema definicijama **kronološki zapisi aktivnosti u nekom sustavu**. Oni bilježe korisničke radnje, sistemske događaje i promjene podataka. Neki izvori uspoređuju audit log s „**crnom kutijom**“ jer bilježi sve tragove i sustavi su ih **dužni očuvati zbog pravnih obveza čak i nakon uklanjanja izvornog podatka**.
Od sustava do sustava se razlikuju točni podaci koji se pojavljuju u njima, ali ipak prevladavaju neki ključni podaci. Sadrže podatke o **identitetu korisnika** (korisničko ime, ID korisnika), **vrijeme i datum** nastanka određenog događaja, **vrstu aktivnosti** koju je korisnik obavio (prijava, pisanje, slanje, brisanje, …), podaci nad kojima se izvršava određena aktivnost te uspješnost aktivnosti. Osim navedenih podataka u logovima je moguće pronaći i neke sistemske podatke kao npr. **IP adresu, uređaj, lokaciju** i dr.
Iz navedenih podataka već možemo naslutiti njihovu važnost u računalnoj forenzici. Audit logovi nam mogu pomoći u računalnoj forenzici na nekoliko načina:
* omogućuju rekonstrukciju incidenta
* služe kao dokaz u internim i pravnim postupcima
* pokazuju namjeru (npr. pokušaj prikrivanja tragova)
* omogućuju vremensku analizu
* pomažu u povezivanju napada s korisnikom
U nastavku možemo vidjeti primjer audit loga u Microsoft Copilot cloudu i OpenAI ChatGPT cloudu.
|**Microsoft Copilot**|
|
{
"CreationTime": "2026-01-04T18:41:22Z",
"RecordType": 10150,
"Operation": "CopilotChatInteraction",
"OrganizationId": "a1b2c3d4-5678-90ef-1234-567890abcdef",
"UserId": "dominik@organizacija.hr",
"UserType": "Member",
"Workload": "MicrosoftCopilotChat",
"ClientIP": "192.168.1.55",
"SessionId": "c7f1a2b9-3d44-4f8e-9c11-2a8b7f3e1d22",
"Parameters": [
{
"Name": "PromptId",
"Value": "f3a1b2c4-9d22-4c8f-8b11-1e3d9f22a7c1"
},
{
"Name": "ConversationId",
"Value": "chat-2026-01-04-18-41-22-001"
},
{
"Name": "PromptType",
"Value": "UserPrompt"
},
{
"Name": "ResponseGenerated",
"Value": "True"
}
],
"AuditData": {
"Action": "UserPromptSubmitted",
"PromptLength": 87,
"ResponseLatencyMs": 645,
"Model": "Copilot-Chat-v1",
"SafetyFiltersTriggered": false
}
}
|
|**OpenAI ChatGPT**|
|
{
"object": "list",
"data": [
{
"id": "audit_log-yyy__20240101",
"type": "api_key.updated",
"effective_at": 1720804190,
"actor": {
"type": "session",
"session": {
"user": {
"id": "user-xxx",
"email": "user@example.com"
},
"ip_address": "127.0.0.1",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124
Safari/537.36",
"ja3": "a497151ce4338a12c4418c44d375173e",
"ja4": "q13d0313h3_55b375c5d22e_c7319ce65786",
"ip_address_details": {
"country": "US",
"city": "San Francisco",
"region": "California",
"region_code": "CA",
"asn": "1234",
"latitude": "37.77490",
"longitude": "-122.41940"
}
}
},
"api_key.updated": {
"id": "key_xxxx",
"data": {
"scopes": ["resource_2.operation_2"]
}
},
}
],
"first_id": "audit_log-xxx__20240101",
"last_id": "audit_log_yyy__20240101",
"has_more": true
}
|
===== Pohrana promptova u cloud AI sustavima =====
\\
U ovom poglavlju proći ćemo kroz način pohrane korisničkih promptova u pojedinom cloud AI chatbotu. Pritom ćemo promatrati gdje i na koliko dugo se pohranjuju podaci, što se pohranjuje i što se događa nakon brisanja podataka.
==== OpenAI ChatGPT ====
\\
{{:racfor_wiki:seminari2025:promptanaliza:chatgptlogo.png?nolink&200|}}
Prema službenoj dokumentaciji OpenAI-a znamo da se **svi promptovi i odgovori** koje korisnik izmijeni s cahtbotom **obrađuju i __pohranjuju na cloud serverima__**. Pritom razlikujemo pohranu kada je korisnik prijavljen svojim korisničkim računom i kada je korisnik anoniman. U oba slučaja se svi podaci pohranjuju na serverima, ali se kod prijavljenih korisnika razgovori povezuju s korisnikom te su vidljivi korisniku u njegovoj povijesti razgovora (engl. history).
Ako pogledamo __vremenski okvir pohrane__ razgovora onda **za anonimne korisnike** ono obuhvaća **30 dana** nakon čega slijedi brisanje, dok je **kod prijavljenih korisnika pohrana trajna odnosno dok je sam korisnik ne obriše**. Navedene podatke je moguće pronaći u politici zadržavanja (engl. retention policy) OpenAI.
Vrlo bitno je osim mjesta i vremena pohrane razumijete __što se točno od podataka pohranjuje__ na serveru. Nažalost, zbog sigurnosnih politika platformi nemoguće je saznati potpun i točan popis svih podataka koje pohranjuju, ali smo ipak uspjeli pronaći neke najvažnije.
U samoj dokumentaciji OpenAI piše kako se svi **promptovi i odgovori pohranjuju u cloudu**. To uključuje sve tekstualne promptove, ali i ostali sadržaj kao slike, kodovi i sl. Osim samog sadržaja razgovora pohranjuju se i **metapodaci o interakciji**. Navedeni metapodaci uključuju vrijeme slanja, id korisnika, tehničke podatke o zahtjevu (IP adresa, session ID, autentifikacija, …) te podatke o korištenom modelu. **U cloud serverima se stvaraju i dodatni sigurnosni zapisi audit logs** koji se pohranjuju u slučaju nekih pravnih obveza.
Kada smo naveli vremenski period čuvanja pohranjenih podataka onda smo spomenuli kako OpenAI čuva trajno podatke vezane uz prijavljene korisnike ili dok ih korisnici sami ne obrišu. Sada nas zanima __što se točno događa s podacima nakon što ih korisnik obriše__.
Nakon što korisnik **obriše odabrani razgovor** iz povijesti, **on se odmah uklanja iz korisničkog sučelja** i korisniku više nije vidljiv. Tada se pokreće proces brisanja razgovora i na backendu na serverima te se **podaci brišu unutar 30 dana** osim ako postoje pravne obveze pa duže. Navedeno nam govori da se **svi tragovi ne brišu trenutačno i potpuno**. Također zbog pravnih obveza OpenAI najčešće i nakon brisanja razgovora zadržava audit logs.
Nažalost, **kao obični korisnici ne možemo pristupiti navedenim podacima u cloudu zbog sigurnosti**, ali postoje i određeni lokalni tragovi koji mogu biti početna točka u rekonstrukciji scenarija. Uz sudski nalog moguće je dobiti na uvid audit logs, ali isključivo za specifičnog korisnika.
==== Microsoft Copilot ====
\\
{{:racfor_wiki:seminari2025:promptanaliza:copilot-logo.png?nolink&200|}}\\
**Microsoft Copilot cloud AI chatbot** možemo analizirati kroz **dvije uloge**: **privatni pojedinačni korisnički računi i korisnički računi unutar neke organizacije**. S obzirom na ulogu razlikujemo gdje, što i koliko dugo se pohranjuju podaci iz razgovora.
Ako promatramo **privatni Microsoft korisnički račun** onda je cijeli proces pohrane i brisanja podataka vrlo sličan kao kod prethodnog ChatGPT-a. Promptovi i odgovori se najčešće **__pohranjuju u Microsoftove cloud servere__**, točan **__period čuvanja nije poznat__** za privatne korisnike te je interno određen za pojedinu svrhu (**90 dana, 1 godinu, 7 godina**). Također korisnik može pratiti povijest razgovora vezanih uz njegov korisnički račun.
Na cloud serverima se promptovi obrađuju i **generira se odgovor** te se ti podaci **pohranjuju uz dodatne metapodatke i sigurnosne zapise** koji nisu poznati javnosti. Što se tiče lokalnih tragova i njih je moguće pronaći u indexedDB, cache ili cookies no oni su vrlo oskudni informacijama.
Podatke je moguće obrisati u samom sučelju izravno, ali pritom ostaju pojedini podaci. Ako želimo u potpunosti obrisati podatke razgovora to vršimo kroz **Microsoft Privacy Dashboarda**. Kao i kod ChatGPT ipak se **ne obrišu svi tragovi već ostaju lokalni tragovi i audit logs na Microsoftovim serverima** zbog pravnih obveza. Kada korisnik obriše razgovor u sučelju onda za početak **kopija obrisanog razgovora odlazi u skrivenu mapu SubstrateHolds** gdje se nalazi do isteka retention politike i onda nakon toga u roku od 1 do 7 dana se u potpunosti briše.
Druga **uloga organizacije** je vrlo zanimljiva i drugačija u odnosu na ChatGPT. Naime, ako postoji organizacija unutar koje korisnik ima dodijeljen korisnički račun onda **svi promptovi i odgovor kao i metapodaci se pohranjuju i upravljaju kroz Microsoft Purview sustav**. U ovom slučaju se podaci pohranjuju u tzv. **__Microsoft 365 tenantu organizacije__**. **Tenant** je **izolirani prostor u cloudu koji pripada jednoj organizaciji**. Što se tiče __vremenskog perioda__ pohrane podataka, ona **ovisi o postavljenoj retention politici same organizacije**. Vrste podataka koje se pohranjuju jednake su onima koje pohranjuje ChatGPT.
==== Google Gemini ====
{{:racfor_wiki:seminari2025:promptanaliza:geminilogo.jpg?nolink&200|}}
Kod **Google Gemini cloud AI chatbota** se promptovi i odgovori te ostali metapodaci **pohranjuju u Google Cloud povezani s korisnikovim Google računom**. Gemini također pohranjuje promptove i odgovore iz cijelog razgovora, pohranjuje tehničke podatke (IP adresa, uređaj, lokacija, tehnički logovi) kao i podatke za poboljšanje modela, tj. **dodatno treniranje**.
__Vremenski period čuvanja podataka__ na serverima je prema nekim navodima **do 3 godine** prema retention politici, ali korisnik ima mogućnost sam promijeniti to ograničenje na manji period. Također sadrži povijest prethodnih razgovora koja se može i isključiti te **obrisati svi razgovori**, no Google ipak **čuva podatke 72 sata** zbog pravnih obveza. Lokalni tragovi su jednaki kao i kod prethodna dva chatbota.
==== Usporedba cloud AI chatbota ====
\\
U tablici možemo sada sistematski vidjeti razlike između spomenuta tri cloud AI chatbota u pogledu pohrane koja smo prethodno opisali.
^ Kategorija ^ OpenAI ChatGPT ^ Microsoft Copilot ^ Google Gemini ^
^ Gdje? |OpenAI cloud|Microsoft 365 cloud (tenant) ili Microsoft Account cloud|Google Cloud|
^ Što? |Promptovi, odgovori, metapodaci, povijest razgovora|Promptovi, odgovori, metapodaci, audit logovi, tenant podaci|Promptovi, odgovori, metapodaci, povijest razgovora|
^ Koliko dugo? |Neograničeno dok korisnik ne obriše, nakon brisanja 30 dana|Ovisi o Purview retention politici (1 dan – 7+ godina), privatni korisnici prema Microsoft pravilima|Do 3 godine, uz isključenu povijest 72 sata|
^ Povijest? |Da|Da, ali nije trajna|Da|
^ Brisanja? |Briše se iz UI, backend briše unutar 30 dana|Briše se iz UI, backend zadržava prema retentionu, ide u SubstrateHolds|Briše se iz UI, retention i dalje vrijedi, Google zadržava 72 sata|
^ Audit logovi? |Da, OpenAI interne evidencije (nedostupne korisniku)|Da, Microsoft Purview Audit|Da, Google sigurnosni logovi|
^ Treniranje modela? |Da, osim ako korisnik isključi|Ne u enterprise verziji, da u privatnim verzijama|Da, osim ako korisnik isključi|
^ Lokalni tragovi (browser)? |Da|Da|Da|
===== Lokalni forenzički artefakti u web preglednicima =====
\\
U prethodnom poglavlju govorili smo o pohrani podataka o razgovoru na udaljenim cloud serverima i kratko spomenuli lokalnu pohranu podataka kod korisnika. Bitno je ponoviti, kako podaci pohranjeni na cloud serverima su vrlo bogati i važni za forenziku, no najčešće nedostupni zbog pravila privatnosti. Prema tome, **lokalni podaci iako oskudni ipak nam mogu puno pomoći i usmjeriti nas na glavni trag u računalnoj forenzici**.
U ovom ćemo poglavlju definirati neke od ključnih elemenata unutar kojih se pohranjuju lokalni podaci o razgovoru te **kroz praktičan primjer** pokazati kako ti podaci doista izgledaju i gdje ih pronaći. Kada koristimo bilo koji AI chatbot u pregledniku, **preglednik automatski stvara lokalne artefakte**. Najčešće artefakte i njihove definicije možemo pogledati u tablici dolje.
^ Lokalni artefakt ^ Definicija ^
|Cache|Privremene kopije HTML, JS, CSS, slika i API response.|
|Cookies|Pohranjeni važni podaci za autentikaciju, sesije, preference i tokene.|
|LocalStorage|Trajni podaci koje web app pohranjuje lokalno – najčešće postavke, flagovi, stanja i sl.|
|SessionStorage|Privremena pohrana podataka koja se briše nakon zatvaranja taba.|
|IndexedDB|Kod modernih web aplikacija predstavlja lokalnu bazu podataka.|
|Network logs|Zapisi svih API poziva i odgovora dok je tab web stranice otvoren.|
|Browser History|Posjećeni URL-ovi od strane korisnika.|
|Memory artefakti|Privremeni sadržaj prompta i odgovora na RAM-u.|
**Lokalni artefakti** su nam **vrlo važni u računalnoj forenzici kao početna točka** jer nam omogućuju:
* Rekonstrukciju aktivnosti korisnika
* Pronalazak tokena, ID sesija, API poziva
* Otkrivanje dijelova promptova i odgovora
* Dokaz korištenja određenog chatbota, kao i vremenske oznake
* Analizu arhitekture web aplikacija i njihovo ponašanje
Sve prethodno navedene artefakte je moguće pronaći **lokalno na računalu unutar sustava datoteka**. Istražili smo gdje se pohranjuju lokalni artefakti na Windows operacijskom sustavu. Podaci se najčešće nalaze na sljedećoj putanji:
C:\Users\\AppData\Local\Microsoft\Edge\User Data\Default
U primjeru smo provjerili lokalne artefakte za Microsoft Edge web preglednik ali je vrlo slična struktura i za ostale web preglednike. Svaki web preglednik stvara vlastiti folder unutar kojeg smješta lokalne podatke. Na slici ispod možemo vidjeti primjer strukture foldera gdje smo istaknuli neke od bitnijih foldera za računalnu forenziku.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:localartefactfilesystem_structure.png?nolink&600 |}}
\\
Osim što je moguće pronaći lokalne artefakte u sustavu datoteka, postoji **izravniji i lakši način za pregled postojećih artefakata u samom web pregledniku**. Koristimo skočni prozor u web pregledniku pod nazivom **DevTools** i on se sastoji od nekoliko tabova specifične namjene u pokrenutim web aplikacijama (__Elements, Application, Console, Network__, i dr.).
\\
{{ :racfor_wiki:seminari2025:promptanaliza:devtools.png?nolink&600 |}}
\\
Većina lokalnih artefakata se nalazi u tabu **Application** (LocalStorage, SessionStorage, Cookies, IndexedDB,…) Osim navedenih, za forenzičku analizu dobro će nam doći i mrežni pozivi koji se nalaze u tabu **Network** te ćemo omogućiti opciju Preserve logs kako nam se zapisi ne bi brisali.
U nastavku ćemo provesti praktičnu analizu artefakata na sva tri AI chatbota (ChatGPT, Copilot, Gemini) na istom postavljenom promptu („**Što je računalna forenzika?**“) te ćemo usporediti razlike i sličnosti između lokalnih podataka chatbota.
==== OpenAI ChatGPT ====
\\
Za početak __pošaljimo ChatGPT prompt „Što je računalna forenzika?“__ i pratimo **Network tab** kako bi smo vidjeli koje pozive šalje naš preglednik prema ChatGPT serveru i koje odgovore dobivamo.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptprompt.png?nolink&600 |}}
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptnetwork1.png?nolink&600 |}}
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptnetwork2.png?nolink&600 |}}
\\
U **kartici Response** možemo vidjeti prikaz tzv. **EventStream format** koji ChatGPT koristi **za slanje generiranog odgovora u dijelovima**. Ovaj format sadrži brojne informacije i vrlo je detaljan što nam uvelike pomaže u analizi. U nastavku navodimo neke ključne podatke koje možemo iščitati iz odgovora:
* resume_conversation_token – ovdje je pohranjen token ID i conversation ID koji nam omogućuje povezivanje s razgovorom
* author – sadrži role – određuje radi li se o systemskoj poruci, o user promptu ili assistant odgovoru našeg chatbota
* create_time – vremenski artefakt
* title – naslov razgovora
* chunk data – predstavljaju dijelove generiranog odgovora koje možemo lako iščitati
ChatGPT **pohranjuje razgovor i lokalno u IndexedDB** te je i tamo moguće pronaći prompt i odgovor. Navedeno možemo pronaći u **tabu Application** pod karticom IndexedDB kao na slici ispod.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptindexeddb.png?nolink&600 |}}
\\
U **LocalStorage** je moguće pronaći **ID korisnika i razgovora i druge podatke koje identificiraju korisnika**. Moguće je pronaći broj otvorenih razgovora te vrlo zanimljivo pronaći **povijest starih razgovora (engl. history)**. Povijest starih razgovora u LocalStorage moguće je pogledati na slici ispod.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptlocalstorage1.png?nolink&600 |}}
\\
Nažalost, ChatGPT ne pohranjuje ništa lokalno u Cache te nismo u mogućnosti ništa detaljnije analizirati.
==== Microsoft Copilot ====
\\
Za početak __pošaljimo Copilotu prompt „Što je računalna forenzika?“__ i pratimo **Network tab** kako bi smo vidjeli koje pozive šalje naš preglednik prema Copilot serveru i koje odgovore dobivamo.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:copilotprompt.png?nolink&600 |}}
\\
Na slici ispod možemo primijetiti da smo dobili **echo zahtjev/odgovor koji sadrži naš prompt** unutar response te je on poslan serveru.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:copilotnetworktab1.png?nolink&600 |}}
\\
{{ :racfor_wiki:seminari2025:promptanaliza:copilotnetworktab.png?nolink&600 |}}
\\
Nakon duljeg traženja i filtriranja sadržaja nismo uspjeli pronaći odgovor na naš prompt. Razlog leži u činjenici da Copilot **ne šalje generirani odgovor u klasičnom obliku preko http već koristi web stream odnosno koristi „lite“ streaming model koji renderira odgovor direktno u DOM bez lokalnog zapisa** te ga zato nismo mogli iščitati iz Networka.
Ako sada pogledamo u **tab Application** pod karticu **LocalStorage** onda možemo vidjeti dosta podataka koji se odnose na samog prijavljenog korisnika i mogu nam biti vrijedni kod identifikacije korisnika i njegove aktivnosti.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:copilotlocalstorage.png?nolink&600 |}}
\\
Od svih podataka možda najzanimljiviji su:
* Msal – spremljeni tokeni, homeAccountId, name, credential type i drugi podaci koji povezuju korisnika s Microsoft računom prijavljenog korisnika
* User.UserFirstName – osobni identifikator korisnika (ime koje je korisnik postavio)
* crossPromoFirstVisit – vremenski artefakt koji definira prvu posjetu Copilotu
* newConversationsStarted – brojač novih započetih razgovora – indikator aktivnosti korisnika
Nažalost, MS Copilot ne pohranjuje **ništa lokalno u IndexedDB, ni u Cache** te nismo u mogućnosti ništa detaljnije analizirati.
==== Google Gemini ====
\\
Za početak __pošaljimo Gemini prompt „Što je računalna forenzika?“__ i pratimo **Network tab**.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:geminiprompt.png?nolink&600 |}}
\\
Gemini za razliku od Copilota **vraća odgovor na zahtjev u obliku http response**. Na slici možemo vidjeti Response zahtjeva.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:gemininetwork_0.png?nolink&600 |}}
\\
{{ :racfor_wiki:seminari2025:promptanaliza:gemininetwork_1.png?nolink&600 |}}
\\
U **Response** se nalazi odgovor na poslani prompt u tzv. **streaming JSON formatu** koji služi **za isporuku generiranog odgovora u dijelovima**. Primjer jednog dijela odgovora možemo vidjeti u zapisu ispod.
[["wrb.fr",null,"[null,[\"c_7126d5fc1b3ef6be\",\"r_260d35dbe7068917\"],null,null,[[\"rc_d8dad263739ea1cf\",[\"**Računalna forenzika** (digitalna forenzika\"],null,null,null,null,true,null,[1],\"hr\",null,null,[null,null,null,null,null,null,[0],[]],null,null,true,null,null,null,null,null,[false],null,true,[],null,null,null,[]]],[\"Stenjevec, Zagreb, Croatia\",\"SWML_DESCRIPTION_FROM_YOUR_PLACES_HOME\",false,null,\"//www.google.com/maps/vt/data\\u003dokvWElNhflzWn1NnhBfDDqpoLDs-uQX4eMCXQyY632hoVdZ60OaTX5Ds9exeF47GUPzCz6UYgi7wpU1Gx2Rrmn_lzGYp4EA9wBDO5cVc9UA8UAXTMNEt2lw\"],null,null,\"HR\",null,null,null,null,null,false,null,null,null,null,\"en\",null,null,null,true,[null,[false,false]],null,[[[[null,[null,0,\"Računalna forenzika (digitalna forenzika\",[[0,19,[[null,null,null,null,2]]]]]]]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,true]"]]
Ovaj zapis nam otkriva puno zanimljivih detalja koje možemo iskoristiti u forenzici.
* c_7126d5fc1b3ef6be – conversation id – id razgovora
* r_260d35dbe7068917 – response id – id odgovora
* rc_d8dad263739ea1cf – chunk id – id pojedinog dijela generiranog odgovora
* "hr" – označuje jezik
* "Stenjevec, Zagreb, Croatia" – označuje približnu lokaciju
U **Cookies** se nalaze podaci koji povezuju korisnika s Google profilom, a koji nam potvrđuju prijavu korisnika.
Nažalost, Gemini **ne pohranjuje ništa lokalno u IndexedDB, ni u Cache, ni u LocalStorage** te nismo u mogućnosti ništa detaljnije analizirati.
==== Rezultati ====
\\
U tablici možemo pogledati usporedbu tri AI chatbota s obzirom na pohranu lokalnih podataka.
^ Komponente lokalne pohrane ^ ChatGPT ^ Copilot ^ Gemini ^
^ Network – prompt | + | + | + |
^ Network – odgovor | + | - | + |
^ LocalStorage | + | + | + |
^ IndexedDB | + | - | - |
^ Cache | - | - | - |
^ Cookies | + | + | + |
Iz tablice i praktične provjere možemo zaključiti da je **ChatGPT najbogatiji lokalnim artefaktima** jer sadrži prompt, odgovore, povijest i identifikatore korisnika. Gemini je do nedavno imao IndexedDB gdje je bio pohranjen prompt i odgovor pa se moglo lokalno doći do njega, ali trenutačno možemo samo iz mrežnih poziva. **Copilot je najrestriktivniji od svih**, sadrži vrlo malo lokalno pohranjenih podataka te nije moguća rekonstrukcija razgovora jer se odgovor nigdje ne zapisuje.
===== Rekonstrukcija podataka nakon brisanja razgovora =====
\\
U prethodnom poglavlju promatrali smo lokalne artefakte dok je razgovor još uvijek postojao u bazi AI chatbota. Pitanje je hoće li lokalni podaci ostati pohranjeni nakon uklanjanja razgovora u samo korisničkom sučelju. U poglavlju Pohrana promptova u cloud AI sustavima definirali smo kako se pohranjuju podaci na cloud serverima i što se događa s njima nakon što korisnik obriše sadržaj. Također smo napomenuli da audit logovi koji ostaju trajno pohranjeni u cloudu nisu dostupni običnim korisnicima. Iz tog razloga u ovom ćemo poglavlju razmotriti **što se događa s lokalnim podacima nakon brisanja razgovora i možemo li na temelju njih rekonstruirati razgovor**.
Praktičnu __analizu provest ćemo nad OpenAI ChatGPT__ jer je on jedini chatbot koji ima dovoljno lokalnih podataka da možemo primijetiti promjenu i pokušati rekonstruirati razgovor. Za početak __otvorimo ranije pokrenuti razgovor s pitanjem „što je računalna forenzika?“__ i pogledajmo što je sve trenutno lokalno pohranjeno.
Prvo u **IndexedDB**. Ondje su pohranjeni prompt i odgovor za taj razgovor te njegov id razgovora. Navedeno možemo pogledati na slici.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptbeforedelete.png?nolink&600 |}}
\\
Drugo provjerimo **LocalStorage**. Ovdje se nalazi puno podataka, ali nama su najzanimljiviji **povijest razgovora (cache history) te lastPageLoadDate i LoggedInUserMessageCount**. Navedeno je moguće pogledati na slici.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptbeforedeletelocalstorage_1.png?nolink&600 |}}
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptbeforedeletelocalstorage_2.png?nolink&600 |}}
\\
Nakon što smo pregledali sve lokalno pohranjene podatke vezane uz razgovor iz primjera, vrijeme je da __obrišemo razgovor u korisničkom sučelju te zatvorimo i ponovno otvorimo tab__.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptdelete.png?nolink&600 |}}
\\
Nakon brisanja razgovora u korisničkom sučelju te zatvaranja i ponovnog otvaranja web preglednika s OpenAI ChatGPT, odmah možemo vidjeti da se **u sidebaru AI chatbota više ne nalazi prethodno obrisani razgovor** „Računalna forenzika“. Ako sada provjerimo lokalno pohranjene podatke u web pregledniku pod DevTools onda možemo vidjeti sadržaj kao na slikama ispod.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptafterdelete.png?nolink&600 |}}
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptafterdeletelocalstorage_1.png?nolink&600 |}}
\\
{{ :racfor_wiki:seminari2025:promptanaliza:chatgptafterdeletelocalstorage_2.png?nolink&600 |}}
\\
Iz priloženih slika zaslona moguće je vidjeti da je **IndexedDB prazan** odnosno **više ne postoje podaci o našem razgovoru iz primjera**. Također ako pogledamo u **LocalStorage** **pod cache history** onda također možemo vidjeti da se ondje nalaze drugi razgovori, a **našeg razgovora iz primjera nema**. Promijenile su se i vrijednosti zadnjeg učitavanja razgovora **lastPageLoadDate**. **LoggedInUserMessageCount** je ostao nepromijenjen te iz njega možemo iščitati aktivnost korisnika, ali vrijednost sama po sebi ne daje preveliku sliku svega što se događalo.
Na samom početku smo bili spomenuli **Browser History** u kojem možemo pregledati **posljednje posjećene web stranice i njihova vremena**. Možemo pokušati iz povijesti rekonstruirati razgovor. Za početak otvorimo povijest.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:browserhistory.png?nolink&600 |}}
\\
U povijesti web preglednika možemo vidjeti __„Računalna forenzika“ sa chatgpt.com__. Ako pogledamo **datum, on odgovara datumu koji smo registrirali u localStorage prije brisanja razgovora**. Kako bismo provjerili sadržaj, otvaramo navedenu web stranicu. Odmah pri učitavanju dobivamo obavijest u crvenom okviru.
\\
{{ :racfor_wiki:seminari2025:promptanaliza:browserhistoryunable.png?nolink&600 |}}
\\
**Razgovor s tim conversation id nije moguće učitati**. Razlog je prethodno brisanje razgovora. Također **conversation id** u okviru nam **potvrđuje da se doista radi o razgovoru koji smo analizirali prije brisanja**.
Iz svega navedenog možemo zaključiti kako se **svi lokalni podaci vezani uz obrisani razgovor također brišu**. Drugim riječima, **nije moguća rekonstrukcija razgovora na temelju lokalne pohrane već nam je potreban pristup cloud pohrani na udaljenom serveru**.
Ipak, postoji još jedna mogućnost, a to je **RAM dump**. Nažalost i ova metoda **nije uvijek pouzdana jer ovisi o brojnim uvjetima**. Uvjeti koje je potrebno zadovoljiti su sljedeći:
* RAM dump dok je ChatGPT otvoren u pregledniku nakon brisanja
* RAM dump ako je tab s ChatGPT zatvoren, ali je web preglednik i dalje otvoren
Svi drugi uvjeti (zatvaranje web preglednika, gašenje računala) brišu sadržaj RAM-a i nije moguća rekonstrukcija razgovora.
===== Zaključak =====
\\
U ovom seminaru istražili smo **primjenu računalne forenzike na cloud AI chatbotovima**. Definirali smo **AI chatbota** kao računalni sustav baziran na LLM, a osnovna svrha je razumjeti korisničke upite i generirati prikladan odgovor u stvarnom vremenu. Razlikujemo dvije vrste AI chatbotova: **lokalni i cloud AI chatbotovi**.
Za računalnu forenziku su **ključni podaci koje pohranjuje browser lokalno i cloud na udaljenom računalu**, a nužni su za analizu i rekonstrukciju scenarija. Neki od važnijih lokalnih spremnika spomenutih u radu su: **Cache, IndexedDB, localStorage, Cookies, Network i RAM**. Analizu smo izvršili na tri dobro poznata cloud AI chatbota: **OpenAI ChatGPT, Microsoft Copilot i Google Gemini**.
Za cloud servere su nam najvažniji **audit logovi**. Oni su trajno pohranjeni kronološki zapisi aktivnosti u nekom sustavu koji bilježe korisničke radnje, sistemske događaje i promjene podataka. Nažalost, **kao obični korisnici ne možemo pristupiti navedenim zapisima u cloudu zbog sigurnosti**, ali postoje i određeni lokalni tragovi koji mogu biti početna točka u rekonstrukciji scenarija. Osim audit logova upoznali smo i način pohrane podataka o razgovoru u cloud bazama i odgovorili na neka od glavnih pitanja: **gdje i što se pohranjuje, koliko dugo se čuva, može li korisnik vidjeti povijest te što se događa nakon brisanja**.
**Lokalni podaci** iako oskudni ipak nam **mogu puno pomoći i usmjeriti nas na glavni trag u računalnoj forenzici**. Lokalni artefakti nam omogućuju rekonstrukciju aktivnosti korisnika, pronalazak tokena, ID sesija, API poziva, otkrivanje dijelova promptova i odgovora, dokaz korištenja određenog chatbota, kao i vremenske oznake te analizu arhitekture web aplikacija i njihovo ponašanje.
Iz praktične provjere na vlastitom primjeru zaključili smo da je **ChatGPT najbogatiji lokalnim artefaktima** jer sadrži prompt, odgovore, povijest i identifikatore korisnika. **Copilot se pokazao najrestriktivniji** od svih, sadrži vrlo malo lokalno pohranjenih podataka te nije moguća rekonstrukcija razgovora jer se odgovor nigdje ne zapisuje.
Na kraju smo još provjerili **što se događa s lokalnim podacima nakon brisanja razgovora** u korisničkom sučelju AI chatbota. Zaključili smo kako se **svi lokalni podaci vezani uz obrisani razgovor također brišu**. Drugim riječima, nije moguća rekonstrukcija razgovora na temelju lokalne pohrane već nam je potreban pristup cloud pohrani na udaljenom serveru.
Cijelo istraživanje nam je pokazalo da se dio podataka pohranjuje lokalno na korisnikovu računalu te ih je moguće analizirati. Ipak, **glavnina sadržaja i detalja o razgovoru se nalazi na cloud serverima** kojima običan korisnik, bez pravnog naloga nema pravo pristupiti. No i ova manja količina lokalnih podataka može nam poslužiti kao početna točka za daljnju računalnu forenziku.
===== Literatura =====
\\
[1] [[https://help.openai.com/en/articles/8983778-chat-and-file-retention-policies-in-chatgpt|OpenAI. Dokumentacija. Chat and File Retention Policies in ChatGPT ]]
[2] [[https://www.androidauthority.com/does-chatgpt-save-data-conversations-3310883|Android Authority. Calvin Wankhede. Članak. Does ChatGPT save your data? Here's how to delete your conversations and opt out, 2025 ]]
[3] [[https://support.microsoft.com/en-us/topic/privacy-faq-for-microsoft-copilot-27b3a435-8dc9-4b55-9a4b-58eeb9647a7f|Microsoft. Dokumentacija. Privacy FAQ for Microsoft Copilot ]]
[4] [[https://learn.microsoft.com/en-us/purview/retention-policies-copilot|Microsoft. Dokumentacija. Learn about retention for Copilot & AI apps ]]
[5] [[https://4sysops.com/archives/managing-microsoft-365-copilot-data-with-microsoft-purview-retention-policies|4sysops. Vignesh Mudliar. Članak. Managing Microsoft 365 Copilot data with Microsoft Purview retention policies, 2024 ]]
[6] [[https://ai.google.dev/gemini-api/docs/logs-policy|Google GeminiAPI. Dokumentacija. Data Logging and Sharing]]
[7] [[https://www.howtogeek.com/does-google-gemini-keep-chat-data|HowToGeek. Katie Rees. Članak. Does Google Gemini Keep Your Chat Data?, 2024 ]]
[8] [[https://www.graphapp.ai/blog/what-are-audit-logs-a-comprehensive-guide|GraphApp. Tyler Davis. Blog. What Are Audit Logs: A Comprehensive Guide, 2025]]
[9] [[https://www.fer.unizg.hr/predmet/racfor|FER. Juraj Petrović. Predrag Pale. Predmetni repozitorij - prezentacije. Računalna forenzika, 2025]]