mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md',
This commit is contained in:
parent
11bef5e598
commit
4bb0d7d654
147
src/AI/AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md
Normal file
147
src/AI/AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
# AI-Assisted Fuzzing & Automated Vulnerability Discovery
|
||||||
|
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Modele językowe (LLM) mogą znacznie zwiększyć efektywność tradycyjnych procesów badania podatności, generując semantycznie bogate dane wejściowe, rozwijając gramatyki, analizując dane o awariach, a nawet proponując poprawki wielobugowe. Ta strona zbiera najskuteczniejsze wzorce zaobserwowane podczas finałów AI Cyber Challenge (AIxCC) organizowanych przez DARPA oraz innych publicznych badań.
|
||||||
|
|
||||||
|
To, co następuje, nie jest opisem jednego konkretnego systemu konkursowego, lecz abstrakcją technik, abyś mógł je odtworzyć w swoich własnych procesach.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. LLM-Generated Seed Inputs
|
||||||
|
|
||||||
|
Tradycyjne fuzzery oparte na pokryciu (AFL++, libFuzzer, Honggfuzz…) zaczynają od małego zbioru nasion i mutują bajty w sposób losowy. Gdy format danych wejściowych jest złożony (SQL, URL, niestandardowe protokoły binarne), losowe mutacje zazwyczaj łamią składnię, zanim zostaną osiągnięte interesujące gałęzie.
|
||||||
|
|
||||||
|
LLM mogą rozwiązać ten problem początkowy, emitując *generatory nasion* – krótkie skrypty, które generują **poprawne składniowo, ale istotne z punktu widzenia bezpieczeństwa dane wejściowe**. Na przykład:
|
||||||
|
```prompt
|
||||||
|
SYSTEM: You are a helpful security engineer.
|
||||||
|
USER:
|
||||||
|
Write a Python3 program that prints 200 unique SQL injection strings targeting common anti-pattern mistakes (missing quotes, numeric context, stacked queries). Ensure length ≤ 256 bytes / string so they survive common length limits.
|
||||||
|
```
|
||||||
|
|
||||||
|
```python
|
||||||
|
# gen_sqli_seeds.py (truncated)
|
||||||
|
PAYLOADS = [
|
||||||
|
"1 OR 1=1 -- ",
|
||||||
|
"' UNION SELECT NULL,NULL--",
|
||||||
|
"0; DROP TABLE users;--",
|
||||||
|
...
|
||||||
|
]
|
||||||
|
for p in PAYLOADS:
|
||||||
|
print(p)
|
||||||
|
```
|
||||||
|
Uruchom raz i wprowadź wynik bezpośrednio do początkowego korpusu fuzzera:
|
||||||
|
```bash
|
||||||
|
python3 gen_sqli_seeds.py > seeds.txt
|
||||||
|
afl-fuzz -i seeds.txt -o findings/ -- ./target @@
|
||||||
|
```
|
||||||
|
Korzyści:
|
||||||
|
1. Ważność semantyczna → głębsze pokrycie na wczesnym etapie.
|
||||||
|
2. Możliwość regeneracji: dostosuj prompt, aby skupić się na XSS, przejściu ścieżek, binarnych blobach itp.
|
||||||
|
3. Tanie (< 1 ¢ z GPT-3.5).
|
||||||
|
|
||||||
|
### Wskazówki
|
||||||
|
* Poleć modelowi, aby *dywersyfikował* długość i kodowanie ładunków (UTF-8, URL-encoded, UTF-16-LE), aby obejść powierzchowne filtry.
|
||||||
|
* Poproś o *pojedynczy samodzielny skrypt* – unika problemów z formatowaniem JSON.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Fuzzing z ewolucją gramatyki
|
||||||
|
|
||||||
|
Bardziej zaawansowaną odmianą jest pozwolenie LLM na **ewolucję gramatyki** zamiast konkretnych nasion. Przepływ pracy (wzorzec „Grammar Guy”) to:
|
||||||
|
|
||||||
|
1. Wygeneruj początkową gramatykę ANTLR/Peach/LibFuzzer za pomocą promptu.
|
||||||
|
2. Fuzzuj przez N minut i zbierz metryki pokrycia (krawędzie / bloki trafione).
|
||||||
|
3. Podsumuj nieodkryte obszary programu i przekaż podsumowanie z powrotem do modelu:
|
||||||
|
```prompt
|
||||||
|
Poprzednia gramatyka wyzwoliła 12 % krawędzi programu. Funkcje, które nie zostały osiągnięte: parse_auth, handle_upload. Dodaj / zmodyfikuj zasady, aby pokryć te.
|
||||||
|
```
|
||||||
|
4. Scal nowe zasady, ponownie fuzzuj, powtarzaj.
|
||||||
|
|
||||||
|
Szkielet pseudo-kodu:
|
||||||
|
```python
|
||||||
|
for epoch in range(MAX_EPOCHS):
|
||||||
|
grammar = llm.refine(grammar, feedback=coverage_stats)
|
||||||
|
save(grammar, f"grammar_{epoch}.txt")
|
||||||
|
coverage_stats = run_fuzzer(grammar)
|
||||||
|
```
|
||||||
|
Kluczowe punkty:
|
||||||
|
* Utrzymuj *budżet* – każde udoskonalenie wykorzystuje tokeny.
|
||||||
|
* Użyj instrukcji `diff` + `patch`, aby model edytował, a nie przepisywał.
|
||||||
|
* Zatrzymaj się, gdy Δcoverage < ε.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Generowanie PoV (Eksploatacja) oparte na agentach
|
||||||
|
|
||||||
|
Po znalezieniu awarii nadal potrzebujesz **dowodu na podatność (PoV)**, który deterministycznie ją wyzwala.
|
||||||
|
|
||||||
|
Skalowalne podejście polega na uruchomieniu *tysięcy* lekkich agentów (<process/thread/container/prisoner>), z których każdy działa na innym LLM (GPT-4, Claude, Mixtral) lub ustawieniu temperatury.
|
||||||
|
|
||||||
|
Pipeline:
|
||||||
|
1. Analiza statyczna/dynamiczna produkuje *kandydatów na błędy* (struktura z PC awarii, fragmentem wejściowym, komunikatem sanitarno).
|
||||||
|
2. Orkiestrator rozdziela kandydatów do agentów.
|
||||||
|
3. Kroki rozumowania agenta:
|
||||||
|
a. Powtórz błąd lokalnie za pomocą `gdb` + wejście.
|
||||||
|
b. Sugeruj minimalny ładunek eksploatacyjny.
|
||||||
|
c. Waliduj eksploatację w piaskownicy. Jeśli sukces → zgłoś.
|
||||||
|
4. Nieudane próby są **ponownie kolejkowane jako nowe ziarna** do fuzzingu pokrycia (pętla sprzężenia zwrotnego).
|
||||||
|
|
||||||
|
Zalety:
|
||||||
|
* Równoległość ukrywa niestabilność pojedynczego agenta.
|
||||||
|
* Automatyczne dostosowywanie temperatury / rozmiaru modelu na podstawie zaobserwowanej stopy sukcesu.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Ukierunkowany Fuzzing z Dostosowanymi Modelami Kodów
|
||||||
|
|
||||||
|
Dostosuj model o otwartych wagach (np. Llama-7B) na źródłach C/C++ oznaczonych wzorcami podatności (przepełnienie całkowite, kopiowanie bufora, formatowanie ciągu). Następnie:
|
||||||
|
|
||||||
|
1. Uruchom analizę statyczną, aby uzyskać listę funkcji + AST.
|
||||||
|
2. Zadaj modelowi pytanie: *„Podaj wpisy słownika mutacji, które prawdopodobnie złamią bezpieczeństwo pamięci w funkcji X”*.
|
||||||
|
3. Wstaw te tokeny do niestandardowego `AFL_CUSTOM_MUTATOR`.
|
||||||
|
|
||||||
|
Przykładowy wynik dla opakowania `sprintf`:
|
||||||
|
```
|
||||||
|
{"pattern":"%99999999s"}
|
||||||
|
{"pattern":"AAAAAAAA....<1024>....%n"}
|
||||||
|
```
|
||||||
|
Empirycznie skraca to czas do awarii o >2× na rzeczywistych celach.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. AI-Guided Patching Strategies
|
||||||
|
|
||||||
|
### 5.1 Super Patches
|
||||||
|
Poproś model o *grupowanie* sygnatur awarii i zaproponowanie **jednej łatki**, która usuwa wspólną przyczynę. Zgłoś raz, napraw kilka błędów → mniej kar za dokładność w środowiskach, gdzie każda błędna łatka kosztuje punkty.
|
||||||
|
|
||||||
|
Zarys podpowiedzi:
|
||||||
|
```
|
||||||
|
Here are 10 stack traces + file snippets. Identify the shared mistake and generate a unified diff fixing all occurrences.
|
||||||
|
```
|
||||||
|
### 5.2 Współczynnik spekulacyjnych poprawek
|
||||||
|
Zaimplementuj kolejkę, w której potwierdzone poprawki zweryfikowane przez PoV i *spekulacyjne* poprawki (bez PoV) są przeplatane w stosunku 1:N dostosowanym do zasad punktacji (np. 2 spekulacyjne : 1 potwierdzona). Model kosztów monitoruje kary w porównaniu do punktów i samodzielnie dostosowuje N.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Złożenie wszystkiego w całość
|
||||||
|
System CRS (Cyber Reasoning System) end-to-end może połączyć komponenty w ten sposób:
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph Discovery
|
||||||
|
A[LLM Seed/Grammar Gen] --> B[Fuzzer]
|
||||||
|
C[Fine-Tuned Model Dicts] --> B
|
||||||
|
end
|
||||||
|
B --> D[Crash DB]
|
||||||
|
D --> E[Agent PoV Gen]
|
||||||
|
E -->|valid PoV| PatchQueue
|
||||||
|
D -->|cluster| F[LLM Super-Patch]
|
||||||
|
PatchQueue --> G[Patch Submitter]
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
## Odniesienia
|
||||||
|
* [Trail of Bits – AIxCC finały: Historia taśmy](https://blog.trailofbits.com/2025/08/07/aixcc-finals-tale-of-the-tape/)
|
||||||
|
* [CTF Radiooo wywiady z finalistami AIxCC](https://www.youtube.com/@ctfradiooo)
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Główne Algorytmy Uczenia Maszynowego
|
## Główne Algorytmy Uczenia Maszynowego
|
||||||
|
|
||||||
Najlepszym punktem wyjścia do nauki o AI jest zrozumienie, jak działają główne algorytmy uczenia maszynowego. Pomoże to zrozumieć, jak działa AI, jak go używać i jak je atakować:
|
Najlepszym punktem wyjścia do nauki o AI jest zrozumienie, jak działają główne algorytmy uczenia maszynowego. Pomoże to zrozumieć, jak działa AI, jak go używać i jak go atakować:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
./AI-Supervised-Learning-Algorithms.md
|
./AI-Supervised-Learning-Algorithms.md
|
||||||
@ -42,7 +42,7 @@ AI-Risk-Frameworks.md
|
|||||||
|
|
||||||
### Bezpieczeństwo Podpowiedzi AI
|
### Bezpieczeństwo Podpowiedzi AI
|
||||||
|
|
||||||
LLM sprawiły, że użycie AI eksplodowało w ostatnich latach, ale nie są one doskonałe i mogą być oszukiwane przez wrogie podpowiedzi. To bardzo ważny temat, aby zrozumieć, jak używać AI bezpiecznie i jak je atakować:
|
LLM-y spowodowały eksplozję użycia AI w ostatnich latach, ale nie są doskonałe i mogą być oszukiwane przez wrogie podpowiedzi. To bardzo ważny temat, aby zrozumieć, jak używać AI bezpiecznie i jak go atakować:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
AI-Prompts.md
|
AI-Prompts.md
|
||||||
@ -50,7 +50,7 @@ AI-Prompts.md
|
|||||||
|
|
||||||
### RCE Modeli AI
|
### RCE Modeli AI
|
||||||
|
|
||||||
Bardzo powszechne jest, że deweloperzy i firmy uruchamiają modele pobrane z Internetu, jednak samo załadowanie modelu może być wystarczające do wykonania dowolnego kodu w systemie. To bardzo ważny temat, aby zrozumieć, jak używać AI bezpiecznie i jak je atakować:
|
Bardzo powszechne jest, że deweloperzy i firmy uruchamiają modele pobrane z Internetu, jednak samo załadowanie modelu może być wystarczające do wykonania dowolnego kodu w systemie. To bardzo ważny temat, aby zrozumieć, jak używać AI bezpiecznie i jak go atakować:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
AI-Models-RCE.md
|
AI-Models-RCE.md
|
||||||
@ -64,4 +64,10 @@ MCP (Model Context Protocol) to protokół, który pozwala klientom agentów AI
|
|||||||
AI-MCP-Servers.md
|
AI-MCP-Servers.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
|
### Fuzzing Wspomagany AI i Zautomatyzowane Odkrywanie Wrażliwości
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -825,6 +825,7 @@
|
|||||||
|
|
||||||
# 🤖 AI
|
# 🤖 AI
|
||||||
- [AI Security](AI/README.md)
|
- [AI Security](AI/README.md)
|
||||||
|
- [Ai Assisted Fuzzing And Vulnerability Discovery](AI/AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md)
|
||||||
- [AI Security Methodology](AI/AI-Deep-Learning.md)
|
- [AI Security Methodology](AI/AI-Deep-Learning.md)
|
||||||
- [AI MCP Security](AI/AI-MCP-Servers.md)
|
- [AI MCP Security](AI/AI-MCP-Servers.md)
|
||||||
- [AI Model Data Preparation](AI/AI-Model-Data-Preparation-and-Evaluation.md)
|
- [AI Model Data Preparation](AI/AI-Model-Data-Preparation-and-Evaluation.md)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user