정적 애플리케이션 보안 테스팅(SAST)은 소프트웨어 개발 라이프사이클에서 중요한 부분입니다. SAST 도구는 소스 코드를 분석하여 코드가 컴파일되거나 실행되기 전에 보안 취약점 및 기타 문제를 식별합니다. 이는 개발자가 개발 프로세스 초기에 문제를 발견하고 수정하여 비용을 줄이고 전반적인 보안을 개선하는 데 도움이 됩니다.
사용 가능한 SAST 도구는 여러 가지가 있으며, 각 도구마다 강점과 기능이 있습니다. 이 글에서는 가장 널리 사용되는 SAST 도구를 비교해 보겠습니다.
CheckMarx
CheckMarx SAST는 소스 코드 분석 솔루션으로, 코드에서 보안 취약점, 규정 준수 문제 및 기타 결함을 식별합니다. 코드 요소와 흐름의 논리적 그래프를 구축한 다음 이 그래프를 쿼리하여 문제를 찾습니다. CheckMarx는 여러 프로그래밍 언어를 지원하며 개발 라이프사이클의 어느 시점에서든 스캔을 실행할 수 있습니다.
CheckMarx의 주요 기능은 다음과 같습니다.
- 알려진 취약점에 대한 광범위한 사전 구성된 쿼리 목록
- 보안, QA 및 비즈니스 로직에 대한 사용자 지정 쿼리를 구성하는 기능
- 런타임 동작 및 수정 사항을 추적하기 위한 대화형 인터페이스
- 빌드 자동화 도구, SCM 시스템, 이슈 추적기 및 CI/CD 플랫폼과의 통합
Fortify
OpenText Fortify Static Code Analyzer는 또 다른 주요 SAST 도구입니다. 소스 코드에서 보안 취약점의 근본 원인을 정확히 찾아내고 가장 심각한 문제의 우선 순위를 지정하며 수정 지침을 제공합니다. Fortify는 33개 이상의 프로그래밍 언어에서 1,600개 이상의 취약점 범주를 지원합니다.
Fortify의 주요 기능은 다음과 같습니다.
- 광범위한 통합 생태계를 통해 개발 도구에 보안 임베딩
- Audit Assistant를 사용하여 스캔 깊이를 조정하고 오탐을 최소화
- CI/CD 파이프라인의 요구 사항을 충족하도록 스캔을 동적으로 확장
- 개발 초기에 소스, 바이너리 또는 바이트 코드에서 취약점 식별
- Jenkins, Jira, Azure DevOps 등과 같은 CI/CD 도구와 통합
Frogbot
Frogbot은 JFrog Xray를 사용하여 보안 취약점에 대한 풀 요청을 스캔하는 Git 봇입니다. 새 풀 요청이 생성되거나 레이블이 지정되면 Frogbot은 스캔을 실행하고 Git UI에서 직접 발견된 문제를 보고합니다. 이를 통해 개발자는 코드베이스에 병합되기 전에 취약점을 해결할 수 있습니다.
Frogbot의 주요 기능은 다음과 같습니다.
- 알려진 취약점에 대한 풀 요청 스캔
- Git 인터페이스에 결과를 주석으로 보고
- 기존 풀 요청에 레이블을 추가하여 스캔을 다시 실행하는 기능
- 스캔 엔진을 위한 JFrog Xray와 통합
Veracode
Veracode는 클라우드 기반의 자동화된 SAST 솔루션을 제공합니다. 소스 코드뿐만 아니라 컴파일된 코드(바이너리)를 스캔하여 더 심층적이고 포괄적인 결과를 제공합니다. Veracode는 악성 코드 또는 부적절한 기능과 같은 잠재적인 문제를 식별하고 비즈니스 위험을 기반으로 결과를 우선 순위화합니다.
Veracode의 몇 가지 주목할 만한 측면은 다음과 같습니다.
- 소스 전용 스캔에서 생략될 수 있는 타사 라이브러리를 포함하기 위해 바이너리 스캔
- 비즈니스 목표 및 위험 감수 능력을 기반으로 결과 우선 순위 지정
- 오탐이 거의 없이 매우 정확하고 실행 가능한 결과 제공
- 전담 보안 인력 없이도 빠른 스캔 및 결과 가능
Semgrep
Semgrep는 명령줄에서 CI/CD 파이프라인에 이르기까지 어디에서나 실행되는 오픈 소스 SAST 도구입니다. 확장 가능한 아키텍처로 사용자 정의 및 사용이 용이하도록 설계되었습니다. Semgrep 규칙은 사용자에게 표시되며 구문이 소스 코드와 유사하여 투명하고 이해하기 쉽습니다.
Semgrep의 주요 기능은 다음과 같습니다.
- 몇 초 만에 스캔 실행, CI 스캔 시간 중간값은 10초
- 복잡한 문제를 해결하기 위해 사용자 지정 규칙을 작성하는 유연성
- 사용자 지정 규칙 작성을 최소화하기 위해 관리 규칙 라이브러리 제공
- 30개 이상의 프레임워크 및 기술 지원
GitHub CodeQL
CodeQL은 GitHub에서 보안 검사 및 변형 분석에 사용하는 오픈 소스 분석 엔진입니다. 많은 프로그래밍 언어를 지원하며 오픈 소스 코드베이스에서 스캔을 실행하기 위한 명령줄 인터페이스 및 Visual Studio Code 확장을 제공합니다.
CodeQL의 몇 가지 주목할 만한 측면은 다음과 같습니다.
- 보안 검사 및 변형 분석 자동화
- 광범위한 언어, 라이브러리 및 프레임워크 지원
- CodeQL에서 사용되는 기술 용어 및 개념에 대한 개요 제공
Snyk Code
Snyk Code는 빌드가 필요 없이 몇 분 안에 소스 코드를 스캔하는 개발자 친화적인 SAST 도구입니다. 코드와 함께 실시간 결과를 제공하고 개발자가 문제를 신속하게 해결할 수 있도록 수정 조언을 제공합니다. Snyk Code는 널리 사용되는 언어, IDE 및 CI/CD 도구와 호환됩니다.
Snyk Code의 주요 기능은 다음과 같습니다.
- 코드가 작성될 때 스캔하고 IDE에서 자동 스캔
- 개발자 친화적인 수정 조언과 함께 실행 가능한 결과 제공
- 머신 러닝을 활용하여 강력한 지식 기반 구축
- 배포 상태 및 노출을 기반으로 문제 우선 순위 지정
Tencent Xcheck
Tencent Xcheck는 Tencent Cloud에서 개발한 정적 애플리케이션 보안 테스팅(SAST) 도구입니다. 개발자가 소스 코드에서 보안 취약점 및 기타 문제를 식별하는 데 도움이 되도록 설계되었습니다.
- Xcheck는 다양한 프로그래밍 언어의 구문 특성을 정확하게 이해할 수 있으므로 코드를 오해하여 발생하는 오탐 문제를 해결하는 데 도움이 됩니다.
- 사용자 정의 보안 보호 조치를 식별하여 오탐을 더욱 줄일 수 있습니다.
- Xcheck는 지원되는 언어에 대해 올바른 구문으로 전체 프로젝트 스캔을 지원합니다.
- 웹 백엔드 애플리케이션 코드를 빠르게 스캔할 수 있지만 깊이 중첩된 재귀 코드의 경우 시간이 더 오래 걸릴 수 있습니다.
다른 SAST 도구와의 비교
- Reddit 게시물에 따르면 Xcheck는 컴파일할 필요 없이 원시 소스 코드를 직접 스캔할 수 있으며 스캔 속도가 Checkmarx보다 100배 빠릅니다.
배포 및 보안
- Xcheck는 온프레미스로 배포되므로 테스트되는 소스 코드는 회사 네트워크 내에 유지되어 소스 코드 유출 위험을 방지합니다.
- 소스 코드를 포함한 전체 제품 라이프사이클이 회사 네트워크를 벗어나지 않습니다.
Tencent Xcheck는 개발자가 코드에서 보안 문제를 찾는 데 도움이 되는 빠르고 정확한 SAST 도구입니다. 온프레미스 배포 모델은 소스 코드 보안을 보장합니다. 속도 및 정확성 측면에서 다른 SAST 도구와 비교하여 유리하지만 일부 엔터프라이즈 중심 SAST 도구만큼 많은 언어를 지원하거나 광범위한 생태계를 갖추고 있지는 않을 수 있습니다.
Semgrep
- 명령줄에서 CI/CD 파이프라인에 이르기까지 어디에서나 실행되는 오픈 소스 SAST 도구
- 확장 가능한 아키텍처로 사용자 정의 및 사용이 용이하도록 설계됨
- 30개 이상의 프레임워크 및 기술 지원
- 사용자 지정 규칙 작성을 최소화하기 위해 관리 규칙 라이브러리 제공
- 몇 초 만에 스캔 실행, CI 스캔 시간 중간값은 10초
Bandit
- Python 코드 스캔을 위해 특별히 설계된 오픈 소스 SAST 도구
- Python용 포괄적인 소스 취약점 스캐너
Brakeman
- Ruby on Rails 애플리케이션을 위해 특별히 설계된 오픈 소스 취약점 스캐너
OWASP Dependency-Check
- 알려진 취약한 구성 요소의 사용을 식별하는 오픈 소스 도구
- Java 및 .NET 프로젝트 지원
- Gradle, Jenkins 및 Maven과 같은 빌드 도구와 통합
PMD
- Java, JavaScript, Salesforce 및 기타 언어를 지원하는 오픈 소스 SAST 도구
- Ant, Maven, Gradle 및 Jenkins와 같은 빌드 도구와 통합
PHPStan
- PHP용 오픈 소스 SAST 도구
- Bitbucket, GitHub 및 GitLab과의 통합 지원
Cppcheck
- C 및 C++ 코드용 오픈 소스 SAST 도구
- Jenkins 및 Visual Studio와 통합
이러한 도구는 사용 가능한 많은 오픈 소스 SAST 도구의 몇 가지 예일 뿐입니다. SAST 도구를 선택할 때는 사용하는 프로그래밍 언어, 필요한 사용자 정의 및 투명성 수준, 결과의 속도와 정확성, 기존 도구 및 워크플로와의 통합 용이성과 같은 요소를 고려하는 것이 중요합니다.
마무리
정적 애플리케이션 보안 테스팅은 안전한 소프트웨어 개발의 중요한 부분입니다. 이 글에서 비교한 SAST 도구는 각각 고유한 강점과 기능을 가지고 있지만 모두 개발 프로세스 초기에 보안 취약점을 찾아 수정하는 데 도움이 되는 것을 목표로 합니다.
SAST 도구를 선택할 때는 사용하는 프로그래밍 언어, 필요한 사용자 정의 및 투명성 수준, 결과의 속도와 정확성, 기존 도구 및 워크플로와의 통합 용이성과 같은 요소를 고려하십시오. 이러한 도구 중 다수는 무료 평가판 또는 오픈 소스 버전을 제공하므로 사용해보고 어떤 도구가 귀하의 요구 사항에 가장 적합한지 확인할 수 있습니다.
궁극적으로 SAST의 목표는 공격자가 악용하기 전에 문제를 찾아 수정하여 애플리케이션의 전반적인 보안을 개선하는 것입니다. 개발 프로세스에 SAST를 통합하면 더 안전한 소프트웨어를 구축하고 비용이 많이 드는 침해 위험을 줄일 수 있습니다.