인증 메커리즘 취약점 - Fundamentals

인증 메커리즘 취약점 - Fundamentals

in

기업들은 UX을 간소화하여 사용자가 한 번의 로그인으로 여러 애플리케이션과 웹사이트에 접근할 수 있도록 목표합니다. 또한 관리의 용이성을 위해 서로 다른 인증 및 인가 체계를 줄이고 표준 정책을 시행하기를 원할 수도 있습니다. OAuth, OpenID Connect, SAML과 같은 프레임워크는 기업이 안전하고 표준화된 인증 및 인가 흐름을 구축하는 데 도움을 줄 수 있습니다.

그러나 이러한 프레임워크도 완벽하지 않으며, 적절하게 구현되지 않을 경우 다양한 취약점에 노출될 수 있습니다. 따라서 기업들은 이러한 프레임워크를 도입할 때 각 프레임워크의 보안 취약점을 이해하고, 이를 방지하기 위한 최선의 보안 관행을 준수해야 합니다.

이를 통해 사용자 데이터를 보호하고, 인증 및 인가 체계의 신뢰성을 확보할 수 있습니다.

Fundamentals

Authentication

인증(Authentication)은 사용자의 신원을 확인하는 과정입니다. 이는 “당신이 주장하는 사람이 맞습니까?”라는 질문에 답하는 절차를 포함합니다. 인증 과정에서는 사용자가 제공한 자격 증명이 시스템의 저장된 정보와 일치하는지 확인합니다.

예를 들어, 사용자가 google.com에 방문하여 로그인하려고 할 때, 사이트는 사용자의 이메일과 비밀번호를 요구합니다. 사용자가 입력한 자격 증명은 데이터베이스에 저장된 정보와 대조됩니다. 만약 정보가 일치하면 사용자는 인증에 성공하고 시스템에 접근할 수 있는 권한을 얻게 됩니다. 반면, 정보가 일치하지 않으면 인증이 실패하고 시스템은 오류 메시지를 반환합니다.

인증은 시스템이 사용자의 신원을 확인하여, 접근을 허용할지를 결정하는 중요한 첫 단계입니다. 이를 통해 시스템은 올바른 사용자가 접근하도록 보장하고, 부정 접근을 방지할 수 있습니다.

Authorization

인가(Authorization)는 사용자가 특정 자원이나 기능에 접근할 수 있는 권한을 부여 받았는지 확인하는 과정입니다. 이는 “당신이 이 작업을 수행할 권한이 있습니까?”라는 질문에 답하는 것입니다.

예를 들어, 사용자가 google.com에 로그인하여 성공적으로 인증을 받은 후, 특정 파일에 접근하거나 특정 작업을 수행하려고 할 때, 시스템은 사용자가 해당 자원에 접근할 권한이 있는지 확인합니다. 이 과정에서 시스템은 사용자의 역할, 권한 수준, 접근 정책 등을 검토하여 접근 허용 여부를 결정합니다. 만약 사용자가 필요한 권한을 가지고 있지 않다면, 시스템은 접근을 거부하게 됩니다.

따라서 인가는 인증이 성공적으로 이루어진 이후에 수행되며, 사용자가 시스템 내에서 어떤 자원이나 기능에 접근할 수 있는지를 결정하는 중요한 보안 절차입니다.

Broken Authentication

잘못 구현된 접근 제어 메커니즘을 발견하는 것은 흔한 일입니다. 이러한 취약점의 영향 범위는 민감한 정보의 노출부터 시스템의 근본적인 손상에 이르기까지 다양합니다. 예를 들어, API를 통해 요청하는 사용자를 식별하는 애플리케이션의 기능이 손상되면, 전체 웹 애플리케이션 보안이 위협받게 됩니다.

  • 사용자 이름과 비밀번호 목록을 이용해 로그인 페이지를 무차별 대입 공격(Brute-forcing)하는 경우
  • 서명이 없거나 서명이 약한 세션 토큰(예: JWT)을 조작하는 경우
  • 약한 비밀번호와 암호화 키를 악용하는 경우
  • URL에서 인증 토큰과 비밀번호를 획득하는 경우

JWT

JSON Web Token (JWT)은 암호화된 데이터를 전송하는 형식입니다. JWT는 주로 웹 애플리케이션에서 무상태 세션 토큰으로 사용됩니다. JSON 객체로 인코딩된 JWT는 헤더, 페이로드, 서명의 세 부분으로 구성되며, 이를 통해 클라이언트와 서버 간에 정보를 안전하게 전송하여 인증과 인가를 처리할 수 있습니다.

그 단순함과 유연성 덕분에 다양한 프로그래밍 언어와 플랫폼에서 널리 사용되고 있습니다.

무상태 세션 토큰 : 무상태 세션 토큰은 서버가 세션 정보를 유지하지 않고도 사용자의 인증 상태를 확인할 수 있게 해주는 토큰입니다. 각 요청에 토큰이 포함되며, 서버는 토큰을 확인함으로써 사용자를 인증합니다.

OAuth

OAuth (Open Authorization)는 사용자 자격 증명을 공유하지 않고도 다른 웹 서비스 간에 안전하게 권한을 부여하고 접근을 위임할 수 있는 개방형 표준 프로토콜입니다. 이를 통해 사용자는 비밀번호를 노출하지 않고도 소셜 미디어 계정이나 온라인 뱅킹과 같은 다른 웹 서비스의 자원에 대해 서드파티 애플리케이션에 제한된 접근을 허용할 수 있습니다.

OAuth는 토큰 기반 인증 과정을 통해 운영되며, 서비스 제공자와 소비자 간의 원활한 상호 작용을 가능하게 하면서 사용자 프라이버시와 보안을 유지합니다. 다양한 산업에서 널리 채택된 OAuth는 현대의 웹 및 모바일 애플리케이션에서 안전한 API 접근 및 인가를 가능하게 하는 사실상의 표준이 되었습니다.

SAML

SAML (Secure Assertion Markup Language)은 아이덴티티 제공자(IdPs)와 서비스 제공자(SPs) 간에 인증 및 인가 데이터를 교환하기 위한 XML 기반의 개방형 표준입니다.

SAML은 싱글 사인온(SSO)을 가능하게 하여, 사용자가 한 세트의 자격 증명으로 여러 애플리케이션과 서비스에 접근할 수 있도록 합니다.

SAML 워크플로우에서는 사용자의 신원이 IdP에 의해 인증되며, 이후 사용자 속성과 권한을 포함하는 디지털 서명된 assertion이 생성됩니다. 이 assertion은 SP로 전송되며, SP는 이를 검증하고 적절하게 접근을 허용합니다.

SAML은 기업 환경과 웹 기반 애플리케이션에서 인증 프로세스를 간소화하고 표준화된 프로토콜과 assertion을 통해 보안을 강화하기 위해 널리 사용됩니다.