[Spring Security] 보안의 6원칙

정민규·2024년 12월 6일
0

서론

Spring Security는 스프링 기반 웹 어플리케이션에 각종 인증을 비롯한 보안 기능의 구현을 쉽게 만들어 주는 도구이다.

특히 백엔드 개발자는 각종 보안 기능을 구현해야 하는 경우가 많아서(대표적으로 로그인!) 이에 대해 잘 알아두는게 중요해 보인다.

구체적인 Spring Security 기능들에 대해 살펴보기 전, 항상 개발을 하며 염두해 두어야 할 보안의 기본 원칙 6가지에 대해 알아보도록 하자.

보안의 6원칙

1. 아무것도 믿지 말라

  • 들어오는 모든 요청, 데이터, 정보들에 대해 그 적절성을 검증해야한다.
  • 특정한 소스로부터의 요청을 무조건적으로 신뢰할 경우, 해당 소스를 사칭하는 공격자에게 시스템이 무방비하게 노출된다.

2. 최소한의 권한만 할당하라.

  • 이를 위해서는 시스템의 디자인 단계에서부터 보안에 대한 염두를 해야 한다.
  • 우리가 어떤 Role을 설정할 때, 그것이 어떤 일을 하는지 명확하게 정의해야 하고 그 일을 하기 위해서 필요한 최소한의 권한과 자원을 파악하여 할당해 주어야 한다.
  • 만약 특정한 Role을 사칭하는 공격자가 시스템에 들어왔을 경우, 그 공격자가 시스템에 끼칠 수 있는 피해의 크기는 해당 Role이 가지고 있는 권한과 자원의 크기에 비례할 것이다.
    약간 사족일 수 있으나, AWS의 IAM을 예시로 보자. AWS에서는 루트 계정의 사용을 지양하고 IAM계정을 통해 서비스 접근 권한을 제한할 것을 적극적으로 권장하고 있다. EC2 서비스 권한만 할당해 놓은 IAM 계정이 탈취당할 경우, 공격자는 EC2 서비스만 악용할 수 있지만(물론 이것도 치명적이지만...) 만약 루트 계정이 탈취당한다면 그 피해는 정말 걷잡을 수 없다.

3. 모든 요청이 보안 시스템을 거치도록 하라.

  • 어떤 시스템에 접근할 수 있는 경로가 많아질수록 보안이 취약해질 가능성이 높다.
  • 고대 요새들이 보안을 목적으로 단하나의 출입구를 두었던 것처럼 시스템 역시 되도록 하나의 메인 게이트를 통해 요청을 주고받는 것이 좋다.
  • 이를 위해서는 효과적인 보안 필터를 구현할 필요가 있다.

4. 여러 레벨의 보안 체계를 구축하라.

  • 애플리케이션 수준의 레벨, 운영체제 수준의 레벨, 네트워크 수준의 레벨, 인프라 수준의 레벨과 같이 데이터가 통과하는 계층마다 보안 체계를 구축해야 한다.

5. 보안 시스템을 가능한 한 간단하게 유지하라.

  • 이는 4번째 원칙과도 어느정도 연관이 있는데, 보안시스템의 계층을 분리함으로써 서로 담당하는 책임이 분리되고, 이는 시스템의 유지보수를 용이하게 한다.
  • 더 다양한 공격으로부터 시스템을 막기 위해 보안 아키텍처가 복잡해지는 것은 어쩔 수 없지만, 불필요하게 복잡한 아키텍처는 보안 시스템의 유지보수를 어렵게 하고 확장성을 저해한다.

6. 설계의 개방성을 보장하라

  • JWT와 같은 개방형 보안 표준을 사용하도록 하자.
  • 며느리도 모르는 우리들만의 보안시스템은 취약점이 발생할 경우 해결하기 어렵다.
  • 개방형 보안 표준들은 우리 뿐만 아니라 전 세계의 많은 보안 전문가들이 관여하며 더더욱 발전해가는 중이다.
profile
조금이더라도 꾸준하게.

0개의 댓글

관련 채용 정보