Check Component Vulnerabilities Using OWASP Dependency-Check
1. 개요
애플리케이션 개발 중에 일반적으로 프로젝트에 일부 서드파티 라이브러리나 프레임워크를 추가해야 합니다. 이러한 서드파티 라이브러리는 개발 노력을 덜어주지만, 그 취약성으로 인해 보안 위험을 초래할 수 있습니다.
이 튜토리얼에서는 애플리케이션에서 알려진 취약성을 식별하는 데 도움이 되는 플러그인을 소개합니다.
2. 의존성 점검
우리가 채택할 플러그인은 OWASP Dependency-Check입니다. 이 플러그인은 응용 프로그램의 의존성을 분석하는 도구로서, 그것을 공통 플랫폼 열거(Common Platform Enumeration, CPE) 식별자 및 공통 취약성 및 노출(Common Vulnerability and Exposure, CVE) 항목과 상관관계하여 알려진 취약성이 있는 의존성을 식별합니다.
CPE는 소프트웨어나 패키지에 대한 구조적 명명 체계이며, CVE는 공개적으로 알려진 취약성과 노출에 대한 참조를 제공합니다.
이 플러그인은 미 국립 표준 기술 연구소(NIST)에서 제공하는 국가 취약성 데이터베이스(NVD) 데이터 피드를 통해 이러한 항목을 자동으로 업데이트합니다. Maven 플러그인 외에도 Gradle과 같은 다른 통합 플러그인도 제공합니다.
3. Maven 설정
이 튜토리얼에서는 애플리케이션과의 Maven 통합을 살펴보겠습니다. 먼저, pom.xml 파일의 plugins 섹션에 Dependency-Check 플러그인을 포함시켜야 합니다:
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>11.1.1</version>
<configuration>
<failBuildOnCVSS>7</failBuildOnCVSS>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
이 플러그인을 포함한 후에는 verify 단계에서 호출합니다. 이는 기본적으로 통합되어 있기 때문입니다:
$ mvn verify
또는 다음과 같이 직접 호출할 수 있습니다:
$ mvn dependency-check:check
애플리케이션에 취약성이 있을 경우, Maven은 콘솔을 통해 어떤 패키지가 취약성을 포함하고 있는지를 나타내는 메시지를 보여줄 것입니다. 예를 들어:
[WARNING]
One or more dependencies were identified with known vulnerabilities in dependency-check:
logback-core-1.5.6.jar (pkg:maven/ch.qos.logback/logback-core@1.5.6, cpe:2.3:a:qos:logback:1.5.6:*:*:*:*:*:*:*) : CVE-2024-12798, CVE-2024-12801
또한, 플러그인은 발견된 취약성의 세부 사항을 포함하는 HTML 보고서를 생성합니다. 파일 이름은 dependency-check-report.html이며, 빌드 폴더 아래에서 찾을 수 있습니다:
4. CVSS 점수
보고서로 넘어가서 구성 요소 취약성의 세부 사항을 살펴보겠습니다. 각 취약성은 공통 취약성 점수 체계(Common Vulnerability Scoring System, CVSS) 점수와 연관되어 있습니다:
CVSS는 취약성의 심각성을 측정하는 표준입니다. 점수는 0에서 10까지 범위이며, 높은 점수는 더 심각한 취약성을 나타냅니다.
Maven 플러그인에는 failBuildOnCVSS라는 옵션이 있으며, 이를 구성하여 구성 요소의 CVSS 점수가 임계값을 초과할 경우 빌드가 실패하도록 설정할 수 있습니다. 본 예제에서는 7을 사용하여 현재 의존성 세트가 실패하지 않도록 합니다. 점수가 7 이상일 경우 일반적으로 높은 심각도로 간주됩니다.
이전 보고서에서 본 가장 높은 CVSS 점수는 5.9입니다. 이제 failBuildOnCVSS 옵션을 5.0으로 업데이트하고 플러그인을 다시 실행해 보겠습니다. 그러면 Maven은 이번에 빌드에 실패합니다:
[ERROR] Failed to execute goal org.owasp:dependency-check-maven:11.1.1:check (default-cli) on project dependency-check:
[ERROR]
[ERROR] One or more dependencies were identified with vulnerabilities that have a CVSS score greater than or equal to '5.0':
[ERROR]
[ERROR] logback-core-1.5.6.jar: CVE-2024-12798(5.900000095367432)
[ERROR]
[ERROR] See the dependency-check report for more details.
이것은 CVSS 점수가 주어진 임계값을 초과할 경우 빌드를 실패하도록 설정하는 것이 우리에게 중요할 수 있습니다. 이렇게 하면 높은 심각성을 가진 취약성이 포함된 의존성을 가진 애플리케이션을 배포하지 않게 됩니다.
5. 결론
서드파티 라이브러리를 통합하는 것은 애플리케이션 개발 속도를 높일 수 있지만, 취약성을 도입할 수 있습니다. OWASP Dependency-Check 플러그인은 CPE 및 CVE 데이터를 기반으로 취약한 의존성을 식별하는 데 도움을 줄 수 있습니다.
우리는 Maven에 이를 통합하여 자동으로 취약한 구성 요소를 찾고, 심각한 CVSS 점수가 있는 의존성이 있으면 빌드를 실패하게 할 수 있습니다.
항상 그렇듯이 전체 예제는 GitHub에서 확인할 수 있습니다.