보안

[보안] - 소프트웨어 개발 보안

파커초 2024. 2. 3. 21:32

개요

  • 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동
  • 목표
    • 기밀성, 무결성, 가용성
  • 관련기관
    • 행정안전부(총괄), 한국인터넷진흥원(KISA), 발주기관, 사업자, 감리기관
  • 관련법령
    • 개인정보보호법, 개인정보의 안전성 확보 조치 기준 등
 

Secure SDLC

  • SDLC 에 보안 강화를 위한 프로세스를 포함한것
  • 요구사항 분석 - 설계 - 구현 - 테스트 - 유지보수
  • 보안요소
    • 기밀성(비밀), 무결성(정확성), 가용성, 인증, 부인 방지 송수신 증거 제공
  • 시큐어 코딩(secure coding)
    • 소프트웨어의 구현 단계에서 발생할 수 있는 보안 취약점 들을 최소화하기 위한 보안 요소들을 고려하여 코드를 구현하는 것
 

세션 통제

  • 개요: 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것
  • 불충분한 세션 관리
  • 잘못된 세션에 의한 정보노출
    • 다중 스레드 환경에서 멤버 변수에 저장할때 발생할 수 있음
      • 지역변수를 활용하여 변수의 범위를 제한한다.
  • 세션 설계시 고려 사항
    • 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI 구성
      • Time out
        • 중요도가 높으면 2~5분, 그게아니면 15 ~ 30분
    • 로그아웃 요청 시 할당 된 세션이 완전히 제거 되도록 함
  • 세션 ID 관리방법
    • 안전한 서버에서 최소 128비트로 생성, 난수알고리즘 적용

입력 데이터 검증 및 표현

  • 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야함
  • 보안 약점
    • SQL 삽임 [무단 DB]
    • 경로 조작 및 자원 삽임 [입출력]
    • 크로스 사이트 스크립팅(XSS) [정보 탈취]
    • 운영체제 명령어 삽임 [명령어 실행]
    • 위험한 형식 파일 업로드
    • 신뢰되지 않는 URL 주소로 자동접속 연결

보안 기능

  • 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항복들
  • 보안기능의 보안 약점
    • 적절한 인증없이 중요기능 허용 → 재인증
    • 부적절한 인가 → 접근제어 검사
    • 중요한 자원에 대한 잘못된 권한 설정 → 인가 검사
    • 취약한 암호화 알고리즘 사용 0
    • 중요정보 평문 저장 및 전송 → 암호화 과정을 거치도록 함
    • 하드코드된 비밀번호 → 패스워드는 반드시 암호화 하여 별도의 파일에 저장
 

시간 및 상태

  • 개요
    • 시간과 실행 상태를 관리하여 시스템이 원활하게 동작되도록 하기 위한 보안 검증 항목들
  • 보안약점
    • TOCTOU 경쟁 조건
      • 검사 시점과 사용 시점을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
      • 프로세스가 가진 자원정보와 실제 자원 상태가 일치하지 않는 동기화 오류와 교착상태 등이 발생 할 수 있음
      • 코드 내에 동기화 구문을 사용하여, 해당 자원에는 한번에 하나의 프로세스만 접근 가능하도록 구성함으로써 방지 할수 있음
      • 검사 시점(Time of Check), 사용 시점(Time of Use)
    • 종료되지 않는 반복문 * 재귀함수
      • 무한루프

에러처리

  • 개요: 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목들
  • 보안 약점
    • 오류 메세지를 통한 정보노출: 스택 트레이스 (Stack Trace) => 최소한의 정보만 노출할 수 있게함
    • 오류 상황 대응 부재
    • 부적절한 예외처리
      • 함수에 대한 반환값, 오류등을 세부적으로 처리하지 않을경우 발생가능

코드 오류의 개요

  • 소프트웨어 구현 단계에서 개발자들이 개발 중 실수하기 쉬운 형 반환, 자원 반환등의 오류를 예방하기 위한 보안 점검 항목들
  • 코드 오류로 발생할 수 있는 보안 약점
    • 널 포인터 역참조
    • 부적절한 자원 해제
    • 해제된 자원 사용
    • 초기화 되지 않는 변수 사용

캡슐화

  • 정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목들
  • 보안 약점
    • 잘못된 세션에 의한 정보 노출: 멤버변수 → 지역변수
    • 제거되지 않고 남은 디버그 코드
    • 시스템 데이터 정보 노출
    • Public 메서드로부터 반환된 Private 배열
    • Private 배열에 Public 데이터 할당
 

API 오용

  • 개요
    • 소프트웨어 구현 단계에서 API 를 잘못 사용하거나 보안에 취약한 API 를 사용하지 않도록 하기 위한 보안 검증 항목
  • 보안 약점
    • DNS Lookup 에 의존한 보안 결정
      • 방지하기 위해 IP를 직접입력
    • 취약한 API 사용
      • C strcat(), strcpy(), sprintf()
  • 다음은 API 오용으로 발생할 수 있는 보안 약점 중 하나에 대한 설명이다. 괄호에 들어갈 적합한 용어를 쓰시오.
  •  

암호 알고리즘

  • 개요
    • 평문을 암호화된 문장으로 만드는 방법
  • 암호화 종류
    • 양방향: 개인키, 공개키
      • SEED(128bit, 256bit), ARIA(2004 년도에 국정원에서 개발), DES, AES, RSA
    • 단방향: HASH
      • SHA 시리즈, MD5, N-NASH, SNEFRU