AI-Assisted Fuzzing & Automated Vulnerability Discovery

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

๊ฐœ์š”

๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM)์€ ์˜๋ฏธ์ ์œผ๋กœ ํ’๋ถ€ํ•œ ์ž…๋ ฅ์„ ์ƒ์„ฑํ•˜๊ณ , ๋ฌธ๋ฒ•์„ ๋ฐœ์ „์‹œํ‚ค๋ฉฐ, ์ถฉ๋Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๋ก ํ•˜๊ณ , ์‹ฌ์ง€์–ด ๋‹ค์ค‘ ๋ฒ„๊ทธ ํŒจ์น˜๋ฅผ ์ œ์•ˆํ•จ์œผ๋กœ์จ ์ „ํ†ต์ ์ธ ์ทจ์•ฝ์  ์—ฐ๊ตฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€๋Š” DARPA์˜ AI ์‚ฌ์ด๋ฒ„ ์ฑŒ๋ฆฐ์ง€(AIxCC) ๊ฒฐ์Šน ๋ฐ ๊ธฐํƒ€ ๊ณต๊ฐœ ์—ฐ๊ตฌ์—์„œ ๊ด€์ฐฐ๋œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ํŒจํ„ด์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‚ด์šฉ์€ ํŠน์ • ๊ฒฝ์Ÿ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์•„๋‹ˆ๋ผ, ์—ฌ๋Ÿฌ๋ถ„์ด ์ž์‹ ์˜ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ์ˆ ์˜ ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค.


1. LLM-์ƒ์„ฑ ์‹œ๋“œ ์ž…๋ ฅ

์ „ํ†ต์ ์ธ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ธฐ๋ฐ˜ ํผ์ €(AFL++, libFuzzer, Honggfuzzโ€ฆ)๋Š” ์ž‘์€ ์‹œ๋“œ ์ง‘ํ•ฉ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๋ฐ”์ดํŠธ๋ฅผ ๋งน๋ชฉ์ ์œผ๋กœ ๋ณ€ํ˜•ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ์ž…๋ ฅ ํ˜•์‹์ด ๋ณต์žกํ•  ๋•Œ(SQL, URL, ์‚ฌ์šฉ์ž ์ •์˜ ์ด์ง„ ํ”„๋กœํ† ์ฝœ) ๋ฌด์ž‘์œ„ ๋ณ€ํ˜•์€ ์ข…์ข… ํฅ๋ฏธ๋กœ์šด ๋ถ„๊ธฐ๊ฐ€ ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ๊ตฌ๋ฌธ์„ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค.

LLM์€ ์‹œ๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋ฐฉ์ถœํ•˜์—ฌ ์ด ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€“ ๊ตฌ๋ฌธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด์ง€๋งŒ ๋ณด์•ˆ ๊ด€๋ จ ์ž…๋ ฅ์„ ์ถœ๋ ฅํ•˜๋Š” ์งง์€ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

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.
# gen_sqli_seeds.py (truncated)
PAYLOADS = [
"1 OR 1=1 -- ",
"' UNION SELECT NULL,NULL--",
"0; DROP TABLE users;--",
...
]
for p in PAYLOADS:
print(p)

ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๊ณ  ์ถœ๋ ฅ์„ ํผ์ €์˜ ์ดˆ๊ธฐ ์ฝ”ํผ์Šค์— ์ง์ ‘ ๊ณต๊ธ‰ํ•ฉ๋‹ˆ๋‹ค:

python3 gen_sqli_seeds.py > seeds.txt
afl-fuzz -i seeds.txt -o findings/ -- ./target @@

์ด์ :

  1. ์˜๋ฏธ์  ์œ ํšจ์„ฑ โ†’ ์ดˆ๊ธฐ ๋” ๊นŠ์€ ์ปค๋ฒ„๋ฆฌ์ง€.
  2. ์žฌ์ƒ์„ฑ ๊ฐ€๋Šฅ: ํ”„๋กฌํ”„ํŠธ๋ฅผ ์กฐ์ •ํ•˜์—ฌ XSS, ๊ฒฝ๋กœ ํƒ์ƒ‰, ์ด์ง„ ๋ธ”๋กญ ๋“ฑ์— ์ง‘์ค‘.
  3. ์ €๋ ดํ•จ (< 1 ยข with GPT-3.5).

ํŒ

  • ๋ชจ๋ธ์—๊ฒŒ ํŽ˜์ด๋กœ๋“œ ๊ธธ์ด์™€ ์ธ์ฝ”๋”ฉ (UTF-8, URL-encoded, UTF-16-LE)์„ ๋‹ค์–‘ํ™”ํ•˜๋„๋ก ์ง€์‹œํ•˜์—ฌ ํ‘œ๋ฉด์ ์ธ ํ•„ํ„ฐ๋ฅผ ์šฐํšŒํ•˜๋„๋ก ํ•˜์„ธ์š”.
  • ๋‹จ์ผ ์ž๊ธ‰์ž์กฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์š”์ฒญํ•˜์„ธ์š” โ€“ JSON ํ˜•์‹ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๋ฌธ๋ฒ• ์ง„ํ™” ํผ์ง•

๋” ๊ฐ•๋ ฅํ•œ ๋ณ€ํ˜•์€ LLM์ด ๊ตฌ์ฒด์ ์ธ ์‹œ๋“œ ๋Œ€์‹  ๋ฌธ๋ฒ•์„ ์ง„ํ™”ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ์šฐ (โ€œGrammar Guyโ€ ํŒจํ„ด)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ANTLR/Peach/LibFuzzer ๋ฌธ๋ฒ•์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. N ๋ถ„ ๋™์•ˆ ํผ์ง•ํ•˜๊ณ  ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฉ”ํŠธ๋ฆญ (ํžˆํŠธ๋œ ์—ฃ์ง€ / ๋ธ”๋ก)์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ปค๋ฒ„๋˜์ง€ ์•Š์€ ํ”„๋กœ๊ทธ๋žจ ์˜์—ญ์„ ์š”์•ฝํ•˜๊ณ  ์š”์•ฝ์„ ๋ชจ๋ธ์— ํ”ผ๋“œ๋ฐฑํ•ฉ๋‹ˆ๋‹ค:
์ด์ „ ๋ฌธ๋ฒ•์€ ํ”„๋กœ๊ทธ๋žจ ์—ฃ์ง€์˜ 12 %๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„๋‹ฌํ•˜์ง€ ์•Š์€ ํ•จ์ˆ˜: parse_auth, handle_upload. ์ด๋ฅผ ์ปค๋ฒ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ทœ์น™์„ ์ถ”๊ฐ€/์ˆ˜์ •ํ•˜์„ธ์š”.
  1. ์ƒˆ๋กœ์šด ๊ทœ์น™์„ ๋ณ‘ํ•ฉํ•˜๊ณ , ๋‹ค์‹œ ํผ์ง•ํ•˜๊ณ , ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

์˜์‚ฌ ์ฝ”๋“œ ์Šค์ผˆ๋ ˆํ†ค:

for epoch in range(MAX_EPOCHS):
grammar = llm.refine(grammar, feedback=coverage_stats)
save(grammar, f"grammar_{epoch}.txt")
coverage_stats = run_fuzzer(grammar)

์ฃผ์š” ์‚ฌํ•ญ:

  • ์˜ˆ์‚ฐ์„ ์œ ์ง€ํ•˜์„ธ์š” โ€“ ๊ฐ ์ˆ˜์ •์€ ํ† ํฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ์ด ๋‹ค์‹œ ์“ฐ๊ธฐ๋ณด๋‹ค๋Š” ํŽธ์ง‘ํ•˜๋„๋ก diff + patch ์ง€์นจ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ฮ”coverage < ฮต์ผ ๋•Œ ์ค‘์ง€ํ•˜์„ธ์š”.

3. ์—์ด์ „ํŠธ ๊ธฐ๋ฐ˜ PoV (์ต์Šคํ”Œ๋กœ์ž‡) ์ƒ์„ฑ

์ถฉ๋Œ์ด ๋ฐœ๊ฒฌ๋œ ํ›„์—๋Š” ์ด๋ฅผ ๊ฒฐ์ •์ ์œผ๋กœ ์œ ๋ฐœํ•˜๋Š” **์ทจ์•ฝ์  ์ฆ๋ช… (PoV)**์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ˆ˜์ฒœ ๊ฐœ์˜ ๊ฒฝ๋Ÿ‰ ์—์ด์ „ํŠธ (<process/thread/container/prisoner>)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ๊ฐ ๋‹ค๋ฅธ LLM (GPT-4, Claude, Mixtral) ๋˜๋Š” ์˜จ๋„ ์„ค์ •์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ:

  1. ์ •์ /๋™์  ๋ถ„์„์ด ๋ฒ„๊ทธ ํ›„๋ณด (์ถฉ๋Œ PC, ์ž…๋ ฅ ์Šฌ๋ผ์ด์Šค, ์ƒŒํƒ€์ด์ € ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•œ ๊ตฌ์กฐ์ฒด)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๊ฐ€ ํ›„๋ณด๋ฅผ ์—์ด์ „ํŠธ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์—์ด์ „ํŠธ ์ถ”๋ก  ๋‹จ๊ณ„: a. gdb + ์ž…๋ ฅ์œผ๋กœ ๋กœ์ปฌ์—์„œ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. b. ์ตœ์†Œํ•œ์˜ ์ต์Šคํ”Œ๋กœ์ž‡ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. c. ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์ต์Šคํ”Œ๋กœ์ž‡์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณต ์‹œ โ†’ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.
  4. ์‹คํŒจํ•œ ์‹œ๋„๋Š” ์ปค๋ฒ„๋ฆฌ์ง€ ํผ์ง•์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์‹œ๋“œ๋กœ ์žฌํ๋ฉ๋‹ˆ๋‹ค (ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„).

์žฅ์ :

  • ๋ณ‘๋ ฌํ™”๋Š” ๋‹จ์ผ ์—์ด์ „ํŠธ์˜ ์‹ ๋ขฐ์„ฑ ๋ถ€์กฑ์„ ์ˆจ๊น๋‹ˆ๋‹ค.
  • ๊ด€์ฐฐ๋œ ์„ฑ๊ณต๋ฅ ์— ๋”ฐ๋ผ ์˜จ๋„/๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ ์ž๋™ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

4. ๋ฏธ์„ธ ์กฐ์ •๋œ ์ฝ”๋“œ ๋ชจ๋ธ์„ ํ†ตํ•œ ์ง€ํ–ฅ ํผ์ง•

์ทจ์•ฝ์  ํŒจํ„ด (์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ, ๋ฒ„ํผ ๋ณต์‚ฌ, ํฌ๋งท ๋ฌธ์ž์—ด)๋กœ ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ C/C++ ์†Œ์Šค์—์„œ ์˜คํ”ˆ ์›จ์ดํŠธ ๋ชจ๋ธ (์˜ˆ: Llama-7B)์„ ๋ฏธ์„ธ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ:

  1. ์ •์  ๋ถ„์„์„ ์‹คํ–‰ํ•˜์—ฌ ํ•จ์ˆ˜ ๋ชฉ๋ก + AST๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  2. ๋ชจ๋ธ์— ํ”„๋กฌํ”„ํŠธ: โ€œํ•จ์ˆ˜ X์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ ๊นจ๋œจ๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ณ€์ด ์‚ฌ์ „ ํ•ญ๋ชฉ์„ ์ œ๊ณตํ•˜์„ธ์š”โ€.
  3. ์ด๋Ÿฌํ•œ ํ† ํฐ์„ ์‚ฌ์šฉ์ž ์ •์˜ AFL_CUSTOM_MUTATOR์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

sprintf ๋ž˜ํผ์— ๋Œ€ํ•œ ์˜ˆ์‹œ ์ถœ๋ ฅ:

{"pattern":"%99999999s"}
{"pattern":"AAAAAAAA....<1024>....%n"}

๊ฒฝํ—˜์ ์œผ๋กœ ์ด๋Š” ์‹ค์ œ ํƒ€๊ฒŸ์—์„œ ์ถฉ๋Œ ์‹œ๊ฐ„ ๋‹จ์ถ•์„ 2๋ฐฐ ์ด์ƒ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.


5. AI-Guided Patching Strategies

5.1 Super Patches

๋ชจ๋ธ์—๊ฒŒ ์ถฉ๋Œ ์„œ๋ช…์„ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ•˜๋„๋ก ์š”์ฒญํ•˜๊ณ  ๊ณตํ†ต ๊ทผ๋ณธ ์›์ธ์„ ์ œ๊ฑฐํ•˜๋Š” ๋‹จ์ผ ํŒจ์น˜๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ์ œ์ถœํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ†’ ์ž˜๋ชป๋œ ํŒจ์น˜๊ฐ€ ์ ์ˆ˜๋ฅผ ์žƒ๊ฒŒ ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ •ํ™•๋„ ํŒจ๋„ํ‹ฐ๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

ํ”„๋กฌํ”„ํŠธ ๊ฐœ์š”:

Here are 10 stack traces + file snippets.  Identify the shared mistake and generate a unified diff fixing all occurrences.

5.2 ์ถ”์ธก ํŒจ์น˜ ๋น„์œจ

ํ™•์ธ๋œ PoV ๊ฒ€์ฆ ํŒจ์น˜์™€ ์ถ”์ธก ํŒจ์น˜(ํฌ์ธํŠธ ์—†์Œ)๊ฐ€ ์ ์ˆ˜ ๊ทœ์น™์— ๋งž์ถฐ 1:โ€‹N ๋น„์œจ๋กœ ๊ต์ฐจ๋˜๋„๋ก ํ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 2 ์ถ”์ธก : 1 ํ™•์ธ). ๋น„์šฉ ๋ชจ๋ธ์€ ํŒจ๋„ํ‹ฐ์™€ ํฌ์ธํŠธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  N์„ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.


๋ชจ๋“  ๊ฒƒ์„ ํ†ตํ•ฉํ•˜๊ธฐ

์—”๋“œ ํˆฌ ์—”๋“œ CRS(์‚ฌ์ด๋ฒ„ ์ถ”๋ก  ์‹œ์Šคํ…œ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

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]

References

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ