Skip to content

beagle-team/beagle

Repository files navigation

WEE - Web Evolutionary Exploiting

Approccio

  1. Contratti
    1. Generazione dei contratti per le vulnerabilità
    2. Inferenza contratti
  2. CFG sito
    1. Generazione grafo con le pagine del sito
    2. Calcolo delle distanze dai bersagli
  3. Generazione sequenze di attacco
    1. Generazione popolazione iniziale (lista di liste di azioni)
      • Tracce composte da azioni random
      • Tracce utente (Selenium IDE)
    2. Algoritmo evolutivo per avvicinarsi alla vulnerabilità
      • Calcolo fitness
        • (-$\infty$, 1] -- Distanza dalla chiamata
        • (1, 0] -- Distanza su parametri

Contesto

  • Obiettivo: generazione tracce di esecuzione invece esplorazione di pagine (è importante anche come si arriva alla pagina, vedi stato interno del server)
    • Generiamo tracce perchè spesso è importante anche lo stato interno del sistema (vedi pattern di pagamento)
    • Problema: generare tracce minime (da affrontare in un secondo momento)

Possibili obiezioni

  • Tanto vale usare un crawler tradizionale!
    • No, il suo obiettivo è esplorare le pagine e farne una lista, senza fare tracce di esecuzione
  • Usiamo mutational fuzzing invece di GA
    • Mutational fuzzing ha senso quando sai come va fatta una cosa, GA serve quando sai cosa devi fare, ma non sai come.
  • Ha senso fare cross-over della sequenza? Cosa mi porta?
    • Worst-case scenario, mantengo le vecchie sequenze (ma rischio minimi locali)
    • Best-case scenario, riesco a comporre le sequenze relative a due pagine diverse

TODO

  • Generazione tracce di test
    • Selenium
    • Puppeteer
  • Target
    • custom Reflected XSS(target-site)
      • plain html
        • Pagine HTML sparse collegate da link
        • Libreria di Template non sicura in PHP
      • jQuery
        • Pagine che si includono usando $.get
      • AngularJS
    • custom Stored XSS (case-study)
      • plain html
        • Pagina con form che salva in $_SESSION
        • Pagina che recupera il valore in $_SESSION
  • Algoritmo genetico
    • Scelta libreria
      • Implementazione custom in Python
      • DEAP
    • Calibrazione algoritmo
      • Scegliere alfabeto azioni
        • Una tra:
          • {click, type, scroll, wait}: alfabeto semplice, non richiede conoscenza della pagina, ma lo spazio di possibilità potrebbe essere troppo ampio
          • {interazione contestuale con elementi della pagina}: alfabeto complesso e context-sensitive, richiede conoscenza della pagina
        • Definire encoding delle azioni
        • Definire lunghezza tracce
      • Scegliere possibili mutazioni
        • Generazione traccia "sana" (sane.py)
        • Generazione traccia di attacco (exploit.py)
        • Guardare quali mutazioni servono per passare da una all'altra
          • Normalmente la traccia di movimento è la stessa, mentre cambia il payload (quindi cambiano i blocchi TYPE)
        • Scegliere il numero minimo di mutazioni
      • Calcolo fitness
        • Privilegiare sequenze più corte
          • Con Stored, non sempre la sequenza più corta è la migliore
          • Spareggio fra sequenze di azioni che generano lo stesso percorso
      • Scelta popolazione iniziale
        • Random
        • Tracce "sane" per il sito
        • Tracce di attacco per un altro sito
      • Dimensionare valori
        • dimensione popolazione iniziale
        • cross-over
        • mutation rate
  • Dati sperimentali

Link utili

About

A PoC for "Why Charles Can Pen-test: an Evolutionary Approach to Vulnerability Testing"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors