π§ Automated Binary Vulnerability Analysis Using LLMs
LLMμ μ΄μ©νμ¬ μ»΄νμΌλ λ°μ΄λ리λ₯Ό μ€ν κ°λ₯ν μμ€μ½λλ‘ λμ»΄νμΌνκ³ , μ΄λ₯Ό λ°νμΌλ‘ CodeQLΒ·Taint λΆμμ μλννλ λꡬμ λλ€.
π νλ‘μ νΈ κ°μ
π λ¬Έμ μ μ
κΈ°μ‘΄ λμ»΄νμΌλ¬(IDA Pro, Binary Ninja)λ λΉμ©μ΄ λ§€μ° λκ±°λ, λ¬΄λ£ λꡬ(Ghidra λ±)λ μ¬μ€ν κ°λ₯ν ννμ μ½λκ° μλ λ¨μν pseudo-code μμ€μ κ²°κ³Όλ§ μ 곡ν©λλ€. μ΄λ‘ μΈν΄ λμ»΄νμΌλ μ½λλ₯Ό κΈ°λ°μΌλ‘ μ μ λΆμ(CodeQL) λ° λμ λΆμ(AFL Fuzzer)μ μ μ©νκΈ° μ΄λ €μ μ΅λλ€.
π‘ ν΄κ²° λ°©λ²
λ³Έ νλ‘μ νΈλ LLM4Decompile λͺ¨λΈμ νμ©νμ¬ ν¨μ λ¨μμ μ΄μ λΈλ¦¬μ΄ νΉμ Ghidra λμ»΄νμΌ κ²°κ³Όλ₯Ό LLMμ μ λ ₯νκ³ , μ€ν κ°λ₯ν ννμ C μμ€μ½λλ‘ λμ»΄νμΌν©λλ€.
- μ μ λ³μ λ±μ μ 보λ LLMμ΄ μμ νκ² μΆλ‘ ν μ μκΈ° λλ¬Έμ, μ΄λ₯Ό λ³λλ‘ λΆμ/μΆμΆνμ¬ λμ»΄νμΌλ ν¨μλ€κ³Ό μ‘°ν©ν΄ μ΅μ’ μ€ν κ°λ₯ν μμ€μ½λλ₯Ό μμ±ν©λλ€.
- μμ±λ μ½λλ CodeQL μ μ λΆμ λ° Taint λΆμμ μ¦μ νμ© κ°λ₯νλ©°, λΆμ κ²°κ³Όλ μκ°μ μΌλ‘ νμΈν μ μμ΅λλ€.
π§ κΈ°μ μ€ν λ° λꡬ
Language
Framework
Tool
π μ£Όμ κΈ°λ₯
κΈ°λ₯ | μ€λͺ |
---|---|
πΌ λ°μ΄λ리 μ λ‘λ | μ¬μ©μκ° λΆμνκ³ μ νλ λ°μ΄λ리λ₯Ό μ λ‘λ |
π§© λμ»΄νμΌ | Ghidra νΉμ objdumpλ₯Ό ν΅ν΄ μΆμΆν ν¨μ λ¨μμ μ½λμ μ μ λ³μλ₯Ό LLMμ ν΅ν΄ μ€ν κ°λ₯ν ννμ C μ½λλ‘ λμ»΄νμΌ |
π CodeQL λΆμ | λμ»΄νμΌλ μ½λλ₯Ό μ μ μΌλ‘ λΆμνμ¬ μ·¨μ½μ μ μλ νμ§ |
𧬠Taint λΆμ | CodeQL κΈ°λ°μ Taint λΆμ μν λ° κ²°κ³Ό μ 곡 |
π‘οΈ List of Covered CWEs
Show Covered CWEs
CWE | Type | Description |
---|---|---|
CWE-014 | Compiler Removal of Code to Clear Buffers | μ΅μ ν μ»΄νμΌλ¬κ° λ―Όκ° λ°μ΄ν° μμ μ© μ½λλ₯Ό μ κ±°νμ¬ λ©λͺ¨λ¦¬μ λ―Όκ° λ°μ΄ν°κ° λ¨μ μκ² λλ μ·¨μ½μ |
CWE-020 | Improper Input Validation | μ λ ₯κ°μ μ¬λ°λ₯΄κ² κ²μ¦νμ§ μμ μκΈ°μΉ μμ λμμ΄λ 보μ κ²°ν¨μΌλ‘ μ΄μ΄μ§λ μ·¨μ½μ |
CWE-022 | Improper Limitation of a Pathname to a Restricted Directory | κ²½λ‘ μ‘°μ(path traversal) 곡격μ ν΅ν΄ νκ°λμ§ μμ λλ ν°λ¦¬/νμΌμ μ κ·Όν μ μλ μ·¨μ½μ |
CWE-078 | OS Command Injection | μΈλΆ μ λ ₯μ ν΅ν΄ μ΄μ체μ λͺ λ Ή μ€νμ νμ©νμ¬ μμ λͺ λ Ήμ΄ μνλ μ μλ μ·¨μ½μ |
CWE-079 | Cross-site Scripting (XSS) | μ λ ₯κ°μ μ€ν¬λ¦½νΈλ₯Ό μ½μ ν΄ λ€λ₯Έ μ¬μ©μμ λΈλΌμ°μ μμ μ€νλλλ‘ νλ μ·¨μ½μ |
CWE-089 | SQL Injection | μ λ ₯κ°μΌλ‘ μ μμ SQL ꡬ문μ μ½μ νμ¬ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ‘°μΒ·μ μΆν μ μλ μ·¨μ½μ |
CWE-114 | Process Control | μΈλΆλ‘λΆν° μ‘°μλ κ²½λ‘λ₯Ό μ΄μ©ν΄ μ μ± λͺ¨λμ λ‘λν μ μλ μ·¨μ½μ |
CWE-119 | Improper Restriction of Operations within the Bounds of a Buffer | λ²νΌ μ€λ²νλ‘μ° λ± λ©λͺ¨λ¦¬ κ²½κ³λ₯Ό λμ΄μ μ½κΈ°/μ°κΈ°λ₯Ό νμ©νλ μ·¨μ½μ |
CWE-120 | Buffer Copy without Checking Size of Input | 볡μ¬ν λ°μ΄ν° ν¬κΈ°λ₯Ό κ²μ¬νμ§ μκ³ λ²νΌ 볡μ¬λ₯Ό μνν΄ μ€λ²νλ‘μ°λ₯Ό μ λ°νλ μ·¨μ½μ |
CWE-121 | Stack-based Buffer Overflow | μ€ν μμ λ²νΌ μ€λ²νλ‘μ°λ‘ μΈν΄ μ μ΄ νλ¦μ΄ λ³μ‘°λ μ μλ μ·¨μ½μ |
CWE-129 | Improper Validation of Array Index | λ°°μ΄ μΈλ±μ€λ₯Ό κ²½κ³ μΈ κ°μΌλ‘ μ κ·Όν μ μμ΄ λ©λͺ¨λ¦¬ μμμ΄λ μ 보 μ μΆμ΄ λ°μνλ μ·¨μ½μ |
CWE-131 | Incorrect Calculation of Buffer Size | λ²νΌ ν¬κΈ°λ₯Ό μλͺ» κ³μ°ν΄ λ©λͺ¨λ¦¬ ν λΉμ΄ λΆμ‘±νκ±°λ κ³Όλ€ν λ λ°μνλ μ·¨μ½μ |
CWE-134 | Uncontrolled Format String | ν¬λ§· λ¬Έμμ΄ ν¨μμ 곡격μκ° μ μ΄ κ°λ₯ν μ λ ₯μ λ겨 ν¬λ§·μ μ‘°μν μ μλ μ·¨μ½μ |
CWE-170 | Improper Null Termination | λ¬Έμμ΄ μ’
λ£ λ¬Έμ(\0 )λ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νμ§ λͺ»ν΄ λ²νΌ κ²½κ³λ₯Ό λ²μ΄λλ μ·¨μ½μ |
CWE-190 | Integer Overflow or Wraparound | μ μ κ³μ° κ²°κ³Όκ° μ΅λκ°μ λμ΄μκ±°λ λνλμ΄ μ€λ₯κ° λ°μνλ μ·¨μ½μ |
CWE-191 | Integer Underflow (Wrap or Wraparound) | μ μ κ³μ° κ²°κ³Όκ° μ΅μκ° μλλ‘ λ΄λ €κ°κ±°λ λνλμ΄ μ€λ₯κ° λ°μνλ μ·¨μ½μ |
CWE-193 | Off-by-one Error | λ°λ³΅λ¬Έ κ²½κ³ μ‘°κ±΄μ΄ νλ λͺ¨μλΌκ±°λ λ¨μ μλͺ»λ λ©λͺ¨λ¦¬ μ κ·Όμ μ λ°νλ μ·¨μ½μ |
CWE-253 | Incorrect Check of Function Return Value | ν¨μ λ°νκ°μ μλͺ» κ²μ¬νκ±°λ 무μνμ¬ μ€λ₯ μνλ₯Ό λμΉλ μ·¨μ½μ |
CWE-290 | Authentication Bypass by Spoofing | μ€νΈν λ±μ μ΄μ©ν΄ μΈμ¦μ μ°νν μ μλ μ·¨μ½μ |
CWE-295 | Improper Certificate Validation | SSL/TLS μΈμ¦μ κ²μ¦μ μ λλ‘ μννμ§ μμ μμ‘°λ μΈμ¦μλ₯Ό μ λ’°νκ² λλ μ·¨μ½μ |
CWE-311 | Missing Encryption of Sensitive Data | λ―Όκ° λ°μ΄ν°λ₯Ό μνΈννμ§ μκ³ μ μ‘ν΄ μ€κ°μ νμ·¨λ μ μλ μ·¨μ½μ |
CWE-313 | Cleartext Storage of Sensitive Information | λ―Όκ° μ 보λ₯Ό μνΈν μμ΄ μ μ₯ν΄ λμ€ν¬ νμ·¨ μ λ ΈμΆλλ μ·¨μ½μ |
CWE-319 | Cleartext Transmission of Sensitive Information | λ―Όκ° μ 보λ₯Ό μνΈν μμ΄ μ μ‘ν΄ λ€νΈμν¬ μμμ νμ·¨λ μ μλ μ·¨μ½μ |
CWE-326 | Inadequate Encryption Strength | μ½ν μνΈν μκ³ λ¦¬μ¦ μ¬μ©μΌλ‘ μνΈλ¬Έμ΄ λΉκ΅μ μ½κ² ν΄λ λ μ μλ μ·¨μ½μ |
CWE-327 | Use of a Broken or Risky Cryptographic Algorithm | μλ €μ§ μ·¨μ½μ μ΄ μλ μνΈ μκ³ λ¦¬μ¦μ μ¬μ©νλ μ·¨μ½μ |
CWE-367 | Time-of-Check Time-of-Use (TOCTOU) Race Condition | κ²μ¬ μμ κ³Ό μ¬μ© μμ μ¬μ΄μ κ²½μ 쑰건μΌλ‘ κΆν μ°νλ λ°μ΄ν° λ¬΄κ²°μ± μμμ΄ λ°μνλ μ·¨μ½μ |
CWE-416 | Use After Free | ν΄μ λ λ©λͺ¨λ¦¬λ₯Ό λ€μ μ κ·ΌΒ·μ¬μ©νμ¬ μΆ©λμ΄λ μ½λ μ€νμ΄ κ°λ₯ν μ·¨μ½μ |
CWE-428 | Untrusted Search Path | λΌμ΄λΈλ¬λ¦¬Β·λͺ¨λ λ‘λ μ κ²½λ‘ μ λ’°μ±μ κ²μ¬νμ§ μμ μ μ± μ½λλ₯Ό λ‘λν μ μλ μ·¨μ½μ |
CWE-457 | Use of Uninitialized Variable | μ΄κΈ°νλμ§ μμ λ³μλ₯Ό μ¬μ©ν΄ μμΈ‘ λΆκ°λ₯ν λμμ΄λ μ 보 μ μΆμ΄ λ°μνλ μ·¨μ½μ |
CWE-468 | Incorrect Pointer Scaling | ν¬μΈν° μ°μ μ°μ° μ ν¬κΈ° λ¨μλ₯Ό μλͺ» μ μ©ν΄ μλͺ»λ λ©λͺ¨λ¦¬ μ κ·Όμ΄ λ°μνλ μ·¨μ½μ |
CWE-497 | Exposure of System Data to an Unauthorized Control Sphere | μμ€ν λ΄λΆ μ 보λ₯Ό μΈλΆμ κ³Όλνκ² λ ΈμΆνλ μ·¨μ½μ |
CWE-570 | Expression is Always False | νμ κ±°μ§μΌλ‘ νκ°λλ λ Όλ¦¬ ννμμΌλ‘ μΈν΄ λΆκΈ°κ° μ€νλμ§ μκ±°λ λΆνμν κ²μ¬κ° λ°μνλ μ·¨μ½μ |
CWE-611 | Improper Restriction of XML External Entity Reference (XXE) | μΈλΆ μν°ν°(XML External Entity)λ₯Ό μλͺ» μ²λ¦¬ν΄ SSRFλ νμΌ μ μΆμ΄ κ°λ₯ν μ·¨μ½μ |
CWE-676 | Use of Potentially Dangerous Function | 보μμ μνν ν¨μ(e.g. strcpy , gets )λ₯Ό μ¬μ©νλ μ·¨μ½μ |
CWE-704 | Incorrect Type Conversion or Cast | μλͺ»λ ν λ³ν/μΊμ€νΈλ‘ μΈν λ°μ΄ν° μμ λλ μ€λ₯κ° λ°μνλ μ·¨μ½μ |
CWE-732 | Incorrect Permission Assignment for Critical Resource | νμΌΒ·λ¦¬μμ€ κΆνμ κ³Όλνκ² λΆμ¬ν΄ κΆν μμΉμ΄ κ°λ₯ν μ·¨μ½μ |
CWE-764 | Multiple Locks of a Critical Resource | λμΌ μμμ μ€λ³΅μΌλ‘ μ κΈμ μλν΄ κ΅μ°© μν(λ°λλ½)κ° λ°μν μ μλ μ·¨μ½μ |
CWE-807 | Reliance on Untrusted Inputs in a Security Decision | 보μ κ²°μ μ μν΄ μ λ’°ν μ μλ μ λ ₯κ°μ μ¬μ©νλ μ·¨μ½μ |
CWE-835 | Infinite Loop | νΉμ 쑰건μμ νμΆλμ§ μλ 무ν 루νκ° λ°μν΄ μλΉμ€ κ±°λΆλ₯Ό μ λ°νλ μ·¨μ½μ |
CWE-843 | Access of Resource Using Incompatible Type (βType Confusionβ) | μλͺ»λ νμ μΌλ‘ κ°μ²΄/리μμ€μ μ κ·Όν΄ λ©λͺ¨λ¦¬ μμμ΄λ κΆν μ°νκ° λ°μνλ μ·¨μ½μ |
π οΈ μ¬μ© λ°©λ²
μ€μΉ λ° νκ²½ ꡬμ±
git clone https://github.com/kookmin-sw/capstone-2025-14
cd settings
./codeqlInstall.sh
./GhidraModelInstall.sh
μ€ν λ°©λ²
cd project
python3 manage.py runserver [ip μ£Όμ] [port λ²νΈ]
βοΈ μμ€ν μν€ν μ²

β Code Flow

π¨βπ©βπ§βπ¦ νμ μκ°
μ΄λ¦ | μν |
---|---|
ν©μΉμ¬ | PM, CodeQL, LLM λμ»΄νμΌ κ°λ° |
μ μ€μ | CodeQL, LLM λμ»΄νμΌ κ°λ° |
μ΅μμ€ | λ°±μλ λ° νλ‘ νΈμλ κ°λ° |
π ν₯ν κ³ν
- AFL κΈ°λ°μ λμ λΆμ λͺ¨λ μ°λ
- μ μ λ³μ λ° κ΅¬μ‘°μ²΄ μλ 볡μ μ νλ ν₯μ
- λ€μν LLM λͺ¨λΈ λΉκ΅ λ° μ±λ₯ νκ°
- λΆμ 리ν¬νΈ μλ μμ± κΈ°λ₯ μΆκ°
νκ°μ§ν
λ³Έ νλ‘μ νΈμ μ±λ₯ λ° μ νλλ λ€μ λ κ°μ§ μ§νλ₯Ό ν΅ν΄ νκ°νμμ΅λλ€.
λμ»΄νμΌλ μ½λμ μ¬μ€ν κ°λ₯μ±κ³Ό CodeQL λ° Taint λΆμ λꡬμ μ μ© μ±κ³΅λ₯ μ κΈ°λ°μΌλ‘ νκ°λ©λλ€. λμ μ¬μ€ν κ°λ₯μ±κ³Ό λΆμ νΈνμ±μ ν보νμ¬, μλνλ λ°μ΄λ리 μ·¨μ½μ λΆμμ μ€μ©μ±μ μ
μ¦νμ΅λλ€. λν λ€μν μ·¨μ½μ μ ν(CWE κΈ°μ€)μ λν΄ νμ§μ¨μ μΈ‘μ νμμ΅λλ€. CodeQL λ° Taint λΆμ κ²°κ³Όλ₯Ό λ°νμΌλ‘, λμ»΄νμΌλ μ½λμμλ κΈ°μ‘΄ μμ€μ½λ μμ€μ μ€νλ νμ§ μ±λ₯μ νμΈνμ΅λλ€.
νΉν, λ©λͺ¨λ¦¬ μ€λ₯(λ²νΌ μ€λ²νλ‘μ°), μ¬μ©μ μ
λ ₯ κ²μ¦ λΆμ‘± λ±μ μ·¨μ½μ μμ λμ νμ§μ¨μ κΈ°λ‘νμμ΅λλ€.
π νλ‘μ νΈ
π PPT
πΌοΈ ν¬μ€ν°