디버그 모드가 활성화된 장고(Django) 웹 어플리케이션을 Criminal IP (https://www.criminalip.io/ko)에서 검색하면 3,100개가 넘는 웹 어플리케이션에서 DB계정 및 패스워드, 그리고 API 키 가 인터넷에 그대로 노출되어 있는 것을 확인할 수 있다. 이는 장고로 개발된 사이트를 이용해 기업의 개인 정보나 중요 문서 등을 손쉽게 탈취할 수 있다는 것을 의미한다. CIP팀은 장고(Django)와 라라벨(Laravel) 등의 웹 어플리케이션과 관련 키워드 검색을 통해 Credential 정보 유출의 심각성을 살펴보았다.

크리덴셜(Credential)이란?

크리덴셜(Credential)의 사전적 의미는 ‘자격증명’이며 일반적으로는 특정인이 해당 자격을 가지고 있는지를 증명하는 수단을 뜻한다. 각종 신분증과 증명서 등이 바로 Credential에 해당한다. 그러나 클라우드 환경이나, 네이버, 카카오, 페이스북 등과 같이 Access Key ID/Secret Key를 가지고 소셜 인증에서 사용하는 Oauth에서도 크리덴셜이란 용어를 사용하고 있다. 최근에는 크리덴셜이 꼭 인증 관련된 키만 해당되는 것이 아니라 클라우드 내부 VPC망의 IP 정보 등을 포괄적으로 지칭하는 데 쓰이고 있다.

Criminal IP Asset Search에서 Access Key 정보 찾기

Asset Search 검색에서 각종 인증 관련 정보 (Access Key ID, Secret Access Key) 키워드로 검색하면 Credential 정보가 노출되는 케이스를 심심찮게 볼 수 있다. 특히, 이 중에는 Oauth 인증이나 RESTfull API Credential 정보가 노출되어 있는 위험한 경우도 적지 않다.

  • Access Key ID: 일반 웹사이트의 아이디에 해당. 줄여서 Access Key(접근키)라고 부른다.
  • Secret Access Key: 일반 웹사이트의 비밀번호에 해당. 줄여서 Secret Key(보안키)라고 부르기도 한다.

예를 들어 아마존 클라우드에서 사용하는 Access Key 타입은 아래와 같이 구성된다.

아마존 클라우드에서 사용하는 Access Key 타입

아마존 클라우드에서 사용하는 Access Key 타입

또한 버킷 페이지 검색을 통해서 인증 관련 정보를 찾을 수도 있다. 버킷(Bucket)이란 일종의 저장소를 의미하는 것으로 클라우드 서비스에서 버킷은 주로 스토리지(Storage)를 의미한다. 이 버킷에 접근할 수 있다면 일종의 파일서버에 들어가서 공개되지 않은 파일을 빼내올 수도 있다는 문제가 존재한다. 먼저 아래와 같이 읽기모드가 가능한 Bucket 키워드로 한국을 대상으로 검색해 보았다.

READ_BUCKET_NAME country:KR

해당 검색 필터 문자열로 검색하면 “NAVERCloud VOD Service TBD”라는 사이트가 24개 검색된다. 아마도 NAVER Cloud 사용자들 위한 일종의 버킷 업로드 데모페이지로 추정이 된다. 여기서 문제가 되는 부분은, HTML 본문에 파일 업로드 테스트에 사용되는 데모용 Endpoint 도메인주소와 Access Key ID, Access Secret Key가 노출되어 있다는 점이다. 감추어져 있어야 할 Secret Key까지 이런 식으로 프론트엔드에 키가 노출되어 있는 사이트가 상당히 많이 존재한다.

HTML Body 안에 API 키 정보를 포함한 Access Credential 정보가 노출

HTML Body 안에 API 키 정보를 포함한 Access Credential 정보가 노출

Criminal IP Asset Search에서 웹 어플리케이션 Django의 Debug Mode 사이트 찾기

PHP기반의 라라벨 프레임워크(Laravel Framework)나 Python언어로 개발된 장고(Django) 웹 어플리케이션 프레임워크들은 모두 개발의 편의성을 위한 디버그 모드(Debug Mode)를 지원한다. 장고로 개발된 웹사이트에 Debug 모드가 활성화되면 오류 발생시 에러 메시지에 민감한 정보를 노출시키는 문제가 발생하는데 이는 장고와 라라벨 프레임워크에서 동일하게 발생하는 증상이다.

Criminal IP의 Asset Search에서 아래의 검색어를 활용하여 장고의 디버그 모드가 활성화되어 있는 사이트를 검색할 수 있다.

DisallowedHost at (장고의 프레임워크)

디버그 모드가 활성화된 장고 웹사이트는 오류 메시지에 민감한 정보가 노출됨

디버그 모드가 활성화된 장고 웹사이트는 오류 메시지에 민감한 정보가 노출됨

장고 웹 어플리케이션에서 노출되는 HTTP 요청 헤더 정보에는 지금까지 언급한 API 키 뿐만 아니라 심지어 인증과 관련된 Admin 계정 및 패스워드 정보, 데이터베이스 계정정보도 포함되어 있다.

Admin 계정 및 패스워드 등 민감한 정보가 노출된 장고 웹사이트

Admin 계정 및 패스워드 등 민감한 정보가 노출된 장고 웹사이트

장고 플랫폼 외에 라라벨을 대상으로도 검색이 가능하며, 라라벨의 디버그 모드가 활성화되어 있는 사이트를 검색할 수 있는 검색 필터는 아래와 같다.

title: Whoops! There was an error

title: "Whoops! There was an error" 검색 결과

title: “Whoops! There was an error” 검색 결과

검색된 사이트들은 모두 라라벨 디버그 모드가 활성화되어 있는 IP주소들이며 이곳에 접속하면 에러 메시지에 APP 키 정보, DB 계정 및 패스워드 정보가 노출되는 것을 볼 수 있다.

DB 계정 및 패스워드 등 민감한 정보가 노출된 라라벨 웹사이트

DB 계정 및 패스워드 등 민감한 정보가 노출된 라라벨 웹사이트

전체 API 키 가 텍스트 파일 상태로 노출되어 있는 경우

Asset Search에 ‘APIKEY.txt’를 검색해 보면 한 가지 재미난 것을 발견할 수 있다.

APIKey.txt

"APIKey.txt" 검색을 통해 발견된 웹 사이트

“APIKey.txt” 검색을 통해 발견된 웹 사이트

“APIKey.txt”를 Asset Search에 검색했을 때 나온 위의 사이트를 방문하면, 아래 화면같이 표시되어 해당 사이트가 무슨 용도인지 알 수가 없다. 하지만 웹사이트 소스보기를 하면 이야기는 달라진다.

APIKey.txt 검색을 통해 발견된 웹 사이트 접속 화면

APIKey.txt 검색을 통해 발견된 웹 사이트 접속 화면

웹사이트 소스보기에서 이 사이트는 Firebase 데이터베이스를 사용하고 있는 것을 알 수 있다. 그리고 Firebase Configuration에 Firebase SDK 사용 중 발급받은 API Key, AuthDomain, AppID 정보가 노출되고 있다.

API Key 정보 등 중요 정보가 그대로 노출된 해당 페이지의 소스 화면

API Key 정보 등 중요 정보가 그대로 노출된 해당 페이지의 소스 화면

그 외에도 중국의 RESTfull API로 보이는 사이트도 발견되었는데 관리자(Admin)의 Access Token 해시값이 노출되어 있다.

관리자(Admin)의 Access Token 해시값이 노출된 중국 사이트

관리자(Admin)의 Access Token 해시값이 노출된 중국 사이트

Criminal IP의 검색 결과에는 종종 Credential 정보가 포함된 HTML 파일이 발견되기도 하는데 이 HTML 파일들은 주로 테스트 혹은 실수로 남겨진 경우가 많다. 아래 이미지들은 아마존 클라우드 서비스(AWS)의 IAM 메타데이터가 포함된 HTML 파일이나, DynamoDB AWS Key가 있는 HTML 파일을 발견한 경우다.

1) HTML 파일 IAM 메타데이터 내용이며 그 속에는 사용자 계정(User Account)에 대한 정보들이 포함

아마존 클라우드(AWS) IAM Metadata내의 User 정보가 포함된 HTML파일 발견된 경우

아마존 클라우드(AWS) IAM Metadata내의 User 정보가 포함된 HTML파일 발견된 경우

2) 아마존 클라우드 서비스(AWS)의 대표적인 NoSQL 서버 중에 하나인 DynamoDB에서 생성된 HTML 파일에 Access Key ID와 Secret Key 등 Credential 정보가 노출

DynamoDB Admin

AWS DynamoDB Admin 페이지 검색화면

AWS DynamoDB Admin 페이지 검색화면

AWS DynamoDB 작업 Script안에 Access Key Fair가 노출된 경우

AWS DynamoDB 작업 Script안에 Access Key Fair가 노출된 경우

결론

클라우드 네이티브 기술을 이용하여 개발팀의 생산성은 놀랄 정도로 향상되고 있다. 하지만 이렇게 생산성에 지나치게 초점이 맞춰지고 있다 보니 이에 대한 보안은 우선순위에서 많이 밀리는 있는 것이 아닌가 하는 우려의 목소리가 있다. 클라우드 네이티브 기술에서 가장 많이 사용되고 있는 API Key 들이 이렇게 노출되어 있는 모습은 이 이야기를 뒷받침한다. 

데이터베이스가 노출되어 있는 모습은 단지 개인 정보의 유출뿐만 아니고, “쓰기권한이 있는 경우 데이터베이스를 조작할 수도 있다. 과거에는 데이터베이스의 ID/PW 같은 계정관리에 보안의 포커스가 맞추어져 있었지만, 클라우드 시대인 지금은 API 키에서도 쓰기권한이 있는 경우가 존재하고, API 키 노출 하나로 개인 정보의 유출 또는 개인 정보의 조작까지도 가능하다.

 빠르게 발전하는 클라우드 관련 기술에 과연 개발자들이 보안에 대한 부분도 빠르게 따라가고 있는지에 대한 면밀한 체크가 필요하다. 클라우드 시대는 이 같은 단순한 설정 오류와 같은 작은 실수들로 인해 중요 정보가 인터넷에 노출되고 이를 통해 개인과 비즈니스 모두에게 큰 피해를 입히는 대형 사고로 이어질 수 있다는 점을 명심해야 한다.


데이터 출처 : Criminal IP (https://www.criminalip.io/ko)