알려진 취약점이 있는 구성 요소 사용
대부분의 애플리케이션은 방대한 양의 타사 구성 요소를 사용합니다. 이러한 구성 요소는 로깅, 템플릿, 데이터베이스 액세스 등 모든 기능을 제공합니다.
이로 인해 소프트웨어 개발이 훨씬 쉬워지고 많은 시간을 절약할 수 있지만, 이러한 구성 요소 역시 사람이 만드는 것이기에 필연적으로 취약점이 포함될 수 있습니다. 즉, 자신도 모르는 사이에 악용될 수 있는 취약점에 노출될 위험이 있습니다.
구성 요소 최신 상태 유지하기
일반적인 원칙으로 프레임워크, 라이브러리 및 기타 구성 요소를 정기적으로 최신 상태로 유지하는 것이 강력히 권장됩니다. 이를 수행하는 방법은 다음과 같습니다.
- 많은 소스 제어 소프트웨어가 저장소를 분석하여 종속성에서 취약점이 발견되면 경고를 보낼 수 있습니다.
- 많은 패키지 관리자가 애플리케이션을 분석하여 취약한 종속성을 식별할 수 있습니다.
- 취약한 종속성을 식별할 수 있는 수많은 소프트웨어 구성 분석(SCA) 솔루션이 존재합니다.
기술 부채 위험 완화하기
라이브러리 업그레이드 시 발생하는 까다로운 문제 중 하나는 코드가 깨지는 변경 사항이 발생할 수 있다는 점입니다. 이러한 변경 사항은 종종 문서화되어 있지만, 프로덕션 환경에서 코드가 실행되기 전까지는 나타나지 않는 문서화되지 않은 변경 사항이 있을 수도 있습니다.
애플리케이션이 최신 버전보다 훨씬 뒤처진 상태로 실행 중이라면 최신 버전으로 업그레이드하는 데 상당한 작업이 필요할 수 있습니다. 시간이 중요한 취약점이 공개될 경우, 업그레이드에 며칠씩 걸리는 상황을 방지하려면 타사 구성 요소를 비교적 최신 상태로 유지하는 것이 매우 중요합니다.
또한 릴리스 노트를 읽지 않고 무작정 패키지를 업그레이드하는 것은 권장되지 않습니다. 릴리스 노트에는 명확하지 않지만 애플리케이션의 작동 방식을 바꿀 수 있는 중요한 변경 사항에 대한 정보가 포함되어 있을 수 있기 때문입니다.
업데이트가 오히려 보안을 취약하게 만들 수 있을까요?
흔한 일은 아니지만, 다음과 같은 취약점이 발생할 수 있는 사례가 있습니다.
- 이전 버전에는 존재하지 않음
- 취약점 수정 과정에서 새로 도입됨
이러한 사례 때문에 패키지를 정기적으로 업데이트하는 것이 바람직하지 않다고 생각할 수 있습니다. 물론 이러한 생각은 기술 부채를 쌓게 하므로 가능한 한 피해야 합니다.
이러한 시나리오는 비교적 드물기 때문에, 패키지를 자주 업데이트함으로써 얻는 이점이 새로 도입된 취약점의 가능성보다 훨씬 큽니다. 정기적으로 최신 상태를 유지한다면 이러한 취약점은 쉽게 완화할 수 있습니다.
또한 이는 공급업체가 공개 없이 조용히 취약점을 수정하지 않는다는 가정을 전제로 하는데, 안타깝게도 이는 여전히 매우 흔한 일입니다.
주요 사례
최근에 들어보셨을 만한 몇 가지 주요 사례를 아래에 나열했습니다. 라이브러리를 확인하고 최신 상태를 유지하는 것이 왜 중요하며 어떻게 해야 하는지 확인할 수 있습니다.
실무에 바로 적용하는 보안 코딩
OWASP Top 10과 같은 소프트웨어 취약점을 이해하고 완화하기 위한 보안 코딩 가이드라인을 살펴보고, 실제 앱 시뮬레이션을 통해 실습할 수 있는 가이드형 교육 미션을 시작해 보세요.