약한 문자열 강도란?
약한 문자열 강도 취약점: 웹 사이트에서 취약한 패스워드로 회원가입이 가능할 경우 공격자는 추측 및 주변 정보를 수집하여 작성한 사전 파일로 대입을 시도하여 사용자 계정을 탈취할 수 있는 취약점
해당 취약점 존재 시 유추가 용이한 계정 및 패스워드의 사용으로 인한 사용자 권한 탈취 위험이 존재하며, 해당 위험을 방지하기 위해 값의 적절성 및 복잡성을 검증하는 로직을 구현하여야 한다.
약한 문자열 강도 점검
점검 내용 | 웹페이지 내 로그인 폼 등에 약한 강도의 문자열 사용 여부 점검 |
점검 목적 | 유추 가능한 취약한 문자열 사용을 제한하여 계정 및 패스워드 추측 공격을 방지하기 위함 |
점검 대상 | 웹 애플리케이션 소스코드 |
1. 웹 사이트 로그인 페이지의 로그인 창에 추측 가능한 계정이나 패스워드를 입력하여 정상적으로 로그인되는지 확인
- 취약한 계정: admin, administrator, manager, guest, test, scott, tomcat, root, user, operator, anonymous 등
- 취약한 패스워드: Abcd, aaaa, 1234, 1111, test, password, public, blank 패스워드, ID와 동일한 패스워드 등
로그인 아이디가 admin - adminadmin@ / abcd - abcdabcd이기 때문에 어느 정도는 추측 가능하나 매우 취약하지는 않은 것으로 판단된다.
이는 mysql 비밀번호 정책에 따라 8글자 이상으로 비밀번호를 지정했기 때문인 것 같다.
또한 개인이 추측 가능한 계정을 사용하지 않도록 주의를 기울여야 한다.
2. 일정 횟수(3~5회) 이상 인증 실패 시 로그인을 제한하는지 확인
로그인을 5회 실패해보았다.
여전히 똑같은 경고창만 나오고 제한은 없는 것을 확인할 수 있었다.
보안 설정 방법
취약한 계정 및 패스워드를 삭제하고, 사용자가 취약한 계정이나 패스워드를 등록하지 못하도록 패스워드 규정이 반영된 체크 로직을 회원가입, 정보변경, 패스워드 변경 등 적용 필요한 페이지에 모두 구현하여야 한다.
로그인 시 패스워드 입력 실패가 일정 횟수(3~5회) 이상 초과할 경우 관리자에게 통보 및 계정 잠금 로직을 추가한다.
규정 예시
- 다음 각 목의 문자 종류 중 2종류 이상을 조합하여 최소 10자리 이상 또는 3종류 이상을 조합하여 최소 8자리 이상의 길이로 구성
- 영문 대문자(26개)
- 영문 소문자(26개)
- 숫자(10개)
- 특수문자(32개)
- 연속적인 숫자나 생일, 전화번호 등 추측하기 쉬운 개인정보 및 아이디와 비슷한 비밀번호는 사용하지 않는 것을 권고
- 비밀번호에 유효기간을 설정하여 반기별 1회 이상 변경
- 최근 사용되었던 패스워드 재사용 금지