HSTS 제목(엄격한 운송 안전) 설명

HTTPS가 웹 사이트를 네트워크 공격으로부터 보호하는 데 부족한 이유와 HSTS 헤더가 이 문제를 어떻게 해결하는지 알아보십시오.시작합시다!
원문은 여기서 찾을 수 있다. HSTS on AppSec Monkey.

HSTS란 무엇입니까?


HTTP Strict Transport Security(HTTP는 보안을 엄격히 전송함)는 브라우저가 도메인과 암호화되지 않은 연결을 방지하는 선택적 브라우저 보안 기능입니다.
암호화되지 않은 연결이란 http 대신 https (또는 ws 로 웹 소켓을 표시하는 것) 을 사용하는 것을 가리킨다.
다음과 같이 wss 제목을 사용하여 웹 사이트를 보호할 수 있습니다.
Strict-Transport-Security: <options>
3개의 옵션이 있습니다Strict-Transport-Security, max-age, includeSubdomains.우리는 1분 안에 이 문제들을 토론할 것이지만, 우선 웹 응용 프로그램에서 HST를 실현하는 것이 왜 이렇게 중요한지 설명해 보겠습니다.

왜 HST가 중요합니까?


HSTS 헤더는 웹 응용 프로그램에 대한 네트워크 공격을 방지합니다.사용하지 않는 경우 응용 프로그램의 작동 방법은 다음과 같습니다.

시나리오 1: HST 없음, 공격자 없음

  • 사용자 입력www.example.com
  • 사용자 브라우저가 암호화되지 않은 HTTP 요청을 http://www.example.com/에 전송
  • 웹 서버가 리디렉션https://www.example.com으로 반환됨
  • 사용자 브라우저가 암호화된 HTTPS 요청을 https://www.example.com/에 보냅니다.
  • 웹 서버가 로그인 페이지로 돌아갑니다.
  • 사용자가 사용자 이름과 비밀번호를 입력하고 브라우저는 안전한 TLS 연결을 통해 웹 서버로 안전하게 전송합니다.

  • 그런데 인터넷에 공격자가 있다면?HTTPS는 도움이 되지 않습니다.내 뜻을 말해줄게.

    시나리오 2: HST 없음, 네트워크에 공격자 있음

  • 사용자 입력www.example.com
  • 사용자 브라우저가 암호화되지 않은 HTTP 요청을 http://www.example.com/에 전송
  • 공격자는 암호화되지 않은 요청을 차단하고 실제 서버에서 로그인 페이지로 돌아갑니다.관건은 이런 연락이 여전히 암호화되지 않았다는 것이다.
  • 사용자는 암호화되지 않은 연결을 통해 공격자에게 사용자 이름과 비밀번호를 직접 제공한다.

  • 아이고.그것은 좋지 않다.
    이제 HSTS 헤드가 웹 응용 프로그램을 보호할 때 어떤 일이 일어나는지 살펴봅시다.

    시나리오 3: HST

  • 사용자 입력www.example.com
  • 이 사이트는 HST를 사용하기 때문에 사용자의 브라우저는 암호화된 HTTPS 요청을 즉시 https://www.example.com/에 보냅니다.공격자는 기회가 없다.
  • 웹 서버가 로그인 페이지로 돌아갑니다.
  • 사용자가 사용자 이름과 비밀번호를 입력하고 브라우저는 안전한 TLS 연결을 통해 이 사용자 이름과 비밀번호를 안전하게 보냅니다.

  • HSTS가 어떻게 공격을 막았는지 볼까요?하지만 지금 물어볼지도 몰라...

    만약 사용자가 이 사이트를 처음 방문한다면 어떻게 합니까?


    아주 좋은 문제!만약 사용자가 처음으로 사이트를 방문한 경우 사용자의 브라우저는 아직 HSTS 제목을 볼 기회가 없다.
    이러한 상황에서 공격은 여전히 가능하다. 왜냐하면 공격자가 실제 웹 서버에서 사용자에게 브라우저가 HST를 사용하기 전에 연결을 인수했다고 알려줄 기회가 있기 때문이다.
    다행히도, 해결 방안이 하나 있습니다. 본문이 끝날 때, 당신은 그것의 모든 것을 이해할 수 있을 것입니다.이것은 세 번째 옵션preload과 관련이 있지만, 다른 두 가지 옵션을 먼저 봅시다!

    최대 연령 매개 변수


    HSTS 헤더의 첫 번째 매개변수는 preload입니다.이것은 브라우저가 제목을 보고 제목을 기억하기를 원하는 시간(초)을 가리킨다.
    예를 들어 아래 제목은 보내는 도메인에 대해 HSTS를 1분간 활성화합니다.그리고 브라우저는 60초 안에 이 영역과 암호화되지 않은 연결을 거부합니다.
    Strict-Transport-Security: max-age=60
    
    이렇게 짧은 시간은 통상적으로 매우 유용하지 않다.더 흔히 볼 수 있는 것은 1년 또는 2년의 가치를 보는 것이다. 예를 들어 다음과 같다.
    # 1 year
    Strict-Transport-Security: max-age=31536000
    
    # 2 years
    Strict-Transport-Security: max-age=63072000
    
    브라우저는 제목을 볼 때마다 시간을 갱신합니다.

    ☝️ Note

    When implementing HSTS in a production environment, it's good to start with a small max-age and then slowly ramp it up to a year or two years. This way, you can quickly recover if something breaks.


    HST 취소

    max-age 매개 변수의 두 번째 용례는 HST를 취소하는 것이다. 만약 당신이 그것을 벗어나고 싶다면.반환max-age이 0이면 브라우저에서 제목이 표시되면 보호기가 제거됩니다.
    # Cancel HSTS
    Strict-Transport-Security: max-age=0
    

    includeSubdomains 매개 변수


    두 번째 매개 변수는 max-age입니다.기본적으로 HSTS 헤더는 서비스를 제공하는 도메인에만 영향을 미칩니다.즉 includeSubdomains가 보내면 https://www.example.com만 보호되고 www.example.com만 보호되지 않는다는 것이다.
    하위 도메인을 포함하려면 다음과 같이 foo.www.example.com를 추가합니다.
    # Store for 2 years, apply also to subdomains
    Strict-Transport-Security: max-age=6307200; includeSubdomains
    

    ☝️ Note

    The includeSubdomains directive is a requirement for preloading, which we'll look at next.


    HSTS 사전 로드


    세 번째 매개변수includeSubdomains는 HSTS 사전 로드에 유용합니다.
    앞서 언급한 바와 같이 프리로드는 사용자가 사이트를 처음 방문하더라도 HSTS 헤더를 사용하여 사이트를 보호할 수 있는 메커니즘이다.
    구글에 웹 사이트를 보호하라고 알려주면 모든 주요 브라우저가 원본 코드를 바꾸고 HSTS 헤더를 미리 불러오는 것을 볼 수 있다.
    농담하지 마!JSON 파일here이 올바르게 표시됩니다.자세히 보면 앱secmonkey가 저기 있어요!
    { "name": "appsecmonkey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
    
    그러나 도메인 사전 로드를 활성화하기 위한 몇 가지 사전 요구 사항이 있습니다.
    우선, preload 명령을 사용하여 HSTS 헤더를 제공해야 합니다.또한 preload는 1년보다 커야 하며 max-age를 추가해야 합니다.
    # Store for two years, also apply to subdomains, enable preloading
    Strict-Transport-Security: max-age=63072000; includeSubDomains; preload 
    
    또한 도메인은 유효한 TLS 인증서를 HTTPS 포트(443)에 반환하고 포트 80에서 HTTPS(포트 80이 활성화된 경우)로 리디렉션해야 합니다.
    이러한 요구 사항이 충족되면 https://hstspreload.org/로 이동하여 도메인을 다음과 같이 커밋하십시오.

    결론


    HTTPS는 웹 응용 프로그램의 사용자를 네트워크 공격으로부터 보호하기에 부족합니다.인터넷에 암호화되지 않은 사이트가 있는 한 브라우저 공급업체는 암호화되지 않은 연결을 완전히 비활성화할 수 없다.
    다행히도 암호화되지 않은 연결이 필요 없는 사이트에는 가입 메커니즘이 선택되어 있다.이것이 HSTS의 제목입니다.
    생산에서 HST를 실시할 때는 느린includeSubdomains부터 시작해서 천천히 높이는 것이 좋다.
    마지막으로 hstspreload에 영역을 제출함으로써 HSTS 헤더를 주요 웹 브라우저의 원본 코드에 미리 불러올 수 있습니다.조직하지만 네가 이렇게 하기 전에 곰곰이 생각해 봐라.취소는 느리고 고통스러운 과정이다.

    네트워크 보안 리스트 전자 표 가져오기!



    ☝️ Subscribe AppSec Monkey의 이메일 목록에 들어가서 우리의 가장 좋은 내용을 당신의 우편함에 직접 보내고 2021 웹 응용 프로그램 보안 검사표 전자 표를 무료로 받아서 환영 선물로 드립니다!

    여기 멈추지 마.


    이 문서를 좋아하신다면 AppSec Monkey에서 제공한 다른 응용 프로그램 보안 안내서도 보실 수 있습니다.
    읽어주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기