ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인증과 인가(Authentication and Authorization)
    IT/웹 해킹 2024. 2. 22. 00:33

    [이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]

     

    • 목차
    1. 인증(Authentication)이란
    2. 인가(Authorization)란
    3. 인증과 인가의 차이
    4. 인증 취약점 케이스
    5. 인가 취약점 케이스

     

    출처 : https://www.slideshare.net/awskorea/aws-builders-industry-edition-devsecops-on-aws-iam-249564733

     

     

    1. 인증(Authentication)이란 이 전 게시물(https://lockinghacking.tistory.com/11)에도 설명했듯이 수많은 데이터 중에서 특정 데이터를 찾아내는 작업이다. 즉 많은 데이터 중에서 본인이 맞는지 확인하는 작업으로 보면 된다.  ex) 본인인증, 비밀번호, OTP 등

     

    2. 인가(Authorization)란 권한을 부여하거나 제한하는 것으로 생각하면 된다. 예를 들어 이 게시물을 내가 작성하고, 수정하고, 삭제하는 것은 내 아이디에 부여된 고유 권한인 것이고, 다른 사람들이 내 게시물을 읽는 것도 권한이다. 하지만 다른 사람들은 내 게시물을 수정하거나 삭제하지 못 하도록 제한되어 있다. 또는 권한이 없다. ex) 공지게시판의 운영자만 글 작성 가능

     

    3. 인증과 인가의 차이는 간단하게 말하자면 인증은 본인 확인 작업 인가는 권한의 여부인데 예를들어 내가 인증 취약점을 뚫고 들어가도 권한이 없다면 실행이 불가능하다로 해석하면 쉬울 것이다. 반대로 말해서 권한에 대한 설정이 없다면 인증만 뚫고 들어가도 실행이 가능하다는 뜻이다.

     

    4. 인증 취약점 케이스

    • 클라이언트 측 정보를 통해 인증하는 케이스 (cookie 값 변조)
    • 절차를 무시하는 케이스 (파일 경로를 직접 접근하여 원하는 페이지로 이동)
    • 파라미터 응답값 변조
    • 인증 횟수 제한의 부재 (계정 잠금 임계치 설정이 없는 경우 Brute Force 공격 가능)

    5. 인가 취약점 케이스

    • 파라미터 변조
    • 직접접근

     

    이 두 가지 취약점의 대응방안은 클라이언트가 아닌 서버에서 검증을 하는 것이다. 서버가 아닌 웹 페이지에서 CSS나 JavaScript를 통해 인증하는 방식을 하는 곳이 여러 군데 있다고 한다. 그럼 클라이언트가 프록시를 통해 코드를 수정하여 바꾸게 된다면 바로 뚫리는 것이다. 그러니 세션을 이용하여 서버측에서 인증이 이루어지도록 개발을 해야하고 검증 과정에서도 로직 구현 및 데이터 유효성에 관해 생각하며 만든것이 좋다. ( ex) 로그인 인증 식별 로직 구현, 비밀번호 해쉬화, 2차 인증 등등)

     

     

Designed by Tistory.