View on GitHub

capstone-2025-14

Automated Binary Vulnerability Analysis Using LLMs

🧠 Automated Binary Vulnerability Analysis Using LLMs

LLM을 μ΄μš©ν•˜μ—¬ 컴파일된 λ°”μ΄λ„ˆλ¦¬λ₯Ό μ‹€ν–‰ κ°€λŠ₯ν•œ μ†ŒμŠ€μ½”λ“œλ‘œ λ””μ»΄νŒŒμΌν•˜κ³ , 이λ₯Ό λ°”νƒ•μœΌλ‘œ CodeQLΒ·Taint 뢄석을 μžλ™ν™”ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€.


πŸ“Œ ν”„λ‘œμ νŠΈ κ°œμš”

πŸ” 문제 μ •μ˜

κΈ°μ‘΄ λ””μ»΄νŒŒμΌλŸ¬(IDA Pro, Binary Ninja)λŠ” λΉ„μš©μ΄ 맀우 λ†’κ±°λ‚˜, 무료 도ꡬ(Ghidra λ“±)λŠ” μž¬μ‹€ν–‰ κ°€λŠ₯ν•œ ν˜•νƒœμ˜ μ½”λ“œκ°€ μ•„λ‹Œ λ‹¨μˆœν•œ pseudo-code μˆ˜μ€€μ˜ 결과만 μ œκ³΅ν•©λ‹ˆλ‹€. 이둜 인해 λ””μ»΄νŒŒμΌλœ μ½”λ“œλ₯Ό 기반으둜 정적 뢄석(CodeQL) 및 동적 뢄석(AFL Fuzzer)을 μ μš©ν•˜κΈ° μ–΄λ €μ› μŠ΅λ‹ˆλ‹€.

πŸ’‘ ν•΄κ²° 방법

λ³Έ ν”„λ‘œμ νŠΈλŠ” LLM4Decompile λͺ¨λΈμ„ ν™œμš©ν•˜μ—¬ ν•¨μˆ˜ λ‹¨μœ„μ˜ μ–΄μ…ˆλΈ”λ¦¬μ–΄ ν˜Ήμ€ Ghidra λ””μ»΄νŒŒμΌ κ²°κ³Όλ₯Ό LLM에 μž…λ ₯ν•˜κ³ , μ‹€ν–‰ κ°€λŠ₯ν•œ ν˜•νƒœμ˜ C μ†ŒμŠ€μ½”λ“œλ‘œ λ””μ»΄νŒŒμΌν•©λ‹ˆλ‹€.


πŸ”§ 기술 μŠ€νƒ 및 도ꡬ

Language

python javascript html css

Framework

dJango

Tool

Ghidra
OBJdump
GCC
CodeQL
LLM4Decompile


πŸš€ μ£Όμš” κΈ°λŠ₯

κΈ°λŠ₯ μ„€λͺ…
πŸ”Ό λ°”μ΄λ„ˆλ¦¬ μ—…λ‘œλ“œ μ‚¬μš©μžκ°€ λΆ„μ„ν•˜κ³ μž ν•˜λŠ” λ°”μ΄λ„ˆλ¦¬λ₯Ό μ—…λ‘œλ“œ
🧩 λ””μ»΄νŒŒμΌ 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 번호]

βš™οΈ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

System Architecture

β†– Code Flow

Code Flow

πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦ νŒ€μ› μ†Œκ°œ

이름 μ—­ν• 
ν™©μŠΉμž¬ PM, CodeQL, LLM λ””μ»΄νŒŒμΌ 개발
μ‹ μœ€μ œ CodeQL, LLM λ””μ»΄νŒŒμΌ 개발
μ΅œμ›μ€€ λ°±μ—”λ“œ 및 ν”„λ‘ νŠΈμ—”λ“œ 개발

πŸ“ˆ ν–₯ν›„ κ³„νš


ν‰κ°€μ§€ν‘œ

λ³Έ ν”„λ‘œμ νŠΈμ˜ μ„±λŠ₯ 및 μ •ν™•λ„λŠ” λ‹€μŒ 두 κ°€μ§€ μ§€ν‘œλ₯Ό 톡해 ν‰κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ””μ»΄νŒŒμΌλœ μ½”λ“œμ˜ μž¬μ‹€ν–‰ κ°€λŠ₯μ„±κ³Ό CodeQL 및 Taint 뢄석 λ„κ΅¬μ˜ 적용 성곡λ₯ μ„ 기반으둜 ν‰κ°€λ©λ‹ˆλ‹€. 높은 μž¬μ‹€ν–‰ κ°€λŠ₯μ„±κ³Ό 뢄석 ν˜Έν™˜μ„±μ„ ν™•λ³΄ν•˜μ—¬, μžλ™ν™”λœ λ°”μ΄λ„ˆλ¦¬ 취약점 λΆ„μ„μ˜ μ‹€μš©μ„±μ„ μž…μ¦ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ‹€μ–‘ν•œ 취약점 μœ ν˜•(CWE κΈ°μ€€)에 λŒ€ν•΄ νƒμ§€μœ¨μ„ μΈ‘μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€. CodeQL 및 Taint 뢄석 κ²°κ³Όλ₯Ό λ°”νƒ•μœΌλ‘œ, λ””μ»΄νŒŒμΌλœ μ½”λ“œμ—μ„œλ„ κΈ°μ‘΄ μ†ŒμŠ€μ½”λ“œ μˆ˜μ€€μ— μ€€ν•˜λŠ” 탐지 μ„±λŠ₯을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.
특히, λ©”λͺ¨λ¦¬ 였λ₯˜(버퍼 μ˜€λ²„ν”Œλ‘œμš°), μ‚¬μš©μž μž…λ ₯ 검증 λΆ€μ‘± λ“±μ˜ μ·¨μ•½μ μ—μ„œ 높은 νƒμ§€μœ¨μ„ κΈ°λ‘ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

취약점 μœ ν˜•λ³„ νƒμ§€μœ¨

ν”„λ‘œμ νŠΈ ν¬μŠ€ν„°

πŸ“ ν”„λ‘œμ νŠΈ

πŸ“‘ PPT

PPT

πŸ–ΌοΈ ν¬μŠ€ν„°

ν”„λ‘œμ νŠΈ ν¬μŠ€ν„°

πŸ“Ί μ‹œμ—°μ˜μƒ

μ‹œμ—°μ˜μƒ