[펌] 보안 XSS 취약점 원천봉쇄

------------------------------------- 발췌 시작 ------------------------------------- 

 

"그누보드의 XSS 취약점 패치가 너무 잦다고 생각하신다면" 

 

폼으로 전송되어 내용에 HTML 이 적용되는 필드는 XSS  취약점에서 자유로울수 없습니다. 

그것이 그누보드 이거나 또는 타 BBS, CMS 프로그램 이거나를 가리지 않습니다. 

다만, 이런 취약점이 알려졌지만 빨리 패치가 되느냐? 되지 않는냐? 의 차이점만 있을수 있습니다. 

 

(중략) 

 

위 조건들을 모두 막았다고 하더라도 아직 공개되지 않은 취약점이 있을수 있으므로 

HTML 사용시의 XSS 취약점을 완벽하게 해결하는 방안은 없다고 봐야 합니다. 

 

(중략) 

 

아직 그누보드는 <> 를 감싼 태그를 사용하여 글 작성을 하므로 XSS 취약점에서 자유로울수 없으며 

<> 태그를 사용하는한 앞으로도 자유로울수 없을것 입니다. 

 

그누보드의 보안패치가 자주 올라오는 이유를 이제 어느 정도는 공감하시겠죠? 

 

------------------------------------- 발췌 끝 ------------------------------------- 

 

 

 

아놔 이런 한심한....!! 이라고 하려다가 그냥 한숨만 쉬고 말았네요. 

 

XSS 필터링은 그렇게 어려운게 아닙니다. 발상이 잘못되었기 때문에 어렵게 보이는 것 뿐입니다. 

지금이 1999년도 아니고, 수많은 사람들이 사용하는 프로그램이XSS 취약점 때문에 

일주일이 멀다하고 업데이트가 필요하다면 개발자의 실력을 의심하지 않을 수 없습니다. 

 

 

 

이 게시판에도 종종 올라오는 XSS 필터링 라이브러리들, 

그리고 제로보드와 그누보드 등 대부분의 게시판 프로그램들이 사용하는 필터링 알고리즘들에는 

두 가지 치명적인 허점이 있습니다. 이것 때문에 계속 뚫리는 것입니다. 

 

1. 위험한 태그, 속성, 이벤트만 콕콕 찍어 막으려고 하는 blacklisting 기법을 사용한다. 

2. HTML에 오류가 있거나 웹표준에 어긋나는 태그를 사용한 경우를 감안하지 않는다. 

 

 

 

blacklisting은 수많은 태그, 속성, 이벤트들 중 "위험하다고 알려진" 것들만 블랙리스트에 등록해서 

블랙리스트에 등록된 태그, 속성, 이벤트만 지우고, 나머지는 모두 허용해주는 방법입니다. 

만약 HTML5처럼 새로운 태그나 속성이 생기면 블랙리스트에 아직 없으니 모두 허용해 버리게 됩니다. 

만약 사용하기에 따라 위험할 수도 있는 속성이 블랙리스트에서 빠졌다면 그것도 허용해 버리게 됩니다. 

무엇이 허용되는지조차 분명하지 않으니 자나깨나 땜빵하느라 고생이 많습니다. 

 

반면, "안전하다고 증명된" 태그, 속성, 이벤트만 화이트리스트(블랙리스트의 반댓말)에 등록해서 

리스트에 등록된 것들만 허용하고 나머지는 죄다 없애버리는 whitelisting 기법을 사용한다면 

새로운 태그나 속성이 추가되더라도 걱정이 없습니다. 

 

 

 

HTML 오류에 신경쓰지 않는 필터링 라이브러리도 문제입니다. 

대부분의 필터링 라이브러리들은 정규식을 사용해서 태그를 걸러내는데, 

중간에 널바이트 또는 공백이 끼어 정규식에 잡히지 않는 엉터리 HTML도 

대부분의 브라우저들은 아무 일 없다는 듯 실행해 주고 있는 것이 현실입니다. 

onmouseover 이벤트는 걸렀지만 on\0mouseover 이벤트는 거르지 못하고, 

javascript: 링크는 잡았지만 java  script: 링크는 잡지 못하는 거죠. 

심지어는 이런 것도 있습니다: <img """><script>alert("XSS")</script>"> 

 

위와 같은 문제를 해결하려면 태그가 잘못된 것도 걸러내줘야 합니다. 

예를 들어 <img> 태그에 src 속성 대신 스크립트가 들어가 있으면 막아야 하는 거죠. 

잘못된 태그를 다 걸러내주면 짝 없는 <div> 태그 때문에 홈페이지 레이아웃이 깨지는 것도 막을 수 있습니다. 

 

 

 

HTML Purifier는 해외의 보안 전문가들로부터 철저하게 검증받은 필터링 라이브러리입니다. 

whitelisting 기법을 사용하고, 잘못된 태그도 확실하게 걸러내줍니다. 

이걸 사용하면 앞으로 아주 오랫동안 XSS 취약점 걱정은 하지 않아도 됩니다. 

http://htmlpurifier.org/ 

 

아래의 참고소스 란에 사용방법 예제를 넣었더니 내용이 많아서 그런지, 잘려서 나오네요. 

다른 곳에 올려놓았으니 참고하세요. https://gist.github.com/kijin/5829736 

 

주의사항: 

 

1. HTML 소스를 완전히 분해한 후, 안전하다고 검증된 태그, 속성, 이벤트만 다시 조합하여 

안전하고 오류 없는 소스를 생성해 주는 라이브러리입니다. 그만큼 처리속도가 느리다는 점 기억하시고, 

게시물 컨텐츠처럼 반드시 HTML이 필요한 경우에만 사용하세요. 

게시물 제목이나 댓글처럼 HTML이 필요없는 경우 그냥 htmlspecialchars 또는 strip_tags 사용. 

또한 페이지 표시할 때마다 매번 필터링하지 말고, DB에 저장하기 전에 한 번만 필터링하세요. 

 

2. 문법에 어긋나는 태그는 가차없이 제거하므로, HTML 소스가 아주 심하게 망가져있는 경우 주의하세요. 

 

3. 첨부파일 업로드를 사용한 XSS 공격은 게시물 내용과 별도로 막아주셔야 합니다. 

    http://www.phpschool.com/link/tipntech/78863 

 

iframe 동영상 허용 리스트는 이 게시판에 얼마전 레어닉님이 올려주신 라이브러리를 참고했습니다. 

http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=76911 

 

 

 

----------------------------------------------------------------------------------- 

 

어떤 분이 이 글을 SIR의 XSS 관련 공지사항에 댓글로 붙이셨네요. (맨 위에 링크된 게시물) 

개발팀에 계신 듯한 어떤 분이 아래와 같은 답변을 하셨습니다. 

 

"스쿨에 글 작성자님은 그누보드 사용자들이 전부다 프로그래머인줄 착각하는거 같습니다. 

어설픈 프로그래머도 있고, 웹디자이너들도 많이 있고.... 

말씀대로 공개보드가 기술적인 부분에서 최첨단을 달릴수는 없겠지만, 스쿨에다 그런 글을 적기 보다는.. 

그누가 패치될때마다.."'xxx'님께서 알려주셨습니다."처럼.. 

기술적인 해결방안을 조언해주시면 많은 그누 사용자들의 존경을 받을 수 있을 것 같네요.." 

 

아마 약간의 오해가 있었던 것 같습니다. 그래서 아래와 같이 바로잡습니다. 

 

1. 그누보드 사용자들이 모두 프로그래머라고 착각하지는 않습니다. 

그러나 그누보드를 개발하고 보안패치를 작성하시는 분들은 당연히 프로그래머이겠지요? 

일반 사용자들 말고, 개발자 분들 읽으시라고 쓴 글입니다. 

SIR 홈페이지는 개발자와 일반 사용자들이 모두 이용하지만, 스쿨은 대부분 개발자들이니까요. 

 

2. 제가 제안하는 기술적인 해결방안은 위에 언급한 HTML Purifier와 같이 

XSS 방지 전문 오픈소스 라이브러리를 사용하시라는 것입니다. 

지금과 같이 strip_tags + htmlspecialchars + 정규식을 이용해서 그때그때 땜빵하는 방식으로는 한계가 있으니까요. 

물론 그누4에 적용하기는 어렵겠지만, 다음 버전에는 꼭 HTML Purifier가 아니더라도 

반드시 whitelist 및 엉터리 HTML 제거 기능이 있는 라이브러리가 적용되었으면 좋겠습니다.  

|

댓글 2개

원글 글쓴이입니다. 퍼오시는 것은 좋지만, 출처를 꼭 밝혀주시면 감사하겠습니다.
저 글을 쓴 당시에 표현이 좀 거칠었던 것 같아서 그누보드 개발자님들께 죄송한 마음이 있지만
이미 여기저기 퍼져버린 글을 주워담을 수는 없고... ㅠㅠ

원글 출처는 http://www.phpschool.com/link/tipntech/77221 입니다.
본문 중 발췌된 글의 주소는: http://sir.co.kr/bbs/board.php?bo_table=g4_pds&wr_id=8365 입니다.
넵넵 그러도록 하겠습니다.^^
댓글을 작성하시려면 로그인이 필요합니다. 로그인

프로그램

+
제목 글쓴이 날짜 조회
11년 전 조회 989
11년 전 조회 987
11년 전 조회 990
11년 전 조회 1,005
11년 전 조회 1,662
11년 전 조회 1,044
11년 전 조회 1,183
11년 전 조회 974
11년 전 조회 4,644
11년 전 조회 697
11년 전 조회 1,084
11년 전 조회 1,480
11년 전 조회 1,010
11년 전 조회 5,293
11년 전 조회 3,414
11년 전 조회 4,957
11년 전 조회 831
11년 전 조회 1,181
11년 전 조회 1,378
11년 전 조회 1,260
11년 전 조회 1,192
11년 전 조회 687
11년 전 조회 3,346
11년 전 조회 2,888
11년 전 조회 2,233
11년 전 조회 1,454
11년 전 조회 1,462
11년 전 조회 2,880
11년 전 조회 835
11년 전 조회 1,060
11년 전 조회 2,387
11년 전 조회 3,299
11년 전 조회 1,193
11년 전 조회 759
11년 전 조회 1,394
11년 전 조회 698
11년 전 조회 1,275
11년 전 조회 747
11년 전 조회 1,451
11년 전 조회 1,206
11년 전 조회 2,003
11년 전 조회 3,666
11년 전 조회 3,168
11년 전 조회 3,630
11년 전 조회 1,394
11년 전 조회 1,607
11년 전 조회 2,330
11년 전 조회 1,029
11년 전 조회 1,438
11년 전 조회 3,578
11년 전 조회 2,303
11년 전 조회 709
11년 전 조회 1,266
11년 전 조회 1,166
11년 전 조회 814
11년 전 조회 2,944
11년 전 조회 1,427
11년 전 조회 1,287
11년 전 조회 667
11년 전 조회 2,990
11년 전 조회 2,896
11년 전 조회 721
11년 전 조회 3,423
11년 전 조회 835
11년 전 조회 738
11년 전 조회 1,030
11년 전 조회 836
11년 전 조회 644
11년 전 조회 1,072
11년 전 조회 1,781
11년 전 조회 1,027
11년 전 조회 795
11년 전 조회 636
11년 전 조회 2,399
11년 전 조회 1,948
11년 전 조회 2,479
11년 전 조회 1,412
11년 전 조회 2,690
11년 전 조회 3,103
11년 전 조회 4,443
11년 전 조회 5,796
11년 전 조회 2,134
11년 전 조회 1,704
11년 전 조회 1,446
11년 전 조회 1,111
11년 전 조회 853
11년 전 조회 1,029
11년 전 조회 924
11년 전 조회 1,405
11년 전 조회 2,205
11년 전 조회 883
11년 전 조회 1,065
11년 전 조회 1,722
11년 전 조회 1,403
11년 전 조회 1,298
11년 전 조회 1,220
11년 전 조회 1,140
11년 전 조회 3,490
11년 전 조회 1,128
11년 전 조회 1,741
🐛 버그신고