Spring Security 1
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를 통해 전달
-> 사용자는 매 요청마다 SessionID를 Cookie로 전달
- 세션고정 / 탈취 : 발급받은 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