Spring Security 1

Woo·2024년 5월 3일

Spring Security

목록 보기
1/3
post-thumbnail

Authentication & Authorization

  • 로그인과 권한 제어

Web App의 일반적인 보안 취약성

취약성

  • 악의적 의도를 가지고 원치 않는 작업을 수행하는데 이용할 수 있는 약점.

가장 많은 피해사례가 보고된 목록

  • OWASP Top Ten
  • SANS Top 25

반드시 알아야 할 일반적인 취약성 목록

  • 인증 취약성
  • 세션 고정
  • XSS (교차 사이트 스크립팅)
  • Injection
  • 기밀 데이터 노출
  • 메서드 접근 제어 부족
  • 알려진 취약성이 있는 종속성(Dependency) 이용

인증 취약성 (Authentication)

  • 애플리 케이션을 이용하려는 사용자를 식별하는 프로세스.
  • 회원가입, 로그인, 로그아웃 등

인가(권한) (Authorization)

  • 인증된 사용자가 특정 기능과 데이터에 대한 이용 권리가 있는지 확인하는 프로세스.

인증 취약성이란

  • 사용자가 악의를 가지고 다른 사람의 기능이나 데이터에 접근할 수 있다는 것.
    • 일반 사용자가 관리자의 기능이나 데이터에 접근한다.
    • 내가 작성하지 않은 글의 수정 또는 삭제
    • 내가 주문하지 않은 상품들의 주문서 수정 또는 삭제

세션 고정 (Session Fixation / Session Hijacking)

  • 세션 인증 기반 애플리케이션에서 발생
    서버는 사용자를 식별한 후 다음 요청을 위해 SessionID를 발급한다.
    발급한 SessionID 를 사용자에게 Cookie 를 통해 전달한다.
    사용자는 매 요청마다 SessionID 를 Cookie 로 전달한다.

세션 고정 / 세션 탈취란

  • 발급 받은 SessionID 가 로그인 전/후의 SessionID 와 모두 동일하게 사용될 경우.
  • 악의적인 사용자가 피해자의 세션을 탈취하여 정상적인 사용자로 위장하는 방법.

XSS (교차 사이트 스크립팅)

  • 악의적인 사용자가 게시글에 스크립트를 주입해 사용자가 이를 실행하도록 하는 공격.

  • DDoS, 세션 탈취 등의 공격에 사용됨.

    • 불특정 다수의 피해자는 자신도 모르는 사이에 공격의 가담자가 될 수 있다.


CSRF (사이트 간 요청 위조)

  • 웹 애플리케이션의 흔한 취약점 중 하나.
  • 서버에서 실행되는 특정 URL 하나를 추출해 이메일이나 게시글 및 댓글에 작성.
    • 이미지나 링크 혹은 스크립트
  • 이메일 또는 게시글, 댓글을 조회한 사용자는 자신도 모르는 사이에 URL 을 실행.
  • 서버는 사용자가 직접 실행한 것으로 판단함.
    • Log, DB 등에도 사용자가 직접 실행한 것으로 작성됨.


Injection (주입)

  • 해커가 시스템의 OS, DB, 환경정보 등을 탈취 및 제어권을 확보하기 위한 공격.
  • Form 또는 URL 을 통해 시스템을 제어하는 실행 문장을 전송.
  • 이를 방어하지 않은 서버는 정보를 탈취 당하거나 제어권을 잃게 된다.
    • SQL Injection : SQL 문장을 서버로 보내 DB 정보를 탈취한다.
    • Command Injection : OS 명령문을 서버로 보내 OS 의 제어권을 탈취한다.
  • MyBatis #, $ 차이
    • #의 경우 문자와 숫자를 구별해서 ''를 붙인다.
    • $로 파라미터를 전달할 경우 param = 'or 1=1--' 을 사용해 DB 정보를 탈취할 수 있다.

민감한 데이터 노출 처리

  • 민감한 데이터 노출 처리란.
    • 시스템의 중요 정보나 사용자의 개인 정보 등
    • 보호 되어야 할 정보들이 Log나 화면에 그대로 노출되는 것.
      • 사용자의 개인 정보
        • ID, Password, 주소 이메일 등
      • 시스템 정보
        • OS 정류, Server 제품명 및 버전, DB 제품명 및 버전 등등
      • 로그인 결과 정보
        • 아이디가 존재하지 않습니다.
        • 비밀번호가 틀렸습니다. 등 해커가 유추할 수 있는 정보들
  • DB 에서 로그인 오류 정보를 처리하는 것이 아니라 IP 로 처리하면 해커가 ID 를 유추하는 것을 막을 수 있다.
  • 로그인 실패가 계속 되면 IP 를 차단함

메서드 접근 제어 부족

  • Controller, Service, Repository 등 권한 처리를 하나의 클래스로만 처리하는 경우
  • 충분한 테스트가 뒷받침 되지 않으면, 정상적으로 동작하지 않을 가능성이 높다.
  • 권한에 대한 인터페이스나 클래스를 따로 분리하여 처리해야 한다.

알려진 취약성이 있는 종속성 이용

  • Spring 애플리케이션을 개발하기 위해서 여러 종류의 라이브러리가 필요.
  • 취약성이 보고된 라이브러리를 사용할 경우, 개발자 단계에서 처리가 불가능.
  • 따라서, 애플리케이션도 동일한 취약성에 노출된다.

log4j 보안 취약점

profile
개발자 준비생

0개의 댓글