비밀번호 생성규칙, 저장방법, 변경주기 등 비밀번호 관리 정책별 안전한 적용방법을 설계
(보안기능) 하드코드된 중요정보
(보안기능) 취약한 비밀번호 허용
해당 문제점을 제보한 OO씨는 “비밀번호를 찾다가 비밀번호를 찾는 방법 중 ‘등록한 e‐mail 주소로 비밀번호 찾기’ 부분에서 해킹의 위험이 있는 것을 발견해 제보하게 됐다”며, “‘등록한 e‐mail 주소로 비밀번호 찾기’ 기능은 이름, 아이디, 메일주소만 알면 누구나 쉽게 임시비밀번호를 발급받을 수 있어 문제가 된다.
OO의 판매자의 경우에는 이름과 메일주소가 그대로 노출돼 있고, 메일주소로 아이디를 유추할 수 있어 더욱 심각하다”며, “새로운 이메일주소로 임시 비밀번호를 발급하는 기능을 제거하거나 다른 방식으로 사용자 본인 확인 후 다른 이메일로 비밀번호를 전송 필요"
아이디, 이름, 등록한 이메일 주소만 알면 본인확인이 안된 다른 메일주소로 임시비밀번호를 받을 수 있음
① 비밀번호 설정 시 한국인터넷진흥원 『패스워드 선택 및 이용 안내서』 의 패스워드 보안 지침 적용
② 네트워크로 비밀번호를 전송하는 경우 반드시 비밀번호를 암호화하거나 암호화된 통신 채널을 이용
③ 비밀번호 저장 시, 솔트가 적용된 안전한 해시함수를 사용해야 하며 비밀번호에 대한 해시는 서버에서 실행
④ 비밀번호 재설정/변경 시 안전하게 변경할 수 있는 규칙을 정의/적용
⑤ 비밀번호 관리 규칙을 정의/적용
① 안전한 패스워드 생성규칙
안전한 패스워드
두 종류 이상의 문자구성과 8자리 이상의 길이로 구성된 문자열 ※ 문자 종류는 알파벳 대·소문자, 특수문자, 숫자 등 4가지
10자리 이상의 길이로 구성된 문자열 ※ 숫자로만 구성할 경우 취약할 수 있음
안전하지 않은 패스워드
특정 패턴을 갖는 패스워드
동일한 문자의 반복(예, ‘123123’)
키보드 상 연속한 위치에 존재하는 문자열(예, ‘qwerty’)
숫자가 제일 앞이나 뒤에 오는 구성(예, ‘1security’)
제3자가 알 수 있는 개인정보를 바탕으로 구성
가족, 이름, 생일, 주소, 휴대전화 번호를 포함하는 패스워드
이용자 ID를 이용 ※ 이용자 ID가 ‘kisa’일 경우 패스워드를 ‘kisa1’ 등으로 설정
한글, 영어 등 사전적 단어로 구성(예, ‘바다나라’, ‘love12’ 등)
특정 인물이나 널리 알려진 단어를 포함하는 패스워드 ※ 사이트, 기업명, 연예인 이름 등의 특정 명칭을 의미
숫자와 영문자를 비슷한 문자로 치환한 형태로 구성 ※ 영문자 ‘O’을 숫자’0’으로, 영문자 ‘I’를 숫자 ‘1’로 치환 등
기타
시스템에서 초기 설정되거나 예제로 제시된 패스워드
한글의 발음을 영문으로, 영문단어의 발음을 한글로 변경한 형태의 패스워드
패스워드 안전성 검증 솔루션
Php. JSP, ASP : 한국인터넷진흥원의 패스워드 안전성 검증 S/W
② 공중망 환경에서는 패스워드와 같은 중요정보를 송·수신하는 경우 보호대책이 필요
이러한 보호대책으로 TLS, VPN 등과 같은 다양한 통신 암호기술을 적용
시스템관리자 및 보안관리자는 TLS를 적용하거나 관련 솔루션을 도입 시 검토 사항
제품이 표준에부합하는지
제품이 상호호환성을 보장하는지
제품이 검증된 제품인지
제품이 오픈소스를 이용하는지
제품이 안전한 암호 알고리즘을 적용하는지 등
TLS 최신 버전(예: TLS 1.2 및 TLS 1.3)만 지원하고, 한국인터넷진흥원 『암호 알고리즘 및 키 길이 이용 안내서』를 참고하여 안전한 암호 알고리즘 조합 적용
③ 일방향 해시함수(salt)
일방향성 : 암호화된 메시지로는 원본 메시지를 구할 수 없음
일방향 해시함수의 문제점 : 레인보우 테이블 → salt값으로 해결
④ 비밀번호 변경은 주기적인 변경과 분실 시 재설정으로 구분
(ㄱ) 비밀번호 변경
주기적으로 비밀번호를 변경하여 비밀번호의노출위협을 최소화
사용자는 자신의 비밀번호가 제3자에게 노출되었을 경우 즉시 새로운 비밀번호로 변경
비밀번호 변경 시 이전에 사용하지 않은 새로운 비밀번호로 변경
비밀번호 변경 시 이전의 비밀번호와 연관성이 없어야 함
(ㄴ) 비밀번호 재설정
“비밀번호 찾기” 기능을 사용해야 한다면 이메일과 질의‐답변으로 반드시 해당 사용자에게만 비밀번호정보를 전달
올바른 비밀번호가 입력되기 전에는 이메일 등 개인정보를 수정할 수 없도록 제한
질의‐답변 검증 시 일정횟수 이상 정답을 맞히지 못하면 비밀번호 찾기 기능을 사용하지 못하도록 설정
검증 후 기존의 비밀번호가 아닌 임시비밀번호를 발급하도록 설계
임시 비밀번호를 발급받은 즉시 새로운 비밀번호로 재설정해야 한다.
언제든지 사용자가 자신의 비밀번호를 변경할 수 있게 비밀번호 변경기능을 제공(시스템)
⑤ 안전한 비밀번호 관리 항목
(ㄱ) 변경주기
비밀번호는 3개월(또는 6개월)마다 주기적으로 변경
(ㄴ) 만료기간 설정
일정기간 시스템 사용자에 대해서는 비밀번호 만료기간을 설정
사용자 테이블에 개인정보 변경주기를 추가한 뒤 일단위로 해당 필드가 업데이트
비밀번호 기간이 만료되면 로그인 시 사용자에게 비밀번호 변경을 요청
비밀번호 변경 시 비밀번호 변경주기를 초기화
(ㄷ) 성공한 로그인 시간 관리
마지막으로 성공한 로그인 시간 정보를 관리
사용자 테이블에 마지막으로 로그인한 시간정보를 저장, 알림.
사용자가 계정도용 여부를 점검할 수 있도록 제공
비밀번호 관리주기
비밀번호 생성 : 개인 비밀번호는 사용자가 직접 생성하고 그룹 비밀번호는 그룹의 장이 생성하여 구성원들에게 안전한 방법으로 전달
비밀번호 사용 : 비밀번호는 제 3자에게 노출되지 않도록 해야 하며, 자신의 비밀번호와 관련된 정보 및 힌트를 제공하지 않아야 함
비밀번호 변경주기 : 3개월(또는 6개월)
시스템 및 소프트웨어의 초기 비밀번호는 설치 시 즉시 변경
비밀번호 폐기 : 비밀번호는 사용용도가 끝나거나 사용주기가 지난 경우 폐기
인증 비밀번호는 시스템 담당자가 사용자 계정의 삭제와 함께 폐기
암호화 비밀번호는 사용자가 직접 폐기
회원가입 시 안전한 비밀번호 생성규칙이 적용되지 않아서 취약한 비밀번호로 회원가입이 가능할 경우 무차별 대입 공격으로 패스워드가 누출(브루털포스)
비밀번호 복구 메커니즘(아이디/패스워드 찾기 등)이 취약한 경우 공격자가 불법적으로 다른 사용자의 비밀번호를 획득, 변경, 복구 가능
프로그램 코드 내부에 비밀번호를 하드 코딩하여 내부 인증에 사용하거나 외부 컴포넌트와 통신을 하는 경우, 관리자용 계정 정보가 노출될 수 있어 위험
코드 내부에 하드코드된 비밀번호가 인증실패를 야기하는 경우, 시스템 관리자가 그 실패의 원인을 파악하기 어려움