소프트웨어 개발 보안 설계

2022. 6. 16. 17:49정처기(필기)/정보시스템구축관리

(1) SW 개발 보안

1. SW 개발 보안의 개념

- 소스 코드 등에 존재하는 보안 취약점을 제거하고, 보안을 고려하여 성능을 설계 및 구현하는 등 소프트웨어 개발 과정에서 지켜야 할 일련의 보안 활동

 

2. SW 개발 보안의 3대 요소

- 기밀성 : 인가되지 않은 개인 혹은 시스템 접근에 따른 정보 공개 및 노출을 차단하는 특성

- 무결성 : 정당한 방법을 따르지 않고서는 데이터가 변경될 수 없으며, 데이터를 파괴하거나 훼손하지 않음을 보장하는 특성

- 가용성 : 권한을 가진 사용자나 애플리케이션이 원하는 서비스를 지속 사용할 수 있도록 보장하는 특성

 

▼ SW 개발 보안 용어

  • 자산(Assets) : 조직의 데이터 또는 조직의 소유자가 가치를 부여한 대상(서버의 하드웨어, 기업의 중요 데이터)
  • 위협 : 조직이나 기업의 자산에 악영향을 끼칠 수 있는 사건이나 행위(해킹, 삭제, 파손 등)
  • 취약점 : 위협이 발생하기 위한 사전 조건으로 시스템의 정보 보증을 낮추는 데 사용되는 약점
  • 위험 : 위협이 취약점을 이용하여 조직의 자산 손실 피해를 가져올 가능성

 

더보기

(2) Secure SDL

1. Secure SDL이란

- 개발 단계에서 발생하는 설계, 구현상의 보안 약점 극복을 위한 보안 개발 방법론

 

2. Secure SDL 프로세스

  1. 계획 : 문제점 제시 및 요구사항 파악
  2. 분석 : 보안 요구사항을 분석하고 애플리케이션 사용자의 보안 요구사항을 정의
  3. 설계 : 분석 단계에서 보안 요구사항 분석서의 요구사항 반영
  4. 구현 : 설계 단계의 개발환경 보안 계획에 따라 환경 구성
  5. 테스트 : 기능 명세서, 기본 설계서, 상세 설계서에 반영된 보안사항을 테스트

 

더보기

(3) 입력 데이터 검증 및 표현

1. 입력 데이터 검증 및 표현이란

- 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목들

 

2. 입력 데이터 검증 및 표현 취약점

취약점 설명 대책
XSS(Cross Site Scripting) 검증되지 않은 외부 입력 데이터가 포함된 웹페이지가 전송되는 경우, 사용자가 해당 웹페이지를 열람함으로서 웹페이지에 포함된 부적절한 스크립트가 실행되는 공격 1. 특수문자 등록을 방지하기 위해 특수문자 필터링
2. HYML 태그 사용 금지
3. 자바스크립트로 시작하는 문자열은 모두 문자열 변환처리
사이트 간 요청 위조(CSRF) 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격 입력화면 폼을 작성시 GET 방식보다는 Post방식 사용
세션별 CSRF 토큰을 사용하여 점검
중요기능의 경우 재인증을 통해 안전하게 실제 요청 여부를 확인하도록 구현
SQL 삽입 응용 프로그램의 보안 취약점을 이용해서 악의적인 SQL 구문을 삽입, 실행시켜서 데이터베이스의 접근을 통해 정보를 탈취하거나 조작 등의 행위를 하는 공격기법 바인딩 매개변수 방식 적용하여 사전에 변수 타입을 명시적으로 지정
사용자로부터 입력될 수 있는 모든 값을 체크하여 필터링
Servlet Filter 기능 적용

 

[1] XSS

  • Stored XSS : 방문자들이 악성 스크립트가 포함된 페이지를 읽어 봄과 동시에 악성 스크립트가 브라우저에서 실행되면서 감염되는 기법
  • Reflected XSS : 공격 시 악성 URL을 생성한 후 이메일로 사용자에게 전송하면 사용자가 URL 클릭 시 즉시 공격 스크립트가 피해자로 반사되어 접속 사이트에 민감정보를 공격자에게 전송하는 기법
  • DOM XSS : 공격자는 DOM 기반 XSS 취약점이 있는 브라우저를 대상으로 조작된 URL을 이메일을 통해 발송하고 피해자가 URL 클릭 시 공격 피해를 당하는 기법

 

▼ XSS 공격 방식

  1. 암의의 XSS 취약점이 존재하는 서버에 XSS 코드를 작성하여 삽입 저장
  2. 해당 웹 서비스 사용자가 공격자가 작성해 놓은 XSS 코드에 접근
  3. 사용자가 XSS 코드가 저장된 페이지에 정보를 요청
  4. 사용자의 시스템에서 XSS 코드 실행
  5. XSS 코드가 실행될 결과가 공격자에게 전달되고 공격자는 결과를 가지고 웹 서버에서 2차 해킹 시도

 

[2] SQL 삽입

 

공격 유형 설명
Form SQL
Injection
HTML Form 기반 인증을 담당하는 애플리케이션의 취약점이 있는 경우 사용자 인증을 위한 쿼리 문의 조건을 임의로 조작하여 인증을 우회하는 기법
Uion SQL
Injection
union select 쿼리를 이용하여 한 쿼리의 결과를 다른 쿼리의 결과에 결합하여 공격하는 기법
Stored Procedure SQL Injection 저장 프로시저를 이용하여 공격하는 기법
Mass SQL
Injection
기존 SQL Injection의 확장된 개념으로 한 번의 공격으로 대량의 DB 값이 변조되어 홈페이지에 치명적인 영향을 미치는 공격기법
Error-Based SQL Injection DB 쿼리에 대한 에러값을 기반으로 한 단계씩 점진적으로 DB 정보를 획득할 수 있는 공격기법
Blind SQL Injection 쿼리 결과의 참과 거짓을 통해 의도하지 않은 SQL 문을 실행함으로써 데이터베이스를 비정상적으로 공격하는 기법

 

▼ SQL 삽입 공격 방식

  1. 응용 프로그램의 취약점 탐지
  2. 악의적인 SQL 구문 삽입하여 인증 우회
  3. 한이 상승되어 DB의 정보 탈취 및 조작 실행

 

[3] CSRF

▼ CSRF 공격 방식

  1. 공격자는 CSRF 스크립트가 포함된 게시물 등록
  2. 사용자는 CSRF 스크립트가 포함된 게시물 열람 요청
  3. 게시물을 읽은 사용자의 권한으로 공격자가 원하는 요청 발생
  4. 공격자가 원하는 CSRF 스크립트 결과가 발생

 

더보기

(4) 보안 기능

1. 보안 기능 개념

- 소프트웨어 개발 단계에서 인증, 접근제어, 기밀성, 암호화, 권한 관리 등을 적절하게 구현하기 위한 보안 점검 항목들이다. 

 

2. 보안 기능 취약점

  • 취약점 -> 적절한 인증 없이 중요 기능 허용, 설명 : 보안 검사를 우회하여 인증과정 없이 중요정보 또는 기능에 접근 및 변경이 가능, 대책 -> 중요정보나 기능을 수행하는 페이지에서는 재인증 기능을 통해 방지
  • 취약점 ->  취약한 알고리즘 사용, 설명 -> 암호화된 환경설정 파일을 해독하여 비밀번호 등의 중요정보 탈취, 대책 -> 안전한 암호화 알고리즘, 안전성이 인증된 암호 모듈을 이용하여 방지
  • 취약점 -> 중요 정보 평문 저장 및 전송, 설명 -> 암호화되지 않은 평문 데이터를 탈취하여 중요 정보 획득 가능, 대책 -> 중요한 정보 저장 및 전송 시 반드시 암호화 과정을 거치도록 함
  • 취약점 -> 하드 코드 된 비밀 번호, 설명 -> 프로그램 코드 내부에 패스워드 포함 시 관리자 정보가 노출될 수 있는 보안 취약점, 대책 -> 패스워드는 암호화하여 별도 파일에 저장
  • 취약점 -> 취약한 패스워드 요구 조건, 설명 -> 취약한 사용자 패스워드 조합 규칙에 따른 사용자 계정 보안 취약점, 대책 -> 패스워드 생성 시 강한 조건 검증 필요

 

더보기

(5) 에러 처리

1. 에러 처리 개념

- 에러 처리는 프로그램 실행 시 발생하는 에러를 예외 처리하지 못하거나, 에러 정보에 중요한 정보가 포함될 때 발생할 수 있는 취약점을 예방하기 위한 보안 점검 항목들

 

2. 에러 처리 취약점

  • 오류 메시지 통한 정보 노출 : 프로그램이 실행환경, 사용자, 관련데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성하여 공격자의 악성 행위를 도와줌 -> 이럴 때는 정해진 사용자에게만 최소한의 정보만 표현
  • 오류 상황 대응 부재 : 오류가 발생할 수 있는 부분을 확인하였으나, 이러한 오류에 대하여 예외 처리를 하지 않았거나 미비로 인해 발생하는 보안 약점 -> 오류가 발생할 수 있는 부분에 예외 처리 구문을 작성
  • 적절하지 않은 예외 처리 : 함수의 결과값에 적절한 처리가 안되어 문제를 야기 -> 값을 반환하는 모든 함수의 결과값을 검사하여, 그 값이 기대한 값인지를 검사하고 구체적인 예외 처리를 통해 방지
더보기

(6) 세션 통제

1. 세션 통제 개념

- 다른 세션 간 데이터 공유 금지 등 세션을 안전하게 관리할 수 있도록 설계

 

더보기

(7) 암호 알고리즘

1. 암호 알고리즘 개념

- 데이터의 무결성 및 기밀성 확보를 위해 쉽게 해독할 수 없는 형태로 변환하는 기법

 

▼ 암호 알고리즘 주요 용어

  • 평문 : 암호화되기 전의 원본 메시지
  • 암호문 : 암호화가 적용된 메시지
  • 암호화 : 평문을 암호문으로 바꾸는 작업
  • 복호화 : 암호문을 평문으로 바꾸는 작업
  • 키 : 적절한 암호화를 위하여 사용하는 값
  • 치환 암호 : 비트, 문자 또는 문자의 블록을 다른 비트, 문자 또는 블록으로 대체하는 방법
  • 전치 암호 : 비트, 문자 또는 블록이 원래 의미를 감추도록 자리바꿈 등을 이용하여 재배열 하는 방법

 

2. 암호 알고리즘 방식

[1] 양방향 방식

① 대칭 키 암호 방식

- 암호화 알고리즘의 한 종류로, 암호화와 복호화에 같은 암호 키를 쓰는 알고리즘

 

▼ 대칭 키 암호 방식 종류

  • 블록 암호 방식 : 긴 평문을 암호화하기 위해 고정 길이의 블록을 암호화하는 블록 암호 알고리즘을 반복하는 방법(DES, AES, SEED)
  • 스트림 암호 방식 : 매우 긴 주기의 난수열을 발생시켜 평문과 더불어 암호문을 생성하는 방식(RC4)

 

② 비대칭 키 암호 방식(= 공개키 암호 방식)

- 사전에 비밀키를 나눠 가지지 않은 사용자들이 안전하게 통신하는 방식

- 공개키와 개인키가 존재하며, 공개키는 누구나 알 수 있지만 그에 대응하는 개인키는 키의 소유자만이 알 수 있다.

- 공개키로 암호화된 메시지는 반드시 개인 키로 복호화 해야 한다. 

- 비대칭 키 암호 방식에는 RSA, ECC, Elgamal, 디피-헬만이 있다.

 

▼ 암호 알고리즘 비교

구분 대칭 키 암호 방식 비대칭 키 암호 방식
대칭 키(비밀키) 비대칭 키(공개키, 개인키)
키의 관계  암호화 키 = 복호화 키 암호화 키와 복호화 키는 같지 않음
키 개수 n(n-1)/2 2n
암호 알고리즘 공개 공개
장점 계산 속도가 빠름 암호화 키 사전 공유 불필요
관리해야 할 키 개수가 적음
단점 키 분배 및 관리의 어려움
기밀성만 보장
계산 속도 느림
알고리즘 DES, AES, SEED 디피-헬만, RSA

 

[2] 일방향 암호 방식(해시 암호 방식)

- 임의 길이의 정보를 입력받아, 고정된 길이의 암호문(해시값)을 출력하는 암호 방식이다. 

- 해시 암호화 알고리즘이 적용된 정보는 복호화가 불가능하다. 

 

▼일방향 암호 종류

  • MAC : 키를 사용하는 메시지 인증 코드(Message Authentication Code)로 메시지의 무결성과 송신자의 인증 보장(HMAC, NMAC)
  • MDC : 키를 사용하지 않는 변경 감지 코드(Modification Detection Code)로 메시지의 무결성 보장(MD5, SHA)

- 해시함수의 경우 레인보우 테이블 공격에 취약할 수 있다.

- 이를 위해 솔트 키를 추가(암호공격을 막기 위해 똑같은 패스워드들이 다른 암호 값으로 저장되도록 추가되는 임의의 문자열)하거나 키 스트레칭(해시값을 알아보지 못하도록 계속해서 해시값을 입력값으로 반복하는 방법)을 사용한다.

 

 

3. 암호 알고리즘 상세

[1] 대칭 키 암호화 알고리즘

  • DES : 미국에서 개발한 블록 암호화 알고리즘, 페이스텔 구조
  • SEED : 국내 KISA에서 개발한 블록 암호화 알고리즘, 총 16회의 라운드 키를 사용하여 암호화
  • AES : 미국 표준 기술 연구소에서 발표한 대칭 키 기반의 블록 암호화 알고리즘으로 개인 키에 대한 전사적 공격이 가능해지는 것을 극복하기 위해 개발(블록 크기느 128bit)
  • ARIA : 2004년 국가정보원과 산학연구협회가 개발한 블록 암호화 알고리즘으로 블록 크기는 총 128비트
  • IDEA : DES를 대체하기 위해 스위스에서 개발한 블록 암호화 알고리즘 
  • LFSR : 시프트 레지스터의 일종으로, 레지스터에 입력되는 값이 이전 상태 값들의 선형 함수로 계산되는 구조

 

[2] 비대칭 키 암호화 알고리즘

  • 디피-헬만 : 최초의 공개키 알고리즘으로 유한 필드 내에서 이산대수의 계산이 어려운 문제를 기본 원리로 하고 있음 
  • RSA : MIT의 수학 교수 세명이 고안한 큰 인수의 곱을 소인수 분해하는 공개키 암호화 알고리즘
  • ECC : 유한체 위에서 정의된 타원곡선 군에서 이산대수 문제에 기초한 공개키 암호화 알고리즘 
  • EIGamal : T.EIGamal이 1984년에 제안한 공개키 알고리즘
  • DSA : NIST에서 미국 전자서명 표준에 사용하기 위해 발표한 정부용 전자서명 알고리즘

 

[3] 해시 암호화 알고리즘

  • MD5 : MD4를 개선한 암호화 알고리즘으로 프로그램이나 파일의 무결성 검사에 사용하는 해시 알고리즘
  • SHA-1 : DSA에서 사용하는 해시 알고리즘
  • SHA-256/384/512 : 256비트의 해시값을 생성하는 해시 함수
  • HAS-160 : 국내 표준 서명 알고리즘을 위하여 개발된 해시 함수
  • HAVAL : 메시지를 1024bit 블록으로 나누고 메시지 다이제스트를 출력하는 해시 알고리즘

 

더보기

(7) 코드 오류

1. 코드 오류 개념

- 소프트웨어 구현 단계에서 프로그램 변환 시 오류, 서버의 리소스 자원의 부적절한 반환 등 개발자가 흔하게 실수하는 프로그램 오류를 예방하기 위한 보안 점검 항목들

 

취약점 설명 대책
널 포인터 역참조 일반적으로 그 객체가 Null이 될 수 없다라고 하는 가정을 위반했을 때 발생 
널 포인터는 메모리의 첫 주소를 가리키는데, 해당 주소를 참조할 경우에 소프트웨어가 비정상적으로 종료함
공격자가 의도적으로 역참조를 실행할 때 문제가 발생할 수 있음
Null이 될 수 있는 레퍼런스는 참조하기 전에 Null값인지를 검사하여 안전한 경우에만 사용
정수를 문자로 변환 정수를 문자로 변환하면서 표현할 수 없는 범위의 값이 잘려나가 문자에 대한 저장 값이 올바르지 않게 됨 이럴 때는 변환 값의 크기가 변환 값이 저장되는 변수의 크기보다 크지 않아야 함
부적절한 자원 해제 힙 메모리, 소켓 등 프로그램 자원 사용 후, 프로그램 오류로 인해 종료된 자원을 반환하지 못했을 때 발생할 수 있는 보안 취약점 finally 블록에서 자원이 반환되도록 코딩할 것
초기화되지 않은 변수 사용 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생 변수 선언 시 할당된 메모리를 초기화함으로써 방지

 

더보기

(8) 캡슐화

1. 캡슐화 개념

- 외부에 은닉이 필요한 중요한 데이터와 필요한 기능성을 불충분하게 캡슐화했을 때 인가되지 않은 사용자에게 데이터 유출, 권한 문제 등이 발생할 수 있는 보안 취약점 예방을 위한 보안 검증 항목들

 

더보기

(9) API 오용

1. API 오용 개념

- 서비스에서 제공되는 이용에 반하는 방법으로 API를 이용하거나 보안에 취약한 API를 오용하여 발생할 수 있는 보안 취약점 예방을 위한 보안 검증 항목들