Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 

Repository files navigation

조남호 | Nathan-Cho
05.06.24 ~ 진행중

참고 문헌 및 서적


Spring Security

목차

  1. 스프링 시큐리티란?
  2. 어플리케이션단에서의 보안

    2-1. HTTP는 무엇이 특징인가?
    2-2. 세션 하이재킹(Session Hijacking)
    2-3. CSRF(Cross-Site Request Forgery)
    2-4. 토큰탈취
    2-5. 비인가 데이터 수정


1. 스프링 시큐리티란?

스프링 시큐리티는 인증과 접근 제어를 위해 세부적인 맞춤 구성이 가능한 강력한 프레임워크이다.
스프링 어플리케이션에서 어플리케이션 수준의 보안을 구현할 때 가장 좋은 수단이며 이를 통해
인증, 권한 부여, 일반적 공격에 대한 방어를 구현하는 방법을 제공한다.

2. 어플리케이션단에서의 보안

보안은 대부분의 경우 모든 계층에서 설정할 수 있어야 하며, 어플리케이션단에서의 보안 또안 당연히 예외는 아니다.
스프링 시큐리티는 어플리케이션단에서의 보안정책을 책임지는 프레임워크이다. 하지만 단순히 스프링 프로젝트에
종속성을 걸어준다고 해서 끝이나는 것이 당연히 아니므로, 어플리케이션단에서 벌어질 수 있는 보안사고들이 무엇인지
한번 탐구하고 상고해보며 스프링 시큐리티를 통해 어떻게 대응해 나갈 수 있을지 고민해봐야만 한다.

2-1. HTTP는 무엇이 특징인가?

스프링은 당연하게도 HTTP를 다루는 프레임워크이다. 이 HTTP가 무엇인지에 대해 다시한번더 생각해 봄으로써 일어날 수 있는
보안사고를 생각해본다.
  • HTTP는 Request와 Reponse로 통신하는 매우 단순한 프로토콜이다.

      매우 단순한 통신방식이기 때문에 확장성 또한 매우 좋다는 것은 HTTP의 장점이다.
      그러나 정보를 탈취하게 될 경우 정보를 읽어내는 것 또한 매우 간단하다. 중간자 공격(Man-in-the-Middle Attack)에
      매우 취약하므로 실질적으로 HTTPS를 이용하여 req와 res를 암호화 시키고 통신간 정보를 탈취 당할지라도
      중간자가 정보를 읽어낼 수 없게 해야 한다.
    
  • HTTP는 Stateless하다.

      Stateless하다는 의미는 서버가 클라이언트측의 상태를 기억하지 않는다는 것을 의미한다. 서버가 클라이언트의 상태를 알필요가 없으므로
      서버에 가해지는 부담은 매우 줄어들게된다. 뿐만아니라, 최근 개발필드에서 뜨거운 감자 중 하나인 마이크로서비스 아키텍쳐(MSA)의 경우에서도
      클라이언트를 기억할 필요가 없으므로 요청을 처리하는 것이 전혀 문제가 없다.
      하지만 모든 상황이 Stateless하다고 좋은 것은 아니다. 대표적인 예로, 서버는 Stateless 특징 때문에, 클라이언트가
      로그인을 하였는지에 대한 정보를 알 수가 없다.
      이것을 해결하기 위해 Session, Cookie, 토큰(JWT등)을 활용하여 state를 기억하는 방식을 사용한다.
      물론 그에따른 보안 문제도 당연히 뒤따라 나온다.
      세션 하이재킹(Session Hijacking), CSRF(Cross-Site Request Forgery), 토큰탈취 등이 있다.
    
  • HTTP는 Connectionless하다.

      비연결성(Connectionless)는 요청과 응답 후 연결이 종료된다는 것을 의미한다. 응답을 보내주면 연결이 종료가 되므로 효율적으로 통신이 되지만
      통신간 주고받는 데이터는 관리가 되지 않으므로 데이터 무결성을 보장하지 못한다. 이로인해 비인가된 데이터 수정이 발생할 수 있다.
    

2-2. 세션 하이재킹(Session Hijacking)

세션 하이재킹은 공격자가 세션 식별자(ID)를 탈취하여 사용하는 것을 의미한다. 이러한 세션 하이재킹을 방어하기 위해서 기본적으로 SSL/TLS를 사용하고
어플리케이션단에서는 세션 타임아웃, IP 기반 인증 등을 추가하는 것을 고려해볼 수 있겠다.
세션 타임아웃은 사용자가 일정 시간 동안 세션에 접근하지 않으면 자동으로 세션을 종료하는 기능으로, 세션에 생명력을 준다.
물론 이것은 세션에 생명력이 있을 시 하이재킹 당한 이후로도 사용이 가능하므로 간접적 방어 수단밖에 되지 않는다.
IP 기반 인증으로 사용자의 IP주소가 변경되었을 시 세션을 종료하고 다시 로그인을 시키도록 하는 것도 방법이 되겠으나 모든 요청마다 지속적으로
로그인 시점의 IP주소와 요청시점의 IP주소를 대조해야하므로 이는 리소스 낭비로 이어질 수 있다. 
가장 효율적이고 좋은 방법은 어플리케이션 서비스를 SSL/TLS 기반으로 하는게 좋을 것이다.

2-3. CSRF(Cross-Site Request Forgery)

CSRF는 공격자가 인증된 사용자의 권한을 탈취하여 인증된 사용자의 명의로 웹 애플리케이션에 비정상적 요청을 보내도록 만드는 공격이다.
이 공격은 공격자가 사용자를 대상으로 다른 사이트에 접근하도록 유도하여 사용자가 원하지 않는 요청을 보내게 만드는 공격으로 사용자의 인증된 세션이
정상적 / 비정상적 요청을 구분하지 못하는 점을 이용한 공격이다. CSRF 토큰을 사용하여 사용자에게 CSRF토큰을 주고 HTML상에 CSRF 토큰값을 삽입해
사용자의 요청이 다른 사이트에서 온 요청인지 아닌지를 구분할 수 있게 된다.

2-4. 토큰탈취

2-5. 비인가 데이터 수정

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages