Updated:

Secure SDLC

  • Seven Tiuchpoints
    • 소프트웨어 보안의 모범사례를 SDLC에 통합한 방벙론이다.
    • 설계 및 개발 과정의 모든 산출물에 대해 위험 분석 및 테스트를 수행한다.
  • 보안 3대 요소
    • 기밀성: 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용되며, 정보가 전송 중에 노출되더라도 데이터를 읽을 수 없음
    • 무결성: 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있음
    • 가용성: 인가받은 사용자는 언젤도 사용할 수 있음

세션 통제

  • 세션 하이재킹(Sessiong Hijacking)
    • 서버에 접속하고 있는 클라이언트들의 세션 정보를 가로채는 공격기법으로, 세션 가로채기라고도 한다.
    • 탐지 방법에는 비동기화 상태 탐지, ACK Storm 탐지, 패킷의 유실 탐지, 예상치 못한 접속의 리셋 탐지가 있다.

입력 데이터 검증 및 표현

  • SQL 삽입(SQL Injection)
    • 웹 응용 프로그램에 SQL을 삽입하여 내부 데이터베이스(DB) 서버의 데이터를 유출 및 변조하고, 관리자 인증을 우회하는 보안 약점이다.
  • 경로 조작 및 자원 삽입
    • 데이터 입출력 경로를 조작하여 서버 자원을 수정, 삭제할 수 있는 보안 약점이다.
  • 크로스사이트 스크립팅(XSS; Cross Site Scipting)
    • 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발하는 보안 약점이다.
  • 운영체제 명령어 삽입
    • 외부 입력값ㅂ을 통해 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점이다.
  • 메모리 버퍼 오버플로
    • 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리의 범위를 넘어선 위치에서 자료를 읽거나 쓰려고 할때 발생하는 보안 약점이다.

보안 기능

  • 하드코드된 비밀번호
    • 소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 관리자 권한을 탈취할 수 있다.
    • 하드코드: 데이터를 코드 내부에 직접 입력하여 프로그래밍 하는 방식

에러처리

에러처리의 개요

 에러처리는 소프트웨어 실행 중 발생할 수 있는 오류(Error)들을 사전에 정의하여 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목들이다. 각 프로그래밍 언어의 예외처리 구문을 통해 오류에 대한 사항을 정의한다. 예외처리 구문으로 처리하지 못한 오류들은 중요정보를 노출시키거나, 소프트웨어의 실행이 중단되는 등 예기치 못한 문제를 발생시킬 수 있다. 에러처리의 미비로 인한 코딩이 유발하는 보안 약점에는 오류 메시지를 통한 정보 노출, 오류 상황 대응 부재, 부적절한 예외처리가 있다.

오류 메시지를 통한 정보노출

 오류 메시지를 통한 정보노출은 오류 발생으로 실행 환경, 사용자 정보, 디버깅 정보 등의 중요 정보를 소프트웨어가 메시지로 외부에 노출하는 보안 약점이다. 오류 메시지를 통해 노출되는 경로 및 디버깅 정보는 해커의 악의적인 행위를 도울 수있다. 예외처리 구문에 예외의 이름이나 스택 트레이스를 출력하도록 코딩한 경우 해커는 소프트웨어의 내부구조를 쉽게 파악할 수 있다. 오류 발생 시 가능한 한 내부에서만 처리되도록 하거나 메시지를 출력할 경우 최소한의 정보 또는 사전에 준비된 메시지만 출력되도록 함으로써 방지할 수 있다.

오류 상황 대응 부재

 오류 상황 대응 부제는 소프트웨어 개발 중 예외처리를 하지 않았거나 미비로 인해 발생하는 보안 약점이다. 예외처리를 하지 않은 오류들로 인해 소프트웨어의 실행이 중단되거나 의도를 벗어난 동작이 유도될 수 있다. 오류가 발생할 수 있는 부분에 예외처리 구문을 작성하고, 제어문을 활용하여 오류가 악용되지 않도록 코딩함으로써 방지할 수 있다.

부적절한 예외처리

 부적절한 예외처리는 함수의 반환값 또는 오류들을 세분화하여 처리하지 않고 광범위하게 묶어 한 번에 처리하거나, 누락된 예외가 존재할 때 발생하는 보안 약점이다. 모든 오류들을 세세하게 정의하여 처리할 필요는 없지만, 모든 오류들을 광범위한 예외처리 구문으로 정의해 버리면 예기치 않은 문제가 발생할 수 있다. 함수 등이 예상했던 결과와 다른 값을 반환하여 예외로 처리되니 않은 경우 잘못된 값으로 인해 다양한 문제가 발생할 수 있다. 모든 함수의 반환값이 의도대로 출력되는지 확인하고, 세분화된 예외처리를 수행함으로써 방지 할 수 있다.

코드 오류

  • 스택 가드(Stack Guard)
    • 메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정 값을 저장한 후 그 값이 변경되었을 경우 오버플로우 상태로 판단하여 프로그램 실행을 중단함으로써 잘못된 복귀 주소의 호출을 막는 기술이다.

캡슐화

  • 접근 지정자(접근 제어자)
    • 프로그래밍 언어에서 특정 개체를 선언할 때 외부로부터의 접근을 제안하기 위해 사용하는 예약어이다.
    • Public, Protected, Degault, Private

암호 알고리즘

  • 개인키 암호화(Private Key Encryption) 기법
    • 동일한 키로 데이터를 암호화하고 복호화한다.
    • 알고리즘이 단순하므로 암호화/복호화 속도가 빠르다
    • 대칭 암호 기법 또는 비밀키 암호화 기법이라고도 한다.
  • 개인키 암호화 기법의 종류
    • 블록 암호화 방식
      • 한 번에 하나의 데이터 블록을 암호화하는 방식이다.
      • DES, SEED, AES, ARIA, IDEA 등
    • 스트림 암호화 방식
      • 평문과 동일한 길이의 스트림을 생성하여 비트/바이트/웓 단위로 암호하하는 방식이다.
      • LFSR, RC4
  • 공개키 암호화(Public Key Encryption) 기법
    • 데이터를 암호화할 때 사용하는 공개키(Public Key)는 데이터베이스 사용자에게 공개하고, 복호화할 때의 비밀키(Secret Key)는 관리자가 비밀리에 관리한다.
    • 공개키 암호화 기법에서 암호화 대상이 n개일 때 사용되는 키의 개수는 2n이다.
    • 비대칭 암호 기법이라고도 한다.
    • 대표적으로는 RSA(Rivest Shamir Adleman) 기법이 있다.
    • 키의 분배가 용이하고, 관리해야 할 키의 개수가 적다.
  • ARIA
    • 블록 암호화 알고리즘이다.
    • 블록 크기는 128비트이며, 키 길이에 따라 128, 192, 256으로 분류된다.
  • DES
    • 64비트 개인키 암호화 알고리즘이다.
  • AES
    • DEX에 한계를 느낀 미국 표쥰 기술 연구소(NIST)가 발표한 개인키 암호화 알고리즘이다.
  • RSA
    • 공개키 암호화 알고리즘이다.
    • 큰 숫자를 소인수분해 하기 어렵다는 것에 기반하여 만들어진 공개키 암호화 알고리즘이다.
  • ECC
    • 이산대수 문제를 타원곡선으로 옮겨 기밀성과 효율성을 높인 암호화 알고리즘이다.
  • Rabin
    • 소인수분해의 어려움에 안전성의 근거를 둔 암호화 알고리즘이다.
  • 해시(Hash)
    • 임의의 길이의 입력 데이터나 메시지를 고정된 길의의 값이나 키로 변환하는 것을 의미한다.
    • 복호화가 거의 불가능한 일방향 함수에 해당한다.
    • SHA 시리즈, MD4, MD5, N-NASH, SNEFRU 등이 있다.
  • 솔트(Salt)
    • 암호화를 수행하기에 앞서 원문에 무작위의 값을 덧붙이는 과정이다.
    • 솔트를 사용하면 같은 패스워드에 대해 암호화를 수행하더라고 서로 다른 결과가 나타나게 되어 더 안전하게 암호화된 데이터를 관리할 수 있게 된다.

댓글남기기