접근제어가 필요한 중요 페이지의 통제수단이 미흡한 경우, 비인가자가 URL 파라미터 값 변경 등의 방법으로 중요 페이지에 접근하여 민감한 정보 열람 및 변조 가능함
판단 기준
양호: 접근제어가 필요한 중요 페이지의 통제수단이 적절하여 비인가자의 접근이 불가능한 경우 취약: 접근제어가 필요한 중요 페이지의 통제수단이 미흡하여 비인가자의 접근이 가능한 경우
참고
OWASP TOP 10 항목 중 A01 : Broken Access Control 에 해당한다고 판단
점검 방법
Step 1) 비밀 게시글(또는 개인정보 변경, 패스워드 변경 등) 페이지에서 다른 사용자와의 구분을 ID, 일련번호 등의 단순한 값을 사용하는지 조사
URL 상 표시 X세션 ID 값으로 사용자 구별
Step 2) 게시글을 구분하는 파라미터 값을 변경하는 것만으로 다른 사용자의 비밀 게시글 (또는 개인정보 변경, 패스워드 변경 등)에 접근 가능한지 확인
BurpSuite 를 사용하여도 해당 유저의 값만 바꿀 수 있음
다른 사용자의 패스워드에는 접근 불가능
보안 설정 방법
접근제어가 필요한 중요 페이지는 세션을 통한 인증 등 통제수단을 구현하여 인가된 사용자 여부를 검증 후 해당 페이지에 접근할 수 있도록 함
페이지별 권한 매트릭스를 작성하여 접근제어가 필요한 모든 페이지에서 권한 체크가 이뤄지도록 구현하여야 함
참고
🔐 OWASP TOP 10(2021)과의 연관
OSASP TOP 10 공식 문서중 일부 "Access control enforces policy such that users cannot act outside of their intended permissions. Failures typically lead to unauthorized information disclosure, modification or destruction of all data or performing a business function outside of the user's limits."
단순한 방법(연속된 숫자 할당 등)으로 생성되는 세션 ID를 예측하여 세션 탈취 여부 점검
점검 목적
사용자의 세션ID를 추측 불가능하도록 난수로 생성하여 공격자의 불법적인 접근을 차단하기 위함
보안 위협
사용자에게 전달하는 세션 ID가 일정한 패턴을 가지고 있는 경우 공격자가 세션 ID를 추측하여 불법적인 접근을 시도할 수 있음
판단 기준
양호: 추측 불가능한 세션 ID가 발급되는 경우 취약: 세션 ID가 일정한 패턴으로 발급되는 경우
참고
OWASP TOP 10 항목 중 A07 : Identification and Authentication Failures 에 해당한다고 판단
PHP의 경우에는 session start(); 를 사용하면 임의의 세션 ID를 발급해준다.
추가적인 설정과 세션에 대해서는 참고 확인
점검 방법
Step 1) 각기 다른 IP 주소와 다른 사용자명, 시간적 차이로 세션 ID를 발급받음
Step 2)발급받은 세션 ID에 일정한 패턴이 있는지 조사
Step 3) 일정한 패턴이 확인되고, 패턴에 의해 사용 가능한 세션 ID의 예측이 가능한지 확인
① jijibaeee 계정으로 로그인한 경우
jijibaeeee 로 로그인한 경우
② test123 계정으로 로그인한 경우
test123으로 로그인한 경우
③ (②) 에서 로그아웃을 하고 다시 test123 계정으로 로그인한 경우
다시 test123 으로 로그인한 경우
보안 설정 방법
아무리 길이가 길고 복잡한 항목으로 세션 ID가 만들어져도 공격자가 충분한 시간과 자원이 있다면 뚫는 것은 불가능하지 않으므로 강력한 세션 ID를 생성하여야 함 주된 목적은 수많은 대역폭과 처리 자원을 가지고 있는 공격자가 하나의 유효한 세션 ID를 추측하는데 최대한 오랜 시간이 걸리게 하여 쉽게 추측하지 못하게 하는 것에 있음
단순 조합보다는 상용 웹 서버나 웹 애플리케이션 플랫폼에서 제공하는 세션 ID를 사용하고, 가능하다면 맞춤형 세션 관리 체계를 권고함
세션 ID는 로그인 시마다 추측할 수 없는 새로운 세션 ID로 발급하여야 함
참고
📌세션 ID란 ?
웹 애플리케이션에서 사용자의 상태를 유지하기 위해 생성되는 고유한 식별자
세션 값에 접근하기 위한 키(Key) 역할을 하는 고유 식별자
즉, 브라우저에 저장되는 임의의 고유 식별자
난수를 사용하고 위 점검 예시의 Value 에 해당
Name 은 세션 이름(Key)
📌세션값이란 ?
세션에 저장된 실제 데이터
사용자 이름, 권한과 같은 데이터
브라우저에 안 보임 → 서버에 저장됨
$_SESSION['user_id'] 및 $_SESSION['nickname'] 과 같은 사용자의 정보임
사용자의 정보이므로 난수가 아님
비유
요소
역할
세션 이름 (PHPSESSID)
“출입증 이름” – 고정된 이름표
세션 ID (bgceffgcap...)
“출입증 번호” – 고유 번호 (매번 새로 발급 가능)
세션값 ($_SESSION)
“출입증 내부 데이터” – 사용자 이름, 권한 등 서버가 관리하는 상태
PHP에서 세션 설정
session_start() 호출 시 PHP가 자동으로 세션을 설정
기본값으로 설정한 경우 아래의 기본 설정이 들어감 → 충분히 강력하여 무작위 대입 공격 불가
OWASP TOP 10 공식문서중 일부 "CWE-384: Session Fixation – The application does not assign a new session ID upon successful login. This allows an attacker to set or predict a user’s session identifier and hijack their session once they log in."
1. A07 : Identification and Authentication Failures
세션 ID가 단순하거나 순차적으로 생성되어 공격자가 쉽게 추측할 수 있는 경우
사용자가 로그인하기 전에 세션 ID가 고정되어 있어, 공격자가 해당 세션 ID를 이용하여 사용자의 세션을 탈취할 수 있는 경우
OWASP TOP 10 공식문서중 일부 "Cross-Site Request Forgery (CSRF) vulnerabilities allow attackers to induce users to perform actions they do not intend to. CSRF attacks exploit the trust that a site has in a user's browser."
패스워드 복구 로직을 유추하기 어렵게 구현하고, 인증된 사용자 메일이나 SMS에서만 복구 패스워드를 확인할 수 있도록하여 비인가자를 통한 사용자 패스워드 획득 및 변경을 방지하기 위함
보안 위협
취약한 패스워드 복구 로직(패스워드 찾기 등)으로 인하여 공격자가 불법적으로 다른 사용자의 패스워드를 획득, 변경할 수 있음
판단 기준
양호: 패스워드 재설정 시 난수를 이용하여 재설정되고 인증된 사용자 메일이나 SMS로 재설정된 패스워드 혹은 패스워드 재설정을 위한 링크 전송 시 취약: 패스워드 재설정 시 일정 패턴으로 재설정되고 웹 사이트 화면에 바로 출력 시
참고
OWASP TOP 10 항목 중 A07 : Identification and Authentication Failures 에 해당한다고 판단
점검 방법
Step 1) 재설정(또는 패스워드 찾기)되는 패스워드 몇 개를 획득하여 사용자의 연락처, 주소, 메일 주소, 일정 패턴을 패스워드로 이용하고 있는지 확인하고 재설정된 패스워드를 인증된 사용자 메일이나 SMS로 전송하는지 확인
해당 점검은 테스트 서버 대상이므로 인증 절차 존재하지 않음
보안 설정 방법
사용자의 개인정보(연락처, 주소, 메일 주소 등)로 패스워드를 생성하지 말아야 하며, 난수를 이용한 불규칙적이고 최소 길이(6자 이상 권고) 이상의 패턴이 없는 패스워드를 발급하여야 함
사용자 패스워드를 발급해주거나 확인해줄 때 웹 사이트 화면에 바로 출력해주는 것이 아니라 인증된 사용자 메일이나 SMS로 전송해주어야 함
패스워드 재발급 검증 실패에 대한 임계값을 설정하여 일정 횟수 이상 실패한 경우 다른 방식으로 패스워드 찾기 기능을 제공하여야 한다. 검증 후 기존의 패스워드가 아닌 임시패스워드를 발급하도록 설계해야 하며, 사용자가 임시패스워드를 발급받은 즉시 새로운 패스워드로 재설정하도록 구현하여야 함
참고
🔐 OWASP TOP 10(2021)과의 연관
OWASP 설명 중 일부: “Verification mechanisms for password recovery should be just as secure as login mechanisms.”
1. A07 : Identification and Authentication Failures
비밀번호를 재설정하거나 찾는 과정에서 인증이 불충분하거나, 정보 노출, 예측 가능한 토큰 사용 등으로 인해 계정 탈취로 이어질 수 있는 취약점