오픈소스의 다양한 활용성과 함께 제기될 수 있는 취약점 이슈에 대응하는 법
[보안뉴스= 김주원 사이버보안 분야 칼럼리스트] 제우스의 바람기에 신들의 왕후이자 결혼·가정생활의 여신인 헤라는 분통이 터져 골머리가 아팠다. 화병이 도진 것이다. 제우스에게서 더 이상 바람을 피우지 않겠다는 다짐을 얼마나 많이 받았던가. 그런데 이번에는 다산(多産)과 육아의 여신 레토가 제우스와 동침해서 쌍둥이를 임신했다는 소식을 들은 것이다. 이 소식만으로도 화가 머리끝에서 뿜어져 나올 판인데, 더 기가 막히는 소식이 하나 더 있었다. 그 쌍둥이들이 태어나면 아버지인 제우스 다음가는 권력을 누릴 것이라는 예언이 있었던 것이다.
![](https://www.boannews.com/media/upFiles2/2020/08/798990953_3297.jpg)
“아니, 신들의 왕후인 이 헤라도 말이지 전쟁의 신인 아레스, 대장장이들의 신인 헤파이스토스 등 여러 아들을 낳아주었잖아! 그런데 걔네들을 제치고 아직 태어나지도 않은 레토의 애들한테 후계자 자리를 물려준단 말이야?! 이게 말이 되냐고!”
결국 헤라는 그 쌍둥이들이 태어나는 것을 막기로 했다. 하지만 자기가 직접 레토가 낳을 아이들을 해친다면 신들의 왕이기도 한 제우스는 이를 신들의 세계의 질서를 어지럽히는 범죄 행위로 보고 진노를 터뜨릴 게 분명했다. 게다가 자기 손에 직접 피를 묻히는 건 출산의 여신이기도 한 자신의 명예를 손상시킬 짓이다.
그래서 아주 조용히 처리하려고 ‘청부업자’에게 맡기기로 했다. 그런데 이렇듯 중대한 일을 신이나 인간에게 맡기면 결국 “내가 헤라 여신의 명을 받들어 레토의 신생아들을 처리했다!”면서 동네방네 떠들고 다닐 게 분명하다. 그래서 델포이 지역을 지배하는 큰 뱀인 피톤(Python)을 불러들였다.
“고귀하신 헤라님께서 어찌하여 저처럼 천하고 흉한 걸 찾으셨나요?”
피톤은 끝이 쪼개진 긴 혓바닥을 날름거리며 교활함을 드러내는 실눈을 뜨고서 헤라를 마주봤다. 대지의 여신 가이아의 아들 피톤은 델포이의 샘물 근처에 사는데, 성질이 사나워 샘물을 마시러 오는 사람과 짐승을 잡아먹어 악명이 높다.
“너에게 일을 맡겨야겠다, 피톤. 아마 네 어머니 가이아로부터 네 운명에 대해 들었으렷다? 너를 해칠 자가 제우스의 아들이라는 걸 말이야. 그게 바로 내 자식들이 아니라 저 레토가 곧 낳을 쌍둥이란다.”
피톤은 쪼개진 혀를 날름거리며 되물었다.
“그럼 제가 임신한 레토를 잡아먹으면 됩니까? 꿩 먹고 알 먹고 군요!”
“뭬이야? 그랬다가는 제우스가 너를 잡아 직접 고문해 정보를 캐낸 뒤, 너를 사주한 나도 가만두지 않을 것이야. 다른 신을 죽이는 건 신들의 세계에서도 범죄니까. 그리고 그렇게 극단적으로 할 거면 널 부르지도 않았을 게다! 그러니 그 교활하기로 유명한 머리를 좀 써보거라!”
피톤은 눈동자를 내리깔고서 곰곰 생각한 뒤 대답했다.
“그럼 레토가 출산한 직후, 그러니까 제 몸을 가누는 것조차 힘겨워하고 있을 때 그 쌍둥이를 잡아먹으면 어떨까요?”
헤라는 피톤의 답변에 기분이 살짝 좋아지기는 했다. 다산과 육아의 여신이 자기가 방금 출산한 애들도 관리를 못해서 뱀한테 잡아먹히게 만든다면 그 얼마나 망신이겠는가. 하지만 헤라는 곧 고개를 저으며 차분히 말했다.
”그것도 좋은 생각은 아니야. 결국은 제우스가 자기 핏줄들의 죽음을 알게 될 테고, 그러면 결과는 레토를 죽이는 것과 다를 게 없지. 그래! 레토가 쌍둥이를 낳지 못하도록 계속 겁박하거라. 그러면 레토의 쌍둥이들은 사산(死産)될 것이고, 레토도 그 후유증으로 오랫동안 고생 좀 하겠지.“
헤라로부터 이렇게 레토의 출산을 방해해 쌍둥이들을 사산시키라는 밀명을 받은 피톤은, 그 길로 레토를 끊임없이 쫓아다녔다. 그래서 레토는 아이 낳을 자리를 찾지 못했다. 인간들의 마을에도 가봤지만, 그들 또한 피톤이 자기네 마을을 박살내는 걸 두려워했다. 그런데 피톤에게는 결정적 약점이 있었다. 햇빛이 없는 어두운 곳에서는 장님이나 다름없어서 임무를 수행할 수 없었던 것이다.
이런 사실을 알아차린 레토는 바다의 신 포세이돈에게 도움을 청했다. 포세이돈은 레토 더러 오르티기아 섬으로 오게 한 뒤, 섬 전체를 가릴 정도로 큰 파도를 일으켰다. 파도가 솟구쳐 햇빛을 막아준 덕분에 레토는 태양의 신 아폴론과 달의 여신인 아르테미스를 낳을 수 있었다.
아폴론은 태어나자마자 피톤이 어머니를 괴롭히고 자기네 남매를 죽게 만들려고 했다는 사실을 알게 된다. 분기탱천한 아폴론은 활과 화살을 들고 피톤이 있던 델포이로 갔다. 피톤은 갓난아기의 모습을 한 아폴론을 보고서 방심한다. 그러자 아폴론은 화살을 당겼고, 피톤은 이런 아폴론을 마지막 순간까지 “애기님께서 참 잘 노신다!”며 비웃다가 화살에 몸이 꿰어 사망했다. 아폴론은 피톤의 껍질을 벗기고 불태웠으며, 그 재는 돌 밑에 묻어버렸다.
파이썬(Python)은 네덜란드의 컴퓨터 프로그래머 귀도 반 로섬이 1991년 발표한 대화형 언어다. 파이썬이라는 이름은 로섬이 좋아하는 영국 코미디 드라마 <몬티 파이썬의 비행 서커스(Monty Python┖s Flying Circus)>에서 따왔다고 알려져 있다. 그러나 피톤과 파이썬의 철자가 동일하고(그리스식으로 읽으냐, 영어식으로 읽느냐의 차이만 있을 뿐), 파이썬과 관련한 전공서적 중 대부분에 피톤과 같은 큰 뱀과 아폴론이 등장하는 걸 보면 영국 드라마보다 그리스 신화와 관련이 있는 게 확실한 듯하다.
요즘 학부모들도 큰 관심을 보이는 코딩(coding)의 의미는 인간이 프로그래밍하는 것을 의미한다. 즉, 하나에서 열까지 C, 자바, 펄 등 다양한 언어로 작성한 후 컴파일링을 활용해 기계언어로 변환시키는 어려운 작업이 코딩이다. 과거에는 이를 프로그래머가 일일이 수작업으로 했다. “만 라인! 2만 라인!” 하면서 말이다. 그러다 보니 프로그래밍 자체가 Difficult(어려운), Dirty(더러운), Dangerous(위험한)를 의미하는 3D 직종으로 분류되기도 했다.
하지만 최근에는 사람이 직접 프로그래밍하지 않아도 원하는 결과를 얻을 방법이 나왔다. 자신이 개발한 프로그램과 연동할 수 있도록 객체나 오브젝트(Object)로 만들어 제공하는 방법이 그것이다. 더군다나 무료에 언제든지 사용할 수 있도록 사이버공간에 공개되어 있다. 더욱 혁신적인 점은 소스코드까지 공개해야 모든 이가 소스코드를 확인하고 원하는 부분을 더하거나 빼거나 하는 식으로 자신의 프로그램에 삽입할 수 있게 되었다는 점이다.
과거에는 이러한 코드 자체의 저작권 문제가 쟁점이 되었지만, 코드를 자유롭게 사용할 수 있도록 오픈 공간에 올려두었으니 이제는 누구도 문제시하거나 막지 않고 있다. 그 대신 타인의 코드를 사용한다고 알리는 댓글을 남기거나 ‘좋아요’를 눌러주거나 또는 자신의 결과물에 인용 출처를 달아주는 정도의 에티켓은 필요하다.
이러한 오픈(공개) 소스 기반 활동은 기술 발전에 지대한 영향을 주었다. 일단 오픈소스 모델은 소스 프로그램에 대한 검증이 가능하므로, 검증 완료된 소스를 안심하고 사용할 수 있게 되었기 때문이다. 따라서 시행착오를 거치거나 프로그램을 다시 작성해야 하는 수고를 덜게 되었다. 소위 ‘삽질’을 하지 않아도 자신이 원하는 작업을 손쉽게 할 수 있게 된 것이다. 예를 들어, 우리가 재미있게 사용하는 테트리스 게임의 경우, 과거에는 블록과 게임 알고리즘을 일일이 만들어야 했지만, 지금은 테트리스 관련 소스 파일을 자신의 프로그램에서 호출하면 된다. 그래서 오늘날에는 프로그램을 개발할 때 ‘어떻게 하는지 아는(Know How)’ 것보다 ‘어디서 소스를 구해오면 되는지 아는(Know Where)’ 능력이 더욱 빛을 발하고 있다.
그런데 이러한 작업을 할 때 기존의 소프트웨어 도구를 이용하면 일이 복잡해지는 경우가 많다. 소프트웨어 도구도 기능이 워낙 다양해지고, 또 수많은 설정값들로 인해 전문 개발자가 아니고는 이러한 도구를 이용해 프로그램을 개발할 엄두가 안 나기 때문이다. 그러한 도구의 설치비용과 교육비용도 너무 높아서 일반인이 취미로 접근하기가 어려웠다. 비유하자면 취미로 자전거를 타고 싶은 사람에게 고급 MTB 자전거를 제시하며 산을 타는 방법을 가르치는 것과 같은 이치다.
그러나 전기자전거나 출시되면서 일반인도 자전거로 편하게 산을 탈 수 있게 되고, 더군다나 값비싼 전기자전거를 구입하지 않아도 공유경제 시스템으로 일정 기간 동안 저렴하게 임대할 수 있게 되었듯이, 오픈소스 기반 활동 덕분에 이런 분위기가 소프트웨어 분야에도 생겨난 셈이다.
파이썬은 이렇듯 아무나 접근할 수 없다는 프로그래밍 세계에 누구나 쉽게 접근할 수 있는 통로를 만들어주었다. 컴파일러를 자신의 컴퓨터에 설치하지 않아도 홈페이지나 앱으로 접근하면 프로그램을 개발할 수 있을 정도로 쉽게 설치되고, 즉석에서 결과를 보여주며, 작성된 파일을 저장·관리해주어 언제 어디서나 작업을 계속 이어갈 수 있도록 지원해주기 때문이다. 더구나 무료이며, 공개 서비스를 제공하다 보니 수많은 프로그래머가 요즘에는 파이썬으로 작업하고 있다.
하지만 우리는 파이썬을 마냥 좋아하기만 해서는 안 된다. 일단 그리스 신화의 파이썬(피톤)이 어두운 곳에서는 활동할 수 없다는 것과 아기인 아폴론에게 방심한 나머지 화살에 맞아 죽는다는 점에 주목해야 할 것이다. 즉, 파이썬으로 개발한 오픈소스 프로그램도 취약점이 있을 수 있다.
예를 들면, “모두가 검증하는 거잖아”라는 기대의 이면에는 검증을 소홀히 할 수 있는 틈이 존재하며, 오픈소스에 대해서는 누구도 제대로 된 책임의식을 갖지 않기에 문제가 발생하면 책임소재를 따지기 어렵다. 특히, 방대한 프로그램에서 상호 간에 정보가 이동할 때 어떻게 그러한 결과가 도출되었는지를 궁금해하는 사람도 없다. 아울러 자신이 직접 개발하지 않은 객체 프로그램을 이용한 데 대한 책임감도 떨어진다.
다음으로, 협업을 하거나 오픈소스를 가지고 오는 경우 그대로 믿고 사용하면 안 된다. 그 소스가 정확할지라도, 매개변수의 타입이 다르면 전혀 엉뚱한 결과가 나올 수 있기 때문이다.
1999년 미국 NASA(항공우주국)는 화성 탐사선을 실은 로켓을 발사했는데, 돌연 로켓과의 통신이 두절되었다. 이로써 탐사는커녕 탐사선 개발에 든 3년의 시간과 약 6억 달러(7200억 원)의 비용만 날렸다. 원인은 로켓의 출력을 계산할 때 NASA는 세계적 표준 단위인 미터법을 사용했지만 로켓을 납품한 회사는 파운드(lb)나 피트(ft) 같은 미국이 고집하는 인치법 단위를 사용한 것이다. 그 유명한 우주왕복선 챌린지호의 1986년 폭발사고도 연료통 이음새의 고무링 부품 규격을 미터법 대신 인치법을 기준으로 제작된 데 따른 것이었는데도 기존 단위에 대한 고집 탓에 고쳐지지 않았던 것이다. 이렇듯 협업은 효율적일 수 있지만 안전성을 담보할 수 없다.
가장 우려해야 할 점은 해킹 프로그램이 사이버공간에서 아무런 제약 없이 공개되고 있다는 사실이다. 즉, 기본적인 소양 교육을 받지 않은 해커들이 공개 사이트에서 해킹 도구를 다운로드 받은 뒤 사이버범죄를 저지를 수 있게 된 것이다. 물리적 공간에서는 피해자를 바로 식별할 수 있지만, 사이버공간에서는 직접 보이지 않는 불특정 다수를 대상으로 저지르다 보니 자책감이나 죄의식 없이, 일종의 자아도취에 빠져 범죄를 저지르게 되는 것이다.
특히, 이러한 범죄가 심각한 사회 혼란을 야기하고 있는데도 대다수 네티즌들은 그런 ‘신입’ 해커를 영웅이니 천재니 하며 떠받들기 일쑤여서 영웅심에 빠진 해커들이 이러한 범죄를 더 많이 저지르게 된다. 그러니 해킹 도구처럼 범죄에 이용될 수 있는 코드의 공개 범위를 제한할 필요가 있다.
이렇듯 인공지능 프로그램을 개발하는 과정에서 이러한 오픈소스를 이용하는 데 따른 책임 범위를 어떻게 정해야 할지가 또 하나의 숙제로 남았다. 물론 이러한 숙제를 방치한다면, 마치 애기인 아폴론에게 방심하여 결국 재가 되어 땅속에 묻힌 피톤처럼 될 것이다.
[글_ 김주원 사이버보안 분야 칼럼리스트]
<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>