Back to Posts

spg 회고록 008회차

Posted in SPG-hompage

XSS 공격

XSS 공격 종류

  • 정의 : 특정 한 Script를 삽입하여 사용자 쿠키 및 Session과 같은 정보를 탈취 하여 이득을 취하려고 하는 행위
  • Reflected XSS
    • 정의 : 공격자가 미리 취약한 web page를 탐색 후 해당 web page에 대한 스크립트가 포함된 url을 사용자에 메일/메신저 등으로 보내어 사용자가 그 url을 실행 시키게 된다면 (Script 코드가) 삽입된 요청을 취약 서버에 전송 -> 이 때 스크립트코드가 삽입된 web page가 받아지기 때문에 cookie 및 session등을 틸취 할 수 있음
    • 순서 : script 코드 삽입한 url 을 사용자에게 보냄 -> 사용자 url 실행 -> script 가 포함된 web page 받아옴 -> web page에서 script 문장 실행
  • Stored XSS
    • 정의 : 웹 게시판에 스크립트를 미리 삽입해 두고, 사용자가 해당 web page를 다운 받음 그 해당 script가 실행 되는 방식을 취하는 공격 기법

Spring XSS 공격 방어 naver lucy xss filter 사용

  • Java servlet 기반 라이브러리
  • 웹 애플리케이션으로 들어오는 모든 요청 파라미터에 대해 기본적으로 XSS 방어 필터링을 수행한다.
  • 장점
    • 설정한 url 필터링 제외 가능
    • 설정한 prefix로 시작하는 파라미터 필터링 제외 : ex) localhost/hello/** -> 제외
    • 설정한 파라미터 필터링 제외 -> paramter에 Abc 타입은 제외 가능
    • 비즈니스 레이어에 코드 수정할 필요없음 -> 해당 오픈소스와, xml 파일에 다 구현 하면됨
    • 설정 파일 하나로 XSS 방어 절차가 파악됨
  • 단점
    • 일괄 적용이 되어 영향 받기 때문에 정확한 필터링 룰 정의가 중요함
    • xml 을 해석 하지 못하면 코드 작성에 어려움이 있음 -> 내이야기 -> 처음에 힘들었음
  • xml 해설
    • Config : 코드 여역에서 작성하는 부분 -> Root element로 설정(@Configuration이 있음)
    • defenders : parameter 값을 변경할 때 사용할 defender 인스턴스 집합
    • defender : 파라 미터 값을 변경할 때 사용하는 인스턴스 ex) > 을 &gt 으로 변경 시켜주는 것들
    • defender 종류
      • XssPreventer : HTML로 인식될만한 요소를 완전 제거 >을 &gt 로 변경
      • request
      • XssSaxFilter(XssFilter의 개성된 형태) : XSS 공격이 가능한 HTML 요소를 신뢰할 수 있는 코드로 변환, 삭제하는 기능을 제공, 공격이 가능하지 않은 HTML 요소는 허용
        • 닫는 태그만 있음 검사하지 않는다.
        • 태그의 자식 부모 여부를 따지지 않고 그냥 존재 여부만 판단
        • 포함 관계 여부를 판단하지 않기 때문에 성능상으로 더 좋음
        • ex 코드 :
      • request
      • mail 서비스, 메세지 보드 서비스는 tag 정보를 그대로 사용해도됨 -> 실제 메시지 보드 내부에서 script문장이 실행 되지 않는 다면 굳이 바꾸지 않아도 됨
    • 결론 둘다 전부 lucy-xss-default-sax.xml을 상속받은 xml 파일 읽어와 그에 맞는 패턴을 가진 입력이 들어오면 xssPreventer가 처리 해주는 과정을 가진다.
  • Filtering 시점 : url 호출 시점이 아닌 서버 코드에서 parameter 값을 획득하는 ServletRequest의 getParamter(), getParamterValues(), getParameterMap() 함수가 호출 시 필터링을 해준다.
  • XssPreventDefeneder, XssSaxFilterDefender, XssFilterDefender 3개의 클래스는 lucy-xss-filter의 api를 호출하며 XssPreventerDefender는 XssPreventer를, XssSaxFilterDefender는 XssSaxFilter를, XssFilterDefender는 XssFilter를 사용한다. 여기서 내가 사용한 것은 XssPreventDefender 이다 모든 것에 내부 태그가 없기 때문에 사용함(mail 서비스)

Read Next

spg 회고록 007회차