본문 바로가기
💻Information Security

인증인가 취약점에 대해

by Prof. Panda 2024. 2. 26.

Pete Alexopoulos on Unsplash

인증인가 취약점 개요

인증인가라는 것은 특정 웹사이트에서 허락된 대상만이 특정 자원에 접근할 수 있도록 하기 위한 기능입니다. 컴퓨터가 아닌 오프라인에서는 신분증 등을 검사하는 등의 절차가 바로 이 인증/인가를 위해 하는 것입니다. 내가 권한이 있는 사람이고 그 사람이 나라는 것을 증명한다면 저에게는 권한이 주어지는 것입니다. 증명하는 단계가 인증이고 권한을 받는 단계가 인가입니다. 즉, 이 둘은 서로 긴밀하게 연결되어 있는 동시에 구분할 필요가 있습니다. 인증인가 취약점이 있는 웹사이트에서는 권한이 없는 사람이 권한을 필요로 하는 자원, 사이트 등에 접근할 수 있게 됩니다. 해당 자원이 별게 아니라면 문제가 없지만, 관리자의 권한을 주거나 관리자의 업무를 수행할 수 있도록 한다면 해당 취약점은 매우 치명적일 수 있습니다. 우선 인증과 인가의 차이를 먼저 살펴보겠습니다.

인증과 인가의 차이

인증과 인가를 구분하는 것은 모른다면 헷갈리기 쉽지만 그렇게 어려운 부분은 아닙니다. 아래를 참고하시기 바랍니다.

  • 인증(Authentication) - 주체가 주체 본인이 맞는 것을 '증명' 하는 단계 - 자신이 권한이 있다는 것을 증명
  • 인가(Authrization) - 권한을 부여하는 것

즉, 이 둘의 차이는 이렇습니다. '인증'은 증명을 하는 단계이고, '인가'는 권한을 받고 주는 단계입니다. 인증은 하는데 인가를 안하면 하는 이유가 없고, 인증 없이 인가를 하면 누구나 권한을 받을 수 있겠죠? 그래서 이 두가지의 요소를 굳이 구분하는 것입니다. 이 둘은 꼭 함께 있어야 하고, 둘 중 하나가 없다면 의미가 없어진다는 것을 알 수 있습니다. 

인증 취약점 시나리오

인증 취약점은 여러가지 방식으로 존재할 수 있습니다. 대표적인 케이스는 아래와 같이 정리할 수 있습니다.

  1. 클라이언트 측 정보(Cookie)를 통해 인증하는 경우
  2. 인증이 필요한 사이트에 직접 접근이 가능한 경우
  3. 잘못된 프로그래밍으로 파라미터 응답값 변조를 통해 접근이 가능한 경우
  4. 인증 횟수를 제한하지 않는 경우

클라이언트의 정보가 보관되고 관리되는 경우라면 해당 정보에 접근하고 변조하여 인증을 우회할 수 있습니다. 목표 웹사이트(링크)가 추측이 가능한 주소로 되어있다면 추측 공격을 통하여 접근할 수 있습니다. 해당 페이지에서 별도의 인증 과정을 구현해두지 않았다면 인증을 우회할 수 있습니다. 프로그래밍이 잘못 되었다면 response에 인증이 필요한 웹사이트에 접근이 가능하거나 단서가 남아있을 수 있습니다. 이런 경우 파라미터 값이나 응답 값을 변조하는 등을 통해서 우회할 수 있습니다. 인증 횟수의 제한이 없는 경우는 무작위 대입 공격에 취약하게 되어 인증정보를 공격자가 취득하는 과정이 수월해질 수 있습니다. 인증 취약점 시나리오와 같은 경우 CTF 문제 풀이를 통해 위와 같은 시나리오의 예시를 이해할 수 있습니다.

인가 취약점 시나리오(전략)

인증인가 취약점은 과정이 거의 공통적이어서 둘을 구분하는 것은 크게 의미가 없을 수 있습니다. 인증 취약점 시나리오의 연장선 정도로 생각해도 크게 문제가 없을 것입니다. 인증과 인가의 차이점을 알고 있다면 본인의 주관에 따라서 다르게 구분할 수도 있습니다. 인가를 우회하는 전략은 크게 두가지입니다. 하나는 파라미터 변조이고 다른 하나는 직접접근입니다. 두가지 전략과 아래 시나리오를 참고해볼 수 있습니다.

  1. 주석 - 접근이 필요한 사이트나 단서가 주석처리가 되어 있어 주석을 해제하거나 주석의 정보를 통해 추측이 가능한 경우
  2. 클라이언트 인가 - 백엔드가 아닌 프런트 엔드, 즉 자바스크립트와 같은 클라이언트 측 언어로 인가 체크를 하는 경우 값을 변조하거나 코드를 분석하는 과정을 통해서 부적절하게 인가를 받을 수 있다. 스크립트를 난독화 하더라도 난독화 해제 프로그램을 쓰거나 정적/동적 분석을 통해서 우회법을 생각할 수 있다.
  3. 추측 공격 - 접근하고자 하는 목표물의 url을 유추해서 접근하는 방법, 사전대입 공격과 유사하나 공격자의 경험에 비례하여 
  4. 파라미터 변조 - 인터셉트나 리피터와 같은 기능을 통해서 패킷의 파라미터 값을 변조하여 인가절차를 우회하는 방식

 

대응방안

인증인가 취약점에 대응하는 방안은 우선 중요한 정보나 인증인가 기능을 클라이언트 측에 구현하지 않는 것에 있습니다. 주석이나 클라이언트 스크립트로 인증인가 기능을 구현하는 경우 간단하게 프록시 도구 등을 통해서 우회할 수 있습니다. 또한, 중요한 기능을 구현해 놓은 페이지에는 직접접근을 하더라도 인증을 필요로 하도록 구현할 필요가 있으며 인증 단계에서도 부차별 대입 공격에 대한 대응을 해둘 필요가 있습니다. 추측 공격에 대응하기 위해서 페이지의 이름을 쉽게 예측하지 못하도록 명명하는 것도 방법이지만, 인증기능을 구현해두어서 인증인가 절차 없이 접근할 수 없도록 하는 것 또한 방법입니다.