네트워크 보안 주니어 기술면접
새 면접Q. XSS(Cross-Site Scripting) 공격이 무엇인지 설명하고, 이를 방어하기 위한 기본적인 방법 2가지를 말씀해주세요.
사용자 입력값이 그대로 웹 페이지에 출력될 때 발생할 수 있는 문제를 생각해보세요.
XSS는 공격자가 악의적인 스크립트를 웹 페이지에 삽입하여 다른 사용자의 브라우저에서 실행되도록 하는 공격입니다. 사용자의 쿠키나 세션 정보를 탈취하거나 악성 행위를 수행할 수 있습니다. 방어 방법으로는 첫째, 사용자 입력값에 대한 HTML 인코딩(Escape)을 수행하여 특수문자를 무해화해야 합니다. 둘째, CSP(Content Security Policy) 헤더를 설정하여 허용된 출처의 스크립트만 실행되도록 제한할 수 있습니다. 추가로 HttpOnly 플래그를 쿠키에 설정하여 자바스크립트로 쿠키 접근을 차단하는 방법도 효과적입니다.
- • 악의적인 스크립트를 웹 페이지에 삽입하는 공격
- • 사용자 입력값에 대한 HTML 인코딩(Escape) 처리
- • CSP 헤더 설정 및 HttpOnly 쿠키 플래그 사용
게시판이나 댓글 기능에서 사용자 입력을 화면에 출력할 때 XSS 방어가 필수적으로 적용됩니다.
Stored XSS와 Reflected XSS의 차이점은 무엇인가요?
Q. JWT(JSON Web Token)의 구조와 동작 원리를 설명하고, 보안상 주의해야 할 점을 2가지 말씀해주세요.
JWT는 세 부분으로 나뉘며, 서버가 상태를 저장하지 않는 특징이 있습니다.
JWT는 Header, Payload, Signature 세 부분으로 구성되며 점(.)으로 구분됩니다. Header는 토큰 타입과 알고리즘 정보를, Payload는 사용자 정보와 클레임을, Signature는 Header와 Payload를 비밀키로 서명한 값을 담고 있습니다. 클라이언트가 로그인하면 서버는 JWT를 발급하고, 이후 요청 시 클라이언트는 이 토큰을 헤더에 포함시켜 인증을 수행합니다. 보안상 주의점으로는 첫째, JWT는 탈취되면 만료 전까지 악용될 수 있으므로 HTTPS를 필수로 사용하고 만료시간을 짧게 설정해야 합니다. 둘째, Payload는 Base64로만 인코딩되어 누구나 디코딩할 수 있으므로 민감한 정보(비밀번호 등)를 절대 포함하면 안 됩니다.
- • Header, Payload, Signature 세 부분으로 구성
- • 서버가 비밀키로 서명하여 발급하고 클라이언트가 매 요청마다 전송
- • HTTPS 사용 필수, 짧은 만료시간 설정, Payload에 민감정보 미포함
마이크로서비스 환경에서 서비스 간 인증이 필요할 때 JWT를 사용하여 상태 비저장 방식으로 인증을 구현합니다.
JWT와 세션 기반 인증 방식의 장단점을 비교해주세요.
Q. CSRF(Cross-Site Request Forgery) 공격의 원리를 설명하고, 이를 방어하기 위한 CSRF 토큰의 동작 방식을 설명해주세요.
사용자가 로그인된 상태에서 공격자가 만든 악의적인 요청이 자동으로 전송되는 상황을 생각해보세요.
CSRF는 사용자가 인증된 상태에서 공격자가 의도한 악의적인 요청을 사용자 모르게 서버로 전송하는 공격입니다. 브라우저는 자동으로 쿠키를 포함하여 요청을 보내기 때문에, 공격자가 만든 페이지에서 송금이나 정보 변경 요청을 실행할 수 있습니다. CSRF 토큰 방어 방식은 서버가 폼을 렌더링할 때 예측 불가능한 랜덤 토큰을 생성하여 세션에 저장하고 폼에 hidden 필드로 포함시킵니다. 사용자가 요청을 보낼 때 이 토큰도 함께 전송되며, 서버는 세션의 토큰과 요청의 토큰을 비교하여 일치할 때만 요청을 처리합니다. 공격자는 토큰 값을 알 수 없으므로 정상적인 요청을 위조할 수 없습니다.
- • 인증된 사용자의 권한으로 의도하지 않은 요청을 강제로 실행하는 공격
- • 서버가 랜덤 토큰을 생성하여 세션과 폼에 저장
- • 요청 시 토큰을 검증하여 공격자가 토큰을 알 수 없으므로 방어 가능
은행 송금, 비밀번호 변경, 게시글 삭제 등 중요한 상태 변경 작업에서 CSRF 토큰을 사용하여 공격을 방어합니다.
SameSite 쿠키 속성이 CSRF 방어에 어떻게 도움이 되는지 설명해주세요.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!