본문 바로가기
Security Essay

오픈소스 취약점 의존성 문제

by _Jay_ 2021. 6. 6.
반응형

이번주는 주말이 금방 지나가는 것 같습니다. 요즘 계속해서 생각하는건데, 별로 한건 없는데 시간은 잘가는.. 그런 씁쓸한 느낌은 지울 수가 없군요. 자.. 한탄은 접어두고, 오늘은 보안보다는 개발에 초점을 맞춘 사례를 다뤄보고자 합니다. 처음에 제목을 '오픈소스 취약점 디펜던시 문제'로 잡았다가, 영어 발음을 그대로 쓰기엔 처음보는 분들이 이해가 어려울 것 같아서 '의존성'으로 바꿨는데요. IT 업계에 있다보면 한국어로 번역하지 않고 영어 그대로 써야 그 단어 자체의 느낌을 전달할 수 있는 용어들이 꽤 많죠. 그래도 이 글에서는 쉽게 풀어서 말씀드리는게 목적이기 때문에 영어 발음을 그대로 가져다 쓰는 것은 웬만해서 지양하도록 하겠습니다. 그럼 금주의 마지막 글을 시작해보죠.

개발이나 보안 공부를 처음 시작하실 때나 어느 정도 규모가 있는 프로젝트를 개발하지 않는 한, 오픈소스(Open-source)를 가져다 써볼 일이 그다지 많지 않을 겁니다. 오픈소스가 무엇인지 모르는 분들을 위해서 간단하게 설명드리면, 말 그대로 누군가가 프로그램을 개발했는데 다른 사람들도 사용할 수 있도록 오픈한 소스코드를 말합니다. 내가 어떤 프로그램을 개발해야하는데 특정 기능을 하는 부분을 누군가 잘 개발해놨다면.. 굳이 내가 똑같은 기능을 개발을 할 필요가 없겠죠. 규모가 큰 프로젝트나 기업에 들어가서 직접 개발을 하게 되면, 오픈소스를 사용할 일이 많아지게 됩니다. 물론 라이센스 문제가 있겠지만 그건 여기서 논외로 하고.. 여기서는 오픈소스를 그대로 가져다 썼을 때 발생하는 문제점에 대해 이야기를 해보겠습니다.

오늘 인용한 기사에서는 지금까지 개발된 소프트웨어 중 98%에서 오픈소스 컴포넌트가 최소 1개 이상 발견되었고, 코드의 75%가 오픈소스 라이브러리를 참조했다고 합니다. 그런데 말이죠.. 물론 오픈소스를 써서 생산성 향상의 이점을 얻을 수 있긴 하지만, 이런식으로 소프트웨어끼리 의존성이 높아지게 되면 생기는 단점들도 존재하겠죠. 이를 소프트웨어 디펜던시라고 하는데, 만약 특정 오픈소스에서 취약점이 존재한다면 어떻게 될까요? 네.. 이 오픈소스를 사용하여 만든 모든 소프트웨어가 같은 취약점을 가지게 되겠죠. 문제는 취약점이 존재하는 A라는 오픈소스를 사용한 B도 오픈소스로 배포했을 때, C라는 소프트웨어가 B를 사용하게 된다면.. A에서 C로 갈수록 코드 규모는 커지기 때문에, 단순히 A에서 취약점을 고치는 것보다 C에 있는 A의 취약점을 고치는데는 더 많은 시간이 걸릴 겁니다.

이 소프트웨어 간 의존성 문제가 골치 아픈 이유는, 위에서 언급드린 것처럼 디펜던시가 다른 디펜던시를.. 다른 디펜던시가 또 다른 디펜던시를 만든다는 거죠. 그렇기 때문에 이 디펜던시가 증가할수록 취약점을 점점 더 찾기 어려워진다는데 있습니다. 특히 자바스크립트 기반 소프트웨어에서 꽤 많은 디펜던시가 존재한다고 하는데, 이는 취약점을 이용하는 해커에게 빌미를 제공할 수 있게 되겠죠. 이런 문제를 해결하기 위해서는 오픈소스에도 취약점이 존재한단는 사실을 인식하는 것부터 시작하고, 사용하려고 하는 오픈소스 단위로 취약점을 먼저 점검하신 후 사용해야 할 겁니다. 또한 오픈소스에 여러 기능이 존재할 때 필요한 부분만 가져와서 사용하는 것도 한 가지 방법이 되겠죠. 프로그램을 개발할 때 오픈소스에서 A라는 기능만 사용하면 충분한데, 괜히 전체 코드를 사용하다가 B라는 기능에 있는 취약점까지 떠안을 수 있기 때문입니다.

 

 

눈덩이처럼 불어나는 소프트웨어 디펜던시 문제, 물자표 제도 필요해

소프트웨어 애플리케이들은 평균 500개가 넘는 오픈소스 라이브러리들을 탑재하고 있다고 한다. 2년 전만 해도 298개였으니, 짧은 기간 동안 디펜던시가 77%나 올라갔다는 소리가 된다. 그렇다는

www.boannews.com

 

인용한 기사에서는 오픈소스 디펜던시 문제를 해결하기 위해 소프트웨어를 개발하는데 사용되는 구성요소를 표시하는 체계를 도입하자고 말하고 있는데, 기업의 이익을 위해 빠르게 개발하고 배포해야하는 현 상황에서는 장착되긴 어렵지 않을까..라는 생각을 해봅니다. 그리고 이 글을 쓰면서 소프트웨어 취약점에 대해 자세하게 설명하진 않았습니다만, 버퍼 오버플로우와 같은 전통적인 취약점이나 웹에서 자주 발견되는 파일 업로드 취약점, 인증 우회 취약점 등도 추후 설명드릴 기회가 있을 겁니다. 그럼 오늘 설명드릴 내용은 여기까지고요.. 이만 줄이도록 하죠. 감사합니다.

반응형

댓글