카테고리 없음

Spring Security 1

코딩펭귄 2024. 5. 3. 11:11

security 가 필요한 이유

- 취약성

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

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

  : OWASP Top Ten - https://owasp.org/www-project-top-ten/, (굉장히 critical 한 것들 위주)

  : SANS Top 25 - https://www.sans.org/top25-software-errors/ (-> 시큐어코딩에서 가장 많이 참고함) 

    : 전자정부 프레임워크에서의 시큐어코딩 가이드 : SANS Top25참고한 한글버전 

- 개발자가 반드시 대처방법 알고있어야할 목록 

  : 인증취약성, 세션고정, XSS (교차 사이트 스크립팅), CSRF (사이트간 요청 위조), Injection (주입), 민감한 데이터 노출처리 , 메서드 접근제어 부족, 알려진 취약성이있는 종속성 이용

인증취약성

- 인증 (Authentication) : 애플리케이션을 이용하려는 사용자를 식별하는 프로세스.

     ex) 회원가입, 로그인 등

- 인가 (권한, Authorization) : 인증된 사용자가 특정 기능과 데이터에 대한 이용 권리가 있는지 확인하는 프로세스

     ex) 메뉴에서 나에게  open된게 맞는가?

- 인증취약성이란 ? : 사용자가 악의를 가지고 다른 사람의 기능이나 데이터에 접근할 수 있는 것

     ex) 일반 사용자가 관리자의 기능이나 데이터에 접근함. 내가 작성하지 않은 글의 수정 또는 삭제.

세션고정 (Session Fixation / Session Hijacking)

- 세션 인증 기반 애플리케이션에서 발생

  : 서버는 사용자를 식별한 후 다음 요청을 위해 SessionID를 발급

       -> 발급한 SessionID를 사용자에게 Cookie를 통해 전달

           -> 사용자는 매 요청마다 SessionIDCookie로 전달

- 세션고정 / 탈취 : 발급받은 SessionID가 로그인 전/후의 SessionID와 모두 동일하게 사용될 경우

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

- 악의적인 사용자가 게시글에 스크립트를 주입해 사용자가 이를 실행하도록 하는 공격 - DDoS, 세션 탈취 등의 공격에 사용. 불특정 다수의 피해자는 자신도 모르는 사이에 공격의 가담자가 될 수 있음

CSRF (사이트간 요청 위조)

- 서버에서 실행되는 특정 URL 하나를 추출해 이메일이나 게시글 및 댓글에 작성 ex) 이미지, 스크립트, 링크 등

- 이메일 또는 게시글, 댓글을 조회한 사용자는 자신도 모르는 사이에 URL을 실행

- 서버는 사용자가 직접 실행한 것으로 판단함 -> Log, DB 등에도 사용자가 직접 실행한 것으로 작성됨

  ex) 특정 게시판에서 이미지나 링크 클릭시 악성댓글 자동 등록. 내가안했음을 입증하기가 매우 어려움

Injection (주입)

- 해커가 시스템의 OS, DB, 환경정보 등을 탈취 및 제어권을 확보하기 위한 공격

- Form 또는 URL을 통해 시스템을 제어하는 실행문장을 전송

- 이를 방어하지 않은 서버는 정보를 탈취당하거나 제어권을 잃게 됨

   : SQL Injection : SQL문장을 서버로 보내 DB정보를 탈취 

         ${ } <-이렇게쓸경우 param='or1=1-- 공격에 취약 : -> #{ }로 써야됨

   : Command Injection : OS 명령문을 서버로 보내 OS의 제어권을 탈취

민감한 데이터 노출처리

시스템의 중요 정보나 사용자의 개인 정보 등 보호되어야 할 정보들이 Log나 화면에 그대로 노출되는 것

- > 복호화 가능하게 암호화해서 저장해야됨 (SHA등 사용X)

  ex) 사용자의 개인정보, 시스템정보(os종류, server제품명 및 버전, db제품명 및 버전 -> sql injection 대비), 로그인 결과정보(ex) 아이디가 존재하지 않습니다, 비밀번호가 틀렸습니다 -> ip를 가지고 로그인 틀림 횟수 제한)

메서드 접근제어 부족

- Controller, Service, Repository 권한 처리를 하나의 클래스로만 처리하는 경우 충분한 테스트가 뒷받침 되지 않으면, 정상적으로 동작하지 않을 가능성이 높다 

  -> 권한에 대한 인터페이스나 클래스를 따로 분리하여 처리해야함 (설계관점)

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

- Spring 애플리케이션을 개발하기 위해서 여러 종류의 라이브러리가 필요

- 취약성이 보고된 라이브러리를 사용할 경우 -> 개발자 단계에서 처리가 불가능 -> 애플리케이션도 동일한 취약성에 노출됨   ex) log4j, 리눅스의 XZ Utils