불충분한 인증과 불충분한 인가란 무엇일까 단어만 보아서는 어떤 뜻을 갖고있는지에 대한 뉘앙스는 알겠지만
정확한 뜻은 와닿지가 않는다. 우선 단어의 의미를 알아보자.
불충분한 인증 : 중요정보(개인정보 변경 등) 페이지에 대한 인증 절차가 불충분할 경우 권한이 없는 사용자가 중요정보 페이지에 접근하여 정보를 유출하거나 변조가 가능.
불충분한 인가 : 접근제어가 필요한 중요 페이지의 통제수단이 미흡한 경우, 비인가자가 URL 파라미터 값 변경 등의 방법으로 중요 페이지에 접근하여 민감한 정보 열람 및 변조가 가능.
*출처 주요정보통신기반시설_기술적_취약점 분석 평가 방법 상세 가이드
즉 인증 (Authentication) 및 인가 (Authorization) 취약점은 시스템 접근 제어 과정에서 발생하는 보안 문제로, 인증 단계에서 사용자의 신원을 확인하는 과정 또는 인가 단계에서 허용되지 않은 접근을 막는 과정에 문제가 생겨 발생하는 보안 취약점을 의미한다.
실제 취약 사례를 보며 알아보자.
인증(Authentication) 취약점
1. Cookie를 통해 인증
Cookie는 클라이언트 측에서 얼마든지 위조가 가능하다.

위 요청과 응답을 주고받는 페이지가 있다고 가정하였을때, 관리자계정이 admin이라면
공격자는 Cookie의 loginUser를 admin으로 바꾸는것만으로도 인증을 우회할수 있다.
2. Process 점프.
만약 웹 서버의 메인 페이지의 URL이 "http://domain.com/step1.php" 라는 URL을 가지고 있다고 가정,
다음 페이지는 step2.php, 그 다음 step3.php로 넘어가기 위해서는 관리자임을 인증하여야 갈 수 있도록 구현되어 있을때.
공격자는 step1, step2 다음은 step3 임을 유추하여 굳이 관리자임을 인증하지 않아도 step3 페이지를 불러올 수 있다.
실제 회원가입과 같은 페이지에서
(1) 약관동의 (2) 본인인증 (3) 회원가입 의 절차로 구현되어 있을때
(2) 본인인증을 건너뛰고 (1) 약관동의 -> (3) 회원가입으로 넘어 갈수 있는 사례와 비슷하다.
3. 파라미터 응답값 변조
공격자는 요청(Request)만 위조가 가능한게 아니라 응답(Response)또한 응답이 가능하다.
웹 서버에 어떠한 요청을 보냈을때 서버에서는 'True'값이 넘어와야 기능을 수행하는 구조 일때,
우리는 'False'의 응답을 받더라도 'True'로 위조하여 우회가 가능하다는 뜻이다.
실제 예시를 보자.

우리는 관리자(admin)의 패스워드를 모르기때문에 서버에서는 ok가 아닌 다른값 no,fail,false 와 비슷한 값을 보내줄것이다.
이 응답을 위조하여 admin으로 로그인이 가능하다.


이와 같이 파라미터 응답 위조를 통해 admin으로 로그인이 가능하다.
실제 모바일 앱에서 사례가 더 많다고 한다.
4. 인증 횟수 제한 X
흔히 구글 로그인, 네이버 로그인과 같은 기능을 할때 비밀번호를 여러번 틀리게 되면 더이상 로그인 기능의 동작을 제한 하는것을 자주 볼 수 있다.
이와 같이 인증 횟수에 제한이 걸려있지 않다면 Brute Force ( 무차별 대입 공격 )에 취약하다.
인가(Authorization) 취약점
1. 주석으로 접근 제한.

위 페이지와 같이 관리자가 아니라면 버튼을 클릭할수 없는 페이지가 있다.
하지만 실제 F12(개발자모드)로도 주석은 얼마든지 없앨수 있으며, 버튼의 url로 직접 접근해도 된다.
2. 인가 체크를 클라이언트 측에서 하고 있는 경우

goMenu 함수를 통해 버튼을 누를수있는 권한을 인가해주는 페이지가 있다.
하지만 해당 함수는 서버 내에서 작동하는게 아니라, js 즉 자바스크립트 형식을 통해 클라이언트 측에서 함수가 작동한다.
공격자는 해당 js를 리버싱하여 권한을 획득 할 수 있다.

3. guessing 공격
웹 개발을 해본 경험이 있다면 다들 게시판을 만들어 보았을것이다.
그때 게시판 읽기 기능은 보통 [read,view]와 같은 이름으로 지어지고
게시판 글 쓰기 기능은 [write,post]와 같은 이름, 수정기능은[update,edit]와 같은 이름으로 만들곤 한다.
그래서 우리는 이름을 유추(guessing)하여 불러올 수 있다. 아래 예시를 보자

해당 페이지의 URL은 "/auth5/index.php?page=board"의 형식을 갖고 있다.
page의 파라미터 값으로 기능을 불러오고 동작하는것으로 파악, page=write를 입력해보았다.

이와 같이 글쓰기 권한을 인가받지 않았지만 Guessing공격을 통해 인가받지 않은 페이지를 사용할수 있다.
4. 파라미터 변조
바로 예시를 보자

해당 페이지의 URL을 자세히 보면 파라미터로 page와 id값을 받아온다. 값은 mypage와 id 넘버
id 넘버에 해당하는 유저의 비밀번호 변경을 동작하는 페이지로 보인다.
따라서 우리는 id 넘버 파라미터를 변조하여 다른 유저들의 id비밀번호가 변경이 가능하다.

실제로 id 넘버를 변경할때마다 다른 유저들의 비밀번호 변경 페이지를 가져올수 있었다.
'웹 해킹' 카테고리의 다른 글
| 파일 다운로드 취약점과 실습 문제 풀이 (1) | 2025.07.21 |
|---|---|
| File uplaod와 File Include 취약점 (1) | 2025.07.20 |
| 리버스 쉘 (0) | 2025.07.16 |
| 파일 업로드 취약점, 문제풀이 (1) | 2025.07.13 |
| CSRF 대응방법, SOP와 CORS (2) | 2025.07.09 |