이번 장에서는 SW개발보안가이드중 분석/설계단계에서 검증해야할 항목중 <보안기능>
에 관한 8가지 점검항목에 대해서 설명하고자 한다.
이 장도 SW보안약점진단원 시험에 제일 많이 나오는 범위이기도 하다.
SR2-1. 인증 대상 및 방식
항목 |
설명 |
1) 인증후 사용 |
중요기능이나 리소스에 대해서는 인증 후 사용 정책이 적용되어야 한다. - 중요기능 식별하고 식별된 중요기능에 대해서 일괄적으로 인증을 처리하는 시스템을 설계 ① 컴포넌트 ② 라이브러리 ③ Servlet Filter |
2) 안전한 인증방식 (일회용패스워드) |
안전한 인증방식을 사용하여 인증우회나 권한상승이 발생하지 않도록한다. <일회용 패스워드> - 일회용 패스워드는 시각정보, 이벤트정보, 질의응답방식으로 취득한 정보를 이용 하여 생성할 수 있다 - 일회용 패스워드는 시간적 제한을 설정해야 한다. (금융권 30~60초) - 일회용 패스워드는 중복및 유추가 불가능하도록 6자리 이상이 숫자 및 문자로 구성한다. - OTP발생기와 인증서버에서 동일한 정보를 생성해야 한다. |
3) 2 Factor 인증 |
중요기능에 대해서는 2단계 인증을 고려한다. - Type1 : 지식기반 Type2 : 소유기반 Type3:생체기반 - 로깅기능 마련 |
구현단계 |
적절한 인증기능이 없는 중요기능 허용 DNS Lookup에 의존한 보안결정 |
SR2-2. 인증 수행 제한
항목 |
설명 |
1)인증시도 횟수 제한 |
인증시도횟수 제한하고, 초과된 시도에 대해서는 인증제한 정책 적용 - 5회 이내로 제한 - 자동입력방지 문자 |
2)실패한 인증시도 로깅 |
실패한 인증시도에 대해서는 로그를 남겨서 추적할수 있게 한다. |
구현단계 |
반복된 인증시도 제한 기능 부재 |
SR2-3. 비밀번호 관리
항목 |
설명 |
1)패스워드 설정규칙 |
<안전하지 않은 패스워드> - 한글,영어 등을 포함한 사전적인 단어로 구성된 패스워드 - 스펠링을 거꾸로 한 패스워드 - 널리 알려진 단어로 구성된 패스워드 (컴퓨터용어 사이트,기업 등의 특정명칭으로 구성된 패스워드) - 사용자ID를 이용한 패스워드 - 제3자가 쉽게 알수 있는 개인정보를 바탕으로 구성된 패스워드 (가족생일, 주소,휴대폰번호 등) - 패턴이 존재하는 패스워드 (동일한 문자의 반복, 키보드상에 연속한 위치에 존재하는 문자들의 집합) - 숫자가 제일 앞이나 제일 뒤에 오는 구성의 패스워드 (security1, may12) - 숫자와 영문자를 비슷한 문자로 치환한 형태를 포함한 구성의 패스워드 (영문자 O 을 숫사 0 으로 , 영문자 I 를 숫자 1 로 치환) - 특정 인물의 이름을 포함한 패스워드 (사용자, 유명인 연예인등) - 한글발음을 영문으로, 영문단어의 발음을 한글로 변형한 형태의 패스워드 - 시스템에서 예시로 제시되는 패스워드 - 시스템에서 초기로 설정된 패스워드 - 이전에 사용했던 패스워 |
2) 패스워드 암호화,통신채널 |
- 암호화하거나 암호화된 전송채널 이용 (TLS , VPN) TLS_RSA_WITH_AES_256_CBC_SHA … |
3) salt가 적용된 해쉬함수 |
- SHA-2 이상 (SHA-1, MD5 등은 안전하지 않음) - 솔트값은 랜덤하게 생성 - 솔트값은 암호키가 저장되는 장소에 저장 |
4) 패스워드 재설정, 변경 규칙 |
- 기존 패스워드 확인 |
5) 패스워드 관리규칙 |
- 변경주기 - 만료기간 설정, 최소사용기간 설정 - 성공한 로그인 시간 관리 (사용자에게 알림으로써 도용여부 확인) |
구현단계 |
하드코드된 비밀번호 취약한 비밀번호 허용 |
SR2-4. 중요자원 접근통제
항목 |
설명 |
1) 중요자원에 대한 접근통제 |
- 중요자원에 대한 접근권한을 최소한으로 설정한다. - ACL이나 RBAC를 적용 |
2) 중요기능에 대한 접근통제 |
- 접근권한은 최소한으로 - RBAC를 적용 - 개별적용을 하는 경우 코딩규칙이 개발가이드에 반영되었는지.. |
3) 관리자 페이지 접근통제 |
- URL은 쉽게 추측할 수 없도록 설정한다. -> 도메인 대신 IP를 통해서 접속하도록) - 원격연결시 암호화 통신채널 사용 - 외부망에 있는 경우 ① IP통제, ② 80이 아닌 별도포트 사용, ③ SSL적용, ④ 추가인증 - 내부망에 있는 경우 ① 80이 아닌 별도포트 사용, ② SSL적용 권고 |
구현단계 |
부적절한 인가 중요한 자원에 대한 잘못된 권한 설정 |
SR2-5. 암호키 관리
항목 |
설명 |
1) 암호키 관리규칙 |
- DB데이터 암호화에 사용되는 암호키는 DB와는 물리적으로 분리된 장소에 별도보관 - 패스워드나 암호키는 메모리에 저장하지 않으며 설사 저장했더라도 사용종료 후 즉시 메모리를 0 으로 초기화한다 - 암호키 생성 및 변경시 암호키에 대한 백업기능을 구현한다.
< FIPS 140-2 레벨분류 > ① Level1 - 암호모듈에 대한 기본적인 보안요구사항만을 충족하여 최소한의 보안 ② Level2 - 침입자의 불법적인 접근을 방지하고 침입이후에 변조를 나타내는 증거를 제공함으로써 물리적인 보안매커니즘을 제공 ③ Level3 - 강력한 변조 탐지 및 대응의 일환으로 침입을 감지하면 저장된 키 삭제 ④ Level4 - 암호모듈의 외부의 전압이나 온도등을 감지하여 슈퍼쿨링 등 환경의 이상변화 시, 암호키를 삭제한다. |
2) 설정파일內 중요정보 암호화 |
- 설정파일내 중요정보 (DB계정정보, 시스템중요정보) 가 암호화해서 저장 |
구현단계 |
하드코드된 비밀번호 주석문안에 포함된 시스템 주요 정보 |
*** 암호키 종류별 유효기간 ***
키종류 |
사용유효기간 |
송신자 사용기간 |
수신자 사용기간 |
대칭키 |
비밀키 |
최대 2년 |
최대 5년 |
공개키 |
암호화 공개키 |
최대 2년 |
|
복호화 개인키 |
최대 2년 |
|
검증용 공객키 |
최소 3년 |
|
서명용 개인키 |
최대 3년 |
SR2-6. 암호연산 (알고리즘 / 키길이 / 해쉬알고리즘+salt /난수)
항목 |
설명 |
1) 안전한 암호 알고리즘 |
<대칭키> - 안전 : AES, SEED, ARIA, 3DES, Blowfish, KASUMI - 취약 : DES, RC5, MD5… <공개키> - 안전 : RSA, ECC, ECDSA, KCDSA |
2) 안전한 암호키 길이 |
- 대칭키 : 128 bit 이상 - 공개키 : 2048 bit 이상 - 타원곡선 : 256 bit 이상 |
3) 안전한 해쉬알고리즘+Salt |
- SHA-2 이상 (SHA-224, 256, 384, 512) |
4) 안전한 난수생성 알고리즘 |
- FIPS 140-2 인증을 받은 암호모듈의 난수생성기와 256 비트 이상의 Seed를 사용하여 난수를 생성한다. - 난수의 무작위성을 보장하기 위해 이전 난수생성 단계의 결과를 다음 난수생성 단계의 Seed로 사용하는 의사난수생성기를 이용한다. - java.math.Random() - 취약 java.util.Random() , java.security.SecureRandom() - 안전 |
구현단계 |
취약한 암호화 알고리즘 사용 충분하지 않은 키 길이 사용 솔트없이 일방향 해쉬함수 사용 적절하지 않은 난수값 사용 |
SR2-7. 중요정보 저장
항목 |
설명 |
1) 중요정보 암호화 저장 |
- 중요정보 또는 개인정보는 암호화 해서 저장한다. (사용자 하드디스크에 저장된 쿠키를 통한 정보노출) - 특히, 쿠키, HTML5로컬저장소와 같은 클라이언트 즉 하드드라이브에 중요 정보가 저장되지 않도록 한다., 부득히 저장 시 암호화해서 저장 |
2) 메모리에 중요정보 제거 |
- 중요정보가 메모리에 남지않도록..
<입력폼 자동완성 비활성화> <input type=text name=id autocomplete=off> -> 이 기능이 활성화되면 캐싱되기 때문.. |
구현단계 |
중요정보 평문 저장 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출 |
SR2-8. 중요정보 전송
항목 |
설명 |
1) 중요정보 암호화 전송 |
- 인증정보와 같이 민감한 정보는 ①암호화해서 전송하거나 ②암호화된 통신채널로 전송 |
2) 쿠키의 중요정보 암호화 전송 |
- 쿠키에는 중요정보가 포함되지 않도록 설계하며, 부득이 쿠키에 중요정보가 포함된 경우에는 반드시 세션쿠키로 설정히야 하며, 전달되는 중요정보는 암호화해서 전송해야 한다. |
|
|