이클립스에서 CSRF가 발생하는 원인 찾기

이전 포스트에 이어서 작성하였습니다.

[보안 취약점 진단 및 대응/openeg] - openeg CSRF

 

openeg CSRF

openeg CSRF CSRF 취약점을 가지고 있는 게시판에 자동 글쓰기 코드 추가 (1) eclipse에서 Ctrl + Shift + R을 눌러 BoardController.Java를 검색합니다. (2) 이전에 수정했던 코드를 주석처리합니다. (3) http://victim:8

psjin230.tistory.com


이전 실습에서 게시판에 존재하는 취약점 종류

=> 실행 가능한 스크립트 코드를 게시판에 등록하면 게시판 상세페이지에서 스크립트 코드가 실행되므로 Stored XSS 취약점이 존재

=> 게시판 등록에 필요한 값을 자동으로 전송하는 코드를 게시판에 등록했을 때 해당 게시판을 열람하면 공격자가 작성한 코드가 실행(공격자가 설정한 값으로 게시물 등록)되므로 CSRF 취약점이 존재

 

Stored XSS 보안대책

=> 실행 가능한 스크립트 코드를 제거하거나 안전한 형태로 변경해서 출력하는 방법이 있음

=> 해당 기능을 구현할 때 검증된 라이브러리, 프레임워크 등을 사용하는 것을 권장

 

CSRF 보안대책

=> 게시물 작성을 요청하는 주체와 로그인한 사용자가 동일한지 인증하는 재인증,재인가 절차를 거쳐야합니다.

=> 권한이 있는 사용자만 게시글을 작성할 수 있도록 form 요청시 CSRF Token을 사용(정상적인 절차에 따른 요청인지 확인 후 요청 처리)

=> CAPCHA / reCAPCHA를 통한 검증

 

이클립스에서 CSRF가 발생하는 원인 찾기

 

(1) eclipse에서 Ctrl + Shift + R을 눌러 BoardController.Java를 검색합니다.

 

(2) 문제가 되는 부분을 확인합니다.

 

(3) 문제가 있는 코드를 수정합니다.

=>  글쓰기 페이지 요청이 들어오면 임의의 난수를 생성해서 세션에 저장합니다.

=> 세션에 저장하는 이유는 화면에서 전달이 오면 값을 비교해서 이 요청은 글쓰기 화면에서 온것이구나를 확인하기 위해서 입니다.

=> UUID(Universally Unique Identifier; 범용 고유 식별자)는 36자리 문자열로, 리소스를 식별하기 위해 생성하는 값입니다.

 

(4) eclipse에서 Ctrl + Shift + R을 눌러 write.jsp를 검색합니다.

 

(5) 문제가 있는 코드를 수정합니다.

=> 세션에 있는 token 값을 사용자 화면에는 보이지 않게 숨겨놓습니다.

=> 글쓰기 화면이 write.do로 넘어갈 때, hidden 값이 함께 넘어갑니다.

 

(6) 다시 BoardController.Java로 가서 코드를 추가합니다.

코드수정 전
코드수정 후

 

(7) eclipse에서 Ctrl + Shift + R을 눌러 list.jsp를 검색합니다.

 

(8) 코드를 추가합니다.

=> 세션에 error_message가 있다면 alert 경고창을 띄웁니다.


(9) 게시판으로 이동하여 이전 포스트에서 등록한 게시물을 클릭합니다.

=> 접근할 수 없다는 경고창이 출력됩니다.

=> token을 이용하여 비정상적인 절차, 공격자가 작성한 자동화된 코드의 요청을 처리 되지 않도록 막아 놓았습니다.

=> 이전과 다르게 자동으로 게시글이 작성되지 않음