1. 소프트웨어 개발 보안
- 소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하여 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동을 의미
- 목표 : 데이터의 기밀성, 무결성, 가용성을 유지하는 것
- 정부에서 제공하는 소프트웨어 개발 보안 가이드를 참고하여 소프트웨어 개발 과정에서 점검해야 할 보안 항목들을 점검
2. 보안 요소
- 3대 요소 : 기밀성, 무결성, 가용성 => 이 외에 인증, 부인 방지 등이 있음
- 기밀성(Confidentiality) : 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용되며 정보가 전송 중에 노출되더라도 데이터를 읽을 수 없음
- 무결성(Integrity) : 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있음
- 가용성(Availability) : 인가받은 사용자는 언제라도 사용할 수 있음
- 인증(Authentication) : 시스템 내의 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지를 확인하는 모든 행위로 대표적 방법으로는 패스워드, 인증용 카드, 지문 검사 등이 있음
- 부인 방지(NonRepudiation) : 데이터를 송 · 수신 사실을 부인할 수 없도록 송 · 수신 증거를 제공함
3. 소프트웨어 개발 보안 점검 항목
- 소프트웨어 개발의 각 단계에서 점검되어야 할 보안 항목
- 종류 : 세션 통제, 입력 데이터 검증 및 표현, 보안 기능, 시간 및 상태, 에러 처리, 코드 오류, 캡슐화, API 오용 등
4. 세션 통제
- 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것을 의미
- 보안 약점 : 불충분한 세션 관리, 잘못된 세션에 의한 정보 노출 등
- 세션 : 서버와 클라이언트의 연결을 말함
5. 입력 데이터 검증 및 표현
- 입력 데이터에 대한 유효성 검증체계를 갖추고, 검증 실패 시 이를 처리할 수 있도록 코딩하는 것을 의미
- 보안 약점 : SQL 삽입, 경로 조작 및 자원 삽입, 크로스사이트 스크립팅(XSS) 등
6. 보안 기능
- 인증, 접근제어, 기밀성, 암호화 등의 기능을 의미
- 보안 약점 : 적절한 인증 없는 중요기능 허용, 부적절한 인가 등
7. 시간 및 상태
- 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 시스템이 원활히 동작되도록 코딩하는 것을 의미
- 보안 약점 : 검사 시점과 사용 시점(TOCTOU) 경쟁조건, 종료되지 않는 반복문 또는 재귀함수 등
8. 에러처리
- 소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의하여 에러로 인해 발생할 수 있는 문제들을 예방하는 것을 의미
- 보안 약점 : 오류 메세지를 통한 정보 노출, 오류 상황 대응 부재 등
9. 코드 오류
- 코딩 중 실수하기 쉬운 형(Type) 변환, 자원의 변환 등을 고려하며 코딩하는 것을 의미
- 보안 약점 : 널 포인터 역참조, 부적절한 자원 해제 등
10. 캡슐화
- 데이터(속성)와 데이터를 처리하는 함수를 하나의 객체로 묶어 코딩하는 것을 의미
- 보안 약점 : 잘못된 세션에 의한 데이터 정보 노출, 제거되지 않고 남은 디버그 코드 등
11. API 오용
- API를 잘못 하용하거나 보안에 취약한 API를 사용하지 않도록 고려하여 코딩하는 것을 의미
- DNS lookup에 의존한 보안결정, 취약한 API 사용 등
12. API(Application Programming Interface)
- 응용 프로그램 개발 시 운영체제나 프로그래밍 언어 등에 있는 라이브러리를 이용할 수 있도록 규칙 등을 정의해 놓은 인터페이스를 의미
- 특정한 작업을 수행하기 위해 사용되거나, 운영체제의 파일 제어, 화상 처리, 문자 제어 등의 기능을 활용하기 위해 사용됨
- 개발에 필요한 여러 도구를 제공 => 원하는 기능을 쉽고 효율적으로 구현 가능
- 종류 : Windows API, 단일 유닉스 규격(SUS), Java API, 웹 API 등
- Open API : 누구나 무료로 사용할 수 있게 공개된 API