대부분의 개발자들은 보안 문제가 잘못된 코드에서 비롯된다고 생각한다.
서둘러 추가한 기능, 빠뜨린 검증 과정, 너무 오랫동안 방치된 TODO 항목… 우리가 흔히 스스로에게 하는 말은 간단합니다. 더 나은 코드를 작성하면 보안도 향상된다는 것이다.
그 이야기 는 한때는 말이 통했었다. 오늘날, 그것은 불완전하다.
현대 애플리케이션이 실패하는 이유는 엔지니어들이 갑자기 안전한 소프트웨어 작성법을 잊어버렸기 때문이 아닙니다. 실패의 원인은 우리가 의존하는 구성 요소들—라이브러리, 프레임워크, SDK, 오픈소스 생태계에서 가져온 유틸리티—안에 위험이 함께 묶여 들어오기 때문입니다. 운영 중인 애플리케이션 내부에서 실행되는 코드의 상당 부분은 해당 애플리케이션을 운영하는 팀이 직접 작성한 것이 아닙니다.
이것이 바로 저희의 새로운 전자책, '코드 속의 트로이 목마: 오픈소스 소프트웨어의 전이적 종속성과 상속된 위험 보안'입니다.
이 책은 많은 엔지니어링 및 보안 팀이 이제서야 완전히 이해하기 시작한 변화를 탐구합니다: 현대 소프트웨어에서 위험은 종종 작성되는 것이 아니라 상속되는 경우가 많습니다.
의존성과 함께 찾아오는 위험
마지막으로 라이브러리를 설치했던 때를 떠올려 보세요.
npm install, pip install을 실행하거나 프로젝트에 새로운 종속성을 추가했습니다. 몇 초 만에 패키지 관리자가 원하는 라이브러리를 가져와 실행에 필요한 모든 것을 조용히 설치했습니다.
그러나 그 빠른 설치 뒤에는 훨씬 더 큰 일이 벌어졌습니다. 단일 종속성은 종종 하위 종속성, 유틸리티, 헬퍼 라이브러리, 팀이 직접 평가한 적 없는 도구 등 추가 구성 요소들의 전체 그래프를 동반합니다. 이러한 구성 요소들 자체도 다른 것에 의존할 수 있어, 수백 개의 패키지를 포함할 수 있는 깊게 중첩된 실행 체인을 생성합니다.
겉보기에는 하나의 라이브러리를 추가한 것처럼 보입니다.
사실상, 당신은 전체 공급망을 수입했을 수도 있습니다.
그래서 이 전자책은 트로이 목마 비유를 사용합니다. 문제를 해결하고 개발 속도를 높이기 위해 신뢰할 수 있는 도구를 의도적으로 시스템에 도입합니다. 하지만 그 도구 안에는 명시적으로 초대하지 않은 다른 구성 요소들이 숨어 있습니다. 현대적인 패키지 생태계의 편리함 뒤에 숨어 자동으로 들어오는 것입니다.
대부분의 경우, 이는 의도한 대로 정확히 작동합니다. 오픈 소스는 혁신을 가속화하고, 팀들이 독자적으로 개발했을 때보다 훨씬 더 정교한 시스템을 구축할 수 있게 해줍니다. 하지만 이는 또한 애플리케이션의 공격 표면 중 상당 부분이 팀이 검토한 적 없는 코드에서 비롯된다는 것을 의미합니다.
나무의 깊은 곳
현대 소프트웨어 공급망에서 가장 흥미로운 역학 중 하나는 위험이 어디에 축적되는 경향이 있는가이다.
개발자들이 인지하는 종속성들—인기 있는 프레임워크와 널리 사용되는 라이브러리—는 지속적인 관심을 받습니다. 이들은 대규모 커뮤니티를 보유하고 있으며, 빈번한 업데이트가 이루어지고, 취약점을 감시하는 많은 이들의 시선이 쏠려 있습니다.
그러나 종속성 트리 깊숙이 들어갈수록 가시성은 급격히 떨어진다.
이러한 더 깊은 계층은 종종 문자열 파싱, 날짜 포맷팅, 또는 다른 패키지를 위한 내부 헬퍼 관리와 같은 작업을 처리하는 소규모 유틸리티 라이브러리들입니다. 이들은 단일 개발자에 의해 유지 관리되거나, 드물게 업데이트되거나, 상류 프레임워크를 통해 수천 개의 애플리케이션에 조용히 상속될 수 있습니다.
그러나 그들은 애플리케이션의 다른 모든 요소와 동일한 런타임 환경에서 실행됩니다.
그 결과 일종의 보안 사각지대가 발생합니다: 가시성이 가장 낮은 스택의 일부가 여전히 전체 시스템의 동작에 영향을 미칠 수 있습니다.
본 전자책은 이러한 '깊은 트리' 역학이 어떻게 상속된 위험을 생성하는지 탐구합니다. 이는 표준 보안 도구를 사용하더라도 많은 팀이 명확히 파악하기 어려운 부분입니다.
왜 상속된 위험을 고치는 것이 위험을 추가하는 것보다 더 어려운가
의존성을 추가하는 것은 쉽습니다. 그러나 그로부터 위험을 제거하는 것은 쉽지 않습니다.
의존성 트리 깊숙한 곳에서 취약점이 발견되면, 해당 취약점이 영향을 미치는 코드는 이미 빌드 아티팩트, 컨테이너 이미지, 운영 환경 배포에 포함되어 있을 수 있습니다. 해당 구성 요소를 업그레이드하려면 프레임워크, 플러그인, 내부 서비스 전반에 걸친 조율된 변경이 필요할 수 있습니다.
그 시점이 되면, 문제 해결은 단순한 패치 작업이 아닙니다. 안정성, 호환성, 출시 시기와 관련된 보다 광범위한 운영적 결정이 됩니다.
그 긴장감은 유전적 취약점이 누구도 원하지 않는 만큼 오래 지속될 수 있는 이유 중 하나다. 문제는 팀이 이를 무시한다는 것이 아니라, 안전하게 수정하려면 종종 운영 시스템의 현실을 헤쳐나가야 한다는 점이다.
이 책은 이러한 역학이 실제 환경에서 어떻게 작용하는지, 그리고 전통적인 보안 조언이 때때로 이를 고려하지 못하는 이유를 심층적으로 탐구합니다.
시스템을 명확히 파악하다
오픈소스로 구축한다는 것은 애플리케이션이 더 이상 팀이 작성한 코드 모음이 아니라는 점을 받아들이는 것을 의미합니다. 애플리케이션은 상호 연결된 구성 요소들의 생태계이며, 각 구성 요소는 고유한 유지보수 이력, 보안 상태, 수명 주기를 지닙니다.
해당 생태계를 이해하고, 그 안에서 위험이 어떻게 흐르는지 파악하는 것은 개발자와 보안 팀 모두에게 가장 중요한 역량 중 하나로 부상하고 있다.
이 전자책은 상속된 위험이 기존 기술적 부채와 어떻게 다르게 작용하는지, 의존성 트리가 취약점을 탐지하고 제거하기 어렵게 만드는 이유, 그리고 조직이 의존하는 시스템을 불안정하게 만들지 않으면서 노출을 줄일 수 있는 방법을 탐구합니다.
트로이 목마 속을 들여다보다
의존성 스택 깊숙이 숨겨진 취약점이 어떻게 실제 보안 사고를 초래하는지 궁금했던 분들을 위해, 이 전자책은 그 메커니즘을 상세히 분석합니다. 의존성 검증의 환상부터 상속된 위험 제거의 운영적 어려움까지, 숨겨진 라이브러리에서 운영 환경에 이르기까지 취약점이 밟는 경로를 추적합니다.
그리고 아마도 더 중요한 것은, 모든 코드 라인을 통제하는 것이 더 이상 현실적이지 않은 세상에서 팀들이 보안 전략을 어떻게 재고할 수 있는지 탐구한다는 점이다.
현대 소프트웨어에서는, 여러분이 작성한 취약점이 아니라 여러분의 스택에 존재하는 가장 위험한 취약점이 될 수 있기 때문입니다.
그것들은 함께 제공된 것들일 수 있습니다.
전체 이야기를 살펴보고 싶으시다면, 여기에서 전자책을 다운로드하실 수 있습니다:
코드에 숨겨진 트로이 목마: 오픈소스 소프트웨어에서 전이적 종속성과 상속된 위험 관리
트로이 목마는 이미 성 안으로 들어왔다. 문제는 그것이 함께 가져온 것이 무엇인지 당신이 이해하느냐이다.

