[게시판 실습] - 약한 문자열 강도 (2) 로그인 실패 시 로그인 제한 결여
[설 명]
약한 문자열 강도 취약점은 웹 사이트에서 취약한 패스워드로 회원가입이 가능할 경우 공격자는 추측 및 주변 정보를 수집하여 작성한 사전 파일로 대입을 시도하여 사용자 계정을 탈취할 수 있는 취약점으로 해당 취약점 존재 시 유추가 용이한 계정 및 패스워드의 사용으로 인한 사용자 권한 탈취 위험이 존재하며, 위험을 방지하기 위해 값의 적절성 및 복잡성을 검증하는 로직을 구현하여야 한다.
[점검 내용]
웹 페이지 내 로그인 폼 등에 약한 강도의 문자열 사용 여부
[점검 기준]
관리자 계정 및 패스워드가 유추하기 쉬운 값으로 설정되어 있으며, 일정 횟수 이상 인증 실패 시 로그인을 제한하고 있지 않은 경우 취약
[대응 방법]
* 취약한 계정 및 패스워드를 삭제하고, 사용자가 취약한 계정이나 패스워드를 등록하지 못하도록 패스워드 규정이 반영된 체크 로직을 회원가입, 정보변경, 패스워드 변경 등 적용 필요한 페이지에 모두 구현
* 로그인 시 패스워드 입력 실패가 일정 횟수(3~5회) 이상 초과 시 관리자에게 통보 및 계정 잠금
[진단 과정]
1) 'hacker'계정으로 로그인 시 임의의 패스워드로(1) 로그인을 시도합니다. 다수의 로그인 실패에도 불구하고 계속해서 로그인 시도가 가능합니다.
2) 이를 통해 해당 사이트는 일정 횟수 이상으로 로그인을 실패새도 로그인 제한이 없는 것을 확인할 수 있습니다.
로그인 제한이 없는 경우는 무차별 대입공격(Brute-Force attack) 에 취약할 수 있습니다. 프록시 도구(BurpSuite)를 통하여 무차별 대입공격을 시도해보겠습니다.
* 무차별 대입공격(Brute-Force attack) : 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 공격
3) 해당 과정은 실습이기 때문에 패스워드 조회 시 100~130까지의 숫자만 입력하도록 하겠습니다.
공격을 시도한 결과 '123'라는 패스워드 입력시 응답값 내 길이가 다르며 (Length:242 -> 로그인 실패, Length:285 -> 로그인 성공, Length:264 -> 이미 로그인된 상태) 응답값 확인 결과 로그인에 성공한 것을 확인하였습니다.
4) 약한 문자열 강도 (1) 실습처럼 패스워드를 복잡하게 만드는 것과 더불어 일정 횟수 이상 로그인 실패 시 로그인을 제한하는 검증 로직이 필요합니다.
5) 소스코드 확인 결과 로그인 시 아이디 패스워드 일치 여부만 확인할 뿐 로그인 횟수 제한은 없음을 확인하였습니다.
6) 소스코드 내 로그인 실패 시 카운터를 증가시켜 카운터가 5회 이상 시 계정을 잠금시키는 로직을 추가하였습니다.
7) 소스코드 수정 후 Brute-Force attack을 시도해보겠습니다. 범위는 마찬가지로 100~130까지로 해서 진행 후 결과 확인 시 4회까지는 계정정보가 일치하지 않는다는 응답값을 받았으나 5회 이상부터는 계정이 잠금되어 로그인할 수 없다는 메시지가 출력되었으며 기존 패스워드인 '123'이라는 값이 입력되도 로그인이 가능하지 않음을 확인하였습니다.