• Secure SDLC
    • Secure SDLC란?
      • 보안상 안전한 소프트웨어 개발을 위해 SDLC (소프트웨어 개발 생명 주기)에 보안 활동들을 적용하여 개발하는 것
      • Secure SDLC 요구사항 분석, 설계, 구현, 테스트, 유지 보수 등의 단계에서 수행할 보안 활동을 제시하며 대표적으로 CLASP, SDL이 있음
    • Secure SDLC 단계별 보안 활동
      • 요구사항 분석 단계의 보안 활동
        • 요구사항 분석 단계에서 보안 항목에 해당하는 요구사항을 식별하여 보안 활동을 수행
        • 전산화된 정보들이 보안 등급 별로 분류되어 관리
      • 설계 단계의 보안 활동
        • 요구사항 분석 단계에서 식별된 보안 요구사항 부분들을 소프트웨어 설계 단계에 반영
        • 시스템에서 발생할 수 있는 위협들을 식별하여 위협 모델링 검토, 보안 대책, 사고 발생 시 영향 범위와 대응책, 보안 통제 기준 설정 등을 프로세스 설계에 반영
      • 구현 단계의 보안 활동
        • 표준 코딩 정의서나 소프트웨어 개발 보안 가이드를 준수하고 설계 단계에 따라 보안 요구사항을 구현
        • 단위 테스트 과정에서 발생할 수 있는 보안 취약점을 제거
      • 테스트 단계의 보안 활동 
        • 보안 요구사항이나 설계 단계에서의 위협과 취약점들을 점검하여 정확히 반영되고 동작되는지를 확인
        • 동적 분석 도구나 모의 침투 테스트를 통해 설계 단계에서 식별된 위협들의 해결여부를 검증하고 추가로 제시된 위협들과 취약점을 테스트 계획을 수립하고 시행
      • 유지 보수 단계의 보안 활동
        • 개발된 소프트웨어를 수행하고 새로운 기능을 추가하거나 발생할 수 있는 보안 문제를 해결
        • 운영체제 상의 문제점이나 소프트웨어 상의 오류 및 버그 등에서 발생할 수 있는 보안 사고에 대한 관리 및 사고 대응, 패치 관리 및 교육이 병행
  • 입력 데이터 검증 및 표현
    • 입력 데이터 검증 및 표현이란?
      • 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 소프트웨어 구현 단계에서 검증해야 하는 보안 점검 항목
    • 보안 약점
      • SQL 삽입
        • 검증되지 않은 외부 입력값이 입력란에 SQL 쿼리문이 삽입되어 악의적인 쿼리가 실행되는 보안 약점
      • 경로 조작 및 자원 삽입
        • 사용자 입력값이 시스템 자원 접근 경로를 조작하여 서버 자원을 수정, 삭제 할 수 있는 보안 약점
      • 크로스사이트 스크립팅 (XSS)
        • 웹페이지 (게시판 등)에 악의적인 스크립트를 삽입하여 접속자들의 정보를 탈취하거나 비정상적인 기능 수행을 유발하는 보안 약점
      • 운영체제 명령어 삽입
        • 검증되지 않은 외부 입력 값이 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점
      • 위험한 형식 파일 업로드
        • 파일 형식에 대한 검증 없이 악의적인 명령어가 포함된 스크립트 파일의 업로드를 허용하여 시스템에 손상을 주거나 시스템 제어로 발생할 수 있는 보안 약점
      • 신뢰되지 않는 URL 주소로 자동접속 연결
        • 검증되지 않은 입력값으로 사이트 주소를 받아 방문자를 피싱 사이트로 유도하는 보안 약점
      • XML 삽입
        • 검증되지 않은 외부 입력값이 XQuery 쿼리문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안 약점
      • XPath 삽입
        • 검증되지 않은 외부 입력값이 XPath 쿼리문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안 약점
      • LDAP (디렉토리 서비스 조회) 삽입
        • 검증되지 않은 외부 입력값이 LDAP 명령문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안 약점
      • 크로스사이트 요청 위조
        • 검증되지 않은 외부 입력값에 의해 브라우저에서 악의적인 스크립트가 실행되어 공격자가 원하는 요청이 다른 사용자의 권한으로 서버에 전송되는 보안 약점
  • 보안 기능
    • 보안 기능이란?
      • 소프트웨어 구현 단계에서 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목
    • 보안 약점
      • 적절한 인증 없는 중요 기능 허용
        • 적절한 인증 없이 중요 정보인 금융정보, 개인정보, 인증정보 등을 열람할 수 있게 하는 보안 약점
      • 부적절한 인가
        • 적절한 접근 제어 없이 외부 입력값을 포함한 문자열로 중요자원에 접근할 수 있는 보안 약점
      • 중요한 자원에 대한 잘못된 권한 설정
        • 프로그램 설정, 민감한 사용자 데이터 등의 중요자원에 대한 적절한 접근 권한을 부여하지 않아, 인가되지 않은 사용자 등에 의해 중요정보가 노출, 수정되는 보안 약점
      • 취약한 암호화 알고리즘 사용
        • 금융정보, 개인정보, 인증정보 등의 중요 정보의 기밀성을 보장할 수 없는 취약한 암호화 알고리즘을 사용하여 정보가 노출될 수 있는 보안 약점
      • 중요정보 평문저장 및 전송
        • 비밀번호, 개인정보 등 중요 정보를 암호화하여 저장하지 않아 정보가 노출될 수 있는 보안 약점
      • 하드코드된 비밀번호
        • 소스코드 내에 비밀번호가 하드코딩되어 소스 코드 유출시 노출 우려 및 주기적 변경 등 수정이 용이하지 않는 보안 약점
      • 충분하지 않은 키 길이 사용
        • 데이터의 기밀성, 무결성 보장을 위해 사용되는 키의 길이가 충분하지 않아 기밀정보 누출, 무결성이 깨지는 보안 약점
      • 적절하지 않은 난수 값 사용
        • 예측 가능한 난수 사용으로 공격자로 하여금 다음 숫자 등을 예상하여 시스템 공격이 가능한 보안 약점
      • 하드코드된 암호화 키
        • 소스 코드 내에 암호화키가 하드코딩되어 소스코드 유출 시 노출 우려 및 키 변경이 용이하지 않은 보안 약점
      • 취약한 비밀번호 허용
        • 비밀번호 조합 규칙(영문, 숫자, 특수문자 등) 미흡 및 길이가 충분하지 않아 노출될 수 있는 보안 약점
      • 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출
      • 주석문 안에 포함된 시스템 주요 정보
      • 솔트 없이 일방향 해시함수 사용
      • 무결성 검사 없는 코드 다운로드
      • 반복된 인증시도 제한 기능 부재
  • 세션 통제
    • 세션 통제란?
      • 클라이언트와 서버가 서로 연결된 후 연결이 종료된 클라이언트의 정보가 삭제되지 않고 사용 가능한 상태로 방치되면 허가되지 않은 사용자에 의해 시스템의 기능이 사용되거나 다른 개인의 중요정보에 접근하는 침해사고가 발생
    • 세션 통제 취약점
      • 불충분한 세션 관리
        • 사용자가 로그인 할 경우 일정한 규칙이 존재하는 세셔ID가 발급되거나 세션 타임아웃을 너무 길게 설정한 경우 공격자에 의해 사용자 권한이 도용될 수 있는 취약점
      • 잘못된 세션에 의한 정보노출
        • 다중 스레드 환경에서는 싱글톤 객체 필드에 경쟁조건이 발생할 수 있는 보안 약점
  • 암호 알고리즘
    • 암호 알고리즘이란?
      • 중요 정보 즉 패스워드, 주민번호, 은행계좌 등과 같은 정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 절차 및 방법
    • 비밀키 암호화 (Secret Key Encryption) 기법
      • 대칭키 암호화 기법, 단일키 암호화 기법
      • 암호화 키와 복호화 키가 동일: 송신 측에서 평문을 암호화하기 위해 사용하는 암호화 키와 수신 측에서 수신된 암호문을 평문으로 해독하기 위한 복호화 키가 같은 암호화 시스템
      • 장점: 암호화 및 복호화 속도는 빠르고 단순한 알고리즘, 암호문 크기가 작음
      • 단점: 키를 분배하고 관리하는 방법이 어려움
      • 알고리즘
        • 블록 암호화 방식
          • 한번에 하나의 데이터 블록을 암호화
          • 종류: DES, SEED, AES, ARIA
        • 스트림 암호화 방식
          • 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화
          • 종류: LFSR, RC4
    • 공개키 암호화 (Public Key Encryption) 기법
      • 비대칭키 암호화 기법, 이중키 암호화 기법
      • 암호화 키와 복호화 키가 서로 다르며 암호화 키는 공개하고 복호화 키는 비공개
      • 장점: 키의 생성 및 분배가 용이하고 관리해야 할 키의 개수가 적음
      • 단점: 암호화 / 복호화 속도가 느리며 알고리즘이 복잡하고 암호문의 크기가 큼
      • 알고리즘: RSA, Elgamal
    • 해시 (Hash)
      • 임의의 길이의 메시지를 선택하여 고정된 길이의 값으로 변환하는 것
      • 해시 함수에 의해 얻어지는 값은 해시 값이라고 하며 해시 값은 계산하기 쉬우나 원래의 메시지로 돌아가는 것은 불가능함
      • 데이터 암호화, 무결성 검증을 위해 사용, 정보보호의 다양한 분야에서 활용
      • 해시 알고리즘에는 대표적으로 SHA, MD5, RMD160 등
  • 에러 처리
    • 에러 처리
      • 에러 처리란?
        • 소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의하여 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목
      • 보안 약점
        • 오류 메시지를 통한 정보 노출
          • 개발자가 생성한 오류 메시지에 시스템 내부구조, 실행 환경, 사용자 정보, 디버깅 정보 등이 포함되어 민감한 정보가 노출될 수 있는 보안 약점
        • 오류 상황 대응 부재
          • 시스템에서 발생하는 오류 상황을 처리하지 않아 프로그램 실행정지 등 의도하지 않은 상화이 발생할 수 있는 보안 약점
    • 코드 오류
      • 코드 오류란?
        • 소프트웨어 개발자가 코딩 시 형 변환 오류, 부적절한 자원 반환 등과 같은 실수를 범할 수 있는 오류에 대한 보안 점검 항목
      • 보안 약점
        • 널(NULL)로 설정된 변수의 주소 값을 참조했을 때 발생하는 보안 약점
      • 부적절한 자원 해제
        • 사용된 자원을 적절히 해제하지 않으면 자원 누수 등이 발생하고, 자원이 부족하여 새로운 입력을 처리할 수 없게 되는 보안 약점
      • 해제된 자원 사용
        • 메모리 등 해제된 자원을 참조하여 예기치 않은 오류가 발생될 수 있는 보안 약점
      • 초기화되지 않은 변수 사용
        • 변수를 초기화하지 않고 사용하여 예기치 않은 오류가 발생될 수 있는 보안 약점
    • 시간 및 상태
      • 시간 및 상태란?
        • 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 시스템이 원활하게 동작되도록 하기 위한 보안 검증 항목
      • 보안 약점
        • TOCTOU 경쟁조건
          • 멀티 프로세스 상에서 자원을 검사하는 시점(Time Of Check)과 사용하는 시점(Time Of Use)이 달라서 발생하는 보안 약점
        • 종료되지 않는 반복문 또는 재귀함수
          • 종료 조건 없는 제어문 사용으로 반복문 또는 재귀함수가 무한히 반복되어 발생할 수 있는 보안 약점
  • 캡슐화
    • 캡슐화란?
      • 외부에 은닉이 필요한 중요한 데이터와 기능을 충분하지 못하게 캡슐화하였을 때 인가되지 않은 사용자에게 데이터 유출, 권한 문제 등이 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목
    • 보안 약점
      • 잘못된 세션에 의한 정보 노출
        • 잘못된 세션에 의해 인가되지 않은 사용자에게 중요정보가 노출될 수 있는 보안 약점
      • 제거되지 않고 남은 디버그 코드
        • 디버깅을 위해 작성된 코드를 통해 인가되지 않은 사용자에게 중요정보가 노출될 수 있는 보안 약점
      • 시스템 데이터 정보 노출
        • 사용자가 볼 수 있는 오류 메시지나 스택 정보에 시스템 내부 데이터나 디버깅 관련 정보가 공개되는 보안 약점
      • Public 메서드로부터 반환된 Private 배열
        • Private 로 선언된 배열을 Public 으로 선언된 메서드를 통해 반환(return)하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열이 수정될 수 있는 보안 약점
      • Private 배열에 Public 데이터 할당
        • Public 으로 선언된 데이터 또는 메서드의 파라미터가 Private로 선언된 배열에 저장되면, Private 배열을 외부에서 접근할 수 있게 되는 보안 약점
  • API 오용
    • API 오용이란?
      • API 를 잘못 이용하거나 보안에 취약한 API를 이용하지 않도록 하기 위한 보안 검증 항목
    • 보안 약점
      • DNS Lookup에 의존한 보안 결정
        • DNS는 공격자에 의해 DNS 스누핑 공격 등이 가능하므로 보안 결정을 DNS 이름에 의존할 경우, 보안 결정 등이 노출되는 보안 약점
      • 취약한 API 사용
        • 취약하다고 알려진 함수를 사용함으로써 예기치 않은 보안 위협에 노출될 수 있는 보안 약점
        • 보안 문제로 금지된 함수는 C언어의 두 개의 문자열을 합치는 strcat()함수와 문자열을 복사하는 strcpy()함수, 문자열에 서식지정자를 적용하는 sprintf()함수
        • 안전한 함수인 strcat_s(), strcpy_s(), sprint_s()로 대체

WRITTEN BY
ppdha82

,