정보처리기사/정보 시스템 구축 관리
시스템 보안 구축 2
RangA
2023. 6. 2. 02:28
01. 정보보호
03. 소프트웨어 개발 보안 구현
1) 소프트웨어 개발 보안 구현
- 소프트웨어 개발 보안 구현의 개념
- 초기 설계 단계의 기능 명세서에 따라 기본 설계서를 작성하고 상세 설계서 등에 반영된 보안 요구사항을 응용 프로그램 개발자가 직접 구현함
- 소프트웨어 개발 보안 구현의 고려사항
- 개인정보 입력 시 암호화되어야 하는 범위를 결정함
- 소프트웨어 플랫폼을 확인하여 보안 모듈을 선택함
- 보안 구축 전문 업체의 확인을 통해 소프트웨어 플랫폼에 맞는 응용 프로그램 방식의 솔루션을 제공해 줄 수 있는지 확인해야 함
- 응용 프로그램 방식에서의 암호화 부분은 텍스트로 전송되는 부분만을 암호화하여, 이미지와 같이 암호화가 불필요한 부분을 제외하고 적절히 암호화 적용 부분을 결정함
- 응용 프로그램 방식의 보안 구축을 완료한 후 적절한 테스트 시나리오를 통해 구축 완료를 선포함
2) 응용 프로그램 보안 구현 환경 관리
- 로그인 관리
- 로그인 실패 시 정확한 원인을 표시 : 로그인 실패 시 로그인 실패 원인의 설명 없이 세션을 종료하거나 다시 입력 대기를 하지 않음
- 종료된 패스워드 입력 횟수 제한 : 일정 횟수 이상 패스워드를 잘못 입력할 경우 일시적인 사용 중지 또는 세션을 종료함
- 최근 로그인 정보 표시 : 개발자가 로그인 시 가장 최근에 성공적으로 로그인한 날짜, 시각 등의 정보를 화면에 표시함
- 일정 시간 경과 시 자동 로그 오프 : 사용자로부터 일정 시간 동안 입력이 없을 경우 자동 로그 오프 또는 세션 종료 처리를 함
- 로그인 상태 유지 시 세션 방식 적용 : 웹 애플리케이션의 경우 브라우저에 저장된 쿠기 방식보다는 서버 측에 일부 정보를 저장하여 상호 대조할 수 있는 세션 방식을 사용함
- 패스워드 관리
- 패스워드 최소 길이 제한 : 패스워드의 최소 길이를 통제할 수 있도록 최소 패스워드 길이 값을 정의함
- 추측 가능한 패스워드 사용 통제 : 사용자 개인 정보, 사용자 ID, 동일한 문자 또는 숫자가 반복되거나 문자 또는 숫자만으로 구성된 패스워드는 사용하지 못함
- 패스워드 변경 및 확인 시 보안 적용 : 패스워드 변경 시 현재 패스워드를 확인한 후 변경 사항을 적용함
- 패스워드 파일 접근 통제 및 암호화 저장 여부 진단 : 응용 프로그램에 저장된 패스워드 파일은 관리자도 알아볼 수 없도록 암호화된 상태로 저장함
- 이전 부여 패스워드 일정 기간 재사용 통제 : 응용 프로그램 인증 시스템은 관리자가 이전에 사용했던 패스워드를 일정 기간 재사용하지 못하도록 하는 기능을 구현함
- 패스워드 사용 기간 설정 : 패스워드를 사용할 수 있는 최소 기간을 설정하여 일정 기간이 지나면 개발자가 강제로 패스워드를 변경하도록 구현함
- 인증의 강화 작용 : 전자상거래, 금융 관련 서비스 등 특별하게 인증 강화가 필요한 경우 OTP, 생체 인증, PKI 등의 강화된 인증 기능을 적용함
- 개발자 계정 관리
- 추측 가능 및 Default 계정 사용 통제 : 애플리케이션 관리자 계정의 경우 "admin", "root", "administrator" 등 추측 가능하거나 디폴트 계정을 사용하지 않도록 구현함
- 불필요한 계정에 대한 주기적 검토 및 삭제 : 일정 기간 사용하지 않는 계정에 대한 일시 사용 중지 및 사용 중지된 후 휴면 계정에 대한 삭제 조치를 함
- 데이터 보안 관리
- 주요 데이터 및 자료 파일 등의 데이터베이스 저장 여부 : 주요 데이터를 접근 통제가 수행되는 데이터베이스에 저장함
- 데이터의 보안 등급 분류 설정 : 응용 프로그램에서 사용되는 데이터에 대한 보안 등급 설정 및 보안 등급에 따른 보안 대책 수준을 구현함
- 클라이언트와 서버 간의 데이터 암호화 전송 여부 : 서버와 개발자 간에 사용되는 연결 및 전송되는 자료의 보안성 강화를 위해 필요 시 암호화 전송을 구현함
- 암호화 Key 관리 정책 : 데이터베이스에 자료 저장 시 암호화를 사용하였을 경우 Key 관리 정책 및 복구에 대한 안전성을 확인함
- 응용 프로그램 제어 관리
- 개발자 그룹별 접근 권한 통제 : 응용 프로그램의 개발자를 그룹별로 구분하고 접근 권한에 대한 등급을 설정하여 접근 권한을 관리함
- 관리자 접근 통제 : 강력한 응용 프로그램 서비스로 관리자의 접근을 통제하는 것으로, 응용 프로그램 서버에서 관리자에 대한 접근 날짜, 접근 시간, IP 주소별로 통제를 적용함
- 다중 접속 권한 제한 : 단일 개발자 ID의 다중 온라인 세션 생성을 제한함
- 인증 절차를 우회한 접근 통제 : 모든 응용 프로그램 접근 방법에 대한 인증을 시행함
- 인가된 등급 이상의 정보에 대한 접근 통제 : 특정 수준의 정보에 대한 접근 권한을 부여 받은 개발자는 해당 수준 또는 그 이하의 정보에만 접근하도록 구현함
- 개발 시 사용된 코드 접근 제한 : 응용 프로그램 개발 시 사용된 샘플 소스 코드 및 백업 코드 등에 대한 접근을 제한함
- 로그 관리 및 접근 통제
- 보안 등급별 로깅 설정 : 로그 관리 및 접근 통제를 위하여 보안 등급별 로그 방법을 설정함
- 보안 등급별 로그 보관 기간 설정 : 모든 개발자 ID의 개발 시스템 로그인 및 이용 기록을 저장하는 것으로, 개발자 ID, 단말 ID, 사용 시간, 사용 정보 명, 로그인 실패, 출력 내역 등을 포함함
3) 주요 취약점 사전 점검
- XSS(Cross-Site Scripting)
- 웹 페이지에 악의적인 스크립트를 포함 시켜 사용자 측에서 실행되게 유도함으로써, 정보 유출 등의 공격을 유발할 수 있는지 검토함
- 인젝션(Injection)
- 애플리케이션이 의도하지 않은 명령어를 수행하거나 허용되지 않은 데이터에 접근하도록 조작하는 악성 문구를 삽입하는 공격에 대해 모듈을 보호하도록 애플리케이션이 클라이언트 입력 파라미터를 검증하는지 검토함
- 불안전한 직접적인 객체 참조
- 애플리케이션이 파일, 디렉터리, 데이터베이스 기록, 키 등의 내부 이행 객체에 대한 참조를 안전하지 않은 방법으로 제공하는지 검토함
- 불안전한 암호 저장
- 클라이언트 측의 애플릿과 HTML 소스 코드와 같은 공개적으로 접속 가능한 정보에서 회수할 수 있는 민감한 암호화 상세 정보를 애플리케이션이 제공하는지 검토함
- URL 접근 제한 실패
- 애플리케이션이 모호한 URL이나 위장술(Obfuscation)을 기반으로 기능을 제한하는지 검토함
- 취약한 인증 및 세션 관리
- 인증 사용자의 ID를 추정하여 인증과 세션 관리를 침해하는 공격 리스크를 최소화할 수 있도록 인증 및 적절한 세션 관리를 올바르게 이행했는지 검토함
- 사이트 간 요청 위조(CSRF : Cross-Site Request Forgery)
- 특정 액션의 상세 사항을 예측하여 애플리케이션에 악의적인 요청을 위조하는 공격이 허용될 수 있는 예측 가능한 파라미터가 애플리케이션에 포함되어 있는지 검토함
- 잘못된 보안 설정
- 시스템 데이터 및 기능에 허가를 받지 않고 접근하여 시스템 전체가 침해되는 결과를 가져오는 공격을 방지할 수 있도록 애플리케이션이 적절히 설정되어 있는지 검토함
- 불충분한 전송 레이어 보호
- 네트워크를 통해 전송되는 애플리케이션 데이터가 허용되지 않은 가로채기 및 중간자 공격을 방지할 수 있도록 안전한지 아닌지 검토함
- 검증되지 않은 리다이렉트 및 포워드
- 사용자가 악성 웹 사이트로 리다이렉트 및 포워드를 검증할 수 있도록 통제를 이행했는지 검토함
- 애플리케이션 로직 결함
- 의도한 목적의 애플리케이션 로직이 악용되어 워크플로우나 정보의 변환, 혹은 우회하거나 조작하는 결과를 가져올 수 있는지 검토함
- 인증 우회
- 애플리케이션을 악용하여 보안 통제를 우회하여 내부 애플리케이션 기능에 직접적으로 접근하는 공격을 허용할 수 있는지 검토함
- 권한 부여(Authorization) 우회
- 권한 부여 메커니즘을 악용하여 악의적인 사용자가 특권을 강화해서 애플리케이션 기능이나 사용자의 민감한 데이터에 비인가 접근을 허용할 수 있는지 검토함
<br.
04. 소프트웨어 개발 보안 테스트
1) 소프트웨어 개발 보안 테스트
1. 보안 결함 등급 측정 공식
보안 결함 등급 = 보안 사고 발생 시 복구 우선순위
= 영향도(Impact) × 긴급도(Urgency)
= 잠재적 손실의 영향 × 해결 시간의 중요성
2. 정적 분석 테스트
- 소프트웨어를 실행하지 않고, 소스 코드 수준으로 보안 취약점을 분석함
- 소프트웨어 개발 과정에서 주로 사용됨
- 소프트웨어 개발 초기에 보안 약점 발견으로 수정 비용이 절감됨
- 컴포넌트 간 발생할 수 있는 통합된 보안 약점 발견은 제한적
- 설계나 구조 관점의 보안 취약점은 발견할 수 없음
3. 동적 분석 테스트
- 소프트웨어 실행 환경에서의 보안 약점 분석
- 소프트웨어 시험 단계에서 주로 사용됨
- 소스 코드가 필요 없음
- 정확도와 커버리지가 향상됨
- 도구 사용자의 수준에 영향을 받음
- 컴포넌트 간 혹은 설계 및 구조 관점에서 발생 가능한 보안 취약점의 검증이 가능함
2) 소프트웨어 개발 보안 테스트의 일반 원칙
- 소프트웨어 보안 테스트 계획서에 따른 실시
- 시스템에 운영될 비즈니스와 관련된 애플리케이션 보안 설계 구현 과정에서 제시된 추가 요구 항목 및 최신 취약점 점검을 서버 보안 테스트 계획서에 따라 보안 기능을 테스트함
- 소프트웨어 보안 테스트의 적정성 판단
- 보안 기능 테스트가 완료되면 보안 담당자는 평가 결과를 이해 관계자와 상호 검토하여 서버 보안 기능의 적절성 여부를 검토하고 결과를 상호 통보하게 됨
- 소프트웨어 보안 결과의 신뢰성
- 보안 평가자는 평가 절차에 따라 적절히 계획되고 실행되었는지 평가 결과가 신뢰할 수 있는 기술로 검증되었는지 다시 한번 확인함
- 소프트웨어 보안 결함 발견 시 피드백 결과 확인
- 보안 담당자 및 보안 평가자의 테스트 결과를 서버 담당자에게 피드백하여 문제가 있는 요구사항의 기능에 대한 보완이 이루어질 수 있도록 조처하게 하고, 필요 시 기술적인 조언을 수행함
3) 소프트웨어 보안 결함의 종류
- 소프트웨어 보안 결함 : 소프트웨어 제품의 보안 품질이 정의된 특성과 일치하지 않는 모든 행위
- 발견된 보안 결함 : 설치/운영되기 전에 발견된 소프트웨어 보안 결함
- 잠재적 보안 결함 : 설치/운영되는 환경에 전달된 소프트웨어 보안 결함
- 소프트웨어의 특이한 고장 : 잠재 보안 결함들이 소프트웨어의 운영 중에 나타나서 발생하는 하나 이상의 이상 징후들의 집합
4) 소프트웨어 개발 보안 테스트의 절차
- 보안 테스트 계획서 작성
- 테스트 일정, 담당자, 담당자별 역할 설정 및 테스트 수행 가이드라인, 테스트 전략, 대상 및 범위, 테스트 조직, 수행 절차 및 진척, 결함 관리, 단위 테스트 목록, 결함 관리 계획에 관한 내용으로 테스트 계획서를 작성함
- 보안 테스트 범위와 분석과 분할
- 테스트 범위에 대한 분석 및 업무 기능별 분할, 이벤트/활동별 분할을 함
- 보안 테스트 시나리오의 작성
- 테스트와 검증이 필요한 다양한 시나리오를 기록하고, 테스트 ID, 시나리오명, 테스트 시나리오 내용을 통한 구성 화면 목록, 상태를 기록하고 결함을 분류함
- 보안 테스트 시나리오 테스트케이스 작성
- 소프트웨어 보안 테스트 요건, 시나리오, 조건을 계획/구성, 테스트 단계, 대상 시스템, 작성자, 시나리오명, 테스트 ID, 테스트 케이스, 테스트 데이터 및 실행, 예상 결과를 테스트 케이스에 반영하여 작성함
- 보안 테스트 수행
- 소프트웨어 보안 테스트 케이스 데이터 기준으로 테스트 수행, 결함 보고서, 결함 보고 및 시정 조치를 수행함
- 보안 테스트 평가
- 소프트웨어 보안 테스트 수행 결과에 대한 평가를 실싷마
- 수행 결과에 대한 평가는 정성적 평가, 정량적 평가로 실시함
- 보안 테스트 결과 보고
- 소프트웨어 보안 테스트 수행이 완료됨에 따라 완료된 테스트의 전반적인 내용이나 성과 결과를 기술함