icon안동민 개발노트

웹 보안 기초 (HTTPS, XSS, CSRF)


 웹 보안은 온라인 시스템과 데이터를 보호하는 중요한 요소입니다.

 주요 위협으로는 데이터 도청, 무단 접근, 데이터 조작, 서비스 거부 공격 등이 있습니다.

HTTPS (HTTP Secure)

 HTTPS는 HTTP 프로토콜의 보안 버전으로, SSL/TLS 프로토콜을 사용하여 통신을 암호화합니다.

 작동 원리

  1. 핸드셰이크 : 클라이언트와 서버가 암호화 방식 협상
  2. 키 교환 : 공개키 암호화를 사용하여 대칭키 교환
  3. 데이터 전송 : 협상된 대칭키로 데이터 암호화 및 전송

 SSL/TLS 프로토콜

  • 기밀성 : 데이터 암호화
  • 무결성 : 메시지 인증 코드(MAC) 사용
  • 인증 : 디지털 인증서 사용

 인증서

  • 역할 : 서버의 신원 보증
  • CA 서명 인증서 : 신뢰할 수 있는 인증 기관이 발급
  • 자체 서명 인증서 : 개발/테스트 환경에서 사용, 브라우저 경고 발생

XSS (Cross-Site Scripting)

 XSS는 공격자가 웹 페이지에 악성 스크립트를 삽입하는 공격 기법입니다.

 유형

 1. 저장형 XSS

  • 공격 벡터 : 데이터베이스에 악성 스크립트 저장
  • 예시 : 게시판에 <script>alert('XSS');</script> 게시

 2. 반사형 XSS

  • 공격 벡터 : URL 파라미터를 통한 악성 스크립트 전달
  • 예시 : https://example.com/search?q=<script>alert('XSS');</script>

 3. DOM 기반 XSS

  • 공격 벡터 : 클라이언트 측 스크립트 조작
  • 예시
// 취약한 코드
document.write("<input name='firstName' value='" + location.search.split('name=')[1] + "'>");

 방어 기법

  1. 입력 검증 및 이스케이프
function escapeHTML(str) {
  return str.replace(/[&<>"']/g, function(match) {
    return {
      '&': '&amp;',
      '<': '&lt;',
      '>': '&gt;',
      '"': '&quot;',
      "'": '&#39;'
    }[match];
  });
}
  1. 콘텐츠 보안 정책(CSP) 사용
  2. HttpOnly 플래그 설정 (쿠키 보호)

CSRF (Cross-Site Request Forgery)

 CSRF는 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격입니다.

 공격 원리

  1. 사용자가 취약한 사이트에 로그인
  2. 공격자가 악성 사이트로 유도
  3. 악성 사이트가 취약한 사이트에 요청 전송

 방어 기법

  1. CSRF 토큰 사용
<form action="/transfer" method="POST">
  <input type="hidden" name="csrf_token" value="랜덤_토큰_값">
  <!-- 기타 폼 필드 -->
</form>
  1. Same-Site 쿠키 설정
Set-Cookie: session=123; SameSite=Strict
  1. Referer 검증

콘텐츠 보안 정책 (CSP)

 CSP는 XSS 및 데이터 주입 공격을 방지하기 위한 추가 보안 계층입니다.

 구현 방법

 HTTP 헤더 설정

Content-Security-Policy: default-src 'self'; script-src 'self' https://apis.google.com;

 CSP가 방어하는 공격

  • XSS
  • 클릭재킹
  • 패킷 스니핑

기타 웹 공격 및 방어

 SQL 인젝션

  • 공격 : 악의적인 SQL 쿼리 주입
  • 방어 : 매개변수화된 쿼리 사용
const query = 'SELECT * FROM users WHERE id = ?';
connection.query(query, [userId], (error, results) => {
  // 결과 처리
});

 보안을 고려한 코딩 practices

  1. 입력 데이터 검증 및 필터링
  2. 최소 권한 원칙 준수
  3. 에러 메시지에서 민감한 정보 노출 방지
  4. 안전한 세션 관리
  5. 정기적인 보안 업데이트 적용

 정기적인 보안 감사

  • 자동화된 취약점 스캐닝 도구 사용
  • 수동 코드 리뷰 수행
  • 침투 테스트 실시

 웹 보안은 현대 인터넷 환경에서 매우 중요한 요소입니다. 다양한 위협으로부터 시스템과 사용자 데이터를 보호하기 위해서는 여러 보안 기술과 방법론을 이해하고 적용해야 합니다.

 HTTPS는 웹 통신의 기본적인 보안을 제공합니다. SSL/TLS 프로토콜을 통해 데이터의 기밀성, 무결성, 그리고 통신 당사자의 인증을 보장합니다. 이 과정에서 인증서의 역할이 중요한데, 특히 신뢰할 수 있는 인증 기관(CA)이 발급한 인증서를 사용하면 더욱 안전한 통신이 가능합니다.

 XSS 공격은 웹 애플리케이션의 취약점을 이용하여 사용자 브라우저에서 악성 스크립트를 실행하는 공격입니다. 저장형, 반사형, DOM 기반 XSS 등 다양한 유형이 있으며, 각각의 특성에 맞는 방어 기법을 적용해야 합니다. 입력값 검증과 이스케이프 처리, CSP 적용, HttpOnly 플래그 사용 등이 주요 방어 기법입니다.

 CSRF 공격은 사용자의 인증된 세션을 악용하여 원치 않는 작업을 수행하게 하는 공격입니다. 이를 방지하기 위해 CSRF 토큰, Same-Site 쿠키 설정, Referer 검증 등의 방법을 사용할 수 있습니다. 특히 CSRF 토큰은 각 요청마다 고유한 값을 생성하여 요청의 정당성을 검증하는 효과적인 방법입니다.

 콘텐츠 보안 정책(CSP)은 XSS를 비롯한 다양한 공격을 방지하는 강력한 도구입니다. 웹 서버가 클라이언트에게 어떤 리소스가 로드될 수 있는지 지시함으로써, 악성 스크립트의 실행을 막고 데이터 유출을 방지합니다.

 SQL 인젝션과 같은 다른 웹 공격들도 심각한 위협이 될 수 있습니다. 이러한 공격을 방지하기 위해서는 매개변수화된 쿼리 사용, 입력값 검증, 최소 권한 원칙 준수 등의 방법을 적용해야 합니다.

 개발 과정에서 보안을 고려한 코딩 practices를 적용하는 것은 매우 중요합니다. 모든 입력 데이터를 검증하고 필터링하며, 최소 권한 원칙을 준수하고, 에러 메시지에서 민감한 정보가 노출되지 않도록 주의해야 합니다. 또한, 안전한 세션 관리와 정기적인 보안 업데이트 적용도 필수적입니다.

 정기적인 보안 감사는 시스템의 보안 상태를 지속적으로 평가하고 개선하는 데 중요합니다. 자동화된 취약점 스캐닝 도구를 사용하여 알려진 취약점을 찾고, 수동 코드 리뷰를 통해 로직 상의 보안 문제를 발견할 수 있습니다. 또한, 주기적인 침투 테스트를 통해 실제 공격 시나리오에 대한 대비를 할 수 있습니다.

 결론적으로, 웹 보안은 지속적인 관심과 노력이 필요한 분야입니다. 새로운 취약점과 공격 기법이 계속해서 등장하기 때문에, 개발자와 보안 전문가들은 최신 보안 동향을 파악하고 적절한 대응 방안을 마련해야 합니다. 동시에 기본적인 보안 원칙과 practices를 철저히 준수함으로써, 많은 일반적인 보안 위협으로부터 시스템을 보호할 수 있습니다.