1. 인증 (Authentication)
- 개념
사용자가 자신임을 증명하는 과정입니다
ex> 아이디/ 비밀번호, OTP, 생체 인식 등등
- 취약점
클라이언트 측 쿠키나 토큰을 신뢰하여 인증하는 경우입니다
인증 로직 우회 ex> 프로세스 건너뛰기
2. 인가(Authorization)
- 개념
인증된 사용자가 특정 자원이나 기능에 접근할 수 있도록 권한을 부여하는 과정입니다
ex> 게시글 수정/ 삭제 권한, 관리자 페이지 접근 권한 등
- 취약점
불충분한 인가 체크로 인해 비인가 사용자가 민감한 기능에 접근하는 경우가 되겠습니다
클라이언트 측 인가 검증만 적용한 경우(주석, css, js 등등)
이번 글에서는 인가 취약점을 중심으로 다루도록 하겠습니다
특히 인가 취약점을 이용한 공격 기법에는 크게 두 가지 전략이 있습니다
인가 취약점 공격 전략
- 전략 1 > 파라미터 변조
- URL 또는 요청 파라미터의 값을 공격자가 임의로 변경하여 원래 접근 권한이 없는 페이지에 접근하는 방식입니다
- ex> 게시글 수정 시 본인 계정이 아닌 다른 사용자의 게시글 번호(id)를 조작하는 경우가 되겠습니다
- 전략 2 > 직접 접근
- URL 패턴이나 파일 경로를 추측하여 직접 접근하는 방식입니다
- ex> 관리자 페이지가 "admin"과 같이 쉽게 예측 가능한 경로에 존재할 때가 되겠습니다
파라미터 변조와 분석 기법
- 파라미터 변조 시
- 시나리오 >
- 사용자가 자신의 게시글 수정 페이지에 접근할 때, URL에 포함된 게시글 번호(id)가 파라미터로 전달됩니다 만약 공격자가 이 값을 다른 사용자의 게시글 번호로 변경한다면, 권한이 없는 사용자가 타인의 게시글을 수정하거나 삭제할 수 있게 됩니다
- 정적 분석
- 개념 >
- 소스 코드를 실행하지 않고 코드 내의 논리와 취약점을 분석하는 기법입니다
- 목적 >
- 코드 리뷰 및 자동화 도구를 통해 인가 검증 로직이 제대로 구현되어 있는지 확인합니다
- ex >
- if 문이나 조건문을 통해 세션에 저장된 사용자 ID와 요청 파라미터의 ID를 비교하는 부분을 점검합니다
- 동적 분석
- 개념 >
- 실제 애플리케이션을 실행하면서 요청과 응답을 분석하여 인가 취약점이 발생하는지를 테스트하는 기법입니다
- 목적 >
- 공격자가 파라미터를 변조했을 때 시스템의 응답 및 권한 우회 가능성을 확인합니다
- ex >
- 버프 스위트과 같은 도구를 사용하여 요청 파라미터 값을 변경한 후, 서버가 올바르게 인가를 검증하는지 테스트합니다
Guessing 공격
- 개념 >
- 공격자가 URL 패턴, 파일 이름, 파라미터 값 등을 예측하여 접근하는 공격입니다
- 특징 >
- 인가된 사용자의 기능 및 페이지 접근 권한을 추측할 수 있는 규칙성이 존재할 때 효과적입니다
- 게시판의 URL 패턴이 일정하다면 "notice_write.php"와 같이 존재할 법한 페이지를 예측해 접근할 수 있습니다