System Hacking/Fuzzing

CodeQL

zz! 2025. 8. 24. 16:45
728x90

이론적인 부분은 구글에서 공부하면 될것같습니다

(여러 자료들을 찾아보아도, 잘 안되길래 삽질을 통해서 아래와 같은 방식으로 했다.)

 

CodeQL

CodeQL은 Variant Analysis를 수행하는 정적 분석 도구이다.

Variant Analysis : 알려진 취약점을 기준 삼아서 비슷한 유형의 취약점을 찾아내는 분석 방법이다.

https://github.com/github/codeql/tree/main

장점 : 패턴을 모델링하고 코드베이스에서 해당 패턴이 발생하는 부분을 빠르게 스캔할 수 있다는 것이다.

 

동작 방식

  1. CodeQL이 내부적 동작하는 과정
  2. 대상 code를 데이터화하여 CodeQL Database를 생성
  3. CodeQL Database를 대상으로 CodeQL 쿼리로 질의
  4. 쿼리 결과 분석

 

CodeQL Path 추가

echo 'export PATH="설치경로:$PATH"' >> ~/.bashrc
source ~/.bashrc

 

취약한 소스 코드 작성

스택 버퍼 오버플로우가 존재하는 소스 코드를 작성

 

사용자 팩 생성

mkdir -p ~/codeql-packs/user.strcpy/Queries
vim ~/codeql-packs/user.strcpy/qlpack.yml

 

쿼리 작성

vim ~/codeql-packs/user.strcpy/Queries/simplestrcpy.ql

 

CodeQL Database 생성

codeql database create stack-overflow --language=cpp --command="gcc -o vuln vuln.c"

데이터베이스가 만들어지면 Successfully created database at 라는 메시지가 나온다.

 

CodeQL Query

codeql database analyze stack-overflow user/strcpy:Queries/simplestrcpy.ql --search-path "$HOME/.coeql/packages:$HOME/codeql-packs" --format=sarif-latest --output result.sarif

 

결과

VS Code에서 sarif viewer 설치 후에 보면 분석 결과를 간편하게 보여줌

 

한계

디버깅 복잡성 : CodeQL 쿼리에 대한 디버깅 프로세스는 복잡성이 증가함에 따라 점점더 모호하고 어려워짐

높은 오탐 : 상당수의 오탐을 발생시킨다.

확장성 문제 : 대규모 코드베이스에서는 단일 쿼리로는 엄청난 양의 결과가 생성될 수 있다. 그래서 수동 분석에 많은 시간과 정신적 피로가 발생할 수 있다.

 

쿼리를 작성해야한다는 어려움이 존재한다.

728x90