본문 바로가기

[개발자의 잡학노트]

[잡학노트] API KEY 공유는 어떻게 탐지하는걸까? (OpenAI, Discord 등)

728x90

썸네일

👋 소개

안녕하세요! 대학생 개발자 주이어입니다.

 

오늘은 [개발자의 잡학노트] 라는 카테고리의 첫 글을 적게 되었습니다.

[개발자의 잡학노트]는 평소에 궁금했던 내용이나, 정확한 원리는 모르고 그냥 그렇구나 하고 넘어갔던 내용들에 대해서 자세히 파헤쳐보고 정리하는 카테고리입니다.

 

그럼 바로 시작하도록 하겠습니다.


 궁금증

뭔가 이 카테고리는 예쁘게 꾸며보고 싶다는 생각에 위 처럼 썸네일도 만들어 보았는데요.

썸네일을 보시면 아시겠지만, 오늘의 주제는 "API KEY 공유는 어떻게 탐지하는걸까?" 입니다.

API KEY 공개 경고문

이 궁금증이 생긴 이유는 정말 간단한데요.

API KEY를 사용해보신 분들이라면, 한 번 쯤은 위와 비슷한 경고문을 보신 적이 있을 겁니다.

바로, API KEY가 github나 sms프로그램 등에 공개되었다는 경고문인데요.

 

이러한 경고문은 API KEY를 발급하는 사이트에서 볼 수도 있고, 또는 git push 전에 자체적으로 경고가 뜨기도 합니다.

평소에는 이런 경고문이 뜨면서 오류가 발생하면 귀찮게 느껴지지만, 그럼에도 제 API KEY를 지켜주는 고마운 기능인데요.

 

바로 여기에서 궁금증이 생겼습니다.

이런 API를 제공하는 회사들은 어떻게 API KEY가 공개되는 것을 탐지할 수 있는걸까요?

API KEY는 단순 텍스트일 뿐인데 특수한 기능이 담겨져 있는걸까요?

 

이 궁금증을 해결하기 위해 [개발자의 잡학노트] 첫 글로 이 주제에 대해서 자세히 파헤쳐 보려고 합니다.


💡 아이디어

여러 방법과 도구를 사용하여 탐색을 해보았고, 제가 찾은 유력한 아이디어는 3가지 정도가 있었습니다.

그럼 바로 하나씩 소개해보도록 하겠습니다.

1️⃣ GitHub Secret Scanning

github 이미지

첫 번째 아이디어는 GitHub Secret Scanning 입니다.

이 방법은 github에서 자체적으로 commit 되는 레포지토리를 확인해서 API KEY가 공개적으로 작성되어 있는지 확인합니다.

 

아마 이 방법으로 API KEY가 공개되는 대부분의 경우를 막을 수 있지 않을까 싶은데요.

한 가지 단점이 있다면, github과 공식 협약으로 연결되어 있어야 이 방법을 사용할 수 있다는 점 입니다.

github과 공식 협약을 맺은 기업으로는 OpenAI, Google, Discord 같은 유명한 기업들이 있습니다.

 

하지만, github과 공식 협약을 맺지 못 했거나, 그 정도로 큰 기업이 아니라면 어떻게 탐지할 수 있을까요?

 

2️⃣ 패턴 기반 정규식 감지

정규식 이미지

바로 그 방법이 두 번째 아이디어인 패턴 기반 정규식 감지이지 않을까 생각하는데요.

이 방법은 API KEY를 구성하는 복잡한 문자들의 패턴을 가지고, 정규식을 만들어 공개되었는지 확인하는 방법입니다.

보통 API KEY를 공유하는 회사는 자사의 API KEY 형식(패턴)을 정확히 알고 있기 때문에, 이러한 방법을 사용할 수 있는데요.

 

예를 들어, OpenAI의 API KEY는 "sk-"로 시작하고 이후에 48자의 영문+숫자 조합으로 이루어지는데요.

이걸 정규식으로 나타내면, sk-[A-Za-z0-9]{48} 로 나타낼 수 있습니다.

이러한 정규식을 활용하여 API KEY가 공개되었는지 탐지할 수 있는 것이죠.

 

하지만, 정규식을 만들 수 있다고 하더라도 인터넷에서 공유되는 API KEY를 어떻게 탐지할 수 있을까요?

 

바로, 크롤링과 비슷한 기법을 사용하는 백엔드 봇을 이용하는 겁니다.

봇이 GitHub, Stack Overflow, Reddit 등의 API KEY가 공유될 확률이 높은 사이트들을 특정 주기로 확인하며,

정규식을 활용하여 해당 정규식에 맞는 문자열이 있는지 확인하는 작업을 합니다.

 

만약 정규식에 해당하는 문자열이 발견되었다면, API KEY가 공개된 것으로 판단할 수 있겠죠.

 

참고 사이트

 

Reddit의 OpenAI 커뮤니티

OpenAI 커뮤니티에서 이 게시물을 비롯한 다양한 콘텐츠를 살펴보세요

www.reddit.com

 

3️⃣ 서버 내부 탐지

서버 내부 탐지

세 번째 아이디어는 외부에서 탐지하는 것이 아닌, 내부에서 탐지하는 방법입니다.

이 방법은 모든 경우의 수에 대처할 수 있는 방법은 아니지만, 내부에서 한 번 더 검증하는 역할을 해준다고 보면 될 것 같습니다.

 

서버 내부에서 탐지하는 방법은 특정 조건들에 의해서 탐지가 진행되는데요.

  • 기준을 벗어난 새로운 위치에서의 호출
  • 비정상적인 요청 증가
  • User-Agent가 자동화 도구 또는 봇으로 의심됨

위 조건들 뿐만 아니라, 다양한 조건으로 판별하며 이전엔 없던 패턴의 API 요청을 탐지한다고 생각하면 될 것 같습니다.

 

이러한 방법은 API KEY 탐지 뿐만 아니라 평소에 로그인을 진행할 때도 볼 수 있는 방법인데요.

구글이나 네이버 등에 로그인할 때, 새로운 기기 또는 새로운 위치에서 로그인을 하면 보안 경고 메일이 오는 것을 본 적이 한 번 씩은 있으실 겁니다.

 

4️⃣ 자사 프로그램 연동

디스코드 이미지

네 번째는 번외로 넣어보았는데요.

위에서 소개했던 방법들처럼 일반적으로 적용가능한 방법은 아니지만,

자사 프로그램에서 탐지 후에 경고를 보내는 방법입니다.

 

대표적인 예로 디스코드가 있습니다.

저는  디스코드 봇을 만들면서 디스코드 채팅방에 이를 공유한 적이 몇 번 있었는데요.

경고 메세지

그럴 때 마다 위 처럼 경고 메세지를 띄우는 것을 볼 수 있었습니다.

이는 디스코드 API와 디스코드 프로그램이 모두 디스코드 인프라(같은 서버 환경)에서 동작하기 때문에

자사에서 쉽게 탐지할 수 있기 때문입니다.

 

이 글을 적기 위해서 다른 API 키들도 테스트를 진행해봤지만, 별도의 경고 메세지는 나타나지 않았습니다.

이 부분은 GitHub Secret Scanning 처럼 협력을 맺는다면 충분히 확장 가능하지 않을까 싶습니다.


😊 마무리

오늘 이렇게 [개발자의 잡학노트] 첫 글로 API KEY 공유 탐지에 대해서 파헤쳐보는 시간을 가져보았습니다.

평소에는 별 생각 없이, API KEY는 중요하니까 공유를 막는구나 라고 생각하고 넘어갔었는데 이번에 찾아보면서 어떻게 탐지가 되는지 배울 수 있어서 좋았습니다.

 

평소에 코딩만 하다가 이런 원리들을 살펴보니 더 재밌게 느껴지는 것 같고,

뭔가 이런 별거 아닌 것 같은 기능이 어떻게 동작하는지 제대로 알게 될 때, 뭔지 모를 성취감?이 느껴지는 것 같습니다.

 

그럼 지금까지 읽어주셔서 감사드리고, 다음에는 더 참신하고 재미있는 [개발자의 잡학노트] 글로 찾아오도록 하겠습니다.

 

혹시 저와 같이 소통하고 프로젝트를 만들어보고 싶다면 아래 링크로 들어와주세요!

https://discord.gg/8Hh8WgM4zp

 

KYT CODING COMMUNITY Discord 서버에 가입하세요!

Discord에서 KYT CODING COMMUNITY 커뮤니티를 확인하세요. 24명과 어울리며 무료 음성 및 텍스트 채팅을 즐기세요.

discord.com

KYT CODING COMMUNITY 가입하기! 

 

728x90