CSRF 보안 결함에 대해 알려 드립니다. > 자유게시판

자유게시판

CSRF 보안 결함에 대해 알려 드립니다. 정보

CSRF 보안 결함에 대해 알려 드립니다.

본문

공지사항이 잘 보이지 않는곳에 있어 자유게시판에 링크를 거오니 그누보드 사용자님들께서는 반드시 읽고, 기억하고, 패치를 적용해 주시기 바랍니다.
추천
3
  • 복사

댓글 38개

(1) 이 보안 결함을 막으시려면 사이트내에 관리자 이외에 익명으로 작성되는 HTML 게시물이 있어서는 안됩니다 -> html 작성을 금지하라구요???
(2) 다운로드 정보를 보니까 CSRF 보안결함에 대한 패치는 없었던데요??? ㅠ..ㅠ..
 (1) 이 보안 결함을 막으시려면 사이트내에 관리자 이외에 익명으로 작성되는 HTML 게시물이 있어서는 안됩니다 -> html 작성을 금지하라구요???
(2) 다운로드 정보를 보니까 CSRF 보안결함에 대한 패치는 없었던데요??? ㅠ..ㅠ..
이건 보안패치가 힘들겠는데요.
HTML작성을 금지시켜야지만이 권한넘기기를 막을수있다라...골치아픈데요..

권한 넘기는데 쓰이는 몇몇 HTML TAG를 금지어로 설정해버리면 그 태그가 인식되지 못하게 만들어버려서 권한 넘기기를 막는 방법은 안되는건가요??
이거 꽤나 까다로운 문제네요 음..
특정 문제되는 태그가 있다면 그것만 막으면 될것도 같긴 하지만..
그런게 아니라면.. ;;
암튼 리자님 수고좀 부탁해요 ~ +_+
패치버전을 보고 에디터를 내릴 것인지 말 것인지 고민해야겠군요.
문제는 cheditor 나 지에디터를 못 쓸 경우 이용자들의 불편함이란 한도끝도 없을텐데 그 아우성을 어떻게 감당할 지가 고민입니다.
오늘은 보안공부중 입니다. ㅋㅋ

요즘 CSRF가 심각하다고 하시면서 sir 관리자님께서 올려주셔서 공부를 하다가 보니,

http://blog.naver.com/allmnet?Redirect=Log&logNo=150031286482

예제를 보면,

<img width=0 height=0 src=".../orderresult.php?...> 부분이 문제가 되네요.

글을 저장할 때/읽을 때 img의 src에 이미지 파일이 아닌게 들어오면 무조건 없애야 하네요.

쇼핑몰의 경우 이렇게 공격해 들어오면 참 많이 난감하겠어요. ㅠ..ㅠ...
http://sir.co.kr/bbs/board.php?bo_table=tip_php&wr_id=1038

제가 아무 이유없이 만든게 아닙니다... 혹 좋은 생각있는 분은 같이 만들어갔으면...
이문제가 수년전부터 이미 알려진 내용이고 개발자 커뮤니티나 공개보드 배포사이트 등에서도
이슈꺼리가 된적이 많은걸로 알고있습니다.

태그의 종류가 워낙많고 HTML사용시 허용 한계가 어느선까지 인지도 애매모호하고 좌우간
HTML태그를 허용할 경우 문제점이 되는 태그를 전부걸러 낸다는 것은 어려운 부분입니다.
원리는 자바스크립트등으로 관리자의 권한을 이용하여 관리자 페이지에 접속하는 것입니다.

동적으로 생성된 토큰도 구할 수 있고, 폼전송등도 가능합니다.
현재 배포중인 그누보드의 경우 글쓰기뿐만 아니고 회원정보 입력 부분도 점검을 하셔야 할것으로 사료 되옵니다. ㅠ
100% 방어는 사실 뭘 하든 불가능하죠. 그렇다면 뚫렸을 때 관리자에게
잽싸게 통보를 하는 시스템은 어떤가요??? 예를 들어서 관리자가 최종
접속한 것과 다른 ip에서 접속하면 문자를 띠리링~ 날려준다던지...
extend 폴더에 $is_admin 함수가 뜨면 지정된 핸드폰으로 문자 보내는 방법. +_+

또한 안내페이지를 만들어서 띄워주는 것입니다.



보안시스템 작동중

2008년 10월 23일 12시36분

접근 아이피 : 192.0.0.1

당신은 불법적으로 접근을 시도 하였습니다. 현재 자동으로 사이버경찰 어쩌고 저쩌고에 접수 되었다 !!

지금 그 자리에서 대기하고 있어라. 샤방샤방
싸이월드에서 이런 허점이 있더군요
관리자가 감시하여 그 소스에 부분을 차단하는 식으로하는것 같던데요.. ^^
과연 방어가 가능할지 궁금하네요.
좋은 방법이지요.

config.php 의

$g4['admin'] = "adm";

이 값을 수정하신 후 adm 폴더명을 수정하신 값으로 변경하시면 되겠네요.
단순히 관리자 권한만 넘어간다는것인가요???
권한 10만 넘어가는것인지.. 아니면 아이디도 넘어가는것인지....
아이디는 안넘어가고 권한 10만 넘어가는것이에요??
숙제가 상당히 어렵네요.
관리자가 접근하는 모든 페이지를 말씀 드렸습니다.

회원정보를 수정하거나 삭제하고 심하면 게시판을 모두 삭제해 버릴 수도 있습니다.
유아원님의 방식으로는 안됩니다. 원리는 html 태그의 속성 중 src를 이용하는 겁니다. csrf공격이 성공하려면 다음과 같은 조건이 있어야 가능합니다.

1. 관리자가 관리자의 계정으로 로그인해서 그 페이지를 읽어야 합니다. 이유는 세션을 가져갈 수 없다면 관리자 스스로 다른 사람에게 권한을 주게끔 소스를 넣는겁니다. 관리자가 스스로 관리자 계정으로 로그인되었기 때문에 아무리 관리자인지 아닌지 아이디나 혹은 세션을 체크해도 의미가 없습니다. 해커는 관리자가 자신의 계정으로 로그인해서 문제의 페이지를 읽기만 기다리는 겁니다.

2. 두번째로 태그의 src 속성이 허용되어야 가능합니다. 예를 든다면 <img src=.... 혹은 <object 태그에서도 그럴 수 있습니다. 그러므로 img의 src를 확인해서 직접 이미지를 거는 경우가 아니면 막아야 합니다. 예를 들어 소스의 경로를 다음과 같은 정규식 체크를 하면 되겠죠:
/^(?:(ht|f)tp(?:s)?:\/\/)?(?:[\.]{1,2})?[^ \?&=\"\n\r\t<]*\.(jpg|png|gif|tif)$/ig

중간에 ?와 &가 보이시죠? 만일 마지막만 jpg, png, gif만 확인한다면 큰 낭패를 겪을 겁니다. 해커는 다음과 같이 이용할 수 있습니다: < img width="0" height="0" src="http://sir.co.kr/adm/member_update.php?mb_id=회원아이디&mb_level=원하는레벨&dump=fake.jpg" />

3. 폼 체크시 꼭 post가 아니어도 되게 하면 됩니다. 되부분 src 속성을 이용하기 때문에 get 방식을 이용합니다. 전송받은 폼을 처리 페이지에서 if ($_POST['submit'] != '수정하기') exit; 와 같은 확인 체크 정도는 해야하지 않을까요?
kalga 라는 아이디로 로그인이 가능하다는 말씀인가요 ?

우엉 ㅠ_ㅠ

폼과 업데이트에선 디비를 이용한 사용자가 알 수 없도록 코드를 생성하고,

또한 게시물 등 페이지에서는 스크립트 및 이동할 수 없도록 막아두는...
관련부분을 검토해봤으나 당장 시급한 대책으로는,
전역처리부분에서 게시판 글쓰기처리시에 src에서(태그는 꼭 img가 아니라도 해당) 그누보드/영카트 등에서 사용되는 특정 변수(회원권한/상품관련등등..)를 잡아내서 치환하는 것으로 판단됩니다.

* 물론 전체적인 검토를 해서 최선의 패치가 되어야 하겠으나 일단 급한 곳은 이렇게라도 처리를 해서 자체적으로 사용해야 할 것 같습니다.
또한 영카트를 운영하는 경우, 특정 메모입력(주문자가작성하는)란을 임의수정하여 html 태그가 가능토록 출력하는 부분이 있다면 모두 텍스트형식으로 출력되도록 바꾸거나 입력처리시에 태그를 모두 제거/치환해야 합니다.

* 참고로 이 보안결함은 이미 작년부터 말이 나왔고, 예견된 것이었으나 외면 or 알면서 그냥넘어갔던 부분입니다.(저또한..)

원래사용하는 크랙킹방법은 관리자권한 획득이 아니었는데 좀 더 진화하다 보니 이런 폐해가 나왔군요..제가 테스트한 바로는 꼭 관리자 권한을 얻지 않더라도 임의 페이크를 통해 db 삭제가 바로 가능할수도 있는 것으로 판단되었습니다.(이것은 제 작업서버에서만 이루어진 테스트이므로 실제 호스팅이나 운영서버는 다를 수 있습니다. DB는 현재 회원/게시판만 테스트되었고, 사용된 솔루션은 G4/Y4 가 아닌 다른 독립프로그램 입니다.. - 허나 큰 차이가 없을수도 있으므로..)
CSRF 는 특정 프로그램에 국한된 문제가 아니라 오픈된 소스가 타겟이 됩니다. (꼭 오픈되지 않았어도 유추하여 가능하게 할 수 있습니다.)

이미 우리가 잘 알고 있는 여러 프로그램들을 테스트하여 모두 뚫리는 것을 확인하였습니다.

최선의 방법으로는 captcha 를 적용하는 것이지만 이 방법은 현실적으로 힘든 부분이므로 사용자가 HTML 작성을 아예 하지 못하도록 하거나, HTML 작성 태그에 제한을 거는것이 차선의 방법입니다.

접근하기가 쉬우면서도 상당히 위험한 보안 결함이므로 HTML 게시물이 필요하지 않은 사이트에서는 DHTML 에디터등의 사용을 금지해 놓으시기 바랍니다.
안녕하세요. 웹서핑 도중 잠시 들르게 되었습니다.

저도 도움이 되고자 한마디 적어보겠습니다.

많은 의견이 있지만, 저는 보안 마인드를 말씀드리고 싶습니다.

1. 웹브라우저를 사용하실 경우에는 하나의 웹브라우저로 하나의 웹사이트(세션,쿠키)를 사용합니다.

2. 링크, 혹은 다른 웹사이트로 이동하실경우에는 반드시 로그아웃을 하신 후에 이동합니다.

이런 경우는 드물지만, 간혹 악의적인 공격자들은 공격코드로 사용자를 유도 하기도 합니다.

- 그누보드 화이팅 -
html 을 허용한 상태에서 테스트 해보니 아주 심각한 결과가 나오고 있습니다.
관리자 권한으로 할수있는 대부분의 조작은 실행이 가능하군요.

임시 방편으로 관리자 모드의 폴더명을 외부에서 유추가 불가능하도록 폴더명을 꼬아두거나
사이트내에서 글쓰기, 회원정보,쪽지 등등 html 의 사용은 관리자 외에는 전부 차단하여
무력화해야 합니다.
admin 들어가는 페이지 소스에 특정 회원아이디<관리자 아이디 지정> 이외엔 차단하게 적용 하면 임시방편으로 되지 않을까요?

adm 인덱스 페이지에

<?
if(!$member[mb_id]==cycity){

echo "관리자가 아닙니다.";

}
?>

요런식의 소스 삽입으로 도 뚫리나요?
타사이트에 도움받으러 질문올렸더니 댓글이 달렸습니다.




POST 요청만 받게 해놓고 POST 요청을 못 쏘게 하면 됨..
POST 요청을 하려면 form을 안 나오게 하면 되는데 입력 시 걸러버리고 form을 생성할 수 있는 스크립트 실행을 막으면 되요. <script 나 onload, onmouseover 등의 이벤트 프로퍼티를 필터링 하면 풀 수 있음.. 이미지나 embed의 src에 vbscript 같은 것도 쓰는데 이런것도 막으면 됩니다. 그리고 embed 태그에서는 AllowScriptAccess에 제한을 걸어두면 플래시가 문서를 변조하는 것을 막을 수 있음.

이정도 보안은 사용자에게 리치한 컨텐츠를 입력받는 서비스는 다 하고 있는 방법이고요. 어디 찾아보면 XSS나 이런 계열의 공격을 막는 방법이 많이 있어요.
CSRF가 문제가 크긴 하지만 이걸 막기 위해 사용자 경험을 제한할 필요는 없을 듯 ㅎ

덤으로 iframe 같은 경우도 막곤 하는데 iframe은 브라우저에서 정보가 새어나가지 않도록 이미 잘 해놓았으니 문서 변조의 위험은 없는데 문서의 링크를 이동시켜 버릴 수 있으니 막는것이 좋음.


http://cafe.naver.com/weblife07.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2178
© SIRSOFT
현재 페이지 제일 처음으로