시큐어 코딩
📘웹서비스프로그래밍
배경
- 정확하고,이해하기쉬우며,검증 가능한 프로그램을 만드는 것의 어려움
- 개발시간,효율성,품질,성능,유지보수 등의 문제
- 소프트웨어의 결함에 따른 문제들이 많음
- 인터넷 환경에 기반한 공격 증가(웹사이트공격에 의한 정보유출,SNS상의 보안 위협 , 국방 관련 정보 유출)
- 에러를 가능한 빨리 발견해야 된다.
소프트웨어 보안과 안전한 코딩
- 네트워크 보안 <- 정보의 접근과 제한
- 시스템 보안 <- 웹,메일,네임서버 등
- 사용자 보안 <- 비 인증사용자 접근 제한
- 프로그램 보안 <- 취약점 악용 방지
보안개발 생명 주기(SSDLC,Secure SDLC)
- 사전교육
- 요구분석(보안 요구사항 도출,보안 위험성 추정)
- 설계 (보안구조설계,공격대상 영역 축소,보안 위협 모델링)
- 구현 (안전한 코딩 규약 준수, 보안 개발 도구 사용, 취약점 사전 제거)
- 검증 (코드 보안성 검토,정적 코드 분석,침투시험 수행)
- 배포 (최종 보안성 검토)
보안 약점
- 프로그램이 가지고 있는 오류,결함,허점
- 특정 환경이 만족되면 공격 대상이 될 수 있는 문제점
취약점
- 보안약점을 가짐(소프트웨어 개발 단계)
- 공격자가 그 결점에 접근 가능(소프트웨어 설계 단계)
- 공격자가 정보를 수정하거나 획득(exploit,잘못된 보안 요구사항)
# 보안 약점 해소 방법
- 보안약점 분석/제거(설계,감소,보안전문가,오탐,보안에 대한 지식)
- 보안약점 억제(프로그래머,코딩규칙 적용)
보안약점과 코딩규칙
- 보안 약점과 코딩 규칙 매핑
- 보안약점 설명과 코딩 규칙과의 연관관계 기반 설정
보안약점 유형
- 입력 데이터 검증 및 표현(sql삽입,경로조작 및 지원 삽입,크로스사이트스크립트)
- 보안 기능(부적절한 인가 허용 , 중요정보 평문 저장 ,하드 코드된 패스워드)
- 시간 및 상태 (경쟁조건,종료 되지 않는 반복문)
- 에러 처리(오류 상황 대응 부재, 오류메시지를 통한 정보 노출)
- 코드 오류 (널 포인트 역참조,부적절한 자원 해제 등)
- 캡슐화(제거되지않고 남은 디버그 코드,시스템 데이터 정보노출등)
- api오용
안전한 코딩(Secure Coding)
- 일반적인 SW취약성을 피하는 코딩 방법
- SW결함,버그,허점 등이 주요 요인이 됨
- 프로그램의 오류에서 SW 취약성이 유발됨을 밝힘
- 개발 단계에서 보안
10가지 안전한 코딩 원칙 1.입력 값을 검증하라
- 컴파일러 경고를 주의하라
- SW 설계 단계부터 안전 정책에 따르라
- 단순성을 유지하라
- Default를 거부하라
- 최소 privilege원칙을 따르라(권한을 높이 설정하지마라)
- 다른 시스템에서 온 데이터를 검사하라
- 방어 시스템을 다단계로 관리하라
- 효과적인 품질 보증 기술을 사용하라
- 안전한 코딩 표준을 준수하라