자격/SW보안약점진단원

설계단계 보안설계기준-비밀번호 관리

Ignatius Heo 2023. 6. 29. 04:13

작성일: 230628

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(115~127p)

 

유형  보안기능
설계항목  비밀번호 관리
설명
 생성규칙, 저장방법, 변경주기 등 비밀번호 관리정책별 안전한 적용방법을 설계한다.

보안대책
 ① 비밀번호 설정 시 KISA의 비밀번호 선택 및 이용 안내서의 비밀번호 보안 지침을 적용한다.
 
 ② 네트워크로 비밀번호를 전송하는 경우 반드시 비밀번호를 암호화하거나 암호화된 통신 채널을 이용해야 한다.

 ③ 비밀번호 저장 시, 솔트가 적용된 안전한 해시함수를 사용해야 하며 비밀번호에 대한 해시를 서버에서 실행되도록 해야 한다.

 ④ 비밀번호 재설정/변경 시 안전하게 변경할 수 있는 규칙을 정의해서 적용해야 한다.

 ⑤ 비밀번호 관리 규칙을 정의해서 적용해야 한다.

연관된
구현단계
- 하드코드된 중요정보
https://cryptocurrencyclub.tistory.com/133
- 취약한 비밀번호 허용
https://cryptocurrencyclub.tistory.com/136

 

가. 취약점 개요

 

ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 중간자공격을 이용한 비밀번호 탈취, 브루트포스?

  1. 취약한 비밀번호 사용: 안전한 비밀번호 생성규칙이 적용되지 않아 취약한 비밀번호로 회원가입이 가능할 경우 무차별 대입 공격으로 비밀번호가 누출될 수 있다.
  2. 취약한 비밀번호 복구: 비밀번호 복구 메커니즘이 취약한 경우 공격자가 불법적으로 다른 사용자의 비밀번호를 획득/변경/복구할 수 있다.
  3. 하드코드된 중요정보: 코드 내부에 비밀번호를 하드코딩하여 내부 인증에 사용하거나 외부 컴포넌트와 통신하는 경우 관리자 계정 정보가 노출될 수 있어 위험하다.

 

나. 설계시 고려사항

 

비밀번호 설정 시 KISA의 비밀번호 선택 및 이용 안내서의 비밀번호 생성규칙을 적용한다.

  → 아래와 같은 비밀번호 설정규칙을 적용한다.

안전한 비밀번호 설정규칙(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)

 

  → 비밀번호 안전성 검증 솔루션을 사용한다.

 

네트워크로 비밀번호를 전송하는 경우 반드시 비밀번호를 암호화하거나 암호화된 통신 채널을 이용해야 한다.

  →  웹브라우저와 같은 클라이언트와 웹서버 간 통신, 서버와 서버 간 통신 등 인터넷과 같은 공중망 환경에서는 비밀번호와 같은 중요정보를 송·수신하는 경우 보호대책이 필요하다. 이러한 보호대책으로 TLS, VPN 등 다양한 통신 암호기술을 적용할 수 있다.

  →  시스템관리자 및 보안관리자는 TLS를 적용하거나 관련 솔루션을 도입할 때 제품이 표준에 부합하는지, 상호호환성을 보장하는지, 검증된 제품인지, 오픈소스를 이용하는지 등을 확인해야 한다.

 

TLS 버전별 안전한 암호화 알고리즘(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)

→ 요즘 TLS 1.3을 기본옵션으로 사용하는 솔루션도 많고 업계에서도 사용 중인데, 조만간 업데이트되지않을까 싶음.

 

 

비밀번호 저장 시, 솔트가 적용된 안전한 해시함수를 사용해야 하며 비밀번호에 대한 해시를 서버에서 실행되도록 해야 한다.

  →  비밀번호는 복호화 되지 않는 일방향 해시함수를 사용해 암호화하여 저장해야 한다.

해시를 암호화하라고 하나????????의미가 다른데??????

→ 비밀번호는 일방향 해시함수와 솔트를 이용해 해시를 수행 후 안전한 암호알고리즘을 사용해 암호화하여 저장해야 한다. 이게 맞지 않을까????

 

비밀번호 재설정/변경 시 안전하게 변경할 수 있는 규칙을 정의해서 적용해야 한다.

  →  비밀번호 변경은 주기적인 변경과 분실 시 재설정으로 나누어 볼 수 있다.

  • 비밀번호 변경: 사용자 및 관리자는 주기적으로 비밀번호를 변경하여 비밀번호 노출 위협을 최소화해야 한다. 사용자는 자신의 비밀번호가 제3자에게 노출되었을 경우 즉시 새로운 비밀번호로 변경해야 하며, 변경 시 이전에 사용하지 않은 새로운 비밀번호로 변경해야 하며 이전 비밀번호와 연관성이 없어야 한다.
  • 비밀번호 재설정: "비밀번호 찾기" 기능 구현 시 I-PIN, 휴대전화 인증, 질의답변 검증 등으로 비밀번호 재설정 권한을 확인하고 회원가입 시 등록된 이메일 주소를 이용하여 비밀번호를 재설정할 수 있는 링크를 전송한다. 사용자는 해당 링크를 클릭하여 자신의 비밀번호를 재설정할 수 있도록 설계한다.

 

비밀번호 관리 규칙을 정의해서 적용해야 한다.

  →  안전한 비밀번호 관리를 위해 다음과 같은 항목을 고려한다.

  • 변경주기: 3개월 또는 6개월마다 주기적으로 변경해야 한다.
  • 만료기간 설정: 일정기간 시스템 사용자에 대해서는 비밀번호 만료기간을 설정한다. 사용자 관리 DB테이블에 개인정보 변경주기를 추가 후 일단위로 해당 필드가 업데이트되도록 한다. 만료기간이 되는 경우 비밀번호 변경을 요청, 변경 시 해당 필드를 초기화하도록 설계한다.
  • 성공한 로글인 시간 관리: 마지막으로 성공한 로그인 시간 정보를 관리해야 한다. 사용자 테이블에 마지막으로 로그인한 시간정보를 저장하고 사용자에게 알림으로써, 계정도용 여부를 점검할 수 있도록 개발가이드 구현단계를 작성한다.

 

다. 진단 세부사항

 

 ① 비밀번호 설정 시 KISA의 비밀번호 선택 및 이용 안내서의 비밀번호 생성규칙을 적용한다. 조합규칙, 길이 등 비밀번호가 안전하게 설정되도록 설계되어 있는지 확인한다.

  ㅇ  비밀번호 설정 규칙 정의 시 안전한 비밀번호 설정규칙이 설계에 적용되었는지 확인

      - 길이: 조합규칙의 복잡도에 따라 최소 8자리 이상

      - 조합규칙: 숫자, 영 대소문자, 특수문자 포함

      - 제한문자열: 전화번호, 동일 문자열 반복 제한, 생년월일 등

  ㅇ  비밀번호 설정규칙을 위배하는 입력값과 예상 결과를 포함하는 테스트 계획의 수립 여부 확인

 

 ② 네트워크로 비밀번호를 전송하는 경우 반드시 비밀번호를 암호화하거나 암호화된 통신 채널을 이용해야 한다. 네트워크로 비밀번호 전송 시 암호화 또는 암호화 채널을 사용하도록 설계되어 있는지 확인한다.

  ㅇ  네트워크로 비밀번호가 전송되는 기능이 분류되어 있는지 확인

  ㅇ  비밀번호를 암호화하여 전송하는 경우, 안전한 암호 알고리즘을 사용한 비밀번호 암호화 여부 확인

  ㅇ  암호화된 통신채널을 사용하여 전송하는 경우 TLS/VPN 등 안전한 통신채널을 사용하도록 설계되었는지 확인

  ㅇ  패킷스니핑 등으로 암호화 전송을 점검하는 테스트 계획의 수립 여부 확인

패킷까지 떠????

 

 ③ 비밀번호 저장 시, 솔트가 적용된 안전한 해시함수를 사용해야 하며, 해시함수 실행은 서버에서 해야한다. 비밀번호 저장 시 해시함수를 사용하도록 설계하고, 사용할 해시함수와 솔트 값을 포함한 해시함수 사용 방법이 명시되어 있는지 확인한다.

  ㅇ  비밀번호를 암호화하기위해 SHA-2 계열(SHA224/256/384/512)의 해시함수 사용여부 확인

  ㅇ  해시함수 사용 시 솔트값을 사용하도록 설계되어 있는지 확인

  ㅇ  솔트값은 데이터 암·복호화에 사용되는 암호키가 저장되는 장소에 저장되도록 설계되어 있는지 확인

  ㅇ  해시함수를 이용한 일방향 암호를 서버에서 수행하는 프로그램이 설계되어 있는지 확인

  ㅇ  비밀번호 크랙도구를 이용하여 DB에 저장된 비밀번호의 안전을 점검하는 테스트 계획의 수립 여부 확인

 

  비밀번호 재설정/변경 시 안전하게 변경할 수 있는 규칙을 정의해서 적용해야 한다. 비밀번호를 주기적으로 변경하고, 비밀번호 변경 및 비밀번호 분실로 인한 재설정 시 안전하게 변경절차가 이루어지도록 설계되어 있는지 확인한다.

  ㅇ  비밀번호 변경 시 기존 비밀번호를 확인하는 기능의 설계 여부 확인(예전 비번과 동일여부 확인 목적인듯?)

  ㅇ  안전한 비밀번호 설정규칙이 적용되도록 설계되어 있는지 확인

  ㅇ  비밀번호 재설정 요청 시, 안전한 본인인증 절차를 거치도록 설계되어 있는지 확인(휴대전화인증, I-PIN, 공인인증서, 신용카드 등)

  ㅇ  본인인증 후 비밀번호 재설정 페이지 연결방식의 안전한 설계 여부 확인

  ㅇ  권한이 있는 사용자만 비밀번호 변경이 가능한지 점검하는 테스트계획 수립 여부 확인

  ㅇ  본인인증 절차를 우회하거나 비밀번호 재설정 경로로 직접 접근하여 비밀번호 재설정 가능 여부를 점검하는 테스트 계획 수립 여부 확인

 

 ⑤ 비밀번호 관리 규칙을 정의해서 적용해야 한다. 비밀번호 변경주기, 만료기간 설정, 성공한 로그인 시간 관리를 포함하여 비밀번호 관리규칙이 설계되어 있는지 확인한다.

  ㅇ  비밀번호 만료기간이나 변경 주기에 대한 정책의 정의 여부 확인

  ㅇ  비밀번호 만료기간이나 변경주기 정책을 관리할 수 있도록 DB 및 프로그램 기능의 설계 여부 확인(최종 변경일, 만료기간, 변경주기 등)

 

 

끝.