Project.log

WebDevCurriculum / 보안의 기초 본문

ETC

WebDevCurriculum / 보안의 기초

jinuk_ 2023. 5. 9. 20:15
728x90
반응형

Knowre-Dev의 WebDevCurriculum의 레포지토리를 Fork하여 퀘스트를 해결해 나가는 글입니다.

Introduction

 

  • 이번 퀘스트에서는 가장 기초적인 웹 서비스 보안에 대해 알아보겠습니다.

Checklist

  • 입력 데이터의 Validation을 웹 프론트엔드에서 했더라도 서버에서 또 해야 할까요? 그 이유는 무엇일까요?

웹 프론트엔드에서 데이터의 유효성을 검증하는 것은 사용자 경험을 개선하고 잘못된 데이터를 서버로 보내지 않도록 하는 데 도움이 됩니다. 그러나 서버에서도 입력 데이터의 유효성을 검증해야하는 이유는 다음과 같습니다.

  • 보안: 사용자는 웹 페이지를 조작하여 서버로 잘못된 데이터를 보낼 수 있습니다. 서버 측에서 데이터를 다시 한 번 확인하면 이러한 위협을 방지할 수 있습니다.
  • 안정성: 서버는 입력 데이터를 처리하고 저장해야하는 경우가 많습니다. 서버 측에서 데이터를 검증하면 잘못된 데이터가 서버에 저장되지 않으므로 시스템 안정성을 유지할 수 있습니다.
  • 일관성: 입력 데이터의 유효성 검사를 서버 측에서 수행하면 클라이언트와 서버 간의 데이터 일관성이 유지됩니다. 이는 서버 측에서 추가 유효성 검사를 수행하는 것이 중요한 이유 중 하나입니다.

따라서, 서버 측에서 입력 데이터의 유효성을 검증하는 것이 좋습니다. 이를 통해 애플리케이션의 보안과 안정성을 개선하고 일관성을 유지할 있습니다.

 

  • 서버로부터 받은 HTML 내용을 그대로 검증 없이 프론트엔드에 innerHTML 등을 통해 적용하면 어떤 문제점이 있을까요?

서버로부터 받은 HTML 내용을 그대로 검증 없이 프론트엔드에 innerHTML 등을 통해 적용하는 것은 보안 문제를 일으킬 수 있습니다.

 

HTML 내용에는 스크립트 태그 등 악성 코드를 포함할 수 있습니다. 이 경우, 검증 없이 innerHTML을 통해 HTML 내용을 적용하면 악성 코드가 실행될 수 있으며, 이로 인해 클라이언트 시스템이 해킹당할 수 있습니다.

 

또한, 검증 없이 innerHTML을 통해 HTML 내용을 적용하면 웹 애플리케이션의 일관성과 안정성이 해칠 수 있습니다. HTML 내용을 검증 없이 적용하면 의도치 않은 결과가 나타날 가능성이 있으며, 이는 사용자 경험을 악화시킬 수 있습니다.

 

따라서, 서버로부터 받은 HTML 내용을 프론트엔드에 적용하기 전에는 반드시 검증과 이상 탐지를 수행해야 합니다. 이를 위해, 애플리케이션에서는 입력 데이터의 유효성을 검사하고, 보안 취약점을 탐지하는 다양한 검증 기능을 구현해야 합니다. 또한, 안정성과 일관성을 유지하기 위해, HTML 내용을 적용하기 전에 적절한 방식으로 파싱하고 처리하는 것이 중요합니다.

 

  • XSS(Cross-site scripting)이란 어떤 공격기법일까요?

XSS(Cross-site scripting)는 웹 애플리케이션에서 발생하는 취약점 중 하나로, 악의적인 사용자가 공격자가 의도한 악성 스크립트를 다른 사용자에게 전달하거나 실행시키는 공격 기법입니다.

 

XSS 공격은 주로 웹 페이지에서 입력 폼, 댓글 기능, 검색 기능 등을 이용하여 실행됩니다. 공격자는 이러한 기능들을 이용해 악성 스크립트를 입력하고, 이를 포함한 요청을 서버로 전송합니다. 서버는 이 요청을 처리한 후, 악성 스크립트를 포함한 응답을 클라이언트에게 전송합니다. 이렇게 전송된 악성 스크립트는 클라이언트에서 실행됩니다. 이 때, 해당 페이지에 접근한 다른 사용자들은 이 악성 스크립트의 피해를 입을 수 있습니다.

 

XSS 공격으로 인해 클라이언트 측에서 실행되는 악성 스크립트는 사용자의 쿠키 정보, 세션 ID 중요한 정보를 탈취할 있으며, 사용자의 컴퓨터를 제어하여 악성 행위를 수행할 수도 있습니다.

 

  • CSRF(Cross-site request forgery)이란 어떤 공격기법일까요?

CSRF(Cross-site request forgery)는 웹 애플리케이션에서 발생하는 취약점 중 하나로, 인증된 사용자가 자신의 의지와 무관하게 공격자가 의도한 작업을 수행하도록 하는 공격 기법입니다.

 

CSRF 공격은 공격자가 특정 웹 사이트에서 로그인한 상태에서 공격 대상자가 악성 웹 사이트를 방문하면서 이루어집니다. 악성 웹 사이트는 특정 요청을 보내기 위해, 사용자의 브라우저를 이용하여 특정 웹 사이트에 요청을 보냅니다. 이 때, 요청을 수행하기 위한 인증 정보(쿠키, 세션 등)가 공격 대상자의 브라우저에 저장되어 있기 때문에, 공격 대상자의 권한으로 요청이 수행됩니다.

 

이러한 방식으로 수행되는 CSRF 공격은, 공격 대상자가 자신의 의지와 무관하게 자동으로 요청을 수행하게 됩니다. , 공격자가 의도한 작업은 공격 대상자의 권한으로 수행되기 때문에, 데이터 변경, 계정 탈취, 결제 다양한 악성 행위가 가능합니다.

 

  • SQL Injection이란 어떤 공격기법일까요?

SQL Injection은 웹 애플리케이션에서 발생하는 취약점 중 하나로, 악의적인 사용자가 애플리케이션에서 사용하는 데이터베이스에 대한 SQL 쿼리를 조작하여, 데이터베이스를 비정상적으로 조작하거나 데이터를 탈취하는 공격 기법입니다.

 

SQL Injection 공격은 주로 웹 애플리케이션의 입력 폼을 통해 이루어집니다. 공격자는 입력 폼에 악의적인 SQL 쿼리를 삽입하여, 해당 쿼리가 실행될 때 데이터베이스에 대한 공격을 수행합니다. 이 때, 공격자가 삽입한 SQL 쿼리는 원래의 쿼리와 병합되어 실행되므로, 데이터베이스는 공격자가 원하는 대로 조작됩니다.

 

SQL Injection 공격은 공격자가 데이터베이스에 저장된 중요한 정보(개인 정보, 인증 정보, 금융 정보 ) 탈취할 있으며, 데이터베이스에 대한 악성 조작을 수행할 수도 있습니다. 또한, 공격자는 애플리케이션을 사용하는 모든 사용자의 정보에 접근할 수도 있으며, 시스템에 대한 악성 행위를 수행할 수도 있습니다.

 

  • 대부분의 최신 브라우저에서는 HTTP 대신 HTTPS가 권장됩니다. 이유가 무엇일까요?

HTTPS는 HTTP와 달리, 데이터를 암호화하고 인증하기 위해 SSL/TLS 프로토콜을 사용합니다. 이는 사용자의 브라우저와 웹 서버 간의 통신을 보호하고 중간자 공격을 방지하는 데 도움이 됩니다.

 

HTTPS를 사용하는 것은 브라우저에서 제공하는 보안 기능 중 하나입니다. HTTPS는 사용자가 웹 사이트와 상호 작용할 때 제3자가 데이터를 가로채거나 조작하는 것을 방지할 수 있습니다. 이는 민감한 정보를 전송하는 데 특히 중요합니다. 또한 HTTPS는 데이터의 기밀성을 유지하기 위해 데이터를 암호화하므로 데이터 유출과 같은 보안 위협으로부터 보호할 수 있습니다.

 

또한 HTTPS를 사용하는 것은 검색 엔진 최적화 (SEO) 측면에서도 중요합니다. Google은 HTTPS를 사용하는 웹 사이트를 선호하며, 이는 HTTPS를 사용하는 웹 사이트의 랭킹을 높이는 데 도움이 됩니다.

 

따라서 대부분의 최신 브라우저는 HTTPS 권장합니다. 이는 사용자의 보안을 강화하고 서버와의 통신을 보호하는 도움이 됩니다.

 

  • HTTPS와 TLS는 어떤 식으로 동작하나요? HTTPS는 어떤 역사를 가지고 있나요?

SSL은 HTTPS가 처음 도입될 때 사용되었으며, TLS는 이를 대체하는 업그레이드된 보안 프로토콜입니다.

 

HTTPS는 일반 HTTP와 다르게 데이터를 암호화하고 인증하기 위해 SSL/TLS 프로토콜을 사용합니다. SSL/TLS는 대칭형 암호화 및 공개키 암호화와 같은 다양한 암호화 기술을 사용하여 데이터의 기밀성, 무결성 및 인증을 보호합니다. 대칭형 암호화는 데이터를 암호화하는 데 사용되는 동일한 비밀 키를 송신자와 수신자 모두가 가지고 있어야합니다. 반면, 공개키 암호화는 두 개의 키를 사용하여 데이터를 암호화하고 복호화합니다. 공개키는 모두에게 공개되며, 비밀키는 소유자만이 가지고 있습니다. 이를 통해 SSL/TLS는 중간자 공격과 같은 공격으로부터 데이터를 보호합니다.

 

HTTPS는 1994년에 개발된 HTTP의 확장으로서, 웹에서 민감한 정보를 전송하는 데 필요한 기능을 제공하도록 설계되었습니다. 초기 버전의 HTTPS는 SSL 프로토콜을 사용했으며, 이후에는 TLS 프로토콜이 SSL을 대체하였습니다. TLS는 SSL 3.0을 기반으로 하지만 보안 결함을 보완하고 기능을 개선하였습니다.

 

HTTPS 도입 초기에는 대부분의 웹사이트가 HTTP 사용하였습니다. 그러나 브라우저 제조사들은 보안 문제로부터 사용자를 보호하기 위해 HTTPS 적극적으로 권장하였고, 검색 엔진 최적화 (SEO) 측면에서도 HTTPS 사용하는 사이트의 랭킹을 높이는 것을 공식적으로 선언하였습니다. 이러한 변화로 인해 현재 대부분의 인터넷 트래픽은 HTTPS 사용하고 있으며, 보안에 대한 관심과 중요성은 계속해서 증가하고 있습니다.

 

  • HTTPS의 서비스 과정에서 인증서는 어떤 역할을 할까요? 인증서는 어떤 체계로 되어 있을까요?

HTTPS의 서비스 과정에서 인증서는 인터넷 상의 웹사이트의 신원을 확인하고, 데이터를 암호화하여 안전하게 전송하기 위한 역할을 수행합니다.

 

인증서는 웹사이트가 제공되는 도메인의 소유자가 신원을 확인 받은 것을 나타내는 디지털 문서입니다. 이 인증서에는 웹사이트 정보, 공개키 및 인증서 발급자 정보가 포함되어 있습니다. 인증서는 브라우저와 웹 서버 간의 통신에서 중요한 역할을 합니다. 이를 통해 브라우저는 웹사이트가 신뢰할 수 있는지 확인하고, 웹사이트는 자신이 신뢰할 수 있는 웹 사이트임을 증명할 수 있습니다.

 

인증서는 보통 인증서 발급기관(CA, Certificate Authority)에서 발급됩니다. CA는 공인된 기관으로, 웹사이트의 신원을 확인하고, 인증서를 발급하는 역할을 수행합니다. 브라우저는 인증서 발급기관이 신뢰할 수 있는 기관인지 확인하고, 웹사이트의 인증서가 유효한지 확인합니다. 이를 통해 브라우저는 웹사이트가 자신이 주장하는 신원을 가진 것임을 확인할 수 있습니다.

 

인증서는 보통 X.509라는 표준 포맷을 사용하여 구성됩니다. 이 포맷은 웹사이트 정보, 공개키 및 발급 기관 정보 등을 포함하는 디지털 문서입니다. 인증서는 공개키 암호화 기술을 사용하여 데이터를 암호화하고, 이를 수신하는 브라우저는 비밀키를 사용하여 데이터를 복호화합니다.

 

HTTPS에서 인증서는 중요한 보안 요소 하나이며, 웹사이트와 사용자 간의 통신을 안전하게 보호합니다.

728x90
반응형