SW개발 보안 구현 - 핵심정리

소프트웨어 개발 보안 구축

SW개발 보안 구현

1. 암호 알고리즘

  • 주민번호, 패스워드, 은행계좌 등 중요 정보를 보호하기 위해 평문을 암호문으로 만드는 절차 또는 방법
  • 해시를 사용하는 단방향 암호화 방식과 개인키와 공개키로 분류되는 양방향 암호화 방식으로 구분됨
  • 암호화방식
    • Stream 방식
      • 평문과 동일한 길이의 스트림을 생성하여 비트단위로 암호화
    • Block 방식
      • 한 번에 하나의 데이터 블록을 암호화

2. 코드오류

  • 코드 오류는 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형(Type) 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목
  • 코드 오류로 발생할 수 있는 보안 약점
    • Null 포인터 역참조
      • Null은 값이 없음을 의미하며 포인터는 메모리의 위치를 가리킴.
    • 부적절한 자원 해제
    • 해제된 자원 사용
    • 초기화되지 않은 변수 사용

3. 캡슐화

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

4. API 오용

  • 소프트웨어 구현단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목들
  • API 오용의 보안 약점
    • DNS lookup에 의존한 보안 결정
    • 취약한 API 사용

SW개발 보안 구현 - API 오용

소프트웨어 개발 보안 구축

SW개발 보안 구현

API 오용 개념

  • 소프트웨어 구현단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목들
  • API 오용의 보안 약점
    • DNS lookup에 의존한 보안 결정
    • 취약한 API 사용
      • API
        • 프로그래머가 라이브러리가 제공하는 여러 함수를 이용하여 프로그램을 작성할 때 해당 함수의 내부 구조는 알 필요없이 단순히 API에 정의된 입력 값을 주고 결과 값을 사용

보안 약점의 종류

1. DNS lookup에 의존한 보안 결정

  • 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생하는 보안 약점
  • DNS 엔트리를 속여 동일한 도메인에 속한 서버인 것처럼 위장하거나, 사용자와 서버 간의 네트워크 트래픽을 유도하여 악성 사이트를 경유하도록 조작할 수 있음
  • DNS 검색을 통해 도메인 이름으로 비교하지 않고 IP주소를 직접 입력하여 접근함으로써 방지

2. 취약한 API 사용

  • 보안 문제로 사용이 금지된 API를 사용하거나, 잘못된 방식으로 API를 사용했을 때 발생하는 보안 약점
  • 보안 상 안전한 API라고 하더라도 자원에 대한 직접 연결이나 네트워크 소켓을 통한 직접 호출과 같이 보안에 위협을 줄 수 있는 인터페이스를 사용하는 경우 보안 약점이 노출됨
  • 보안 문제로 금지된 함수는 안전한 함수로 대체하고, API 매뉴얼을 참고하여 보안이 보장되는 인터페이스를 사용함으로써 방지 가능

SW개발 보안 구현 - 캡슐화

소프트웨어 개발 보안 구축

SW개발 보안 구현

캡슐화의 보안 점검

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

캡슐화 보안 약점

1. 잘못된 세션에 의한 정보 노출

  • 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점
  • 싱글톤 패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출 될 수 있음
  • 멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한하여 방지
  • 잘못된 세션에 의한 정보 노출은 SW개발 보안 설계의 세션통제 보안 약점으로도 나오는데, 세션통제는 분석, 설계 단계의 점검 내용이고 캡슐화는 구현단계의 점검내용만 다를 뿐 나머지는 동일

2. 제거되지 않고 남은 디버그 코드

  • 개발 중에 버그 수정이나 결과값 확인을 위해 남겨둔 코드들로 인해 발생하는 보안 약점
  • 디버그 코드에 인증 및 식별 절차를 생략하거나 우회하는 코드가 포함되어 있는 경우 공격자가 악용 가능
  • 배포전에 코드 검사를 통해 남아있는 디버그 코드를 삭제함으로써 방지 가능

3. 시스템 데이터 정보 노출

  • 시스템 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 코딩했을 때 발생하는 보안 약점
  • 메시지는 최소한의 정보만을 제공함으로써 방지 가능

4. Public 메소드로부터 반환된 Private 배열

5. Private 배열에 Public 데이터 할당

SW개발 보안 구현 - 코드오류

소프트웨어 개발 보안 구축

SW개발 보안 구현

코드오류의 개념

  • 코드 오류는 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형(Type) 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목
  • 코드 오류로 발생할 수 있는 보안 약점
    • Null 포인터 역참조
      • Null은 값이 없음을 의미하며 포인터는 메모리의 위치를 가리킴.
    • 부적절한 자원 해제
    • 해제된 자원 사용
    • 초기화되지 않은 변수 사용

보안약점종류

1. 널 포인터(Null Pointer) 역참조

  • 널포인트가 가리키는 메모리어떠한 값을 저장할 때 발생하는 보안 약점
  • 많은 라이브러리 함수들이 오류가 발생할 경우 널 값을 반환하는데, 이 반환값을 포인터로 참조하는 경우 발생
  • 널포인터는 메모리의 첫 주소를 가리키며, 해당 주소를 참조할 경우 소프트웨어가 비정상적으로 종료 됨
  • 공격자는 널 포인터 참조 오류로 발생하는 예외 상황을 악용할 수 있음
  • 널 값을 갖고 있는지 검사함으로써 방지
  • null이 이미 없는 것이기 때문에 초기화 불가

2. 부적절한 자원 해제

  • 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점
  • 힙 메모리, 소켓 등의 유일한 시스템 자원이 계속 점유하고 있으면 자원 부족으로 인해 새로운 입력을 처리하지 못함
    • 힙 메모리
      • 소프트웨어가 자유롭게 사용할 수 있는 메모리 공간
    • 소켓
      • 데이터 교환을 위한 통로
  • 자원 반환 코드가 누락되었는지 확인하고, 오류로 인해 함수가 중간에 종료되었을 때 예외처리에 관계없이 자원이 반환되도록 코딩함으로써 방지

3. 해제된 자원 사용

  • 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생하는 보안 약점
  • 반환된 메모리를 참조하는 경우 예상하지 못한 값 또는 코드를 수행하게 되어 의도하지 않은 결과 발생
  • 주소를 저장하고 있는 포인터를 초기화함으로써 방지 가능

4. 초기화되지 않은 변수 사용

  • 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점
  • 변수 선언으로 메모리가 할당되면 해당 메모리 이전에 사용하던 내용이 계속 남아 외부에 노출되는 경우 중요 정보 악용됨
  • 변수 선언시 할당된 메모리를 초기화함으로써 방지 가능

SW개발 보안 구현 - 암호알고리즘

소프트웨어 개발 보안 구축

SW개발 보안 구현

  • 암호 알고리즘의 개념과 암호 알고리즘의 종류별 특징을 이해
  • 코드오류와 캡슐화, API 오용 개념과 각 보안 점검 항목별 보약 약점의 종류 및 특징을 이해

용어사전

  • Hash 해시
    • 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 단방향 암호 알고리즘

암호 알고리즘 개념

  • 주민번호, 패스워드, 은행계좌 등 중요 정보를 보호하기 위해 평문을 암호문으로 만드는 절차 또는 방법
  • 해시를 사용하는 단방향 암호화 방식과 개인키와 공개키로 분류되는 양방향 암호화 방식으로 구분됨
  • 암호화방식
    • Stream 방식
      • 평문과 동일한 길이의 스트림을 생성하여 비트단위로 암호화
    • Block 방식
      • 한 번에 하나의 데이터 블록을 암호화

양방향 알고리즘

1. 비밀키(개인키, 대칭키) 암호 알고리즘 장/단점

  • 암호화 및 복호화 할 때 사용하는 키가 같음
  • 장점 : 암호화 복호화 속도가 빠르며, 알고리즘이 단순하고, 공개키 암호기법보다 파일의 크기가 작음
  • 단점 : 사용자의 증가에 따라 관리해야할 키의 수가 많음

2. 공개키(비대칭키) 암호 알고리즘 장/단점

  • 암호화할 때 사용하는 키와 복호화 할 때 사용하는 키가 다름
  • 장점 : 키의 분배가 용이하고, 관리해야할 키의 개수가 적음
  • 단점 : 암호화 및 복호화 속도가 느리며, 알고리즘이 복잡하고, 개인키 암호화 기법보다 파일의 크기가 큼

3. 양방향 암호 알고리즘의 종류

  • 양방향 암호 알고리즘

단방향 암호 알고리즘

  • 해시
    • 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것을 의미
    • 해시 알고리즘을 해시 함수라고 부르며, 해시 함수로 변환된 값이나 키를 해시값 또는 해시키로 부름
    • 데이터의 암호화, 무결성 검증을 위해 사용될 뿐만 아니라 정보보호의 다양한 분야에 활용
API API오용 Anaconda Beacon Bluetooth CRUD분석 Camera ChatBot DB관련신기술 DB관리기능 DB서버 DB표준화 ER다이어그램 ER모델 ETL Flask HW관련신기술 IDE도구 IP IoT Machine_Translation NLP배경 ORM프레임워크 Package Recurrent Neural Network SDLC SW개발방법론 SW개발방법론선정 SW개발보안정책 SW개발표준 SW관련신기술 Sequence_Tagging ShellScript TCP_UDP Vector WordCloud c 자료형 class embedding konlpy python python 자료형 가설검증 개발환경구축 객체지향프로그래밍언어 관계데이터베이스모델 관계데이터언어 국제표준제품품질특성 네트워크7계층 네트워크관련신기술 네트워크장비 네트워크침해공격용어 논리데이터모델개요 논리데이터모델품질검증 논리적데이터모델링 논문 단위모듈구현 단위모듈테스트 데이터검증 데이터모델개념 데이터베이스무결성 데이터베이스백업 데이터베이스암호화 데이터베이스용량설계 데이터베이스이중화구성 데이터베이스정규화 데이터분석 데이터분석 - 순열 - 조합 데이터분석 - 정규분포 데이터분석 - 통계기초 데이터사이언스개념 데이터입출력 데이터전환수행계획 데이터정제 데이터조작프로시저작성 데이터조작프로시저최적화 데이터조작프로시저테스트 데이터지역화 데이터타입 데이터표준확인 데이터품질분석 라이브러리 로그분석 메모리관리 모델화 몬테카를로 물리데이터모델설계 물리데이터모델품질기준 물리데이터저장소구성 물리요소조사분석 반정규화 배치프로그램 변수 보안기능 보안솔루션 보안아키텍처 보안취약성식별 분산데이터베이스 분산분석 비용산정모델 빌드자동화도구 사용자정의함수 상관분석 서버개발프레임워크 서버인증 서버장비운영 서버접근통제 서비스공격유형 선언형언어 세션통제 소스코드인스펙션 소프트스킬 소프트웨어개발프레임워크 소프트웨어버전관리도구 소프트웨어연계테스트 슈퍼디엠지 스크립트언어 시스템카탈로그와뷰 암호알고리즘 애플리케이션모니터링도구 애플리케이션배포도구 애플리케이션성능개선 애플리케이션테스트결과분석 애플리케이션테스트시나리오작성 애플리케이션테스트케이스작성 애플리케이션통합테스트수행 애플리케이션패키징 연산자 예외처리 오답노트 오류데이터측정 오류처리 오류처리확인및보고서작성 요구공학방법론 운영체제 웹서버 이벤트 인터넷구성의개념 인터페이스구현검증 인터페이스기능확인 인터페이스보안 입력데이터검증및표현 자료구조 자연어처리 재사용 절차적프로그래밍언어 정보보안침해공격용어 정보처리기사 제품소프트웨어매뉴얼작성 집계성DCL작성 체크리스트 초기데이터구축 취약점분석 칼럼속성 캡슐화 코드오류 클러스터링 키종류 테일러링기준 트랜잭션인터페이스 트리거 파일처리기술 파티셔닝 패키지 포트포워딩 프로세스스케줄링 프로토타입 한국어임베딩 핵심정리 현업도구 형상관리도구 환경변수 회귀분석
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×