1. 권한

1. 권한 상승 (Privilege Escalation)

  • 공격자가 원래 부여된 권한을 넘어서 더 높은 권한을 얻는 보안 공격
  • 스템 내부의 취약점을 악용해 관리자가 아니면서 관리자처럼 행동하거나, 다른 사용자의 정보에 접근한다

권한 상승 유형

1. 수직적 권한 상승 (Vertical Privilege Escalation)

  • 낮은 권한을 가진 사용자가 더 높은 권한을 얻는 경우
  • 예: 일반 사용자가 관리자(Admin) 권한을 얻게 되는 경우
# 로그인 후 프로필 편집 화면에서, URL 파라미터만 수정해서 관리자 페이지에 접근
https://example.com/user/edit  https://example.com/admin
  • 취약한 API가 관리자 권한 검증 없이 실행됨

2. 수평적 권한 상승 (Horizontal Privilege Escalation)

  • 같은 수준의 권한을 가진 사용자가 다른 사용자의 정보나 기능에 접근하는 경우
  • 예: 사용자 A가 사용자 B의 정보를 열람하거나 수정
# 사용자 ID를 URL에 넣은 경우
https://example.com/user/profile?id=1001

➜ id 값을 1002로 바꾸면 다른 사용자의 정보를 볼 수 있다면 수평적 권한 상승


접근 제어 (Access Control)

1. 인증 (Authentication)

  • 사용자의 신원을 검증하는 단계
  • 예: ID/PW 로그인, OAuth, JWT 토큰

2. 권한 부여 (Authorization)

  • 인증된 사용자가 특정 자원이나 기능에 접근할 수 있는 권한이 있는지 판단하는 단계
  • 예: 일반 사용자는 쓰기?읽기만 가능, 관리자는 삭제도 가능

3. 권한 (Privilege or Permission)

  • 사용자가 가진 세부적인 행위 가능 범위를 정의한 정보
  • 권한부여의 대상이되는 자격(permission)
  • 예: 역할 기반(Role-Based Access Control: RBAC)으로 “관리자”, “사용자”, “게스트” 등의 역할을 기반으로 권한 부여


1. 인증 모델 설게

  • 접근 제어의 전제는 "누구인지"를 정확히 식별하는 것으로 인증모델을 먼저 설계해야한다.
인증 방식 설명
지식 기반 인증 ID/PW, 보안 질문
소지 기반 인증 OTP, 보안 토큰
생체 기반 인증 지문, 홍채, 얼굴
행동 기반 인증 키 입력 패턴, 마우스 움직임

보안 강화를위해 다중 인증(MFA)을 구현해야한다.

2. 접근 제어 목록 (ACL, Access Control List)

  • 자원(Resource)에 대해 어떤 사용자(User)가 어떤 행위(Action)를 할 수 있는지를 명시한 리스트 기반의 권한 모델
  • 자원 중심으로 권한을 관리하나 자원이 많아지면 관리가 어렵다
  • 시스템 파일, 네트워크 장비 등에서 주로 사용
File: /example.txt
- UserA: read, write
- UserB: read
- UserC: deny

3. 화이트리스트와 블랙리스트

  • 접근 허용과 차단을 명시하는 방식
  1. 화이트리스트(Whitelist)
  • 명시된 것만 허용
  • 높은 보안 수준
  • 실수로 누락 시 필요한 기능도 차단될 수 있음
  1. 블랙리스트(Blacklist)
  • 명시된 것만 차단
  • 쉬운 구현 But 허점 발생 가능성 있음
  • 예: PI 호출 IP 제한, 허용된 파일 확장자, 로그인 가능한 이메일 도메인 등

4. 역할 기반 접근 제어 (RBAC)

  • 가장 널리 쓰이는 권한 부여 모델(Role-Based Access Control)
  • 사용자 → 역할 → 권한으로 이어지는 구조
  • 개별 사용자에게 권한을 직접 부여하지 않고, 역할에 따라 일괄 관리
역할 권한
사용자 조회
에디터 조회, 작성, 수정
관리자 전체 권한 (삭제 포함)
  • 장점: 유연성, 일관성, 관리 편의성
  • 확장: PRAC + 계층 구조 or 속성 기반(ABAC)로 업그레이드 가능

5. 소유권 기반 접근 제어 (Ownership-based Access Control)

  • 사용자가 자신이 소유한 자원에 대해서만 제어권을 갖는 접근 제어 모델
  • 예: 게시판에서 자신이 작성한 글만 수정/삭제 가능
  • 데이터 소유자 중심의 권한 관리가 필요할 때 적합

6. 접근 제어 구현

  • 프론트에서 숨기는것만으로는 불가능 백엔드와 DB 레벨까지 일관된 검증이 필요하다
실무 예
미들웨어 레벨 권한 체크 (ex. Express, Spring Security)
권한 정보 포함된 JWT 처리
라우팅 단에서 Role 기반 접근 제어
정책 기반 접근 제어 (Policy-Based Access Control)

7. 접근 제어 테스트

  • 접근 제어가 제대로 작동하는지 검증
  • 수평적/수직적 권한 상승 방지 테스트는 필수이다
정상 사용자의 권한 테스트
권한 없는 사용자의 접근 시도
URL 변조, 파라미터 변경 테스트
기능 오용 테스트 (ex. 숨겨진 버튼 실행 시도)
자동화 도구 활용: Postman, ZAP, Burp Suite

8. 감사용 기록 추가 (Audit Logging)

  • 접근 제어는 단순 차단 외에도 누가 언제 어떤 자원에 접근했는지 기록하는 것이 중요하다
  • 로그 수집 항목: 사용자 ID, 요청 시각, IP, 접근 자원, 결과(성공/실패)
  • 활용 예시: 보안 감사, 사고 대응, 이상 행위 탐지
  • 로그 보관 정책: GDPR, ISMS 등 규정에 따라 정해진 기간 동안 보관

DB뿐 아니라 파일 시스템, API 요청 등 모든 자원에 대해 적용 가능하다

9. 자주하는 실수

  • 검색되지 않는 리소스에 접근 제어를 생략하는 실수
  • 링크가 없다고 해서 외부에서 접근 불가능하다고 착각
  • 해커가 사이트를 크롤링할때 해당 페이지가 강조 표시되지않기때문에 다른 곳에서 연결되지 않은 사이트의 페이지는 해커로부터 숨겨질 것 같지만 아니다
  • 해킹 도구는 불투명한 ID 를 특징으로하는 개인 URL을 빠르게 열거할 수 있으며, 추측할 수 있는 구조를 가진 개인 URL에는 더 쉽게 엑세스할 수 있다
  • 공격자가 URL을 추측할 수 없는것을 은둔 보안 방식(security through obscurity)라고하며, 은둔보안에 의존하는것은 위험하다

즉, 링크가 없거나 URL이 복잡하다고 해서 안전하지 않으며, 접근 제어는 항상 명시적으로 적용해야 한다


디렉터리 접근 공격 (Directory Traversal)

  • 서버의 파일 시스템 구조를 악용하여, 웹 애플리케이션이 의도하지 않은 파일이나 디렉터리에 접근하게 만드는 공격
  • ../ 또는 URL 인코딩된 방식(%2e%2e/) 등을 사용하여 상위 디렉터리로 이동하며 민감한 파일을 노릴 수 있다

1. 파일 경로 및 상대 파일 경로

  • 웹 애플리케이션이 사용자 입력을 통해 파일 경로를 처리할 때, 상대 경로를 이용한 접근 우회가 발생할 수 있다

1) 절대 경로 (Absolute Path)

  • 예: /etc/passwd, C:\Windows\System32\config

상대 경로 (Relative Path)

  • 예: ../, ../../secret/config.yml
https://example.com/view?file=../../../../etc/passwd

2. 디렉터리 접근 공격 분석

1. 공격 기법

  1. ../ 사용해 상위 폴더로 접근 (directory traversal)
  2. URL 인코딩(%2e%2e%2f)이나 이중 인코딩 우회
  3. 널 바이트(%00) 삽입으로 파일 확장자 필터 우회
  4. 잘못된 필터링 로직을 이용한 탐색

2. 노릴 수 있는 파일

  • UNIX: /etc/passwd, /var/log/*
  • Windows: boot.ini, windows/win.ini

3. 대응 방안

1. 입력값 필터링
../, %00 등 경로 이동 문자 차단

2. 경로 정규화
요청된 경로를 실제 경로로 변환 후 검사

3. 화이트리스트 기반 파일 접근
접근 가능한 파일/디렉터리만 명시적으로 허용

4. 권한이 분리된 파일 시스템
웹 서버에 최소 권한만 부여하여 시스템 파일 접근 차단


요약

권한 상승 방지 방법

대책 설명
접근 제어 서버 단에서 사용자 권한을 엄격하게 검증
인증된 사용자 정보만 사용 요청에 들어오는 사용자 ID 대신 인증 토큰의 사용자 정보 사용
기능별 권한 검사 요청마다 기능 실행 권한이 있는지 검사 (예: 관리자만 가능 여부 등)
민감 정보 필터링 응답 데이터에서 사용자의 권한에 따라 필드 제한
로깅 및 모니터링 의심스러운 권한 변경 시도 기록 및 경고 시스템 구축
취약점 패치 운영 체제, 프레임워크, 패키지 등 최신 보안 패치 유지
  • 웹사이트의 사용자는 일반적으로 다른 수준의 권한을 가진다
  • 사용자가 자원에 엑세스할 때 평가되는 접근 제어 규칙을 구현해야한다
  • 접근 제어규칙은 명확하게 문서화되고 포괄적으로 구현되고 공격적으로 테스트 해야한다

댓글남기기