페이지 이동경로
  • 문서>
  • 이용 안내>
  • 보안 권장사항

이용 안내

보안 권장사항

이 문서는 카카오 플랫폼을 사용하는 서비스를 위한 보안 권장사항을 안내합니다.

1. 카카오디벨로퍼스에서 제공하는 보안 설정

1.1. 플랫폼

[플랫폼]에서 사전에 등록된 Android 패키지, iOS 번들과 웹 도메인만 SDK(Software Development Kit)에 접근 가능하도록 설정할 수 있습니다.

  • Android SDK: 키 해시
  • iOS SDK: 번들 ID
  • JavaScript SDK: 사이트 도메인
    • 카카오톡 공유 메시지 발송 시 포함되는 링크 URL의 도메인도 사이트 도메인에 등록되어야 해당 페이지로 이동 가능

1.2. Redirect URI

악의적인 외부로의 리다이렉트와 같은 공격을 방지하기 위해, 인가 코드 받기 API 요청 시 사용된 redirect_uri[Redirect URI]에 등록된 값과 일치해야 기능이 정상 작동합니다.

1.3. Client Secret

[Client Secret]을 활성화하면, 액세스 토큰 발급 시 보안 강화 목적으로 client_secret 값을 추가 검증합니다. 토큰 받기토큰 갱신하기 API 요청 시, client_secret 파라미터를 추가하여 Client Secret 코드를 전달합니다. Client Secret 코드는 반드시 백엔드(Backend)에서만 사용해야 하며, 절대로 사용자 브라우저에 노출되어서는 안됩니다.

1.4. 허용 IP 주소

[허용 IP 주소]는 카카오 API 호출 시, 사전에 등록된 IP 주소의 요청만 허용하도록 설정하는 기능입니다.

1.5. 팀 관리

[팀 관리]의 초대 기능으로 카카오디벨로퍼스 앱을 설정 및 변경할 수 있는 개발자 계정을 팀원으로 추가할 수 있습니다. 앱에 대한 모든 권한을 가진 오너(Owner) 계정은 계정 정보가 유출되지 않도록 강력한 암호를 사용해야 합니다.

팀원에게는 사용 목적에 따라 제한적으로 권한을 부여할 수 있습니다. 또한 테스트 앱을 사용하면 등록된 팀원만 접근 가능해 배포 전 테스트 단계에서 서비스 접근 보안을 강화할 수 있습니다.

오너 계정을 관리하던 직원이 퇴사하는 경우, [팀 관리]에서 오너 계정을 변경합니다. 불필요한 팀원 계정은 [내보내기]합니다.

2. API 호출 보안

2.1. 앱 키 보안

앱 키는 플랫폼별로 각각 발급됩니다. 카카오 플랫폼은 앱 키 값으로 올바른 API 요청인지 검증 하며, Admin 키는 모든 권한을 갖고 있는 키이므로 유출되지 않도록 반드시 백엔드에서만 사용하도록 합니다.

카카오 디벨로퍼스 앱의 오너 계정은 앱 키를 재발급받을 수 있습니다. 앱 키가 유출된 경우 재발급할 수 있지만, 이전 앱 키로 복구 불가능하니 신중하게 사용해야 합니다.

2.2. 액세스 토큰 보안

액세스 토큰은 API 요청에 사용되므로 유출되지 않도록 주의해야 하며, 리프레시 토큰의 경우 반드시 백엔드에서만 사용하도록 합니다.

액세스 토큰이 유출되더라도 외부에서 사용할 수 없도록 허용 IP 주소 설정 기능 사용을 권장합니다.

2.3. state 파라미터 사용 (CSRF 공격 방지)

state 파라미터는 인가 코드 받기 API 요청 시 전달한 값을 Redirect URI에 전달하여 인가 요청 출처를 확인하는 데 사용합니다. 이는 CSRF(Cross-Site Request Forgery) 공격 방지용으로 활용할 수 있습니다.

카카오 로그인을 시도하는 각 사용자의 로그인 요청에 대한 state 값을 중복되지 않는 고유한 난수로 설정하고, Redirect URI에 전달된 값과 일치하는지 검증하는 방식으로 사용합니다. state 값은 세션 또는 동일 출처 정책에 의해 보호되는 쿠키 등 제3자가 접근할 수 없는 위치에 보관하여 사용해야 합니다. (참고: RFC 6749 10.12.)

2.4. prompt 파라미터 사용

인가 코드 받기 API 요청 시, prompt 파라미터 값을 login으로 설정하면 기존 사용자 인증 여부와 상관없이 사용자에게 카카오계정 로그인 화면을 출력해 매번 로그인하도록 할 수 있습니다. 서비스 특성에 부합하는 경우 선택적으로 사용할 수 있습니다.

2.5. nonce 파라미터 사용

OpenID Connect를 통해 ID 토큰을 함께 발급받을 경우, ID 토큰 재생 공격을 방지하기 위해 사용합니다. ID 토큰 유효성 검증 시 대조할 고유한 난수 값을 nonce 파라미터로 전달합니다.

2.6. API 호출을 위한 방화벽 설정

방화벽을 통해 허용된 시스템 호출만 허용하는 경우, kauth.kakao.com, kapi.kakao.com 등 호출할 카카오 API 호스트(Host)의 IP를 허용해야 합니다.

연결 끊기 알림, 카카오톡 채널 관계 알림, 카카오톡 공유 전송 성공 알림과 같이 카카오에서 제공하는 콜백(Callback) 기능을 사용한다면 서비스 측 API를 호출할 수 있도록 카카오 IP를 허용합니다.

카카오톡 공유 메시지 발송 시 서비스 페이지 미리보기를 구성하는 경우, 카카오 스크랩 서버가 접근할 수 있도록 카카오 측 스크랩 요청 IP를 추가합니다.

3. 시스템 구축 보안

3.1. 전송 중 데이터 암호화

응용프로그램으로 전송되는 또는 응용프로그램에서 전송하는 모든 민감한 데이터의 보호를 위해 다음 사항을 준수해야 합니다.

인가 코드 및 토큰 발급 요청에 사용되는 Redirect URI는 특별한 이유가 없는 한 HTTPS를 사용해야 합니다.(참고: RFC 6749 3.1.2.1)

3.2. 데이터 저장 시 암호화

파일 및 데이터베이스 내에 저장되는 모든 민감한 데이터는 암호화를 해야 합니다.

3.3. 민감정보 데이터 로깅 금지

카카오로부터 전달받은 사용자 정보는 시스템 로그에 저장하지 않아야 합니다.

3.4. 카카오 로그인으로 기존 회원 매핑 시 주의 사항

서비스 자체 회원 가입 기능으로 가입한 회원이 카카오 로그인 회원과 동일하여 매핑(Mapping)하는 경우 다음 사항을 유의해야 합니다.

  • 사용자가 카카오 로그인으로 신규 가입한 이후에는 반드시 사용자 정보 가져오기(/v2/user/me) API 응답의 회원번호(Service User ID, id)로 저장된 고객을 식별해야 합니다.
  • 회원번호는 Long 타입으로 1~9223372036854775807 범위 내 숫자 값입니다. 회원번호의 길이가 변해도 기능이 정상 동작하도록 구현해야 합니다.
  • CI(연계 정보) 또는 이메일로 기존 회원과 동일인 여부를 판단할 수 있습니다. 이메일로 판단하는 경우, 반드시 메일 소유자의 본인 인증을 완료하고 매핑해야 합니다. 전화번호는 소유자가 변경될 수 있으므로 단순 문자열 비교로 매핑하면 안 됩니다.
  • 기존 회원과 매핑 시, 기존 계정에 추가 로그인 절차를 두어 계정 소유자임을 확실하게 판단 후 매핑하는 것을 권장합니다.
참고: 회원번호(Service User ID)

2018년 9월 19일 이전 생성 앱은 연결 끊기 후 재연결 시 회원번호가 변경되도록 설정되어 있을 수 있습니다. 이 경우 기존 계정으로 로그인 처리하기 위한 방법은 Q. 로그아웃 후 다시 로그인하면 ID가 변경되나요?를 참고합니다.

참고: CI와 이메일

CI와 이메일도 변경될 수 있는 정보입니다. 이메일은 대표 이메일 설정 변경으로, CI는 사용자가 고객센터에 요청하는 경우 초기화 또는 변경될 수 있습니다.

3.5. 기능 구현 시 주의 사항

사용자의 개인 정보를 보호하고 카카오디벨로퍼스에서 제공하는 기능을 안전하게 사용하도록 운영 정책을 준수해야합니다.

  • 운영 정책 제1조(서비스 이용자의 의무) 2항에 따라 서비스 내 이용자 탈퇴 메뉴를 제공해야 하고, 탈퇴 시 이용자의 모든 개인정보를 복구 불가능한 방법으로 파기해야 합니다. 사용자 정보 가져오기(/v2/user/me) API 응답의 회원번호도 개인정보이므로 탈퇴 시 파기되어야 합니다.
  • 서비스의 재가입 불가 정책 등으로 회원번호를 일정 기간 보관해야 할 경우, 서비스 약관이나 개인정보처리방침에 보관 근거를 남겨 이용자들에게 별도 동의를 받고 저장해야 합니다.
  • 개인정보 제공 동의 철회를 위해 서비스 탈퇴 시 연결 끊기 API를 반드시 호출해야 합니다.
  • 카카오계정 관리 페이지 계정 이용 메뉴에서 연결 끊기 발생 시 카카오로부터 연결 끊기 알림을 받아 서비스 탈퇴 처리하여, 개인정보 제공 동의 철회와 서비스 내 개인정보 파기가 동기화되도록 구현하는 것을 권장합니다.

3.6. 보안 이벤트 구독

사용자의 보안 상태 변경 사항을 수신할 수 있는 보안 이벤트 구독 기능을 사용해, 서비스내 개인 정보를 최신 상태로 유지하는 것을 권장합니다.

  • 보안 이벤트 구독에 수신 받을 이벤트와 콜백 URL을 등록하면 JWT(JSON Web Token) 형식의 보안 이벤트 토큰(Security Event Token)으로 보안 이벤트 수신이 가능합니다.
  • 보안 이벤트는 OAUTH(카카오 로그인), CAEP(Continuous Access Evaluation Protocol), RISC(Risk Incident Sharing and Coordination) 카테고리로 구분합니다. 이 중 CAEP, RISC 카테고리의 보안 이벤트 정보는 동의항목 설정 및 사용자 동의가 필요하며, 데브톡으로 문의해 권한을 신청할 수 있습니다.
  • 보안 이벤트 수신 시 보안 이벤트 타입별 필수 보안 조치와 권장 보안 조치 사항을 참고해 시스템을 구축해야합니다. 이 중 OAUTH 카테고리의 User Unlinked(사용자가 앱과 연결 해제), User Scope Withdraw(사용자가 동의항목 동의 철회) 이벤트를 수신하여 서비스 내 제공받은 개인정보가 파기될 수 있도록 구현하는 것을 권장합니다.

3.7. SDK를 최신 버전으로 유지할 의무

카카오가 제공하는 SDK를 비롯한 서비스에는 보안 업데이트가 제공됩니다. 보안을 위해 수시로 현재 제공 중인 SDK별 버전 정보를 확인하고, 가능한 최신 버전을 사용해야 합니다.

3.8. 최소 권한 액세스

카카오 로그인 동의항목은 서비스에 반드시 필요한 최소한의 항목만으로 설정합니다.

4. 브랜드

4.1. 올바른 기본 정보 입력

제공하는 서비스가 다른 서비스로 오인되거나 피싱(Phishing)에 악용되지 않도록 카카오디벨로퍼스 앱 아이콘, 이름, 회사명을 실제 서비스 내용과 일치하도록 등록합니다.

4.2. 카카오 브랜드 사용 지침

카카오 로그인 사용 시, 제공된 디자인 가이드를 준수하여 사용자가 카카오 로그인을 통해 개별 서비스에 가입됨을 인지할 수 있어야 합니다.

카카오 상표 도용을 금지합니다. 카카오의 허가 없이 카카오디벨로퍼스 앱의 이름, 아이콘, 회사명에 카카오 서비스 또는 카카오 제휴 서비스로 오인될 수 있는 내용을 등록해서는 안됩니다. (예: "for Kakao" 명시)

5. 사후 보안 대응

5.1. 앱 키 재발급을 통해 추가 피해 막기

앱키가 유출된 경우, 앱 키 재발급으로 기존 앱 키를 무효화할 수 있습니다. 재발급된 앱 키는 기존 앱 키 값으로 복구할 수 없습니다. 앱 키를 재발급하면 서비스 애플리케이션이나 웹 사이트에 적용된 앱 키를 재발급된 값으로 변경해야 카카오 API를 정상적으로 이용할 수 있습니다.

5.2. 보안 취약성 리포트

pf.security@kakaocorp.com을 통해 카카오의 보안 취약성에 대해 리포트할 수 있습니다. 카카오 플랫폼을 이용 중인 서비스의 보안을 강화하기 위한 궁금한 점이 있는 경우 DevTalk을 통해 문의할 수 있습니다.