소프트웨어 개발 보안의 개념
- 소프트웨어 개발 보안은 소프트웨어 개발 과정에서 발생될 수 있는 보안 취약점이나 보안 약점들을 최소화하여 사이버 보안 위협에 대응할 수 있는 안전한 소프트웨어를 개발하기 위한 보안 활동
- 소프트웨어 개발 생명주기(SDLC : Software Development Life Cycle)의 단계별로 요구되는 보안 활동을 수행하여 안전한 소프트웨어를 개발함
소프트웨어 보안 취약점 발생 원인
- 보안 요구사항이 정의되지 않거나 논리적인 오류를 가지는 설계를 수행함
- 기술 취약점을 가지는 코딩 규칙을 적용하거나 소프트웨어 배치가 적절하지 않음
- 발견된 취약점에 대해 적절한 관리 또는 패치를 하지 않음
소프트웨어 개발 보안 체계
- 소프트웨어 개발 보안 관련 활동 주체는 행정안전부, 발주기관(행정기관 등), 한국인터넷진흥원, 사업자, 감리법인(진단원) 등으로 구분할 수 있음
- 개발 보안 주체별로 잘 정의된 개발 보안 활동과 주체 간의 유기적인 협력이 필요함
- 활동 주체별 개발 보안 활동
행정안전부 | - 지침 고시, 가이드 배포, 진단원 자격 여부 등 - 발주기관에 개발 보안 지침 - 가이드 제공 - 한국인터넷진흥원에 정책 지원 |
발주기관 | 개발 보안 지침 준수, 사업자에 개발 요청, 감리법인에 확인 요청 |
한국인터넷진흥원 | - 정책-기술 지원, 가이드 개발, 교육과정 문의, 발주기관에 기술 지원 - 사업자 및 감리법인에 교육 제공 가이드 안내 |
사업자 | 교육 이수, 시큐어 코딩 적용, 보안 약점 제거 등 |
감리법인 | 보안 약점 진단, 사업자에 개발 보안 적용 확인 |
프로젝트 참여 역할별 보안 활동
프로젝트 관리자(Project Manager)
- 팀 구성원에게 응용 프로그램의 보안 전략을 알려야 함
- 보안 위험과 비즈니스에 응용 프로그램 보안의 영향을 이해시킴
- 조직의 상태를 모니터링함
요구사항 분석가(Requirement Specifier)
- 아키텍트가 고려해야 할 여러 가지 보안 관련 비즈니스 요구사항들을 설명할 수 있어야 함
- 프로젝트팀이 고려해야 할 구조를 정의한 뒤, 해당 구조에 존재하는 자원에 대한 보안 요구사항이 무엇인지 결정함
- 보안 수준을 추상화할 때 다른 프로젝트에 적용되었던 보안 요구사항을 재사용하여 시간을 절약할 수 있어야 함
아키텍트(Architect)
- 명백한 보안 오류를 도입하지 않도록 충분히 보안 기술의 문제를 이해할 수 있어야 함
- 시스템에 사용되는 모든 리소스를 가능한 자세하게 정의함
- 시스템에서 각각 리소스의 역할에 적절한 보안 요구사항이 적용되도록 함
- 각 리소스가 시스템 라이프 사이클을 통한 서로 간의 상호작용을 이해할 수 있게 해야 함
설계자(Designer)
- 특정 기술이 설계 보안 항목을 만족하는지 확인하고 제대로 그 기술이 사용될 수 있는 방법을 파악해야 함
- 일반적으로 결과를 평가하고 최선의 문제 해결 방법을 결정해야 함
- 설계자는 모든 기존 개발 역할의 보안 관련 작업을 수행할 수 있어야 함
구현개발자(Implementer)
- 고도로 구조화된 개발 환경에서 프로그램을 구현하기 위해 안전한 코딩 표준을 준수하여 개발하여야 함
- 제3자가 소프트웨어 안전 여부를 쉽게 판단할 수 있도록 문서화해야 함
테스트 분석가(Test Analyst)
- 요구사항과 구현 결과를 반복적으로 테스트해야 함
- 테스트 그룹은 반드시 보안 전문가일 필요는 없으며, 테스트가 가능할 정도의 위험에 대한 학습이나 툴 사용 방법을 숙지하고 있으면 됨
보안 감사자(Security Auditor)
- 프로젝트의 현재 상태를 검사하고 현재 상태의 보안을 보장함
- 설계단계에서는 일반적으로 취약성으로 이어질 수 있는 사항이 있는지 점검함
Secure OS
- 컴퓨터 운영체제의 커널에 보안 기능을 추가한 것으로 운영체제의 보안상 결합으로 인하여 발생 가능한 각종 해킹으로부터 시스템을 보호하기 위하여 사용됨
- 네트워크 보안 제품의 무력화 시 최후 시스템 보호 역할을 수행하며 조직의 보안 정책 및 역할에 최적화되어 보안 정책을 관리를 지원함
- Secure OS의 목적 : 안정성, 보안성, 신뢰성
버퍼 오버플로우(Buffer Overflow)
- 운영 체제가 메모리를 조작하는 동안 잘못된 동작을 하는 프로그램의 취약점으로 보통 데이터 저장 과정에서 데이터를 저장할 메모리 위치의 유효성을 검사하지 않을 때 발생함
버퍼 오버플로우 대응 방안
- 운영체제의 주기적 최신 패치와 입력값 검증이 가능한 안전 함수를 사용함
- 스택 실드 : 함수 시작 시 복귀 주소를 'Global RET'이라는 특수 스택에 저장해 두고 함수 종료 시 스택의 RET값을 비교해 다를 경우 오버플로 상태로 간주하여 프로그램 실행을 중단함
- ASLR : 메모리 공격 방어를 위해 주소 공간 배치를 난수화, 실행 시마다 메모리 주소를 변경하여 오버플로우를 통한 특정 주소의 호출을 차단함
- 스택 가드(Stack Guard) : 메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정 값(카나리)을 저장해 두었다가 그 값이 변경되었을 경우 오버플로우 상태로 가정하여 프로그램 실행을 중단하는 기술
시스로그(Syslog)
- LINUX에서 다양한 이벤트를 로그 파일에 기록하는 것을 의미함
- 다른 의미로는 Syslog Server라고 불리는 이벤트 메시지(로그) 수집기 쪽으로 IP 네트워크를 통해서 장치(Machine)의 이벤트 메시지들을 전ㄴ송할 수 있게 해주는 프로토콜
728x90
'정보처리기사 > 정보 시스템 구축 관리' 카테고리의 다른 글
시큐어 코딩 가이드 1 (2) | 2023.08.19 |
---|---|
소프트웨어 개발 보안 구출 및 방법론의 종류 (0) | 2023.08.19 |
데이터베이스 관련 기술 용어 (0) | 2023.08.19 |
소프트웨어/하드웨어 관련 신기술 (0) | 2023.08.19 |
네트워크 관련 신기술 (0) | 2023.08.19 |