SAST란 Static Application Security Testing의 약어로 정적 분석을 통해 취약점을 찾는 방식을 말한다.
rule/ query 기반으로 코드 패턴을 찾고 코드 속에 취약한 지점을 찾아 사용자에게 알려준다.
오탐 발생 가능성도 있으며 런타임/배포환경에서 드러나는 이슈에 대해서는 탐지하지 못할 수 있다.
대표적인 오픈소스 도구로 SonarQube, CodeQL, Semgrep 등이 있다.
SonarQube
정적 코드 품질과 보안 규칙을 확인한다.
코드를 스캔하여 버그/취약점/중복코드 등을 대시보드 형태로 보여준다.

community 버전에서는 상기한 이미지에 나온 언어만 제공하나 상용버전을 사용 시 더 많은 종류의 언어와 룰을 지원한다.
또한 SonarQube는 기본적으로 결과를 웹에서 대시보드 형태로 가공하여 보여주고 상용버전 사용시 보고서 형태로 가공해주기도 하면서 간편하게 사용할 수 있다.
CodeQL
코드를 데이터베이스로 만들고 쿼리로 취약 패턴/데이터 흐름을 찾는다.
dataflow/taint tracking 같은 흐름 기반 분석에 강하나 실행 시 DB 생성/쿼리 실행 파이프라인이 필요하여 초기 세팅시 상대적으로 시간이 많이 소모된다.

CodeQL은 CLI 기반으로 실행되고 결과는 sarif 파일로 나오게 된다. 사용 방법은 CLI지만 복잡하지 않고 결과 파일인 sarif의 경우도 vsc extension등 미리 만들어진 viewer로 정리된 형태로 볼 수 있다.
Semgrep
코드에서 특정 패턴을 찾는 룰 기반 도구이며 가볍고 속도가 빠르다.
빠르게 스캔을 돌려볼 수 잇고 룰 작성도 비교적 쉬우나 패턴 매칭 성격이 강하여 복잡한 전역 데이터 흐름 분석은 다소 약할 수 있다.

Fuzzing이란 입력값을 대량으로 넣어 나오는 출력값, 에러 등을 보며 취약점을 찾는 테스트 기법을 말한다.

퍼징의 대표적인 전략과 방법에 대해 간략하게 정리해 보겠다.
코드 공개 여부 기준
블랙박스
그레이박스
화이트박스
입력 생성 방식
피드백 여부
최근에는 ai를 활용한 sast, fuzzing 연구가 많이 나오고 있다. 단순히 LLM을 이용해 정탐/오탐 판별부터 Fuzzing 입력값을 학습을 통해 생성하거나 머신러닝을 통한 취약점 탐지등 다양한 방면으로 연구가 되고 있다.
Fuzz4All - Universal Fuzzing with LLMs

VulDeBERT - A Vulnerability Detection System Using BERT

등등... 다양한 프로젝트들이 존재하고 생겨나고 있다.
또한, 버그바운팅 플랫폼인 HackerOne에서 ai를 이용한 취약점 탐지 자동화 도구로 1등을 한 사례도 있으며 LLM을 통해 0-Day를 찾은 사례도 존재하여 가까운 미래 취약점 탐지라는 분야를 AI가 대체하지 않을까... 라고 생각이 된다.

지금이라도 AI 공부를 해야되나...