2021.10.07

회사 기밀 '줄줄' 샌다··· 깃허브 저장소에 숨겨진 데이터 유출 위험

Andrada Fiscutean | CSO
공격자는 개발자가 실수로 남긴 ‘기밀’을 찾기 위해 깃허브와 같은 퍼블릭 코드 리포지토리를 끊임없이 검색한다. 아무리 사소한 실수라도 충분히 악용될 수 있다. 

팬데믹 기간 중 어느 지루했던 날, 보안 연구원 크레이그 헤이스는 SSH 사용자 이름과 암호를 깃허브 저장소에 일부러 유출하고, 공격자가 이를 찾을 수 있는지 확인하는 실험을 했다. 그는 누군가가 이를 알아차리기까지 며칠, 어쩌면 일주일 정도 걸릴 것이라고 생각했다. 

하지만 결과는 예상과는 달랐다. 첫 번째 무단 로그인은 34분 이내에 발생했다. 헤이스는 <CSO>와의 인터뷰에서 “너무나 빨리 침해됐다는 사실에 놀랐다”라고 말했다. 
 
ⓒGetty images

그리고 24시간 동안 6개의 서로 다른 IP 주소가 허니팟(비정상적 접근을 탐지하는 시스템)에 총 9번 연결됐다. 한 공격자는 봇넷 클라이언트를 설치하려고 했고, 또 다른 공격자는 서버를 사용해 DoS 공격을 하려 했다. 이 밖에 서버에서 민감한 정보를 훔치려고 하거나 주변을 둘러보고 있었던 공격자도 있었다고 그는 덧붙였다. 

헤이스의 실험 결과에 따르면 공격자는 개발자가 남긴 민감한 데이터를 찾기 위해 깃허브 및 기타 퍼블릭 코드 저장소를 끊임없이 스캔하고 있는 것으로 확인됐다. 

기업들이 온프레미스 소프트웨어에서 클라우드로 전환하고, 많은 개발자가 재택근무를 하게 되면서 사용자 이름, 암호, 구글 키, 개발 도구, 프라이빗 키를 포함한 기밀 데이터의 양은 계속 증가하고 있다. 

프랑스의 보안 스타트업 깃가디언(GitGuardian)의 공동 설립자 에릭 푸리에는 올해만 해도 전년 대비 유출된 기밀 데이터가 최소 20% 이상 증가할 것이라고 밝혔다(참고로 깃가디언은 공개 저장소를 스캔하여 공격자가 악용할 수 있는 데이터를 식별하고 있다).

해커가 깃허브에서 기밀을 찾는 법 
해커는 깃허브가 민감한 정보를 찾기에 좋은 장소라는 것을 알고 있다. 그리고 UN(United Nations), 에퀴팩스(Equifax), 코드코브(Codecov), 스타벅스(Starbucks), 우버(Uber) 등은 이에 주의가 소홀했던 대가를 치렀다. 

오픈소스 코드를 사용하지 않기 때문에 위험하지 않다고 말하는 기업도 있겠지만 실상은 그렇지 않다. 작업 프로젝트에 개인 저장소를 쓰는 개발자가 많기 때문이다. 깃허브의 관련 보고서(State of Secrets Sprawl)에 의하면 데이터 유출의 85%는 개발자의 개인 저장소에서 발생한다. 기업이 소유한 저장소 내에서 발생하는 유출 사건은 15%에 불과하다.

개발자는 셸 명령 기록, 환경 파일, 저작권 있는 콘텐츠 등을 남긴다. 때때로 (개발자는) 프로세스를 간소화하려다가 실수를 한다.

예를 들면 디버그하기가 더 쉽기 때문에 코드를 작성할 때 자격증명을 포함할 수 있다. 그런 다음 이를 제거하고 실행하는 것을 잊어버린다. 나중에 삭제 커밋을 하거나 기밀을 삭제하기 위해 강제적인 조치를 취하더라도 깃 히스토리에서는 여전히 해당 개인정보에 액세스할 수 있다. 
 
깃허브에서 유출되는 가장 일반적인 기밀 데이터 ⓒGitGuardian

헤이스는 “암호를 포함하지 않은 최신 버전으로 교체된 파일의 이전 버전에서 비밀번호가 많이 발견된다. 의도적이고 명시적으로 삭제하지 않는 한, 깃 커밋 히스토리는 모든 것을 기억한다”라고 말했다.

또한 주니어 개발자와 시니어 개발자 모두 실수할 수 있다. 푸리에는 “유능한 개발자이고 이 문제에 관해 교육받았다 하더라도 늦은 밤에 코딩을 하다 보면 어느 순간 실수할 수 있다. 그런 일이 정말 일어난다”라고 전했다. 
 
깃허브에 유출되는 일반적인 파일 형식 ⓒGitGuardian

어떤 개발자든 실수를 저지를 수 있지만 구직 시장에 막 진입한 개발자가 대게 그런 경우가 잦다. 예를 들면 크리나 카탈리나 버커는 수년 전 소프트웨어 엔지니어링 학생이었을 때 개발 목적으로 AWS 계정을 만들었는데, 무려 2,000달러라고 적힌 청구서를 받았다. 합법적으로 그가 지불해야 하는 몫은 이 정도 수준이 아니었다. 

버커에 따르면 그의 프로젝트는 아마존의 S3를 포함해 약 10개의 클라우드 스토리지 서비스를 위한 통합 파일 관리 플랫폼이었다. 그는 “깃허브가 무료 개인 저장소를 제공하기 전의 일이기 때문에 AWS 액세스 키와 비밀 키가 퍼블릭 저장소에 코드와 함께 공개됐다”라고 언급했다. 

며칠 후, 버커는 AWS로부터 자신의 계정이 침해됐다는 경고 이메일을 받기 시작했지만 청구서를 받을 때까지는 이를 주의 깊게 읽지 않았다. 다행히 AWS 지원은 추가 요금을 면제해 줬다. 그는 편의를 위해 키를 하드코딩하고 퍼블릭 코드 저장소에 게시하는 등 해커가 악용할 수 있는 실수를 저질렀다고 말했다.

오늘날 이와 같은 실수를 발견하려는 해커에게 리소스는 거의 필요하지 않다고 헤이스는 지적했다. 그는 버그를 찾기 위해 오픈소스 인텔리전스(OSINT)를 활용하는데, 이는 어디에서 찾아야 하는지만 알면 누구나 웹에서 찾을 수 있는 정보다. 

헤이스는 “표준 깃허브닷컴 인터페이스를 사용해 수동으로 검색한다. 검색 연산자를 사용해 대상 기업에 따라 특정 파일 형식, 키워드, 사용자 및 조직을 제한한다”라고 설명했다. 

일부 도구는 프로세스를 더 빠르고 효율적으로 만들 수 있다. 휴먼(HUMAN)의 보안 연구원 가브리엘 컬리그는 “공격자는 깃허브 콘텐츠를 스크랩하고, 민감한 정보를 추출하는 자동화 봇을 실행한다”라고 말했다. 이러한 봇은 항상 실행 상태로 둘 수 있다. 해커가 몇 초 또는 몇 분 만에 ‘실수’를 감지할 수 있다는 의미다. 

일단 기밀이 발견되면 공격자는 이를 쉽게 악용할 수 있다. 푸리에는 “이를테면 AWS 키를 찾으면 기업의 모든 클라우드 인프라에 액세스할 수 있다”라면서, “특정 회사에서 일하는 개발자를 대상으로 기업 자산의 일부를 살펴보는 건 매우 간단하다. 기밀의 성격에 따라 해커는 공급망 공격을 시작하고 기업 고객의 안전을 위협하는 등의 많은 일을 할 수 있다”라고 전했다.
  기업은 깃허브 유출로부터 어떻게 기밀을 보호할 수 있는가?
기밀 데이터의 양이 증가하고 있기 때문에 기업들은 너무 늦기 전에 이를 제대로 탐지할 필요가 있다. 깃허브에는 암호, SSH 키 또는 API 토큰 같은 텍스트 문자열을 찾는 자체 ‘기밀 스캐닝 파트너 프로그램’이 있다. 깃허브는 40곳 이상의 클라우드 업체와 협력하여 퍼블릭 저장소에 노출된 API 키를 자동으로 수정했다.

깃허브 대변인은 <CSO>와의 인터뷰에서 “생태계를 보호하기 위해 이러한 파트너십을 지속적으로 확장하고 있다. 현재, 매일 100개 이상의 노출된 깃허브 API 키를 해지하고 있으며, 신규 개발자에게 자격증명 보안의 중요성을 알리고 있다”라고 밝혔다.

헤이스는 ‘기밀 스캐닝 파트너 프로그램’이 올바른 방향으로 나아가는 조치라고 말했다. 공격자가 유효한 자격증명을 찾기 어렵게 만들기 때문이다. 하지만 아직 완벽한 것은 아니라고 덧붙였다. 

이어서 그는 “실수로 SSH 키, 암호, 토큰 또는 기타 민감한 무언가를 체크인했을 때의 문제가 여전히 남아 있다. ‘이것이 진짜인가? 취소하고자 하는가? 우리 중 한 명은 소유자에게 이를 말해야 할까?’ 등의 질문을 할 파트너 자격증명 공급자가 없기 때문에 이를 감지하고 관리하기 어렵다”라고 설명했다. 

한편 헤이스는 코드를 작성하고 배포하는 방법을 의식하라고 권고했다. 그는 “해야 할 첫 번째 일은 .gitignore 파일에 올바른 설정을 추가하는 것이다. 이 파일은 깃과 깃허브닷컴에 어떤 파일을 추적하여 인터넷에 업로드하지 않아야 하는지 알려준다”라고 전했다. 

몇몇 보안 스타트업도 이러한 문제를 해결하기 위해 고군분투하고 있다. 이를테면 기티릭스(GittyLeaks), 시크릿옵스(SecretOps), 깃릭스(gitLeaks), 깃가디언(GitGuardian)은 비즈니스 사용자와 개인 사용자 모두에게 몇 가지 추가 보호 계층을 제공하는 것을 목표로 한다. 

일부는 유출된 기밀을 몇 초안에 감지해 개발자와 기업이 즉각적인 조치를 취할 수 있도록 한다. 푸리에는 “전체 개발 라이프사이클, 도커 컨테이너, 서로 다른 유형의 데이터를 통틀어 소프트웨어상의 모든 코드를 스캔한다. 이를 통해 기밀을 찾아 이를 철회하려고 한다”라고 언급했다.

하지만 이상적으로 가장 좋은 전략은 기밀 데이터를 전혀 유출하지 않거나 최대한 적게 누설하는 것이다. 이를 위해서는 해당 문제에 관한 인식을 높이는 게 도움이 된다. 컬리그는 “보안 코드를 작성하고 봇을 사전에 중지하도록 개발자를 교육하는 것이 유출된 기밀 때문에 두더지 잡기 게임을 하는 것보다 낫다”라고 말했다. ciokr@idg.co.kr

 



2021.10.07

회사 기밀 '줄줄' 샌다··· 깃허브 저장소에 숨겨진 데이터 유출 위험

Andrada Fiscutean | CSO
공격자는 개발자가 실수로 남긴 ‘기밀’을 찾기 위해 깃허브와 같은 퍼블릭 코드 리포지토리를 끊임없이 검색한다. 아무리 사소한 실수라도 충분히 악용될 수 있다. 

팬데믹 기간 중 어느 지루했던 날, 보안 연구원 크레이그 헤이스는 SSH 사용자 이름과 암호를 깃허브 저장소에 일부러 유출하고, 공격자가 이를 찾을 수 있는지 확인하는 실험을 했다. 그는 누군가가 이를 알아차리기까지 며칠, 어쩌면 일주일 정도 걸릴 것이라고 생각했다. 

하지만 결과는 예상과는 달랐다. 첫 번째 무단 로그인은 34분 이내에 발생했다. 헤이스는 <CSO>와의 인터뷰에서 “너무나 빨리 침해됐다는 사실에 놀랐다”라고 말했다. 
 
ⓒGetty images

그리고 24시간 동안 6개의 서로 다른 IP 주소가 허니팟(비정상적 접근을 탐지하는 시스템)에 총 9번 연결됐다. 한 공격자는 봇넷 클라이언트를 설치하려고 했고, 또 다른 공격자는 서버를 사용해 DoS 공격을 하려 했다. 이 밖에 서버에서 민감한 정보를 훔치려고 하거나 주변을 둘러보고 있었던 공격자도 있었다고 그는 덧붙였다. 

헤이스의 실험 결과에 따르면 공격자는 개발자가 남긴 민감한 데이터를 찾기 위해 깃허브 및 기타 퍼블릭 코드 저장소를 끊임없이 스캔하고 있는 것으로 확인됐다. 

기업들이 온프레미스 소프트웨어에서 클라우드로 전환하고, 많은 개발자가 재택근무를 하게 되면서 사용자 이름, 암호, 구글 키, 개발 도구, 프라이빗 키를 포함한 기밀 데이터의 양은 계속 증가하고 있다. 

프랑스의 보안 스타트업 깃가디언(GitGuardian)의 공동 설립자 에릭 푸리에는 올해만 해도 전년 대비 유출된 기밀 데이터가 최소 20% 이상 증가할 것이라고 밝혔다(참고로 깃가디언은 공개 저장소를 스캔하여 공격자가 악용할 수 있는 데이터를 식별하고 있다).

해커가 깃허브에서 기밀을 찾는 법 
해커는 깃허브가 민감한 정보를 찾기에 좋은 장소라는 것을 알고 있다. 그리고 UN(United Nations), 에퀴팩스(Equifax), 코드코브(Codecov), 스타벅스(Starbucks), 우버(Uber) 등은 이에 주의가 소홀했던 대가를 치렀다. 

오픈소스 코드를 사용하지 않기 때문에 위험하지 않다고 말하는 기업도 있겠지만 실상은 그렇지 않다. 작업 프로젝트에 개인 저장소를 쓰는 개발자가 많기 때문이다. 깃허브의 관련 보고서(State of Secrets Sprawl)에 의하면 데이터 유출의 85%는 개발자의 개인 저장소에서 발생한다. 기업이 소유한 저장소 내에서 발생하는 유출 사건은 15%에 불과하다.

개발자는 셸 명령 기록, 환경 파일, 저작권 있는 콘텐츠 등을 남긴다. 때때로 (개발자는) 프로세스를 간소화하려다가 실수를 한다.

예를 들면 디버그하기가 더 쉽기 때문에 코드를 작성할 때 자격증명을 포함할 수 있다. 그런 다음 이를 제거하고 실행하는 것을 잊어버린다. 나중에 삭제 커밋을 하거나 기밀을 삭제하기 위해 강제적인 조치를 취하더라도 깃 히스토리에서는 여전히 해당 개인정보에 액세스할 수 있다. 
 
깃허브에서 유출되는 가장 일반적인 기밀 데이터 ⓒGitGuardian

헤이스는 “암호를 포함하지 않은 최신 버전으로 교체된 파일의 이전 버전에서 비밀번호가 많이 발견된다. 의도적이고 명시적으로 삭제하지 않는 한, 깃 커밋 히스토리는 모든 것을 기억한다”라고 말했다.

또한 주니어 개발자와 시니어 개발자 모두 실수할 수 있다. 푸리에는 “유능한 개발자이고 이 문제에 관해 교육받았다 하더라도 늦은 밤에 코딩을 하다 보면 어느 순간 실수할 수 있다. 그런 일이 정말 일어난다”라고 전했다. 
 
깃허브에 유출되는 일반적인 파일 형식 ⓒGitGuardian

어떤 개발자든 실수를 저지를 수 있지만 구직 시장에 막 진입한 개발자가 대게 그런 경우가 잦다. 예를 들면 크리나 카탈리나 버커는 수년 전 소프트웨어 엔지니어링 학생이었을 때 개발 목적으로 AWS 계정을 만들었는데, 무려 2,000달러라고 적힌 청구서를 받았다. 합법적으로 그가 지불해야 하는 몫은 이 정도 수준이 아니었다. 

버커에 따르면 그의 프로젝트는 아마존의 S3를 포함해 약 10개의 클라우드 스토리지 서비스를 위한 통합 파일 관리 플랫폼이었다. 그는 “깃허브가 무료 개인 저장소를 제공하기 전의 일이기 때문에 AWS 액세스 키와 비밀 키가 퍼블릭 저장소에 코드와 함께 공개됐다”라고 언급했다. 

며칠 후, 버커는 AWS로부터 자신의 계정이 침해됐다는 경고 이메일을 받기 시작했지만 청구서를 받을 때까지는 이를 주의 깊게 읽지 않았다. 다행히 AWS 지원은 추가 요금을 면제해 줬다. 그는 편의를 위해 키를 하드코딩하고 퍼블릭 코드 저장소에 게시하는 등 해커가 악용할 수 있는 실수를 저질렀다고 말했다.

오늘날 이와 같은 실수를 발견하려는 해커에게 리소스는 거의 필요하지 않다고 헤이스는 지적했다. 그는 버그를 찾기 위해 오픈소스 인텔리전스(OSINT)를 활용하는데, 이는 어디에서 찾아야 하는지만 알면 누구나 웹에서 찾을 수 있는 정보다. 

헤이스는 “표준 깃허브닷컴 인터페이스를 사용해 수동으로 검색한다. 검색 연산자를 사용해 대상 기업에 따라 특정 파일 형식, 키워드, 사용자 및 조직을 제한한다”라고 설명했다. 

일부 도구는 프로세스를 더 빠르고 효율적으로 만들 수 있다. 휴먼(HUMAN)의 보안 연구원 가브리엘 컬리그는 “공격자는 깃허브 콘텐츠를 스크랩하고, 민감한 정보를 추출하는 자동화 봇을 실행한다”라고 말했다. 이러한 봇은 항상 실행 상태로 둘 수 있다. 해커가 몇 초 또는 몇 분 만에 ‘실수’를 감지할 수 있다는 의미다. 

일단 기밀이 발견되면 공격자는 이를 쉽게 악용할 수 있다. 푸리에는 “이를테면 AWS 키를 찾으면 기업의 모든 클라우드 인프라에 액세스할 수 있다”라면서, “특정 회사에서 일하는 개발자를 대상으로 기업 자산의 일부를 살펴보는 건 매우 간단하다. 기밀의 성격에 따라 해커는 공급망 공격을 시작하고 기업 고객의 안전을 위협하는 등의 많은 일을 할 수 있다”라고 전했다.
  기업은 깃허브 유출로부터 어떻게 기밀을 보호할 수 있는가?
기밀 데이터의 양이 증가하고 있기 때문에 기업들은 너무 늦기 전에 이를 제대로 탐지할 필요가 있다. 깃허브에는 암호, SSH 키 또는 API 토큰 같은 텍스트 문자열을 찾는 자체 ‘기밀 스캐닝 파트너 프로그램’이 있다. 깃허브는 40곳 이상의 클라우드 업체와 협력하여 퍼블릭 저장소에 노출된 API 키를 자동으로 수정했다.

깃허브 대변인은 <CSO>와의 인터뷰에서 “생태계를 보호하기 위해 이러한 파트너십을 지속적으로 확장하고 있다. 현재, 매일 100개 이상의 노출된 깃허브 API 키를 해지하고 있으며, 신규 개발자에게 자격증명 보안의 중요성을 알리고 있다”라고 밝혔다.

헤이스는 ‘기밀 스캐닝 파트너 프로그램’이 올바른 방향으로 나아가는 조치라고 말했다. 공격자가 유효한 자격증명을 찾기 어렵게 만들기 때문이다. 하지만 아직 완벽한 것은 아니라고 덧붙였다. 

이어서 그는 “실수로 SSH 키, 암호, 토큰 또는 기타 민감한 무언가를 체크인했을 때의 문제가 여전히 남아 있다. ‘이것이 진짜인가? 취소하고자 하는가? 우리 중 한 명은 소유자에게 이를 말해야 할까?’ 등의 질문을 할 파트너 자격증명 공급자가 없기 때문에 이를 감지하고 관리하기 어렵다”라고 설명했다. 

한편 헤이스는 코드를 작성하고 배포하는 방법을 의식하라고 권고했다. 그는 “해야 할 첫 번째 일은 .gitignore 파일에 올바른 설정을 추가하는 것이다. 이 파일은 깃과 깃허브닷컴에 어떤 파일을 추적하여 인터넷에 업로드하지 않아야 하는지 알려준다”라고 전했다. 

몇몇 보안 스타트업도 이러한 문제를 해결하기 위해 고군분투하고 있다. 이를테면 기티릭스(GittyLeaks), 시크릿옵스(SecretOps), 깃릭스(gitLeaks), 깃가디언(GitGuardian)은 비즈니스 사용자와 개인 사용자 모두에게 몇 가지 추가 보호 계층을 제공하는 것을 목표로 한다. 

일부는 유출된 기밀을 몇 초안에 감지해 개발자와 기업이 즉각적인 조치를 취할 수 있도록 한다. 푸리에는 “전체 개발 라이프사이클, 도커 컨테이너, 서로 다른 유형의 데이터를 통틀어 소프트웨어상의 모든 코드를 스캔한다. 이를 통해 기밀을 찾아 이를 철회하려고 한다”라고 언급했다.

하지만 이상적으로 가장 좋은 전략은 기밀 데이터를 전혀 유출하지 않거나 최대한 적게 누설하는 것이다. 이를 위해서는 해당 문제에 관한 인식을 높이는 게 도움이 된다. 컬리그는 “보안 코드를 작성하고 봇을 사전에 중지하도록 개발자를 교육하는 것이 유출된 기밀 때문에 두더지 잡기 게임을 하는 것보다 낫다”라고 말했다. ciokr@idg.co.kr

 

X