[Spring] Security 기술면접 S1
👨💻 기술면접 준비
1번 - 인증과 인가의 차이에 대해 설명해 주세요.
2번 - 세션에 대해서 모르는 사람한테 설명하듯 간단하게 설명해 주세요.
3번 - 세션과 쿠키 그리고 토큰 인증 방식에 대해 설명해 주세요.
인증과 보안
1번 - 인증과 인가의 차이에 대해 설명해 주세요.
2번 - 세션에 대해서 모르는 사람한테 설명하듯 간단하게 설명해 주세요.
3번 - 세션과 쿠키 그리고 토큰 인증 방식에 대해 설명해 주세요.
4번 - 세션과 토큰 인증 방식 중 각각의 장단점을 말씀해 주세요.
5번 - HTTP와 HTTPS 각각에 대해 설명하고둘의 차이점을 말씀해 주세요.
6번 - HTTPS의 동작 방식을 설명해 주세요.
7번 - OAuth 2.0의 워크플로우에 대해서 설명해 주세요.
8번 - Spring Security의 인증 처리 흐름에 대해 설명해 주세요.
9번 - Spring Security의 인가 처리 흐름에 대해 설명해 주세요.
10번 - Filter가 무엇인지 설명하고 Filter Chain의 동작에 대해 설명해 주세요.
Cloud
11번 - 사용해 본 클라우드 인프라 서비스에 대해 소개해 주세요.
12번 - vmware와 같은 가상머신이랑 Docker가 무슨 차이가 있는지 설명해 주세요.
13번 - CI/CD가 무엇이라고 생각하시나요? CI와 CD의 차이점이 무엇인지 설명해 주세요.
14번 - 본인이 구현해 본 CI/CD 배포 자동화 과정을 설명해 주세요.
Check
1번 - 인증과 인가의 차이에 대해 설명해 주세요.
2번 - 세션에 대해서 모르는 사람한테 설명하듯 간단하게 설명해 주세요.
3번 - 세션과 쿠키 그리고 토큰 인증 방식에 대해 설명해 주세요.
1번 인증과 인가의 차이에 대해 설명해 주세요.
인증(Authentication)은 사용자가 누구인지 확인하는 과정입니다.
이는 일반적으로 사용자의 이름과, 비밀번호, 생체 인식 기술 등을 사용하여 수행됩니다. 인증이 완료되면 시스템은 해당 사용자가 누구인지 확인하고 접근 권한이 있는지 여부를 결정합니다.
반면 인가(Authorization) 는 인증된 사용자에 대한 권한을 부여하는 과정입니다.
인가는 일반적으로 사용자가 수행할 수 있는 작업에 대한 권한을 정의하고, 이러한 작업에 대한 접근을 허용하거나 거부하는데 사용됩니다. 예를들어 인증된 사용자가 파일 서버에 엑세스 할 때 파일을 읽거나 쓸 수 있는지 여부를 결정하기 위해 인가 규칙이 적용됩니다.
따라서 인증은 사용자의 신원을 확인하고, 인가는 해당 사용자가 수행 할 수 있는 작업을 결정합니다. 이 두가진 개념은 서로 밀접하게 관련되어 있으며, 보안 시스템에서 중요한 역할을 합니다.
🔑추가 예상질문
Q: 1. 인증 및 인가를 구현하는 데 사용되는 일반적인 보안 메커니즘에는 어떤 것이 있나요?
인증과 인가를 구현하는 데 사용되는 일반적인 보안 메커니즘은 넓게 8가지로 나열 할 수 있습니다.
- 비밀번호: 가장 기본적인 인증 메커니즘으로, 사용자의 ID와 패스워드를 사용하여 인증합니다.
- 바이오메트릭 인증: 생체 정보(지문, 홍채, 얼굴 등)를 사용하여 인증하는 메커니즘으로, 비밀번호보다 안전합니다.
- SSO(Single Sign-On): 여러 시스템에서 동일한 인증 정보를 공유하여 사용자가 한 번의 로그인으로 여러 시스템에 접속할 수 있도록 해주는 인증 메커니즘입니다.
- MFA(Multi-Factor Authentication): 비밀번호 외에 다른 인증 수단을 추가로 사용하여 보안을 강화하는 방법입니다.
- RBAC(Role-Based Access Control): 사용자의 역할에 따라 권한을 제한하는 방법으로, 인가를 구현하는 데 사용됩니다.
- ABAC(Attribute-Based Access Control): 사용자의 속성에 따라 권한을 부여하는 방법으로, RBAC보다 더 유연한 인가 메커니즘입니다.
- JWT(JSON Web Token): 인증 정보를 안전하게 전송하기 위한 표준 기술로, 정보를 암호화하여 전송합니다.
- OAuth/OpenID Connect: 인증 및 인가를 처리하기 위한 표준 프로토콜로, 다른 서비스에 대한 접근 권한을 제어합니다.
이러한 보안 메커니즘은 사용자 인증 및 권한 부여를 구현하는 데 사용됩니다. 그러나 적절한 구현이 이루어지지 않으면 보안 위협에 노출될 수 있으므로, 보안적인 측면을 고려하여 사용해야 합니다.
Q: 2. 인증 및 인가를 처리할 때 주의해야 할 보안 이슈에는 어떤 것이 있나요?
인증 및 인가를 처리할 때 주의해야 할 보안 이슈는
- 인증 정보 노출: 사용자 인증 정보(아이디, 비밀번호 등)가 노출될 경우, 악의적인 공격자가 해당 정보를 이용하여 사용자 계정을 해킹할 수 있습니다. 이를 방지하기 위해서는 암호화된 연결(HTTPS)을 사용하거나, 사용자 인증 정보를 안전하게 저장해야 합니다.
- 위조된 인증 정보: 사용자 인증 정보가 위조되어 전송될 경우, 인증 과정이 우회될 수 있습니다. 따라서, 안전한 인증 메커니즘을 사용해야 합니다.
- 권한 부여 오류: 사용자에게 부여된 권한이 부적절하게 설정된 경우, 사용자가 접근할 수 없어야 할 자원에 접근할 수 있습니다. 이를 방지하기 위해서는 정확한 권한 부여를 위해 RBAC, ABAC 등 적절한 인가 메커니즘을 사용해야 합니다.
- 세션 하이재킹: 악의적인 공격자가 사용자 세션 정보를 획득하여, 해당 정보를 이용하여 인증을 우회할 수 있습니다. 이를 방지하기 위해서는 적절한 세션 관리 방법을 사용해야 합니다.
- 보안 강화 부재: 인증 및 인가 처리와 관련하여 취약점이 발견될 경우, 보안 강화가 제대로 이루어지지 않으면, 보안 위협에 노출될 수 있습니다. 따라서, 보안 취약점을 지속적으로 모니터링하고, 보안 강화를 수행해야 합니다.
- 대규모 인증 및 인가 공격: 인증 및 인가 처리 시, 대규모 공격에 노출될 가능성이 있습니다. 이를 방지하기 위해서는 DDos 공격 방어 및 시스템 리소스 확보를 위한 대처 방안이 필요합니다.
이러한 보안 이슈를 고려하여 적절한 보안 메커니즘과 보안 강화 방안을 도입하여 인증 및 인가 처리를 해야 합니다.
2번 세션에 대해서 모르는 사람한테 설명하듯 간단하게 설명해 주세요.
<u>세션(session)은</u> 웹 서버와 클라이언트(브라우저) 간의 상호 작용을 유지하는데 사용되는 개념입니다. 세션을 일련의 상태 정보를 유지하고, 클라이언트와 서버 간의 다중 요청 및 응답을 추적합니다.
일반적으로 클라이언트가 서버에 요청을 보내면, 서버는 클라이언트에게 고유한 세션ID를 부여합니다. 이후 클라이언트는 이 세션 id를 가지고 서버에 대한 추가 요청을 보내며, 이를 통해 서버는 이전 요청과 동일한 세션을 사용하여 클라이엉ㄴ트의 요청을 처리합니다.
세션은 웹 응용프로그램에서 중요한 개념으로, 사용자 로그인 정보, 장바구니 상태 등과 같은 정보를 유지하고 추적하는데 사용됩니다. 이를 통해 서버는 사용자가 인증된 상태인지 확인하고, 필요한 경우 사용자에게 특정 작업을 수행하도록 허용하거나 거부할 수 있습니다.
🔑추가 예상질문
Q: 1. 세션을 이용하여 어떤 정보를 유지하고 추적할 수 있나요?
세션을 이용하여 웹 응용 프로그램에서는 다음과 같은 정보를 유지하고 추적할 수 있습니다.
- 사용자 로그인 정보: 로그인한 사용자의 정보를 세션에 저장하여, 이후의 요청에서 사용자를 인증할 수 있습니다.
- 장바구니 정보: 사용자가 구매하려는 상품 정보나 수량 등을 세션에 저장하여, 이후의 요청에서 장바구니 정보를 유지할 수 있습니다.
- 검색 기록: 사용자의 검색 기록을 세션에 저장하여, 이후 검색 결과를 개인화하거나, 검색 기록을 추천하는 등의 서비스를 제공할 수 있습니다.
- 선호 설정: 사용자의 선호 설정(언어, 테마 등)을 세션에 저장하여, 이후의 요청에서 해당 설정을 유지할 수 있습니다.
- 작업 상태: 웹 응용 프로그램에서 수행 중인 작업 상태를 세션에 저장하여, 이후의 요청에서 작업을 계속할 수 있습니다.
세션을 이용하여 유지하고 추적하는 정보는 웹 응용 프로그램에 따라 다를 수 있으며, 필요한 정보를 세션에 저장하여 이를 활용하는 것이 중요합니다.
Q: 2. 세션 관리에서 발생할 수 있는 보안 위험은 무엇인가요?
세션 관리에서 발생할 수 있는 보안 위험은 다음과 같습니다.
- 세션 하이재킹(Session Hijacking): 공격자가 유효한 세션 ID를 가로채서, 해당 세션을 탈취하거나 조작하여, 인증된 사용자처럼 웹 응용 프로그램에 접속하는 것입니다.
- 세션 예측(Session Prediction): 공격자가 예측 가능한 세션 ID를 추측하여, 해당 세션을 탈취하거나 조작하여, 인증된 사용자처럼 웹 응용 프로그램에 접속하는 것입니다.
- 세션 변조(Session Fixation): 공격자가 웹 응용 프로그램에 미리 악성 세션 ID를 제공하여, 해당 세션을 사용자에게 할당하도록 유도한 뒤, 해당 세션을 조작하여 인증된 사용자처럼 웹 응용 프로그램에 접속하는 것입니다.
- 세션 노출(Session Exposure): 세션 ID가 URL 파라미터나 쿠키 등을 통해 노출되면, 해당 ID를 가지고 인증된 사용자처럼 웹 응용 프로그램에 접속할 수 있는 보안 위험이 있습니다.
- 세션 타이밍(Session Timing): 세션 만료 시간이나 타이밍 등을 이용하여, 공격자가 세션 ID를 추측하거나 탈취하는 등의 보안 위험이 있습니다.
세션 관리에서 발생할 수 있는 보안 위험을 최소화하기 위해서는, SSL/TLS와 같은 보안 프로토콜을 사용하고, 세션 ID를 랜덤하고 예측 불가능한 값으로 생성하는 등의 보안 조치를 적용해야 합니다. 또한, 세션 만료 시간을 적절하게 설정하고, 세션 ID가 노출되지 않도록 URL 파라미터 대신 쿠키 등을 사용하는 것이 좋습니다.
Q: 3. 세션 관리를 위한 가장 좋은 방법은 무엇인가요?
세션 관리를 위한 가장 좋은 방법은 다음과 같습니다:
- 랜덤한 세션 ID 생성: 랜덤하고 예측 불가능한 세션 ID를 생성하여 사용합니다. 이를 위해서는 충분한 엔트로피를 갖는 알고리즘을 사용하고, 세션 ID 생성 시에는 이전에 사용된 ID와 중복되지 않도록 체크합니다.
- SSL/TLS 사용: SSL/TLS 프로토콜을 사용하여 세션 데이터의 암호화와 무결성 보호를 제공합니다.
- 세션 만료 시간 설정: 세션 만료 시간을 적절하게 설정하여, 오랫동안 유효한 세션을 방지합니다.
- 세션 저장소 보호: 세션 저장소에 저장되는 세션 데이터를 적절하게 보호합니다. 이를 위해서는 암호화, 서명, 안전한 저장소 등의 보안 조치를 적용합니다.
- 세션 노출 방지: 세션 ID를 URL 파라미터 등을 통해 노출되지 않도록 하고, 쿠키 등을 사용하여 세션 ID를 전달합니다.
- 세션 관리 로그: 세션 관리 로그를 수집하여, 세션 관리에 대한 모니터링과 분석을 수행합니다. 이를 통해 세션 관리에 대한 위험을 미리 파악하고, 보안 조치를 취할 수 있습니다.
세션 관리에 있어서는 보안적인 측면을 중요하게 고려해야 합니다. 위의 방법을 적절히 활용하면, 세션 관리를 안전하게 수행할 수 있습니다.
3번 세션과 쿠키 그리고 토큰 인증 방식에 대해 설명해 주세요.
세션, 쿠키, 그리고 토큰은 모두 웹 애플리케이션에서 인증 및 인가를 구현하는 데 사용되는 메커니즘입니다.
- 세션: 세션은 서버 측에서 사용자 정보를 저장하는 방식입니다. 사용자가 로그인하면, 서버는 해당 사용자에 대한 정보를 메모리나 데이터베이스 등에 저장하고, 해당 사용자의 브라우저에 고유한 세션 ID를 발급합니다. 그리고 이 세션 ID를 쿠키 등의 메커니즘을 이용하여 사용자 브라우저에 저장합니다. 이후 사용자가 요청을 보낼 때마다, 세션 ID를 이용하여 서버에서 해당 사용자의 정보를 검색합니다.
- 쿠키: 쿠키는 클라이언트 측에서 데이터를 저장하는 방식입니다. 서버는 쿠키를 이용하여 사용자 정보를 브라우저에 저장합니다. 쿠키는 사용자의 로컬 컴퓨터에 저장되며, 만료 기간이 지나면 자동으로 삭제됩니다. 사용자가 다시 접속할 때, 해당 쿠키를 이용하여 인증 정보를 확인합니다.
- 토큰: 토큰은 인증 정보를 안전하게 전달하기 위한 메커니즘입니다. 서버는 사용자가 로그인할 때, 해당 사용자에 대한 정보를 포함한 토큰을 생성합니다. 이 토큰은 서버 측에서 유효성 검사가 가능한 정보를 담고 있으며, 이를 이용하여 사용자 인증을 처리합니다. 토큰은 주로 JWT(JSON Web Token)이라는 표준 규격을 사용하며, 클라이언트 측에서는 토큰을 저장하고, 서버에서는 토큰을 검증하여 인증을 처리합니다.
세션, 쿠키, 그리고 토큰은 각각의 장단점이 있으며, 적절한 상황에서 사용해야 합니다.
예를 들어, 세션은 서버 측에서 사용자 정보를 저장하기 때문에 보안성이 높지만, 서버 자원을 많이 사용하게 됩니다. 반면, 쿠키는 클라이언트 측에서 데이터를 저장하기 때문에 서버 자원을 적게 사용하지만, 보안성이 낮습니다. 마지막으로, 토큰은 서버와 클라이언트 간의 데이터 전송이 안전하게 이루어지기 때문에 보안성이 높으며, 서버 자원도 적게 사용하지만, 복호화 작업이 필요하기 때문에 처리 시간
🔑추가 예상질문
Q: 각각의 방식 중 어떤 것이 가장 보안적인 측면에서 우수하다고 생각하시나요?
각각의 방식은 서로 다른 보안 취약점을 가지고 있기 때문에, 어떤 방식이 가장 보안적인 측면에서 우수하다고 일반화하기는 어렵습니다.
그러나 보안 측면에서 고려해야 할 몇 가지 요소가 있습니다. 예를 들어, 세션은 서버 측에서 세션 정보를 관리하므로, 클라이언트 측에서 세션 정보를 확인할 수 없습니다. 반면에 쿠키는 클라이언트 측에서 쿠키 정보를 저장하므로, 보안 취약성이 높을 수 있습니다.
토큰 인증 방식은 토큰이 발급되는 과정에서 SSL/TLS 프로토콜을 사용하여 보안을 유지합니다. 토큰은 서버 측에서 발급하고 관리하므로, 클라이언트 측에서 보안 취약성이 높아지는 문제를 줄일 수 있습니다. 따라서, 일반적으로 토큰 인증 방식이 더욱 보안적이라고 할 수 있습니다.
Q: 세션과 쿠키, 토큰 방식의 장단점에 대해 설명해주세요.
- 세션 방식
-
장점:
- 서버 측에서 세션 정보를 관리하기 때문에, 클라이언트에서 정보를 변경할 수 없음
- 세션 ID가 노출되지 않기 때문에 보안적인 측면에서 좋음
-
단점:
-
서버에 부하가 걸리고, 성능에 영향을 미칠 수 있음
-
서버가 다운되면 세션 정보가 손실될 가능성이 있음
-
- 쿠키 방식
-
장점:
- 클라이언트 측에서 쿠키 정보를 저장하기 때문에, 서버의 부하를 줄일 수 있음
- 만료 날짜가 지정되면, 자동으로 삭제되기 때문에 관리가 용이함
-
단점:
-
쿠키 정보가 노출될 가능성이 있음
-
클라이언트에서 쿠키 정보를 수정할 수 있음
-
- 토큰 방식
- 장점:
- 토큰은 서버 측에서 발급하고 관리하기 때문에, 클라이언트에서 정보를 변경할 수 없음
- 클라이언트에서 토큰을 저장하기 때문에, 서버의 부하를 줄일 수 있음
- 토큰 만료 기간을 설정하여 보안을 유지할 수 있음
- 단점:
- 토큰을 해독하기 위해 서버 측에서 추가적인 처리가 필요함
- 토큰 정보가 노출될 경우 보안 취약성이 발생할 수 있음
정리:
각 방식마다 장단점이 있으며, 사용하는 시스템의 특성에 따라 적절한 방식을 선택해야 합니다. 세션 방식은 보안성이 높지만, 서버 부하가 크고 다운되면 세션 정보가 손실될 가능성이 있습니다. 쿠키 방식은 서버 부하가 적지만, 쿠키 정보가 노출될 가능성이 있습니다. 토큰 방식은 보안성과 서버 부하 감소를 동시에 보장하지만, 해독 과정이 필요하다는 단점이 있습니다.
😎 오늘 하루도 알찼다 :D
댓글남기기