본문 바로가기

보안/WEB

[Naver] Lucy XSS Filter

728x90

 

모듈 프로젝트때 사용했던 Lucy Filter에 대해서 더 알아보겠다. 서비스 운영 시 XSS 방어가 필요하기 때문에 lucy filter를 사용했었음.

 


Lucy - XSS (XssFilter, Xss Preventer)

: XSS (Cross Site Scripting) 공격을 방어하는 Java 라이브러리

💡 Why JAVA?
플랫폼 호환성 : 자바는 플랫폼에 독립적이며 다양한 운영 체제 및 환경에서 실행이 가능하다. 따라서 루시를 자바로 개발하면 이식성이 좋아지며, 다양한 환경에서 쉽게 적용할 수 있기 때문임.

 

💡 Why Lucy?

  • XML설정만으로 XSS방어가 가능
  • 비지니스 레이어의 코드 수정이 필요하지 않음
  • 직접 설정할 필요가 없으므로 코드를 잘못 입력하거나, 놓치고 적용하지 않는 경우가 없음
  • 특별한 설정 없이 XssPreventer.escape(String) 메서드를 호출하여 사용하면 됨

 

 

XssFilter

 XSS 공격이 가능한 HTML 요소를 신뢰할 수 있는 코드로 변환하거나 삭제하는 기능을 제공. 공격이 가능하지 않은 HTML 요소는 허용을 한다. HTML 요소를 허용하되 XSS 공격에 위험한 요소를 걸러내야할 때 사용한다. HTML이 허용되는 게시판의 본문 등에 적용할 수 있다.

  • 웹 애플리케이션을 보호하기 위해 화이트리스트 설정 방법을 지원하는 Java 기반 라이브러리
  • 화이트리스트 방식의 필터를 사용하면 기존 블랙리스트 방식의 필터보다 XSS 공격으로부터 웹사이트에 대한 보안 조치가 더욱 강화됨
  • DOM과 SAX 파서를 모두 지원

 

내부구조

Lucy-XSS Filter 객체를 생성하면 Configuration Builder는 White List Configuration에 정의된 내용을 바탕으로 White List Object Model을 생성하여 Lucy-XSS Filter Core로 전달한다. Lucy-XSS Filter Core는 Markup Parser(DOM, SAX 둘 다 지원 )가 필터링 대상 HTML 문자열을 파싱하여 생성한 HTML Object Model을 White List Object Model과 비교하여 필터링한다.

 

  • Lucy-XSS Filter Core : Markup Parser를 통해 파싱한 HTML 문자열을 White List Object Model과 비교하여 필터링한 결과(Clean HTML)를 반환
  • Markup Parser : 문자열을 파싱하여 HTML Object Model로 변환. DOM(MarkupParser.java)과 SAX(MarkupSaxParser.java) 두 가지 방식이 존재
  • Configuration Builder : White List Configuration에 정의된 내용을 바탕으로 White List Object Model을 생성
  • White List Configuration : 정상적인 HTML 구조를 화이트리스트 방식으로 정의한 설정 파일로서, XML 형식으로 구성

 

XssPreventer

 문자열에서 HTML로 인식될만한 요소를 모두 제거한다. apache-common-lang의 StringEscapeUtils를 내부적으로 사용하고 있다.

< → &lt;
> → &gt;
" → &quot;
' → &#39;

아래와 같이 escape 메서드를 호출해서 HTML의 모든 태그를 무력화시킨 문자열로 변환한다.

String clean = XssPreventer.escape(dirty);

치환된 문자열에서 다시 원본 메시지를 복구하려면 아래와 같이 unescape 메서드를 호출한다.

String origin = XssPreventer.unescape(clean);

 

💥 XssFilter , XssPreventer

  • HTML 이외의 단순 텍스트 매개변수는 XssPreventer를 사용하여 필터링해야함
  • 입력을 위해 HTML 태그를 받아야 하는 경우 Xss 필터를 사용 (ex: 우편, 방명록, 게시판 서비스)

 

특징

1. 화이트 리스트  

  • 허용된 목록에 있는 항목들만 허용하여 등록되지 않는 요소들을 모두 거부하는 방식, 블랙 리스트보다 안전하다.
<config xmlns="http://www.nhncorp.com/lucy-xss" extends="...">
    <elementRule>
    </elementRule>
    <attributeRule>
    </attributeRule>
    <elementGroup name="...">
    </elementGroup>
    <attributeGroup name="...">
    </attributeGroup>
</config>

2. 규칙을 선언한 XML 파일 사이의 상속, 오버라이딩 가능

  • 주로 설정 파일의 구조를 단순화하고 재사용성을 높이기 위해 사용
  • 보안 정책을 정하는 부서에서 상위 설정 파일을 제공하고 서비스별로 필요한 정책을 하위 선언 파일에 기술하는 방식으로 사용이 가능함

 

ex. 보안 규칙을 정의한 두개의 XML 파일이 있다고 가정했을 때 ,
<security>
    <rule name="allowAdmin" type="user" action="allow" />
    <rule name="denyGuest" type="user" action="deny" />
</security>

 

다른 설정 파일에서 이 설정 파일을 상속하고 일부 규칙을 오버라이딩하여 새로운 설정을 정의할 수 있다.

<security>
    <include file="lucy-xss-superset-sax.xml" />
    <rule name="allowManager" type="user" action="allow" />
    <rule name="denyGuest" type="user" action="allow" />
</security>

위 예시 코드에서는 " lucy-xss-superset-sax.xml" 파일에서 정의된 규칙을 상속하고 있다. 그러나 "denyGuest" 규칙을 오버라이딩하여 이제 게스트 사용자에 대해 허용된 규칙으로 변경되었음을 알 수 있다.

 

3. 메모리를 효율적으로 쓰는 SAX 방식의 HTML 파싱 모듈 제공

  • HTML 파싱
    • HTML 문서를 읽고 해석하여 문서의 구조와 내용을 이해하는 과정
    • DOM 파싱, SAX 파싱으로 나뉨
  • SAX (Simple API for XML)
    • 이벤트 기반의 접근 방식, HTML 문서를 순차적으로 읽으면서 발생하는 이벤트 처리
    • XML 문서를 한 줄씩 읽으면서 문서 내의 요소, 속성, 텍스트 등을 발견할 때마다 이벤트를 발생시킴
    • 한번의 하나의 요소를 처리하므로 메모리 사용량이 적고 단순히 읽기만 할 때 속도가 빠름.

모듈 프로젝트 적용사항

 


https://naver.github.io/lucy-xss-filter/kr/

 

Lucy XSS Filter

XSS 공격이 가능한 HTML 요소를 신뢰할 수 있는 코드로 변환하거나 삭제하는 기능을 제공한다. 공격이 가능하지 않은 HTML 요소는 허용을 한다. 4.1. 설정 파일 Lucy-XSS Filter의 필터링 규칙은 화이트리

naver.github.io

https://hello-backend.tistory.com/168

 

lucy필터로 xss 방어하기(feat JSON, time, 이모지)

서비스를 실제로 운영할 때에 공격이 들어올 수 있고, 이를 막기 위해 노력해야 한다. 디프만에서 우리는 모든 DB통신을 JPA와 querydsl을 통해 진행했기 때문에 SQL injection은 막을 수 있었다. 그러나

hello-backend.tistory.com

https://github.com/naver/lucy-xss-filter?tab=readme-ov-file

 

GitHub - naver/lucy-xss-filter

Contribute to naver/lucy-xss-filter development by creating an account on GitHub.

github.com

 

'보안 > WEB' 카테고리의 다른 글

[Web] HTTP Method 정리  (0) 2024.05.08
[Web] HTTP 상태 코드 정리  (0) 2024.05.08
[Splunk] 수집 로그  (0) 2024.04.20
[DApp] 탈중앙화 애플리케이션  (0) 2024.04.14