소프트웨어 구성 분석(SCA)은 소프트웨어를 분석하는 과정으로, 주로 오픈 소스 구성 요소로 구축된 소프트웨어를 대상으로 하며 구성 요소가 최신 상태이고 보안이 유지되며 라이선스를 준수하는지 확인합니다.
SCA 툴은 소프트웨어의 소스 코드를 스캔하여 데이터를 데이터베이스에 수집하고, 이를 알려진 취약점 데이터베이스와 비교하며 업데이트 또는 라이선스 문제를 점검한 뒤 보고서를 생성합니다.
소프트웨어 구성 분석은 독점 구성 요소와 컨테이너 이미지 등 다양한 소프트웨어 요소를 스캔할 수 있지만, 주로 오픈 소스 라이브러리를 분석하는 데 사용됩니다. 오픈 소스 구성 요소는 거의 모든 최신 코드베이스에 어느 정도 포함되어 있으며, 해당 코드의 취약점이 공개되어 있기 때문에 오픈 소스 소프트웨어를 최신 상태로 유지하고 투명하게 관리하는 것이 특히 중요합니다.
SCA 툴은 출처가 불분명한 소프트웨어 구성 요소에서 발생하는 보안 취약점 위험, 서로 다른 오픈 소스 라이선스 간의 호환성 문제, 그리고 오픈 소스 라이브러리에 대한 문서화나 지원이 불완전하거나 부족한 문제를 관리합니다.
소프트웨어 구성 분석은 소프트웨어 개발 프로세스와 IT 운영을 통합하는 클라우드 네이티브 DevOps 파이프라인의 일부입니다. SCA는 개발과 운영에 보안을 통합하는 DevSecOps 파이프라인의 일부로서 조직의 보안 태세를 지원합니다. SCA 툴은 통합 개발 환경(IDE)에 배포되어 개발 과정에서 실시간으로 코드 분석을 제공합니다.
SCA는 정적 애플리케이션 보안 테스트(SAST), 동적 애플리케이션 보안 테스트(DAST), 그리고 의존성 스캐닝과 같은 다른 취약점 스캐닝 방식과는 차이가 있습니다.
IT 팀은 종종 SCA 툴을 사용하여 소프트웨어 자재 명세서(SBOM)를 생성합니다.SBOM은 규정 준수 및 공급망 보안을 위해 소프트웨어 제품의 모든 구성 요소, 라이브러리 및 모듈을 기계 판독 가능한 형식으로 나열합니다. 또한 SBOM은 SCA 스캐닝 정책을 더욱 정교하게 수립하는 데 활용될 수 있습니다.
International Data Corporation의 조사에 따르면 2024년 기준 직원 수 100명 이상의 기업 중 93%가 오픈 소스 소프트웨어를 사용하고 있으며, 이는 SCA 솔루션에 대한 광범위한 수요를 보여줍니다.1
Think 뉴스레터를 통해 AI, 자동화, 데이터 등 가장 중요하고 흥미로운 업계 동향에 대한 최신 소식을 받아보세요. IBM 개인정보 보호정책을 참조하세요.
SCA는 소스 코드를 수집하고 이를 취약점 데이터베이스와 비교하며 코드베이스에서 잠재적인 규정 준수 문제를 분석하고 오탐지를 제거한 뒤 사이버 보안 및 개발 팀을 위한 보고서를 생성하는 방식으로 작동합니다.
SCA 툴은 개발 수명 주기 전반에 걸쳐 지속적 통합 및 지속적 전달(CI/CD) 파이프라인의 일부로서 개발 중에 코드를 지속적으로 스캔하고 분석하며, 주로 오픈 소스 구성 요소와 타사 의존성에 초점을 맞춥니다.
이를 위해 SCA 툴은 먼저 IT 환경 내 모든 소프트웨어의 기본 요소를 나열하며, 여기에는 구성 요소, 프레임워크, 라이브러리, 컨테이너 이미지, 모듈 및 의존성이 포함됩니다. SCA 스캐닝의 두 가지 주요 형태는 다음과 같습니다.
정적 스캐닝(또는 매니페스트 스캐닝)은 구성 및 메타데이터 파일을 읽어 명시적으로 정의된 요소를 식별합니다.
동적 스캐닝(또는 런타임 스캐닝)은 바이너리 코드를 스캔하여 실행 중인 라이브러리를 실시간으로 식별합니다.
두 가지 스캔 방식 모두 장점과 단점이 있습니다. 정적 스캔은 실제 런타임 환경에 배포되지 않은 타사 구성 요소의 취약점까지 포함할 수 있어 오탐지를 발생시킬 수 있습니다. 반면 동적 스캔은 코드의 모든 요소가 런타임 환경에서 실행되는 것은 아니기 때문에 완전히 포괄적이지 않을 수 있습니다. 많은 조직이 두 방식을 함께 사용합니다.
SCA 툴이 코드 수집을 완료하면 소프트웨어 자재 명세서(SBOM)를 생성하고, 해당 SBOM의 구성 요소를 일반적인 취약점과 최신 소프트웨어 보안 위험을 설명하는 데이터베이스와 비교합니다.
보안 팀은 SBOM을 알려진 보안 취약점에 대한 자체 데이터베이스와 국가 취약점 데이터베이스(NVD) 또는 공통 취약점 및 노출(CVE) 목록과 같은 공개 데이터베이스와 비교합니다. 잠재적인 취약점이 식별되면 SCA 툴은 각 항목에 위협 점수(일반적으로 공통 취약점 평가 시스템(CVSS) 사용)를 할당하여 사이버 보안 팀이 대응 우선순위를 정할 수 있도록 합니다.
일부 보안 툴은 CI/CD 파이프라인의 일부로 적절한 패치나 업데이트를 적용하여 취약점 관리를 자동화합니다. 보안 팀은 적용된 변경 사항이 기존 의존성이나 기능에 영향을 미치지 않도록 이 과정을 지속적으로 모니터링합니다.
SCA 툴은 또한 소프트웨어 라이선스에 관한 회사 정책과 법규에 대해 SBOM을 검토하여 규정 준수를 보장합니다.
오픈 소스 이니셔티브는 100개 이상의 승인된 오픈 소스 라이선스를 나열하고 있으며, 그중 일부는 오픈 소스 코드를 기반으로 독점 제품을 생성하는 것을 허용합니다. 그러나 모든 라이선스가 서로 호환되는 것은 아니므로 조직은 자사 제품이 규정을 준수하도록 보장할 책임이 있습니다.
SCA 솔루션은 모든 오픈 소스 소프트웨어가 요구되는 저작자 표시를 포함하고 있는지, 또는 독점 및 저작권이 있는 소프트웨어에서의 사용을 금지하는 “카피레프트” 조건이 적용된 요소가 해당 소프트웨어 개발에 포함되지 않았는지 확인할 수 있습니다.
소프트웨어 구성 분석은 프로젝트 구성 요소 간의 의존성도 감지할 수 있으며, 이는 잠재적인 취약점의 주요 원인 중 하나입니다.
SCA 툴은 코드 수준에서 소프트웨어 구성 요소가 서로 직접 사용되는 직접 의존성과 전이 의존성 모두를 감지할 수 있습니다. 전이 의존성은 특정 소프트웨어가 자신의 직접 의존성이 의존하고 있는 다른 소프트웨어 구성 요소에 간접적으로 의존하게 되는 경우를 의미합니다. 예를 들어 구성 요소 A가 구성 요소 B에 의존하고, 구성 요소 B가 구성 요소 C에 의존하는 경우, 이 시나리오에서 구성 요소 A는 구성 요소 C에 전이적으로 의존하게 됩니다.
SCA 툴은 오탐 경고를 줄이기 위해 어떤 의존성이 취약점을 유발하는지와 그렇지 않은지를 판단해야 합니다. 이를 위해 소프트웨어 공급망을 평가하고 코드 내 취약점이 “도달 가능”한지, 즉 현재 네트워크 구성에서 런타임 환경에서 실제로 호출되는지를 판단합니다.
소프트웨어 구성 분석 결과는 보고서로 정리되며, 종종 독점 대시보드, JSON 파일과 같은 원시 데이터, 새로운 SBOM 또는 이들의 조합 형태로 제공됩니다.
최근 몇 년간 개발자들은 이러한 보고서에서 오탐을 줄이는 데 상당한 진전을 이루었습니다.
취약 메서드 분석은 소프트웨어 구성 요소의 호출 경로를 추적하여 탐지된 취약점이 실제로 도달 가능한지 확인합니다.
머신 러닝과 인공지능은 오탐 식별에 기여하고 있습니다. 적절한 학습이 이루어지면 모델은 취약점의 도달 가능 여부를 정확하게 식별할 수 있습니다. 자연어 처리는 GitHub와 같은 저장소의 버전 관리 커밋 메시지를 분석하여 코드에서 식별하기 어려운 잠재적 문제를 탐지하는 데에도 활용됩니다.
일부 SCA 툴은 지속적 모니터링 및 자동 수정 기능을 포함하여 DevSecOps 개발 워크플로에 더욱 깊이 통합됩니다. 자동 수정은 일반적으로 풀 리퀘스트를 생성하여 개발자에게 라이선스 문제를 수정하거나 새로운 보안 패치를 적용하도록 알리는 방식으로 이루어집니다.
SCA의 이점에는 조직의 규정 준수 및 사이버 보안 수준에 대한 신뢰 향상과 IT 워크플로 자동화 증가가 포함됩니다.
SCA는 IT 에코시스템 내 모든 오픈 소스 구성 요소가 라이선스 및 규정 준수 요구 사항에 맞게 사용되도록 지원하여 조직의 법적 위험을 줄이는 데 도움을 줍니다.
오픈 소스 소프트웨어 구성 요소의 예측 불가능성으로 인해 발생하는 네트워크 취약점을 식별하는 것은 IT 위험 관리의 핵심 요소입니다. 오픈 소스 소프트웨어 공급망의 투명성을 높이면 조직은 맞춤화와 비용 절감의 이점을 누리는 동시에 관련 보안 위험을 줄였다는 확신을 가질 수 있습니다.
취약점, 의존성 및 규정 준수 추적의 상당 부분을 자동화함으로써 SCA 솔루션은 IT 팀이 다른 업무에 집중할 수 있도록 합니다. 이러한 광범위한 자동화는 조직의 DevOps 운영을 강화하는 데에도 도움이 됩니다.
소프트웨어 구성 분석의 과제에는 취약점 추적의 포괄성 부족, 오탐 최소화, 분석 범위 관리 등이 포함됩니다.
서로 다른 SCA 툴은 서로 다른 취약점 데이터베이스를 참조하며, 이 데이터베이스가 항상 최신 상태인 것은 아닙니다. 어떤 제품을 선택하느냐에 따라 조직이 바라보는 네트워크 및 소프트웨어 구성 요소의 범위가 달라질 수 있습니다. 이로 인해 일부 새로운 취약점이 놓칠 수 있습니다. 분석가는 SCA 스캔을 수행할 때 이러한 잠재적인 “알 수 없는 미지의 위험”을 염두에 두어야 합니다.
호출 추적 및 머신 러닝 분석의 발전으로 오탐이 줄어들고 있지만, 이는 SCA 프로세스에서 불가피하게 발생하는 요소입니다. 이는 과도한 경고로 인해 발생하는 정신적 및 운영적 피로 상태인 경고 피로로 이어질 수 있으며, 대응 지연을 초래하고 경고 관리 및 보안 시스템에 대한 신뢰를 저하시킬 수 있습니다.
특정 IT 시스템에서 수많은 의존성을 추적하고 분석하는 작업은 특히 SCA 프로세스가 CI/CD 파이프라인의 일부로 자동화될 경우 네트워크 성능에 큰 부담이 될 수 있습니다. 조직은 SCA 스캔을 지원할 수 있는 리소스를 확보하고 성능을 고려하여 이를 배포해야 합니다.
소프트웨어 구성 분석은 현대 애플리케이션의 보안 취약점을 식별하는 또 다른 테스트 방법인 DAST 및 SAST와는 다릅니다.
SCA는 소프트웨어 구성 요소, 의존성 및 취약점에 대한 종합적인 구조를 제공하는 반면, DAST와 SAST는 해당 구성 요소와 이를 포함하는 소프트웨어 애플리케이션의 개별적인 결함을 식별하는 데 초점을 맞춥니다.
DAST와 SAST의 차이는 SCA에서의 정적 스캐닝과 동적 스캐닝의 차이와 유사합니다. 동적 애플리케이션 보안 테스트(DAST)는 운영 환경에서 애플리케이션을 평가하며 악의적인 사용자와 사이버 공격을 모방하여 보안 문제를 식별합니다. 정적 애플리케이션 보안 테스트(SAST)는 애플리케이션의 소스 코드를 분석하여 작성 단계에서 코드 내 취약점을 탐색합니다.
SCA는 특정 소프트웨어의 구성 요소를 나열하고 분석하는 데 중점을 두는 반면, DAST와 SAST는 각각 런타임 환경 또는 소스 코드 수준에서 해당 소프트웨어의 보안 취약점을 테스트하는 데 집중합니다. 두 방식 모두 SCA와 함께 사용되는 경우가 많지만, 독립적으로도 활용될 수 있습니다.
SCA는 조직의 IT 운영 내에서 애플리케이션, 시스템 및 프로세스 간의 관계를 식별하고 이해하며 시각화하는 과정인 의존성 매핑과는 차이가 있습니다.
SCA 툴은 구성 요소 간 의존성에 대한 개요를 제공하고 그로 인해 발생할 수 있는 잠재적 취약점을 식별하지만, 의존성 매핑은 전체 IT 환경 전반의 의존성을 파악하는 더 넓은 범주의 관측 가능성 실무를 의미합니다.
의존성 매핑은 애플리케이션 내부 및 애플리케이션 간 의존성에 초점을 맞출 수 있으며, 나아가 네트워크 인프라나 스마트 전력망과 같은 실제 시스템 전체의 의존성까지 분석할 수 있습니다. 의존성 매핑은 SCA 실무의 일부로 사용되는 경우가 많지만, SCA 솔루션과는 독립적으로 수행될 수도 있습니다.
Watsonx.ai는 애플리케이션 개발 팀이 워크플로에 AI를 원활하게 통합할 수 있도록 지원합니다. 이 포괄적인 툴킷은 모델 생성에서 배포에 이르기까지 전체 AI 라이프사이클를 지원합니다.
x86 하드웨어에서 메인프레임 애플리케이션 개발, 테스트, 데모, 교육을 위한 플랫폼을 사용합니다.
앱을 신속하게 설계하고 프로토타입을 제작하여 시장에 쉽게 출시할 수 있는 IBM의 모바일 앱 개발 플랫폼에 대해 알아보세요.
1. “IDC PlanScape: Validation of Open Source Software Sources,” Christopher Tozzi, IDC Planscape, 2025년 7월.