Infosec403

broken access control.txt

5.99 KB · text/plain · 업로드 2026-07-06 09:56

OWASP
 Open Worldwide Application Security Project
  --> 단체 이름임. 소프트웨어 보안 개선을 위해, 전 세계의 개발자/보안 전문가가 참여

OWASP Top 10
 -> 웹 애플리케이션에서 발생하는 치명적이고, 빈번하게 발생하는 10대 보안 취약점 목록
 --> 새로운 항목도 추가되지만..
 ---> 기술적 연관성에 따라 독립된 항목이 특정 카테고리로 흡수·통합되거나, 반대로 세분화되는 등 지속적인 재분류 과정을 거침
 ----> 오늘 소개할 OWASP2021-A01 도 여러 취약점이 하나의 카테고리로 합쳐지며 분야가 넓어졌기 때문에, 1순위가 된 것

CWE(Common Weakness Enumeration) -> 취약점을 유발하는 근본 원인이나 결함. 즉 '개념'
CVE(Common Vulnerabilities and Exposures) -> 실제 취약점 번호별 분류. 즉 '실제 사례'

인증(Authentication) <-> 인가(Authorization)
 -> 구분을 잘 해야 한다.
 - 인증은 '당신은 누구입니까?' -> 내가 특정 사람이라는 것을 증명 가능한 것
   ex) 로그인
 - 인가는 '당신이 가진 권한은 무엇입니까?' -> 인증을 거친 사용자가 어떤 '권한'을 가지고 있는가?

그렇다면, 웹 애플리케이션은 어떻게 사용자 인증을 받는가?
 -> HTTP의 특성을 알아야 함: Stateless -> 서버가 클라이언트의 이전 상태를 기억하지 않는다
     : 점원에게 아메리카노 한잔 주세요(주문 완료) -> 샷 하나만 추가해 주세요 -> 점원은 이전에 아메리카노 한잔 주문한 것을 기억하지못함
         --> 왜 이렇게 만들었나? : 요청이 들어오는 대로 처리만 하면 되니까 서버 자원을 아낄 수 있다
-> 쿠키와 세션: HTTP의 Stateless를 보완하기 위한 기술
 -> 유저가 로그인 요청을 하면, 서버에 사용자 정보를 저장함(세션) -> 이후 세션 ID를 유저에게 리턴함
  --> 이후 유저는 세션 ID를 요청에 붙여서 보내며, 서버는 해당 ID를 보고 해당 유저임을 알수 있음(놀이공원 입장팔찌같은거임: 이때, 세션ID가 저장되는 곳이 웹 브라우저의 쿠키)
   --> 쿠키란 웹 브라우저가 사용자의 컴퓨터에 저장하는 작은 텍스트 파일임

예를 들면, 일반 사용자 계정으로 로그인
 -> 게시글 작성이나 조회 가능. 하지만 관리자 페이지에는 접근 불가능
 --> 관리자가 아닌, 일반 사용자 계정으로 로그인 한 후, 관리자 페이지에 접근 가능하면 안 됨
 ---> OWASP Top 10 2021:A01 - Broken Access Control
 ----> 즉, '인증' 단계에서 문제가 발생한 것이 아닌, '인가된 권한을 제대로 제한하지 않은 것'에서 발생하는 문제

수평적 /수직적 권한 상승(Horizontal/Vertical Privilege Escalation)
 -> 수평적의 경우, 동일한 권한 레벨을 가진 '다른 사용자의' 데이터에 접근
 --> 수직적의 경우, 더 상위의 권한 레벨을 필요로 하는 데이터에 접근
 ! 왜 발생하나? -> Client-Side 검증에 의존하거나, 기본 정책 설정의 오류 등.

Client-Side 검증이란?
 - UI 관리자 메뉴 버튼을 숨기거나, 자바스크립트로 API 접근을 막는 것
 --> 악의를 가진 사용자가 노출되지 않은 API/데이터 에 접근하려 할 때, Server-Side에서의 검증이 필요함

 단순하게 말하면 -> 단순히 URL 창/Burpsuit에에서 아이디나 요청값 변경 등, 요청하면 무조건 주는 것 X
  --> 어떤 아이디로 로그인했나, 어떤 IP 대역에 있나 등, 해당 사용자에게 '인가'된 요청인가? 를 서버사이드에서 신경써야 함

하위 항목으로는?

강제 브라우징 및 경로 조작(Forced Browsing/Path Traversal)
 -> 인증되지 않은 일반 사요자가 URL(URI) 경로를 직접 조작/수정해 관리자 페이지 혹은 보호된 파일에 접근

[가장 대표적]
Missing Authorizaion CWE-862
방금 말씀하신 실습(주소창에 관리자 URL을 직접 입력하여 접근에 성공하는 행위)이 정확히 A01: 깨진 접근 제어 항목의 가장 대표적인 공격 사례(강제 브라우징/수직적 권한 상승)에 해당합니다.

안전하지 않은 직접 객체 참조(IDOR -> Insecure Direct Object References)
 ->서버가 클라이언트 요청 시 파라미터로 전송되는 ID값(사용자 ID 혹은 문서 번호 등)을 검증하지 않아 타인의 데이터에 접근 가능한 경우
https://owasp.org/Top10/2021/A01_2021-Broken_Access_Control/ 여기에 CWE-639에 있음

권한 상승(Privilege Escalation)
 -> 사용자의 접근 권한을 잘못 할당하거나 검증하지 않아 일반 사용자가 관리자 권한을 획득하는 경우

기능 및 메서드 권한 누락(Missing Function Level Access Control)

잘못된 기본 권한(Incorrect Default Permissions / CORS)

위조 및 리디렉션(Forgery / Redirection)




CWE-862 실습
admin / password 로그인
authorization bypass 항목 확인 -> 유저의 db 바꿀 수 있는 것 확인하기
url 복사해놓기
로그아웃
pablo / letmein (저번에 sql injection으로 비밀번호 크랙했던) 으로 로그인
authorization bypass 항목이 안 보이는 것 확인
복사해놓았던 url로 접속 가능한 것 확인 + 유저의 정보 바뀌는 것 확인

! 세션개념 설명도 해야함
 -> rocky기준 /var/php/session 에 있는 세션아이디를
 칼리 파이어폭스에서 스토리지 -> phpsessid 에 일치하는게 있는거 보여주기
  + burpsuite에서도 세션아이디 날아가는거 보여주기

sess 파일 안 내용 설명 -> 제미나이 참고해서 써놓자

+ 모의해킹이나 취약점 진단 시, "로그아웃을 했는데도 세션 파일 내부 데이터(username 등)가 여전히 그대로 남아있고, 
브라우저에서 해당 쿠키 값으로 재요청했을 때 다시 로그인이 유지된다"면 
이는 명백한 세션 만료 미흡(Weak Session Management) 취약점입니다.