Blog

Mixed Contents란?

HTTPS로 제공되는 웹페이지에서 네트워크는 TLS로 보호되기 때문에 중간공격자에게서 보호받을 수 있다. 하지만 HTTPS 페이지가 HTTP 리퀘스트, 리스폰스를 포함하게되면 네트워크는 부분적으로 암호화된다. 이렇게 암호화되지 않은 컨텐츠는 스니퍼에서 접근가능하며 중간공격자에 의해 내용이 수정될 수 있다. HTTPS 페이지내에 HTTP가 포함되면  Mixed Content 페이지라고 부르며 이는 보안에 HTTPS를 사용하더라도 보안에 취약하게 된다.

*스니퍼 : 패킷통신 데이터를 들여다 볼 수 있는 소프트웨어인 듯 싶다.

Mixed Content에는 크게 Passive, Active 두가지 종류가 있다.

Mixed Passive/Display Content

공격자가 http로 제공되는 passive content(이미지등)를 변경할 수 있다.

passive content list

  • <audio> (src attribute)
  • <img> (src attribute)
  • <video> (src attribute)
  • <object> subresources (when an <object> performs HTTP requests)

Mixed Active Content

Active Content는 HTTPS 페이지의 일부나 혹은 모든 부분에 접근할 수 있는 Content이다.
HTTPS페이지의 동작을 바꿀 수 있고 잠재적으로 사용자로부터 민감한 정보를 훔칠 수 있다.
위에서 이야기한 Mixed Display Content의 위험성뿐 아니라 Mixed Active Content는 몇몇 공격방법에 취약하다.
Mixed Active Content의 경우에는 중간공격자가 HTTP 컨텐츠에 대한 요청자체를 가로챌 수 있다.
공격자는 악의적인 자바스크립트 코드를 포함하여 응답을 변경할 수 도 있다.

active content list

  • <script> (src attribute)
  • <link> (href attribute) (this includes CSS stylesheets)
  • XMLHttpRequest object requests
  • <iframe> (src attributes)
  • All cases in CSS where a url value is used (@font-face, cursor, background-image, etc.)
  • <object> (data attribute)

 

잘 못 된 부분은 댓글로 남겨 주세요. 큰 도움이 됩니다.^^

  • https://perfectacle.github.io exobud

    https 프로토콜에 http 프로토콜의 리소스가 있다면 해당 자원을 통해서만 공격이 가능하다는 거지,
    다른 https 프로토콜의 리소스나 기타 부분으로는 공격이 불가능한 건가요?
    그리고 http 프로토콜에서 https 프로토콜의 리소스를 쓰는 건 전혀 상관이 없나요?

    그럼 http 프로토콜이나 https 프로토콜이나 무조건 https의 리소스를 사용하는 게 이득 아닌가요?
    protocol-relative URL을 안 쓰고 무조건 https를 쓰면 될 것 같은데 protocol-relative URL은 왜 존재하는지 궁금하네요…

    • http://superjang.com Jae Won Jang

      https를 사용하는 자원은 일반텍스트 대신 ssl같은 보안이 강화된 프로토콜을 사용하기 때문에 패킷을 변조하는 등의 행위가 쉽지 않지만 https를 사용하는 페이지내에 http를 사용하는 리소스가 있다면 해당 자원을 사용하여 공격이 가능하다는 말이었습니다.
      제 생각에도 무조건 https로 처리하면 좋을 것 같긴한데 ssl프로토콜을 사용하는거라 인증서가 있어야 하고 공인된 인증기관에서 발급받으면 비용이 발생하기 때문에 http를 많이 쓰는게 아닐까 싶네요.

      답변하다 2가지 궁금한점이 생겼습니다.
      1. 인증서를 한 번 발급받으면 해당 사이트 내에서는 무제한으로 사용할 수 있는지
      2. https요청을 처리하기 위한 개발이 따로 필요한지

      만약 인증서 발급 비용이 발급 자체에 대한 비용만 발생하고 계속해서 사용할 수 있고, https 요청에 대한 추가 개발이 필요하지 않다면 인증서를 구입한 사이트에서는 모든 페이지를 https로 하는게 맞을 것 같은데 온라인 쇼핑몰을 보면 https는 사이트 내에서도 일반적인 리소스가 아닌 개인정보나 결제정보 같은 데이터들을 주고받는 페이지의 자원을위해 한정적으로 사용하더라구요. 이건 좀 더 알아보고 다시 답변드리도록 하겠습니다 ^^;

      • https://perfectacle.github.io exobud

        아 인증서를 통해서 발급 받고 사용 횟수에 따라서도 비용이 따르겠군요…
        학교에서 듣기만 하고 직접 https 프로토콜로 뭔가를 구현해보거나 해본 적이 없고 전문지식도 부족하다보니
        이렇게 실무자를 통해 전해 듣는 것만 해도 많은 도움이 되는 것 같습니다 ^^

        • http://superjang.com Jae Won Jang

          점심때 주변분들께 여쭤봤는데 인증서 발급은 open API 처럼 요청 횟수에 비례하여 추가로 비용을 내지는 않는 것 같습니다. 도메인, 서브도메인등 도메인기준으로 정책에 맞는 라이센스를 기간 단위 구매하여 비용을 지불하는게 일반적인 케이스이고 인증 기관에 따라 구입 방식이 다를 수 도 있을것 같긴합니다. 그리고 서버, 클라이언트에서 인증서 확인하고 암호화 하는등의 작업을 하고 실제 개발자가 https요청을 처리하기 위한 추가 개발은 필요하지 않다고 합니다.
          덕분에 좀 더 알게됬네요. 질문 감사합니다. ㅎㅎ