오픈소스 코드 취약점 악용 공격 성행…모든 코드 안정성 검증해야
[데이터넷] 코로나19 위기 상황에서 ICT는 오히려 빛을 발하며 한 단계 더 진화해 성장을 이어 나갔다. 비즈니스 환경이 급변하고 디지털 트랜스포메이션이 다양한 산업 분야로 확산되며 ICT의 중요성이 더욱 커졌기 때문이다. ICT 기술 분야별 분석과 평가를 통해 2023년 ICT 시장을 전망한다.<편집자>
마이크로소프트의 코드서명 인증서가 탈취돼 랜섬웨어 유포에 사용된 정황이 발견됐다. 감염된 드라이버에 마이크로소프트 하드웨어 개발자 등록을 위한 인증서의 서명이 된 상태로 배포된 것이다. 감염된 드라이버는 EDR 등 엔드포인트 보안 솔루션을 중단시키고, 랜섬웨어 유포와 SIM 스와핑을 시도한 것으로 분석된다. 공격자는 통신사, MSP 사업자 등을 타깃으로 배포해 대규모 피해를 일으키려고 했던 것으로 보인다.
코드서명은 개발 완료된 소프트웨어에 일종의 날인을 하는 것으로, 해당 소프트웨어가 위변조되지 않은 원본이라는 사실을 입증하는 것이다. 코드서명을 위해서는 신뢰된 인증서가 필요하며, 소프트웨어 개발사가 발급받은 인증서에 암호화된 자사 고유의 서명을 함으로써 개발된 소프트웨어가 변조되지 않도록 한다.
공격자는 소프트웨어 개발사의 인증서를 탈취해 감염된 파일에 서명을 하고 정상 파일인 것처럼 유포한다. 이러한 방식의 공급망 공격으로 솔라윈즈 고객들이 큰 피해를 입었으며, 국내에서도 페이코 앱의 서명이 탈취돼 악성앱 제작에 사용된 정황이 발견되기도 했다.

전 세계 조직 40% “공급망 보안 사고 경험”
세계경제포럼 설문조사에 따르면 전 세계 조직 약 40%가 공급망 내 사이버 보안 사고를 경험해 본 적이 있는 것으로 나타났다. 공급망은 많은 기업·기관이 서로 영향을 미치기 때문에 보안사고를 당하기 매우 쉽다.
공급망 공격은 다양한 형태로 진행된다. 소프트웨어 개발사의 인증서를 탈취해 변조된 소프트웨어에 코드서명을 한 후 배포하는 공격은 오래 전부터 사용되어오던 방식이다. 소프트웨어의 취약점을 이용하거나 오픈소스 취약점을 이용하는 방식, 아웃소싱 소프트웨어 개발사를 감염시켜 오염된 코드를 납품하도록 하는 방식 등을 공격자들이 사용했다.
하드웨어 공급망 공격 위험도 있다. 글로벌 서버 제조사의 하드웨어 메인보드에 스파이칩이 숨어있었다는 의혹이 2018년 제기된 바 있다.
이 같은 하드웨어 공급망 공격이 현실적으로 쉬운 일은 아니지만, 소프트웨어 공급망 공격은 매우 쉽게 일어날 수 있다. 소프트웨어는 복잡한 공급망 생태계를 갖고 있기 때문이다. 대부분의 소프트웨어는 오픈소스 라이브러리에서 가져와 목적에 맞게 수정해서 사용한다. 오픈소스 커뮤니티에서는 집단지성의 힘으로 라이브러리의 코드 취약점을 점검하고 있으며, 새로 발견되는 취약점은 커뮤니티 공지사항이나 혹은 게시글로 안내한다.
하나의 소프트웨어에도 수 없이 많은 오픈소스 코드가 사용되는 현실에서, 발견되는 모든 취약점을 일일이 찾아서 해결하는 것은 불가능하다. 방대한 오픈소스 커뮤니티에 게시되는 취약점 정보를 모두 알아내는 것도 어려울 뿐 아니라, 현재 사용중인 소프트웨어에 어떤 오픈소스 코드가 사용되고 있는지도 파악하지 못하는게 현실이다. 오픈소스 코드 취약점을 스캔해 조치하는 솔루션도 있지만, 코드의 일부만 사용하거나 패킹되어 숨어있는 코드까지 정확하게 파악할 수 있는지도 불투명하다.
오픈소스 취약점 관리 위해 SBoM 필요
오픈소스 취약점의 심각성은 로그4j 취약점 사태를 통해 알 수 있다.로그4j 취약점을 해결하기 위해서는 취약점 영향을 받지 않는 버전으로 바꾸거나 공격을 중단시키는 명령어를 삽입해야 하는데, 공격자들이 이 명령어를 우회하는 다른 취약점을 찾아내 명령어를 다시 바꾸기를 몇 차례씩 반복하면서 대응을 어렵게 했다.
취약점 영향받는 버전을 사용하는 시스템을 찾는 것도 쉽지 않았으며, 버전 변경으로 서비스가 영향을 받게 될 것을 우려해 조치하지 않는 경우도 많았다. 로그4j 취약점이 공개된지 1년이 지난 현재도 여전히 취약점이 완전히 제거됐다고 자신할 수 없다.
이 같은 오픈소스 취약점으로 인한 문제를 해결하는 방법으로 소프트웨어 자재 명세(SBoM)가 필요하게 됐으며, 미국 행정부는 정부기관에 공급하는 모든 소프트웨어에 SBoM을 의무적으로 공급하도록 했다. SBoM은 소프트웨어를 구성하는 모든 요소를 정확하게 밝혀 취약점이 발견됐을 때 즉시 조치하도록 하는 것이다.
SBoM은 거의 대부분의 애플리케이션 보안 테스트(AST) 기업들이 제공하고 있을 뿐 아니라 태니엄, 아쿠아시큐리티 등의 보안 기업들도 기능을 제공하면서 코드 취약점 문제에 빠르게 대응하도록 한다.
SW 공급사 입장의 코드 검증 지원
SBoM은 외부에서 공급받은 코드의 현황을 가시화한다는 점에서 의미가 있지만, SBoM이 얼마나 완벽하게 작성됐는지, SBoM 작성 과정에서 침해당하지는 않았는지 보장할 수 없다는 우려도 있다. 오픈소스 라이브러리가 아니라 외부 개발자가 직접 개발한 코드에 대해서는 검증할 수 없기 때문에 소프트웨어 공급망 보호에 부족한 점이 있다.
소프트캠프의 자회사 레드펜소프트는 소프트웨어를 공급받는 기업이 직접 이 소프트웨어를 검증할 수 있는 프로세스를 제공한다. 외부에서 공급받은 소프트웨어 코드를검증해 공격에 악용될 수 있는 코드가 있거나 신뢰할 수 없거나 의심스러운 코드가 있을 때 개발사에 소명을 요청하는 서비스를 제공한다. 필요 시 화이트해커의 분석으로 해당 코드의 안정성을 검증한다.
레드펜소프트는 코드 없이 라이브러리나 바이너리로 공급받는 파일도 검증할 수 있으며, 오픈소스나 소프트웨어 제반 컴포넌트에 대한 의심·위협행위를 검증할 수 있다. 또한 소프트웨어 공급망 공격 기법에 활용되고 있는 최신 TTPs를 연구해 소프트웨어 공급망 공격 방어 기술을 업그레이드하고 있다.
‘신뢰할 수 있는 코드’로 위장하는 공격자
공격자들은 취약점이 있는 코드를 더 많은 개발자들이 채택하게 하기 위해 유명한 개발자의 계정으로 위장하거나 개발자 계정을 탈취해 악성 라이브러리를 직접 업로드한다. 또 개발자를 감염시켜 취약점이 포함된 라이브러리를 업로드하도록 한다.
체크막스가 발견해 공개한 ‘와습(Wasp)’의 경우, 인기있는 무료 파이선 패키지를 통해 유포됐는데, 인기있는 개발자 계정의 프로필 설명을 도용하고, 인기있는 패키지와 비슷한 이름으로 배포 플랫폼에 업로드됐다. 공격자는 스테가노그래피 기법으로 악의적인 코드를 숨겼다.
체크막스는 이 처럼 지능적인 오픈소스 취약점 위협을 차단할 수 있도록 ‘체크막스원’ 플랫폼을 통해 소프트웨어 구성 분석(SCA) 솔루션을 제공한다. 정적·동적 분석으로 오픈소스에 추가된 악성 패키지를 식별하며, 악성 패키지를 통한 공격 패턴을 식별하고, 인텔리전스를 제공한다.
체크막스는 ‘낯선 사람에게서 코드를 받지 말라’는 원칙으로 개발과정에서 모든 코드를 분석해 안전한 코드만을 적용하도록 한다. 공급망 보안(SCS) 솔루션도 제공해, 취약성과 동작·평판 이상 탐지, 사전 예방적 위협 검색으로 오픈소스 공급망 공격으로부터 애플리케이션을 보호한다.
체크막스원 플랫폼에는 정적분석(SAST), SCA, SCS, API 보안, DAST, IaC 보안, 컨테이너 보안이 통합돼 있으며, 개발자 훈련을 위한 코드베이싱도 제공된다. 업계 최고의 전문성을 가진 시큐리티 리서치를 통해 소프트웨어 보안을 강화하며, SDLC와 완벽한 통합으로 보안 전문성이 없는 개발자도 안전한 소프트웨어 개발이 가능하도록 한다.
체크막스는 ‘체크막스 퓨전’ 기술을 이용해 플랫폼에 속한 각각의 솔루션이 탐지한 위협을 연계분석해 우회공격까지 차단할 수 있다. 예를 들어 SAST에서 의심스러운 코드 행위가 발견됐지만 위험의 수준이 낮아서 제거할 필요가 없었지만, DAST 혹은 운영과정으로 이어지면서 리스크가 높아질 수 있다.
AST, DAST 각각에서 탐지한 위험 수준이 낮다면 기존 솔루션은 이 리스크를 주목하지 못하고 향후 심각한 위협으로 발전하도록 방치할 수 있다. 체크막스 퓨전은 각각의 솔루션에서 탐지된 위협을 연계분석해 탐지된 이벤트의 위험도를 추적해 분석하면서 위협을 선제적으로 제거한다.
클라우드로 공급망 공격 위협 높아져
소프트웨어 공급망 공격의 위험성이 높아지는 결정적인 배경은 클라우드에서 찾을 수 있다. 클라우드는 빠르게 변하는 비즈니스 요구에 맞추기 위해 빠르게 서비스를 개발하고 배포할 수 있는 방법을 채택했다. 애플리케이션 개발은 마이크로서비스 아키텍처를 채택해 작은 단위로 개발된 소프트웨어를 API로 조립하고, 소프트웨어 코드는 계속 재사용해 개발에 드는 비용과 시간을 줄인다. 지속적으로 개발하고 배포할 수 있도록 CI/CD 파이프라인을 구축하고, 개발과 운영을 동시에 진행해 서비스를 최적화하기 위해 데브옵스를 선택했다.
개발조직은 오픈소스·개발자 커뮤니티에서 공개된 라이브러리와 이미지를 가져와 사용하고, 별도의 보안 테스트 없이 개발, 배포하고 운영한다. 개발자들은 ‘많이 사용하는 라이브러리는 문제없다’고 생각하기 쉬우며, 대부분의 경우 보안에 대한 충분한 이해가 없기 때문에 보안 점검을 해야 한다고 생각하지 않는다.
공격자는 개발자 커뮤니티에서 많이 사용하는 인기있는 패키지에 악의적인 코드를 주입시킨 후 해당 패키지와 비슷한 이름으로 업로드해 개발자들이 이를 내려받도록 한다. 혹은 인기있는 개발자와 비슷한 이름의 계정을 만들어 유사하지만 악의적인 파일을 만들어 올린다. 개발자 계정을 탈취해 악의적인 코드를 올리기도 하며, 개발자를 감염시켜 악성코드를 숨긴 패키지를 업로드 하도록 만들기도 한다.
CNAPP으로 클라우드 공급망 보호
SAST, DAST, SCA 등 AST 툴을 이용해 코드의 취약점을 찾을 수 있지만, AST는 개발과 배포 단계에서 취약점을 찾아주며, 운영 과정까지 보호하지 않는다. 또 잘못된 코드와 구성으로 컴플라이언스를 위반하거나, 권한없는 사용자의 무단 접속을 허용하는 등의 실수가 발생할 수 있는데, 이를 AST가 보호하지는 못한다.
클라우드 네이티브 애플리케이션 보호 플랫폼(CNAPP)이 빌드, 인프라, 워크로드 전체를 보호해 클라우드를 안전하게 만들고 각종 공급망 공격을 제어한다고 주장한다. CNAPP은 클라우드 워크로드 보호 플랫폼(CWPP), 클라우드 보안 형상관리(CSPM)와 클라우드 애플리케이션 및 인프라 보호 솔루션을 통합하면서 클라우드 네이티브 환경을 보호하는 플랫폼의 역할을 한다.
CNAPP의 빌드 보안 기능은 개발·배포 중 취약성이나 멀웨어, 침입 시도 등을 스캔하고 제어한다. 런타임 환경에서도 동적인 정책 적용으로 안전한 클라우드 운영이 가능하도록 한다. CNAPP 전문기업 아쿠아시큐리티는 소프트웨어 공급망 보안 솔루션을 플랫폼에 통합시키고, SBoM 기능도 지원한다.
아쿠아는 SBoM을 의무화한 미국 행정명령 14028을 준수하는 소프트웨어 공급망 보안 증명을 제공한다. 아쿠아 SBoM은 코드의 출처를 신뢰할 수 있으며, 코드 취약점이 제거됐다는 사실을 증명할 수 있고, 내부·서드파티 코드의 원천 데이터를 관리하고, 출시되는 제품별로 SBoM을 확보할 수 있게 한다. 이를 통해 안전한 개발 프로세스를 유지할 수 있게 하고, 데이터 정합성과 사용중인 오픈소스 소프트웨어를 안전하게 유지할 수 있게 한다.
아쿠아 CNAPP은 클라우드 네이티브 환경에서 생성, 배포, 실행, 운영되는 자산과 인프라 대한 리스크의 우선순위를 정의하고 예방, 탐지, 대응 라이프사이클을 자동화한다. 코드 리포지토리 보안, IaC 보안, 오케스트레이터 보안, 클라우드 네이티브 위협 탐지와 대응(CNDR) 등 전체 파이프라인과 생명주기를 커버하는 모니터링, 통제 기능을 제공한다.
전문기업 인수하며 CNAPP 강화
CNAPP 시장에서 팔로알토 네트웍스의 활약이 돋보인다. 팔로알토 네트워스는 CANPP 플랫폼 ‘프리즈마 클라우드’에 SCA를 추가하는 한편, 소프트웨어 공급망 보안 기업 사이더 시큐리티(Cider Security)를 인수하면서 코드에서 클라우드까지 보호하는 포괄적인 공급망 보안을 지원한다.
프리즈마 클라우드는 개발자 도구와 통합된 클라우드 네이티브 인프라와 애플리케이션을 위한 자동화된 보안을 제공한디. IaC 탬플릿, 컨테이너 이미지, 오픈소스 패키지, CI/CD 파이프라인의 취약성, 잘못된 구성, 규제준수 위반 식별 등의기능을 제공한다.
오픈소스 커뮤니티에서 지원하는 잘못된 구성 검사, 수년간의 전문 지식과 위협 연구로 뒷받침되는 취약성 분석을 제공한다. 연결된 가시성과 정책 제어를 통해 엔지니어링 팀은 별도 도구를 사용하지 않고도 전체 스택을 보호할 수 있고, 보안팀은 배포된 모든 코드가 안전한지 확인할 수 있다.