WebGoat에서 사용 중인 UserDetailsService에서 User 정보를 조회가 가능할 때 리턴되는 엔티티 클래스 정보를 보면, ROLE은 2개로 구분되어 있는 것을 알 수 있다. 그렇지만 Spring Security의 보안필터 구성을 보면 요청에 따른 권한적용 여부가 포함되어 있지 않았으므로, 권한에 따른 기능을 분리하지 않은 것으로 보인다. Controller나 Service에서 유저의 권한을 확인할 수도 있기 때문에 ADMIN 권한으로 검색해보았지만 특별히 권한에 따라 기능 및 데이터를 제한하지 않는 것을 알 수 있다. 이후 기능 확인과정에서 Admin 서비스가 있거나, Admin 서비스로 분류가 필요한 기능이 확인된다면, 해당 서비스가 권한검증없이 기능 및 데이터가 제공될 수 있다는 것을..
서비스를 분석할 때 가장먼저 하는 것이 어떻게 인증이 처리되고 있는지를 보고 있다. 개발 프레임워크나 아키텍쳐에 대한 정보없이 코드리뷰를 하는 경우에는 Login이나 Auth 등의 키워드를 이용하여 정보를 수집하지만, 현재 WebGoat는 SpringSecurity를 사용하고 있기 때문에, @EnableWebSecurity 어노테이션을 검색하여 보안설정 정보부터 확인한다. 보안설정 파일에서 (1) Filter 적용, 보안구성의 보안필터 내용, (2) 사용자명을 검색하기 위한 UserDetailsService, (3) 패스워드 검증을 위한 PasswordEncoder 정보를 확인한다. 보안필터 내용을 확인해 보면, 어떤 요청에 대해서 인증이 필요한지 확인할 수 있다. 현재 WebGoat는 메인페이지, 리소..
서비스 패스워드 재인증 개인정보 노출 현재 패스워드 요구 패스워드 정책 패스워드 정책 특이사항 패스워드 변경 안내 다른 디바이스 로그인 유지 기능 제공 추가 인증 강제 로그아웃 특이사항 네이버 X X O 영문 대소문자, 숫자, 특수기호 포함 8~16자리 네이버 알림 X 자동입력 방지문자 X 카카오 O Login ID (Email) X 영문 대소문자, 숫자, 특수기호 조합하여 8~32자리 카카오톡 메시지 이메일 O X X 쿠팡 O Login ID (Email) O 영문, 숫자, 특수기호 2가지 이상 조합하여 8~20자리 X X X O 11번가 O Login ID O 영문, 숫자, 특수기호 모두 포함하여 8~20자리 X O X X YES24 O Login ID X 영문 대/소문자, 숫자, 특수기호 조합하여 ..
Netflix 비밀번호 변경 현재 비밀번호 및 변경 비밀번호 입력 패스워드 정책 6~60자리 숫자 10+ 부터 허용 모든 기기에 로그아웃 옵션 제공 이메일로 패스워드 변경 안내 Disney+ 멤버십을 유지하지 않으면 패스워드 변경이 불가한 것으로 보임 패스워드 변경과 찾기를 같은 기능으로 사용하는 것으로 보임 등록된 이메일로 패스코드(6자리 숫자)를 전달하여 이메일에 대한 점유인증 진행 패스워드 변경 패스워드 정책 알파벳, 숫자, 특수기호 모두 포함하여 최소 8자리 모든 기기 로그아웃 옵션 제공 Twitch 로그인 시 EMail 점유인증이 진행됨 패스워드 변경 현재 패스워드와 신규 패스워드를 입력 패스워드 정책 8자리 숫자 15+자리 : 허용 https://help.twitch.tv/s/article/c..
YES24 현재 패스워드 확인 (유저 패스워드 재확인) 현재 로그인한 사용자의 로그인 계정명 노출 패스워드 변경버튼 클릭 시 숨은정보 해제를 요청하는 다이얼로그 출력 생년월일/이메일로 2차인증 생년월일 선택 시 입력정보 검증 이메일 선택 시 이메일 점유인증 진행 패스워드 변경 패스워드 변경 시 모든 기기에서 로그아웃 처리라고 안내됨 패스워드 정책 영문 대/소문자, 숫자, 특수기호 조합하여 8~20자리 패스워드 변경완료 후 로그아웃 및 로그인 페이지로 이동 Facebook 패스워드 변경 현재 패스워드와 신규 패스워드를 입력 패스워드 정책 영문, 숫자, 특수기호 포함 최소 6자리 숫자 6자리 : 허용 로그인된 다른기기에 로그아웃 또는 로그인 유지 확인 이메일로 패스워드 변경 안내 TWorld 패스워드 변경 ..
네이버 현재 로그인한 사용자의 정보를 보여주지 않음 현재 비밀번호 입력 자동입력 방지문자 입력 패스워드 정책 8~16자의 영문 대소문자, 숫자, 특수문자만 가능 사용 가능한 특수문자 32자 : ! " # $ % & ' ( ) * + , - . / : ; ? @ [ ₩ ] ^ _ ` { | } ~) https://help.naver.com/service/5640/contents/1036?lang=ko 안전한 비밀번호 만드는 방법 : 회원정보 고객센터 비밀번호 안전 진단기네이버는 회원님의 안전한 비밀번호 관리를 위해 비밀번호 안전 진단기를 제공합니다.비밀번호 안전진단기는 새로 바꾸고자 하는 비밀번호의 보안 정도를 측정해 주 help.naver.com 네이버 알림으로 패스워드 변경을 안내 카카오..
WebGoat를 이용하기 위해서 회원가입 후 로그인 한 사용자에게 서비스를 제공하고 있다. 실제 회원가입은 상당히 다양한 보안 아키텍쳐가 고려되어야 한다. 구현방식에 따라 회원가입 기능을 통해 계정정보를 탈취하거나, 타인의 계정정보를 더 이상 사용할 수 없도록 할 수도 있다. 우선 WebGoat의 회원가입을 처리하는 서비스로직을 찾아보자. 현재 WebGoat에서 사용하는 회원가입 View URL은 "/registration" 이다. 코드를 확인해보면 실제 가입 프로세스 로직은 "/register.mvc"를 확인할 수 있다. 해당 로직을 보면, 전달받은 계정정보를 Validate 확인 후 특별한 에러가 발생하지 않는다면, 회원가입 처리를 완료 후 로그인하는 것으로 보인다. 그럼 validate 처리는 어떻..
인증받은 유저에게 서비스를 제공할 경우, 해당 세션은 탈취나 재사용 등을 통해 인증도용으로 사용되지 않도록 보안로직을 적용해야 합니다. 여기서 로그아웃 기능은 명시적으로 기능을 제공하여 유저가 더 이상 서비스를 이용하지 않았을 때, 세션이 바로 만료될 수 있도록 해야 합니다. WebGoat는 SpringSecurity를 사용하고 있고, 현재 로그아웃을 별도 로직을 구현하지 않고 로그인과 같이 또한 Spring Security에서 제공하는 기능을 사용하고 있습니다. 로그아웃 처리 과정에서 중요하게 보아야 하는 부분은 세션을 바로 만료처리하는지 여부입니다. 로그아웃 시 세션을 만료처리 하지 않는다면, 이미 세션ID가 탈취되어 재사용될 경우, 해당 세션은 아직 살아있기 때문에 기존 유저의 세션 인증 도용이 가..
WebGoat docker image를 실행하고 서비스에 접속하면 가장 먼저 로그인 기능을 확인할 수 있습니다. 애플리케이션 보안에서 가장 중요한 것은 역시 인증 및 인가이기 때문에, WebGoat에서 제공하는 취약한 코드외에 실제 로그인 과정에서는 어떠한 방식으로 구현되어 있고, 그 과정에서 인증을 우회할 수 있는 부분은 없을지 확인하였습니다.. Login 페이지에 대한 URL을 확인해보니, "/WebGoat/login" 이였습니다. 소스코드에 가서 /WebGoat/login 을 검색해보니 특별히 검색되는 코드가 존재하지 않습니다. "/WebGoat"는 Controller에서 공통으로 지정해 두었을 수도 있기 때문에 이번에는 "/login"으로 검색해 보았습니다, 검색되는 파일이 꽤 존재하는데 이 중에..
Fortify를 통한 SAST 스캐닝 및 결과 Triaging/Auditing 업무를 시작으로, 스캔닝 툴 없이 매뉴얼 코드리뷰 및 모의해킹 업무로 애플리케이션 보안업무 역량을 확장하고 현재는 애플리케이션 보안 아키텍쳐 업무까지 10년이상 애플리케이션 보안 업무를 진행 중입니다. 애플리케이션 보안의 중요성은 나날이 커지고 있지만, 여전히 애플리케이션 보안은 전체 보안 영역 중 작은 일부에 지나지 않는다는 것을 자주 체감하고 있습니다. 앞으로 현업에서 보안리뷰를 진행하기 위해서 다양한 부분을 고려하고 있는데, 그 중 첫 번째로 제가 가지고 있는 지식을 다시한번 정리하는 시간을 가지는 것이 좋을 것 같다는 생각을 하였습니다. 제 역량의 근간은 역시 애플리케이션 시큐어코딩에 있기 때문에, 이쪽에서 유명한 We..
- Total
- Today
- Yesterday