본문 바로가기
정보처리기사/정보 시스템 구축 관리

소프트웨어 개발 보안

by jhwannabe 2023. 8. 19.

소프트웨어 개발 보안의 개념

  • 소프트웨어 개발 보안은 소프트웨어 개발 과정에서 발생될 수 있는 보안 취약점이나 보안 약점들을 최소화하여 사이버 보안 위협에 대응할 수 있는 안전한 소프트웨어를 개발하기 위한 보안 활동
  • 소프트웨어 개발 생명주기(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