블로그

개발자를 위한 보안 가이드: OWASP Top 10 API 시리즈 - 인증 취약점(Broken Authentication)

September 16, 2020
마티아스 마두(Matias Madou) 박사

인증 메커니즘은 올바르게 구현하기가 매우 어렵기 때문에, 손상된 인증이 OWASP API 보안 위협 목록에 포함된 것은 놀라운 일이 아닙니다. 또한, 인증 방식은 본질적으로 사용자에게 노출되어야 하므로 공격자가 이를 연구하고 악용할 수 있는 패턴이나 취약점을 찾을 기회를 제공한다는 점에서 공격자에게 다소 유리한 측면이 있습니다.

마지막으로, 인증은 애플리케이션과 잠재적으로는 네트워크 전체로 향하는 관문 역할을 하기 때문에 공격자들에게 매력적인 표적이 됩니다. 인증 프로세스가 손상되었거나 취약하다면 공격자가 해당 약점을 발견하고 악용할 가능성이 매우 높습니다.

이번 장에서는 인증 문제와 관련하여 악의적인 공격자를 차단하는 방법을 배워보겠습니다. 먼저 자신의 실력을 테스트해보고 싶다면, 저희가 준비한 게임화된 챌린지에 참여해 보세요:

점수를 높이고 싶으신가요? 저와 함께 하나씩 자세히 살펴보겠습니다.

손상되거나 잘못 구성된 인증의 예로는 어떤 것들이 있을까요?

문제가 명확하게 드러나지 않는 경우 중 하나는 인증 방식이 크리덴셜 스터핑(Credential Stuffing), 즉 알려진 사용자 이름과 비밀번호 목록을 사용하여 보안을 뚫는 공격에 취약한 경우입니다. 다중 인증(MFA)과 같이 일반적으로 매우 안전한 인증 방식이라 하더라도 요청에 대한 제한, 속도 조절 또는 기타 모니터링이 이루어지지 않으면 취약할 수 있습니다.

예를 들어, 공격자가 api/system/verification-codes에 POST 요청을 보내고 요청 본문에 사용자 이름을 제공하여 비밀번호 복구 요청을 트리거할 수 있습니다. 만약 앱이 6자리 코드를 사용자의 휴대폰으로 전송하는 SMS 인증 방식을 사용하는데 입력 필드에 제한이 없다면, 단 몇 분 만에 애플리케이션이 뚫릴 수 있습니다. 공격자는 올바른 코드를 맞출 때까지 가능한 모든 6자리 조합을 애플리케이션에 보내기만 하면 됩니다.

이 시나리오에서 겉으로 보기에는 2단계 인증을 사용하는 것이 애플리케이션을 안전하게 지켜줄 것처럼 보입니다. 하지만 사용자 입력에 대한 속도 제한이 없기 때문에 해당 인증은 손상되었으며 취약한 상태입니다.

또 다른 예로, 애플리케이션이 인코딩된 사용자 객체를 인증 쿠키로 사용하는 경우가 있습니다. 하지만 낮은 권한의 사용자 접근 권한을 가진 공격자가 Base64를 사용하여 해당 쿠키를 디코딩하면, 쿠키가 애플리케이션에서 세션과 사용자를 어떻게 정의하는지 알아낼 수 있습니다. 예를 들어, 디코딩 후 다음과 같은 JSON을 볼 수 있습니다:

{
"username" : "ShadyGuy",
"role" : "user"
{

이 시점에서 악의적인 사용자는 자신의 사용자 이름이나 역할, 또는 둘 다를 변경할 수 있습니다. 몇 가지 값을 변경함으로써 더 높은 권한을 가진 다른 사용자가 될 수 있는 것입니다:

{
"username" : "GoodGuy",
"role" : "admin"
{

이제 공격자가 이 정보를 다시 인코딩하여 쿠키 값으로 설정하면, 사실상 더 높은 권한을 가진 새로운 사용자가 됩니다. 이러한 변경을 방지하는 방법이 마련되어 있지 않다면, 애플리케이션이 해당 변조를 수용할 가능성이 매우 높습니다.

손상되거나 잘못 구성된 인증 제거하기

인증이 실패하면 전반적인 보안이 침해될 가능성이 큽니다. 하지만 애플리케이션을 코딩할 때 몇 가지 중요한 지침을 따르면 모든 것을 안전하게 유지하는 데 도움이 됩니다.

우선, 사용자가 프로그램 기능을 사용할 수 있도록 허용하는 모든 곳에 인증 확인 절차를 포함해야 합니다. 인증 확인 절차가 아예 없다면 시작부터 싸움에서 진 것이나 다름없습니다.

모범 사례 측면에서 명심해야 할 좋은 점은 사용자가 접근할 수 있는 URL에 세션 ID를 노출하지 않는 것입니다. 위에서 언급한 손상된 인증에 관한 두 번째 예시처럼, 세션 쿠키가 공격자에게 노출되지 않도록 하면 공격자가 이를 디코딩하려는 시도를 막기가 훨씬 쉬워집니다.

다중 인증을 구현하는 것도 좋은 방법입니다. 하드웨어 토큰을 사용하면 알고리즘을 통해 짧은 주기로 비밀번호를 생성하여 안전하게 인증할 수 있습니다. 사용자에게 이러한 장치를 제공하기 어렵다면 SMS 문자 메시지를 활용할 수도 있습니다. 단, 30초 동안 3~4회 정도로 요청 횟수를 제한하고, 인증 코드의 유효 시간을 몇 분 이내로 짧게 설정해야 합니다. 또한 영문과 숫자를 혼합한 코드를 사용하면 보안성을 더욱 높일 수 있습니다.

마지막으로, 가능하다면 사용자 이름이나 예측 가능한 순차적 값을 세션 ID로 사용하지 마십시오. 대신 매번 무작위 세션 ID를 생성하는 안전한 서버 측 세션 관리자를 사용하는 것이 좋습니다.

안전한 인증 방식을 구현하는 것은 일반적인 취약점을 해결하는 것보다 조금 더 까다롭습니다. 하지만 모든 애플리케이션, 프로그램, API에서 권한 부여는 매우 중요한 요소이므로, 시간을 충분히 투자하여 올바르게 구현할 가치가 있습니다.

이 취약점에 대한 더 자세한 정보와 조직 및 고객을 다양한 보안 위협으로부터 보호하는 방법은 Secure Code Warrior 블로그에서 확인하실 수 있습니다. 또한 데모를 체험하여 사이버 보안 기술을 지속적으로 연마하고 최신 상태로 유지해 보세요.


태그라인

배포 전 AI 기반 개발 거버넌스 확보

AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.

데모 예약하기
리소스 라이브러리

더 많은 블로그 살펴보기

보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.

전체 보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

하나의 보안 문화: Sage는 어떻게 챔피언 프로그램을 구축했는가

Sage가 유연하고 관계 중심적인 접근 방식을 통해 보안을 강화하고, 200명 이상의 보안 챔피언을 양성하며 실질적인 위험 감소를 달성한 사례를 확인해 보세요.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

2026년 사이버 보안 인식의 달: 기업 방어의 핵심, AI 보안 이해하기

주요 AI 기업 대부분이 안전 가이드라인이 마련될 때까지 AI 개발 속도를 전 세계적으로 늦춰야 한다고 공개적으로 촉구하는 시점에 이르렀지만, 사실 심각한 보안 문제는 이미 현실화되었습니다. 이로 인해 AI 도입에 따른 금전적 비용과 위험 부담이 계속 쌓이면서 수많은 보안 책임자와 경영진이 절박한 상황에 놓였습니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

인에이블러 8: 프로그램 브랜딩

성공적인 보안 코딩 프로그램을 위해서는 훌륭한 콘텐츠 그 이상의 것이 필요합니다. 인에이블러 8에서는 브랜딩을 통해 참여를 누구나 선망하는 위상 중심의 경험으로 바꾸는 방법을 알아봅니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

이제 모든 직원이 AI 사이버 보안의 최전선에 있습니다

엔터프라이즈 기술 환경은 너무 늦기 전까지는 아무도 예상하지 못한 속도로 변화하고 있습니다. 우리는 공식적으로 사람이 직접 작성한 코드와 기본적인 코파일럿 지원의 시대를 지나 '에이전트 기반 개발 수명 주기(ADLC)'의 시대로 진입했습니다. 자율형 AI 에이전트는 여러 기능 전반에 걸쳐 전례 없는 효율성을 약속하지만, 동시에 완전히 새로운 차원의 보안 및 규제 위험을 야기합니다.

더 알아보기

배포 전 AI 기반 개발 보안 확보

소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.

데모 예약하기
항목이 없습니다.