📌인증 (Authentication)
DATE : 2024/2/22
What is Authentication?
인증이란, 누군가 자신이라 주장하는 사람이 본인이 맞는지 확인하는 작업을 말한다.
흔히 비밀번호나 인증 코드를 입력하는 과정이 이에 속하는데
"내가 hanhxx다!" 라고 증명할 수 있는 무언가가 필요하기 때문에 인증은
타인이 모르는, 당사자만 알 정보를 활용해 그 사람이 주장하는 사람이 맞는지 확인한다.
그래서 인증 취약점이라 하면
인증 과정을 무시, 우회할 수 있는 경우 혹은 인증 과정에서 발생하는 취약점을 일컫는다.
인증 취약점으로 발생하는 대표적인 케이스를 정리해보자면 다음과 같다.
1) Cookie와 같이 Client 측 정보를 가지고 인증하는 경우
로그인 한 사용자의 Username을 Cookie로 만들어 사용하는 경우,
서버에서 이 Cookie를 바탕으로 사용자가 누구인지 식별하고 그에 맞는 권한을 부여한다고 생각해보자.
이런 경우, 우리는 admin의 비밀번호를 모르기 때문에 admin으로 인증할 수는 없지만
자신의 계정으로 로그인을 한 다음, Cookie 값을 admin으로 변경함으로써 인증 과정을 우회할 수 있다.
2) Process를 넘어갈 수 있는 경우
원래는 본인 인증을 마친 후, 다음 페이지로 접근이 가능하다면
Process를 넘길 수 있는 경우에는 다음 페이지 경로를 직접 입력함으로써 직접 접근이 가능하다.
따라서 인증 된 사용자인지 확인하는 절차를 무시할 수 있기 때문에 인증을 할 필요가 없어지는 것!
3) Parameter 응답 값을 변조하는 경우
만약 로그인에 성공한 경우에는 "ok"를, 실패한 경우에는 "fail"을 전달하는 서버가 있다고 가정해보자.
이런 경우에는 비밀번호를 모르면 당연히 로그인에 실패할 거라 생각하지만
그렇다면 반대로 fail을 ok로 바꿔버리면 될 문제이다.
4) 인증 시도 횟수 제한이 없는 경우
보통 로그인할 때, 3 ~ 5번 정도의 입력 횟수가 주어진다.
횟수를 초과하는 경우에는 일정 시간 동안 로그인을 못하도록 차단해버리는데
만약 이러한 횟수 제한이 존재하지 않는다면 어떻게 될까?
인증 코드처럼 4~6자리 정도의 문자 조합 정도는 계속 때려 넣어보면 그만 이다.
따라서 인증 횟수를 제한하지 않는다면 인증 정보를 모르는 입장에서도 무작위 대입 공격을 통해
인증 과정을 통과할 수 있게 된다..!
그 전에 인증과 굉장히 유사한 인가에 대해 알아보자!
Last updated