name: footer-template layout: true .footer[ Av Max Wilén & Jacob Ringfjord ] --- class: center, middle # Automatisk *versionsjämförelse* och *ändrings-kategorisering*
- endast med tillgång till binärerna
--- # Agenda - **Arbetsprocess** - **Introduktion** - **Metod** - **Tidigare arbete** - **Resultat** - **Diskussion** - **Framtida arbete och utmaningar** - **DEMO** --- class: breadcrumb > **Arbetsprocess** → Introduktion → Metod → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar ## Arbetsprocess - Träffade Jesper på en gästföreläsning på LiU - Projektplan påbörjades i en kurs under november-december - Fått ta del av ett tidigare kandidatarbete handlett av Jesper - Veckovisa möten från slutet av januari --- class: breadcrumb > ~~Arbetsprocess~~ → **Introduktion** → Metod → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar ## Introduktion **Problem:** Kunskap och antaganden från tidigare analys kan bli föråldrad vid nya versioner **Syfte:** Utveckla en metod för detektering och kategorisering av kodändringar *(Fokus ligger på Android. Signal-Android används som testdata)* **Bidrag:** Effektivisera ad-hoc processen genom att snabbt kunna identifiera ändringarna som påverkar den forensiska analysen
>[!Important] > **Viktigt** >
- Inga forensiska verktyg har använts. >
- Projektet fokuserar enbart på jämförelse av Android-binärer --- class: middle, center # Metod --- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → **Metod** → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar >
> >↳ **Översikt** → Detektera ändringar → Kategorisering → Evaluering ## Översikt >[!check] > **Framtagen pipeline** >
>
>- 3 olika moduler används för att generera en HTML rapport >
>
>- Fokus på Android-APKer, men Ghidriff/Ghidra stödjer fler arkitekturer
--- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → **Metod** → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar >
> >↳ ~~Översikt~~ → **Detektera ändringar** → Kategorisering → Evaluering ## Detektera ändringar - **Efter bakgrundsarbete valde vi Ghidriff, ett Python-baserat verktyg som använder Ghidra-APIet** *(headless)* - **Ghidriff kan varken kategorisera eller ranka ändringar** - **Ghidriff producerar en detaljerat output** - Vi har kunna fokusera på att arbeta med datan istället för att extrahera den - Inga ändringar har behövt göras i verktyget. Det har kunnat integreras i vårt egna verktyg
--- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → **Metod** → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar >
> >↳ ~~Översikt~~ → **Detektera ändringar** → Kategorisering → Evaluering ## Detektera ändringar
>[!info] > Så arbetar Ghidriff >
>
>*1)* Låter Ghidra utföra binäranalys >
>*2)* Använder sig av Ghidras **Version Tracking (VT) för diffing** på analysdatan. >Mha Ghidras API:er körs olika **"correlators" som föreslår matchingar mellan funktioner**. >
>*3)* Ghidriff skriver ut analysdata i `json`, `html` och `md` *(samma data)*. Vi tittar enbart på datan i `json` -filerna.
flowchart LR a(old binary - classes.dex-v1) --> b[GhidraDiffEngine] c(new binary - classes.dex-v2) --> b b --> e(Ghidra Project Files) b --> diffs_output_dir subgraph diffs_output_dir direction LR i(classes.dex-classes.dex.ghidriff.md) h(classes.dex-classes.dex.ghidriff.json) j(classes.dex-classes.dex.ghidriff.html) end
--- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → **Metod** → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar >
> >↳ ~~Översikt~~ → ~~Detektera ändringar~~ → **Kategorisering** → Evaluering ## Kategorisering >[!info] > Så kategoriserar vi >
>
>- **Syntax matching med hjälp av reguljära uttryck** >
>
>- **Fördefinierade kategorier med tillhörande keywords**
>> Delas upp i två typer av kategorier:
Kritiska
Operationer som har **större** sannolikhet att påverka forensiska verktyg
Icke-kritiska
Operationer som har **mindre** sannolikhet att påverka forensiska verktyg
--- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → **Metod** → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar >
> >↳ ~~Översikt~~ → ~~Detektera ändringar~~ → **Kategorisering** → Evaluering ## Kategorisering | *Kritisk* **kategori** | **Ändringar i..** | |------------------------|---------------------------| | `Data storage` | ..datastruktur, nya läsningar och skrivningar, etc.|
| `File write` | ..tillägg eller borttagning av filer.|
| `Logging` | ..vad, var, när och hur data loggas.|
| `Authentication` | ..in/ut-loggningsprocesser, sessionshantering, etc.|
| `Error handling` | ..hur fel och undantag fångas, hanteras eller loggas, etc.|
| `Cryptographic` | ..krypteringsalg., nyckelhantering, hashmetoder, etc.|
--- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → **Metod** → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar >
> >↳ ~~Översikt~~ → ~~Detektera ändringar~~ → **Kategorisering** → Evaluering ## Kategorisering | *Icke-kritisk* **kateg.** | **Ändringar i..** | |------------------------|---------------------------| | `UI update` | ..användargränssnitt (ex. Views, layouter, etc.) |
| `Network call` | ..nätverksoperationer, API-anrop, Endpoints|
| `Library function` | ..externa bibliotekspaket.|
| `Text manipulation` | ..textsträngar, promptar, etc. *(snabb ändring krävs)*|
--- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → **Metod** → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar >
> >↳ ~~Översikt~~ → ~~Detektera ändringar~~ → **Kategorisering** → Evaluering ## Kategorisering
>[!info] >Förtydligande >
>**"Normala"**: Ord som endast är relevanta i en kategori, >
>**"Tvetydiga"**: Ord som med rimlighet kan finnas i flera kategorier. --- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → **Metod** → Tidigare arbete → Resultat → Diskussion → Framtida arbete och utmaningar >
> >↳ ~~Översikt~~ → ~~Detektera ändringar~~ → ~~Kategorisering~~ → **Evaluering** ## Evaluering **Varje ändring** (metod/funktion) **blir tilldelad en poäng.** Påverkande faktorer - Antal tilldelade kategorier - “Normala” ord får 1p - “Tvetydiga” ord får 0.5p
**Syfte:** De ändringar med mest relevant data ska hamna först --- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → ~~Metod~~ → **Tidigare arbete** → Resultat → Diskussion → Framtida arbete och utmaningar ## Jämförelse mot tidigare arbete >[!note] > **Tidigare arbete** >
>
>**Kategorisering baserad på regex med nyckelord** >
>- Saknades dock kategorier → En lista med "viktiga" ord >
>
>**Inget GUI** >[!check] > **Vår metod** >
>
>**Mer djupgående** >
>- Kategoriseringen använder sig av dekompilerad P-code från Ghidra för kategorisering av kritiska operationer >
>- Subkategorier för intressant och icke-intressanta ändringar >
>- Större mängd relevant data presenterad för användaren >
>
>**HTML-Rapport** *(genererad vid körning)* >
>- Inkluderar diffar i den dekompilerad P-code:en >
>- Enkelt att söka, sortera och filtrera bland intressanta ändringar >
>
>**Mer konkret resultat** >
>- Siffror på träffsäkerhet för nyckelord och kategorier *(finns i rapport)* --- class: middle, center # Resultat --- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → ~~Metod~~ → ~~Tidigare arbete~~ → **Resultat** → Diskussion → Framtida arbete och utmaningar >
> >↳ **Översikt** → Träffsäkerhet (kategorier) ## Översikt
>[!question] >**Test data:** Android version av Signal >[!info] >Resultatet är framtaget genom **jämförelse av pipeline-resultat med manuell analys av källkoden** (3 versions-släpp)
>[!check] >Inhämtade resultat >
>**91.4%** av ändringarna detekterades >
>
>**78.6%** av dessa fick rätt status >
>
>**74.3%** fick rätt kategori >
> Kritiska **77.9%** >
> Icke-kritisk **69.8%** >
>
>**3.3%** av unika ändringar kategoriseras som uncategorized
--- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → ~~Metod~~ → ~~Tidigare arbete~~ → **Resultat** → Diskussion → Framtida arbete och utmaningar >
> >↳ ~~Översikt~~ → **Träffsäkerhet (kategorier)** ## Träffsäkerhet (kategorier)
>[!question] >**Varför får kategorierna `Cryptographic`, `File write` och `Text manipulation` 100% fel träffar?** >
>
>**1)** Om kategorin inte finns i källkods-ändringarna kommer det påverka resultatet pga binärt sätt att redovisa resultat. >
>
>**2)** Resultatet visar att träffsäkerheten främst påverkas av hur många korrekta träffar som görs. Alla kategorier har en liknande mängd inkorrekta matchningar *(möjlig konsekvens av sättet vi hämtar resultatet)* --- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → ~~Metod~~ → ~~Tidigare arbete~~ → ~~Resultat~~ → **Diskussion** → Framtida arbete och utmaningar ## Diskussionspunkter >[!tip] >Relevanta för er >
>
>- **Effektiv negligering av irrelevanta ändringar** *(hög träffsäkerhet av UI-ändringar och nätverksanrop)* >
>
>- **Externa negativa påverkningar**: Vissa `.dex` -filer går aldrig igenom Ghidra/Ghidriff. **Oklart varför!**
- **Subjektiv manuell analys av källkod skapar tveksamheter i resultatet** *(små mängder sampel punkter → Mer tillförlitligt vid större mängd)* - Svårt att hitta testdata där alla kategorier blir representerade - **Vad är en korrekt kategorisering?** - +/- spel där resultatet är lite skevt åt båda håll --- class: breadcrumb > ~~Arbetsprocess~~ → ~~Introduktion~~ → ~~Metod~~ → ~~Tidigare arbete~~ → ~~Resultat~~ → ~~Diskussion~~ → **Framtida arbete och utmaningar** ## Framtida arbeten och utmaningar
1) Förbättring av pipeline
Titta på rekursiva funktionsanrop för att få hela kedjan.
ML för kategorisering
2) Säkrare resultat
Gå ifrån en manuell analys för identifiering av korrekt data.
Med ML?
Köra vår kategorisering på källkoden?
--- class: middle, center # Demo!