보안 제품정보


큰일날 뻔한 전 세계 파이선 생태계, 깃허브의 안전한 사용 방법 드러내 2024.07.17

파이선 생태계를 완전히 뒤집어 엎을 만한 사건이 있었다. 공개된 곳에 중요 깃허브 계정의 접근 토큰이 저장되어 있었던 것이다. 보안 업체가 먼저 발견해 현재는 그 토큰이 폐지됐지만, 그 사이에 누가 그 정보를 가지고 갔을지는 알 수 없다.

[보안뉴스 문정후 기자] 파이선, PyPI, 파이선소프트웨어재단(Python Software Foundation)이라고 하면 파이선이라는 프로그래밍 언어를 중심으로 구성된 거대한 개발 커뮤니티에서도 핵심이자 중추라고 할 수 있다. 파이선은 언어 그 자체이며, PyPI는 파이선으로 만들어진 각종 패키지와 오픈소스들이 공유되는 곳이라 개발자들이 부지런히 들리고 생활하며, 파이선소프트웨어재단은 파이선 언어를 관리하고 유지하는 곳이다. ‘파이선 생태계’의 알파와 오메가들인 것이다.

[이미지 = gettyimagesbank]


이 세 가지 핵심 요소들도 깃허브에 리포지터리들을 보유하고 있고, 이를 바탕으로 여러 프로젝트들을 진행한다. 이 깃허브에는 소스코드도 포함되어 있고, 그렇게까지 중요한 정보가 포함된 깃허브 리포지터리는 주요 관리자들만 접근할 수 있도록 설정되어 있다. 즉 관리자 권한의 크리덴셜이나 접근 토큰이 있다면 파이선이나 PyPI, 파이선소프트웨어재단의 주요 소스코드를 가져가거나 변경하거나 삭제할 수 있다는 뜻이 된다. 그렇기에 깃허브 리포지터리 관리는 소프트웨어 프로젝트를 진행하는 어느 조직에 있어서나 대단히 중요한 관리 대상이 된다.

그런데 보안 업체 제이프로그(JFrog)가 얼마 전 이런 중요한 깃허브 리포지터리들에 대한 접근 토큰을 인터넷에서 발견했다. 제이프로그의 블로그 게시글에 의하면 접근 토큰이 도커허브(Docker Hub)라는 도커 이미지 저장소의 공공 컨테이너 하나에 공개된 채 있었다고 한다. 무슨 뜻인가? “누구라도 이 컨테이너에 발견했다면, 그리고 그 누군가가 악의적인 성향을 가지고 있었다면 각종 PyPI 패키지들에 악성 코드를 주입하거나, 심지어 파이선 언어 자체를 완전히 조작해 놓을 수 있었습니다. 파이선 생태계가 하루아침에 전복될 수도 있었다는 뜻입니다.”

하지만 공격자들이라고 해서 단 번에 그런 파괴적인 효과를 노리는 건 아닐 것이다. 누군가는 이 기회를 보다 은밀히, 조금씩, 장기적으로 활용하려고 마음을 먹었을 수도 있다. 즉 보이지 않는 어딘가에서 아무도 모르게 PyPI 패키지를 조작한다거나, 더 조심스럽게 일을 진행하는 누군가가 있을 수 있다는 뜻이다. “이번 사태의 가장 심각한 점이 바로 그것입니다. 정확한 피해 규모를 예상조차 할 수 없다는 것이요. 이 일로 인해 파이선 생태계에서 언젠가 큰 일이 일어날 수도 있고, 아무 일도 없이 지나갈 수도 있습니다. 지금으로서는 아무 것도 알 수 없습니다.”

정확히 무엇을 찾아낸 것인가?
제이프로그는 자신들이 찾아낸 것을 ‘클래식 깃허브 토큰이라고 표현한다. 보다 최근의 토큰은 세밀하게 권한을 주는 데 반해 ‘클래식 토큰’은 리포지터리에 대한 접근 권한을 뭉뚱그려 준다는 게 제이프로그 측의 설명이다. “한 계정으로 여러 리포지터리에 접근할 수 있는 경우가 많죠. 한 개발자가 여러 프로젝트에 참여할 수 있으니까요. 하지만 그 개발자가 모든 프로젝트에서 관리자는 아닐 거잖아요? 그러니 같은 계정으로 리포지터리들에 접근한다 해도 권한이 제각각 달라져야 합니다. 이걸 최신 토큰들은 잘 해내는데 예전 토큰들은 그렇지 않아요. 전부 비슷한 권한을 갖게 됩니다.”

제이프로그가 발견한 문제의 도커 컨테이너는 한 깃허브 계정과 연결되어 있었고, 그 깃허브 계정은 파이선의 핵심 인프라와 리포지터리들에 관리자 권한으로 접근할 수 있었다고 한다. “이번에 발견된 토큰의 경우 컴파일 된 파이선 파일 형태로 저장되어 있었습니다. 하지만 컴파일링이 되기 전의 소스코드에는 토큰이 없었어요. 아마도 계정의 원래 주인이 소스코드에 잠깐 접근 토큰을 첨부해 사용하다가 소스코드와 같이 컴파일링을 했던 것 같습니다. 그런 다음 소스코드에서는 토큰을 지웠는데 컴파일 된 파일은 미처 확인하지 못한 것이죠. 그 상태에서 도커 이미지 내에 소스코드와 바이너리를 같이 넣어 공개한 것이고요.”

그러므로 보안 감사를 할 때는 소스코드와 바이너리 데이터를 전부 점검해야 한다고 제이프로그는 강조한다. “물론 비밀을 바이너리 파일에서 검색해 찾는다는 게 쉽지 않습니다. 소스코드는 텍스트 기반 파일이라 비교적 쉽게 점검이 가능하지만요. 하지만 이번 경우를 통해 확인되었다시피 바이너리 데이터에만 민감한 정보가 있을 수도 있습니다. 이번 사건이 바이너리에만 민감 정보가 포함된 최초의 사건도 아니고, 마지막 사건도 아닐 겁니다.”

공공 리포지터리와 도커허브, 어떻게 사용해야 안전한가
이번 일을 계기로 제이프로그는 다음 몇 가지 실천 사항을 도출해 강조하기도 했다. “소스코드를 스캔해서 비밀을 삭제하는 것만으로는 비밀을 온전히 지켜낼 수 없습니다. 현대의 개발자 도구들은 소스코드에서 각종 비밀들을 잘 찾아냅니다. 하지만 소스코드에서 뭔가를 찾아낸다고 해서 비밀 유출이 전부 차단되는 건 아닙니다. 그 점을 기억하고 바이너리도 꼼꼼하게 점검할 수 있어야 합니다. 그 다음으로는, 예전의 깃허브 토큰들을 새 것으로 교체하는 게 안전하다는 것도 강조할 수 있습니다. 이전 버전들을 아무래도 최신 버전들보다 덜 안전합니다.”

마지막으로 제이프로그는 “토큰들의 권한 설정을 세밀하게 하는 게 안전하다”고 짚는다. “아무리 최신 버전의 토큰들이라고 하더라도 안전하게 사용하지 않으면 별 소용이 없습니다. 즉 새 토큰들의 권한 세분화 기능을 최대한 이용해야 한다는 겁니다. 깃허브가 이런 새 토큰들을 괜히 새로 도입한 게 아니죠. 보안의 측면에서 훨씬 나은 옵션을 제공해 준 겁니다. 그러면 사용자 입장에서도 이를 활용하는 게 현명하겠죠.”

아직까지 이번에 노출된 접근 토큰에서부터 파생한 피해 사례는 발견되지 않고 있다. 게다가 PyPI가 재빠르게 대응을 한 덕분에 그래도 사건이 빠르게 마무리 되어가는 느낌이다. “저희는 접근 토큰을 발견하고서는 PyPI와 재단 측에 곧바로 해당 사실을 알렸습니다. 그랬을 때 PyPI의 보안 팀이 금방 응답을 해 주었습니다. 불과 17분 만에 해당 토큰을 삭제하더라고요. 보안 제보가 들어왔을 때 이런 식으로 대응하는 게 가장 모범적이라고 할 수 있습니다.”

3줄 요약
1. 파이선 생태계에 거대한 위험이 있을 뻔함.
2. 어쩌면 다가오고 있는 것일 수도 있음.
3. 깃허브 접근 토큰 관리, 보다 꼼꼼하고 최신화 될 필요 있음.

[국제부 문정후 기자(globoan@boannews.com)]

<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>