Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3부 12장] 기본 인증 #11

Open
im-gnar opened this issue Sep 18, 2022 · 1 comment
Open

[3부 12장] 기본 인증 #11

im-gnar opened this issue Sep 18, 2022 · 1 comment

Comments

@im-gnar
Copy link
Member

im-gnar commented Sep 18, 2022

12장 기본 인증

12.1 인증

12.1.1 HTTP의 인증요구/응답 프레임워크

웹 사이트에 리소스에는 소유자의 동의 없이 권한 없는 사용자가 접근할 수 없어야 하고, 이를 위해서 서버는 사용자가 누구인지 식별할 수 있어야 한다.
보통은 사용자 이름과 비밀번호를 입력해서 인증한다. HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다.
BUT 요즘은 각각의 인증 모듈을 이용해 '직접' 구현해 사용한다.

12.1.2 인증 프로토콜과 헤더

HTTP는 필요에 따라 고쳐 쓸 수 있는 제어 헤더를 통해, 다른 인증 프로토콜에 맞추어 확장할 수 있는 프레임워크를 제공한다.
HTTP에는 기본 인증과 다이제스트 인증이라는 두 가지 공식적인 인증 프로토콜이 있다.

기본인증

12.1.3 보안 영역

웹 서버는 기밀문서를 보안 영역(realm) 그룹으로 나누고, 보안 영역은 저마다 다른 사용자 권한을 요구한다.

 HTTP/1.0 401 Unauthorized   
 WWW-Authenticate: Basic realm="Corporate Financials"

12.2 기본 인증

기본 인증은 가장 잘 알려진 HTTP 인증 규약이다.

12.2.1 기본 인증의 예

12.2.2 Base-64 사용자 이름/비밀번호 인코딩

기본 인증은 Authorization: Basic <credentials>형식으로 유저 데이터를 전송하고, credentials는 기본적으로 Base64-Encoded(userid:password)를 따른다.

Base-64는 원래 시스템에 문제를 일으킬 수 있는 문자열(e.g. 한글이 포함된 URL...)을 받아 전송할 수 있도록 하기 위해 만들어졌다.

즉, 암호화의 목적으로 만들어진 게 아니다.
노출을 방지할 수는 있지만, 디코딩하는 것도 매우 간단하기 때문에 이를 보안 목적으로 사용하는 것은 부적절하다.

12.2.3 프락시 인증

중개 프락시 서버를 통해 인증하거나 프락시 서버에서 접근 정책을 중앙 관리할 수 있다.

웹 서버와 프락시 인증에서 쓰이는 상태 코드와 헤더들의 대조

기본 인증 프락시 서버
401 (Unauthorized) 407 (Proxy Authentication Required)
WWW-Authenticate Proxy-Authenticate
Authorization Proxy-Authorization
Authentication-Info Proxy-Authentication-Info

접근 거부
프록시 서버가 주어진 리소스에 대한 접근 권한을 얻기 위해 적절하지 않은 유효한 인증 정보를 수신한다면, 서버는 403 Forbidden 상태 코드로 응답하여야 합니다. 401 Unauthorized407 (en-US) Proxy Authentication Required 와는 다르게, 해당 사용자에 대한 인증은 불가능합니다.

12.3 기본 인증의 보안 결함

  • Base-64는 사용자 이름과 비밀번호를 쉽게 디코딩 할 수 있는 형식으로 네트워크에 전송한다.
    • 따라서 어렵지 않게 디코딩 가능하고, 이는 사실상 비밀번호 그대로 보내는 것과 같다.
  • 더 복잡한 방식으로 인코딩 되어도 제3자가 인코딩 된 것을 캡처하여 원 서버에 보내 인증을 선공하는 재전송 공격에 대한 대비가 없다.
  • 기본 인증을 사용하는 사이트에서 사용한 비밀번호를 사용자들이 다른 사이트에서도 똑같은 비밀번호를 사용한다면 이를 악의적으로 이용할 수 있음
  • 인증 헤더 외에 다른 부분을 수정하는 프락시나 중개자가 개입되는 경우, 기본 인증의 정상적인 동작을 보장하지 않는다.
  • 기본 인증은 가짜 서버의 위장에 취약하다.
    • 가짜 서버에 비밀번호를 보낼 수 있다

종합하자면, 기본인증은 노출이 되어도 치명적이지 않은 경우에는 여전히 유용하다.
또 기본 인증은 암호화된 데이터 전송(SSL과 같은)과 함께 연계해서 사용 가능하다.


++ HTTP Auth Type

WWW-Authenticate 헤더는 Type 에 인증 스킴을 명시한다.
image

  • Basic (base64-encoded credentials)
  • Bearer (bearer tokens to access OAuth 2.0-protected resources)
  • Digest (md5 hashing)
  • HOBA (HTTP Origin-Bound Authentication, digital-signature-based)
  • Mutual
  • AWS4-HMAC-SHA256

Ref. HTTP 인증
Ref. HTTP Authentication Explained

@ruthetum
Copy link
Member

@im-gnar im-gnar self-assigned this Sep 18, 2022
@im-gnar im-gnar changed the title [2부 12장] 기본 인증 [3부 12장] 기본 인증 Sep 18, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants