티스토리 뷰

728x90
반응형

9. 소프트웨어 개발 보안 구축

소프트웨어 개발 보안 설계

소프트웨어 개발 보안 설계

SW 개발 보안의 개념

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

SW 개발 보안의 구성요소

  • 기밀성 : 인가되지 않은 개인 혹은 시스템 접근에 따른 정보 공개 및 노출을 차단하는 특성
  • 가용성 : 권한을 가진 사용자나 애플리케이션이 원하는 서비스를 지속 사용할 수 있도록 보장하는 특성
  • 무결성 : 정당한 방법을 따르지 않고선 데이터가 변경될 수 없으며, 데이터의 정확성 및 완전성과 고의/악의로 변경되거나 훼손 또는 파괴되지 않음을 보장하는 특성

SW 개발 보안 용어

  • 자산 : 조직의 데이터. 조직의 소유자가 가치를 부여한 대상
  • 위협 : 조직이나 기업의 자산에 악영향을 끼칠 수 있는 사건이나 행위
  • 취약점 : 위협이 발생하기 위한 사전 조건에 따른 상황
  • 위험 : 위협이 취약점을 이용하여 조직의 자산 손실 피해를 가져올 가능성

SW 개발 보안을 위한 공격기법의 이해

DoS 공격

  • 시스템을 악의적으로 공격해 해당 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격
  • 특정 서버에게 수많은 접속 시도를 만들어 다른 이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP 연결을 소진시키는 등의 공격.

DDoS 공격

  • DoS의 또 다른 형태로 여러 대의 공격자를 분산 배치하여 동시에 동작하게 함으로써 특정 사이트를 공격하는 기법
  • 해커들이 취약한 인터넷 시스템에 대한 액세스가 이뤄지면, 칩입한 시스템에 소프트웨어를 설치하고 이를 실행시켜 원격에서 공격을 개시

DDoS 공격 구성요소

  • 핸들러 : 마스터 시스템의 역할을 수행하는 프로그램
  • 에이전트 : 공격 대상에게 직접 공격을 가하는 시스템
  • 마스터 : 공격자에게서 직접 명령을 받는 시스템. 여러 대의 에이전트를 관리하는 역할
  • 공격자 : 공격을 주도하는 해커의 컴퓨터
  • 데몬 프로그램 : 에이전트 시스템의 역할을 수행하는 프로그램

자원 고갈 공격기법

  • SYN 플러딩 : TCP 프로토콜의 구조적인 문제를 이용한 공격. 서버의 동시 가용 사용자 수를 SYN 패킷만 보내 점유하여 다른 사용자가 서버를 사용 불가능하게 하는 공격. 공격자는 ACK를 발송하지 않고 계속 새로운 연결 요청을 하게 되어 서버는 자원할당을 하지 않고 자원만 소비하여 자원이 고갈
  • UDP 플러딩 : 대량의 UDP 패킷을 만들어 임의의 포트 번호로 전송하여 응답 메시지(ICMP Destination Unreachable)를 생성하게 하여 지속해서 자원을 고갈시키는 공격. ICMP 패킷은 변조되어 공격자에게 전달되지 않아 대기함
  • 스머프 : 출발지 주소를 공격 대상의 IP로 설정하여 네트워크 전체에게 ICMP Echo 패킷을 직접 브로드 캐스팅하여 마비시키는 공격. 바운스 사이트라고 불리는 제 3의 사이트를 이용해 공격
  • PoD(Ping of Death) : 큰 사이즈의 패킷을 의도적으로 목표시스템으로 발생시켜 시스템이 서비스 할 수 없는 상태로 만드는 공격

애플리케이션 공격기법

  • HTTP GET 플러딩 : Cache Control Attack 공격. Http 캐시 옵션을 조작하여 캐싱 서버가 아닌 웹서버가 직접 처리하도록 유도, 웹서버 자원을 소진시키는 서비스 거부 공격.
  • Slowloris(Slow HTTP Header DoS) : HTTP GET 메소드를 사용하여 헤더의 최종 끝을 알리는 개행 문자열을 전송하지 않고, \r\n만 전송하여 대상 웹서버와 연결상태를 장시간 지속시키고 연결 자원을 모두 소진시키는 서비스 거부 공격
  • RUDY(Slow HTTP POST DoS) : 요청 헤더의 Content-length를 비정상적으로 크게 설정하여 메시지 바디 부분을 매우 소량으로 보내 계속 연결 상태를 유지시키는 공격

네트워크 서비스 공격

  • 네트워크 스캐너, 스니퍼 : 네트워크 하드웨어 및 소프트웨어 구성의 취약점 파악을 위해 공격자가 사용하는 공격 도구
  • 패스워드 크래킹 : 사전 크래킹과 무차별 크래킹 방법을 사용해 네트워크 패스워드를 탐색. 대표적인 공격 도구로 John the Ripper가 있음.
  • IP 스푸핑 : 서버에 대한 인증되지 않은 액세스 권한을 입수하는 데 사용하는 기법. 침입자가 패킷 헤더 수정을 통해 인증된 호스트의 IP 어드레스를 위조. 타깃 서버로 메시지를 발송한 이후 패킷은 해당 포트에서 유입되는 것처럼 표시.
  • 트로이 목마 : 악성 루틴이 숨어 있는 프로그램으로서 겉보기에는 정상적인 프로그램처럼 보이지만 실행하면 악성 코드를 실행

취약점 공격

  • 랜드 어택 : 출발지 IP와 목적지 IP를 같은 패킷 주소로 만들어 보냄으로써 수신자가 자기 자신에게 응답을 보내게 하여 시스템의 가용성을 침해하는 공격기법
  • 봉크 / 보잉크 : 프로토콜의 오류 제어를 이용한 공격기법으로서 시스템의 패킷 재전송과 재조립이 과부하를 유발
  • 티어 드롭 : IP 패킷의 재조합 과정에서 잘못된 Fragment Offset 정보로 인해 수신시스템이 문제를 발생하도록 만드는 Dos 공격. 공격자는 IP Fragment Offset 값을 서로 중첩되도록 조작하여 전송하고, 이를 수신한 시스템이 재조합하는 과정에서 오류가 발생, 시스템의 기능을 마비시키는 공격 방식

SW 개발 보안을 위한 암호화 알고리즘

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

암호 알고리즘 방식
대칭키 암호 방식

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

비대칭 키 암호 방식

  • 공개 키를 이용해 암호화하고 공개 키에 해당하는 개인 키를 이용해 복호화하는암호 방식(디피-헬만, RSA)

해시 방식

  • 단방향 알고리즘으로서 임의의 데이터를 고정된 길이의 데이터로 매핑하는 함수(SHA, MD5)

DES(Data Encryption Standard)
56bit의 키를 이용, 64bit의 평문 블록을 64bit의 암호문 블록으로 만드는 블록 암호 방식의 미국표준 암호화 알고리즘

AES(Advanced Encryption Standard)
고급 암호화 표준이라고 불림. DES를 대체한 암호 알고리즘이며, 암호화와 복호화 과정에서 동일한 키를 사용하는 대칭 키 암호화 알고리즘

SEED
KISA, ETRI에서 개발하고 TTA에서 인증한 안전성, 신뢰성이 우수한 고속 블록 단위의 128bit 대칭 키 암호화 알고리즘

디피-헬만(Diffie-Hellman)
암호 키를 교환하는 방법으로서 두 사람이 암호화되지 않은 통신망을 통해 공통의 비밀 키를 공유할 수 있도록 하는 방식

RSA(Rivest Shamir Adleman)
로널드 라이베스트, 아디 샤미르, 레너드 애들먼의 앞글자를 딴 비대칭 키 암호화 알고리즘. 현재 비대칭 키 암호 방식 중에서 가장 널리 쓰이고 있는 방식. 소인수 분해의 어려움을 이용.

SHA(Secure Hash Algorithm)
미국 국가안보국이 1993년에 처음으로 설계했으며, 미국 국가 표준으로 지정된 해시 암호화 알고리즘

MD5(Message-Digest Algorighm5)
RFC 1321로 지정되어 있으며, 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안안 128bit 해시 암호화 알고리즘.

정보에 대한 보안 항목식별

개인정보보호 관련 법령

  • 개인정보 보호법
  • 정보통신망법
  • 신용정보법

고유 식별정보의 종류

  • 주민등록번호
  • 여권번호
  • 운전면허번호
  • 외국인 등록번호

개인정보보호 법력 내 정보사고

  • 분실
  • 도난
  • 유출
  • 변조
  • 훼손

개인 정보 등급 분류

  • 고유 식별 정보(1등급) : 개인을 고유하게 구별하기 위하여 부여된 식별 정보(주민번호, 여권번호, 운전면허번호, 외국인등록번호)
  • 민감 정보(1등급) : 유전자 검사정보, 범죄경력정보 등 정보 주체의 사생활을 현저하게 침해할 수 있는 정보(사상, 신념, 노동조합, 정치적 견해, 병력, 신체, 정신적 장애, 성적 취향)

자산에 대한 보안 항목식별

정보자산의 주요 용어

  • 자산 : 조직에서 보유한 가치 있는 모든 것(정보, 소프트웨어, 물리적 자산, 인력, 서비스 등)
  • 사용자 : 정보처리 기기 및 시스템을 활용해 자산을 사용하는 사람과 기관
  • 소유자 : 자산의 소유 권한 및 관리에 대한 최종 책임자
  • 관리자 : 자산의 소유자로부터 관리위임을 받은자

기능에 대한 보안 항목식별

입력데이터 검증 및 표현

  • DBMS 조회, 결과 검증 : SQL문 생성 시 사용되는 입력 값에 대한 검증 방법 설계
  • XML 조회, 결과 검증 : 디렉터리 서비스 조회(LDAP) 시 사용되는 입력 값에 대한 검증 방법 설계
  • 웹 서비스 요청, 결과 검증
  • 허용된 범위 내 메모리 접근 검증 : 버퍼 오버플로우가 발생하지 않도록 처리 방법 설계
  • 보안 기능 입력 값 검증
  • 업로드, 다운로드 파일 검증

솔트
일방향 해시 함수에서 다이제스트를 생성할 때 추가되는 바이트 단위의 임의의 문자열

세션 하이재킹
TCP 신뢰성 기반의 연결을 이용한 공격 방법으로 통신 내용을 엿보거나, 세션을 가로채어 정상적인 인증 과정을 무시하고, 불법으로 시스템에 접근할 수 있는 공격

SW 개발 보안 적용 사례

  • MS-SDL : 마이크로소프트는 안전한 소프트웨어를 개발하기 위해 자체 수립한 SDL(Secure Development Lifecycle) 방법론을 적용
  • Seven Touchpoints : 소프트웨어 보안의 모범사례를 소프트웨어 개발 라이프사이클에 통합. 객관적인 위험 분석 및 테스트를 거쳐 안전한 소프트웨어를 만드는 방법을 정의. 수행되는 소프트웨어 위험 요소에 대해 추적하고 모니터링
  • CLASP : Comprehensive, Lightweight Application Security Process의 약자. SDLC 초기 단계에 보안 강화를 목적으로 하는 정형화된 프로세스. 이미 운영 중인 시스템에 적용하기가 용이

소프트웨어 개발 보안 구현

SW 개발 보안 구현

시큐어 코딩 가이드

설계 및 구현 단계에서 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하고, 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법

  • 입력 데이터 검증 및 표현 : 프로그램 입력값에 대한 검증 누락, 부적절한 검증, 잘못된 형식 지정. 대응방안으로 사용자 프로그램 입력데이터에 대한 유효성 검증체계를 수립
  • 보안 기능 : 인증, 접근 제어, 기밀성, 암호화, 권한 관리 등의 부적절한 구현.
  • 시간 및 상태 : 거의 동시에 수행 지원하는 병렬 시스템 또는 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태의 부적절한 관리. 대응 방안으로 공유 자원의 접근 직렬화, 병렬 실행 가능 프레임워크 사용. 블록문 내에서만 재귀함수 호출.
  • 에러 처리 : 에러 미처리, 불충분한 처리 등으로 에러 메시지에 중요정보가 포함.
  • 코드 오류 : 개발자가 범할 수 있는 코딩 오류로 인해 유발. 대응 방안으로 코딩 규칙 도출 후 검증 가능한 스크립트 구성, 경고 순위의 최상향 조정 후 경고 메시지 코드 제거
  • 캡슐화 : 기능성이 불충분한 캡슐화로 인해 인가되지 않은 사용자에게 데이터 누출. 대응 방안으로 디버그 코드 제거와 필수 정보 외의 클래스 내 프라이빗 접근자 지정
  • API 오용 : 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API의 사용.

입력데이터 검증 및 표현

주요공격

  • SQL 삽입 : 사용자의 입력값 등 외부 입력값이 SQL 쿼리에 삽입되어 공격. 대응방안으로 PreparedStatement 객체 등을 이용, DB에 컴파일된 쿼리문을 전달
  • 크로스 사이트 스크립트(XSS) : 검증되지 않은 외부 입력 값에 의해 브라우저에서 악의적인 코드가 실행. 대응방안으로 입, 출력값에 문자열 치환 함수를 사용. JSP에서 출력값에 JSTL의 을 사용하여 처리. 잘 만들어진 외부 라이브러리를 활용.

보안 기능

  • 보안 기능을 부적절하게 구현 시 발생할 수 있는 보안 약점
  • 대표적으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등.

무차별 공격
특정 패스워드를 풀기 위해 임의의 문자 조합을 하나씩 대입해보는 공격 기법

패스워드 길이의 권고 기준

  • 숫자/영문 등 혼합 시 최소 10자 이상 요구
  • 숫자/영문/특수문자 등 혼합시 최소 8자 이상 요구
  • 변경 주기 설정

암호화 보안 약점의 유형

  • 취약 암호화 알고리즘 사용 : 대응방안으로는 표준화된 알고리즘 사용(AES, ARIA, SEED)
  • 충분하지 않은 키 길이 사용 : RSA: 2048비트 이상, 대칭 암호화 : 128비트 이상
  • 하드코딩된 비밀 번호
  • 부적절한 난수 사용. 대응반안으로는 난수를 발생시키는 시드 값의 고정값 대신 변경 값 적용.
  • 솔트 없는 일방향 해시 함수 사용 : 솔트 없는 해시 처리 시 레인보우 테이블을 이용해 비밀번호를 쉽게 찾을 수 있는 취약점

시간 및 상태

시간 및 상태 보안 약점의 유형

  • 경쟁 조건 : 동일 자원에 대한 검사 시점과 사용 시점이 상이. 동기화 오류, 교착 상태를 유발하는 보안 약점. 대응 방안으로 동기화 구문(synchronized), mutex 사용. 한 번에 하나의 프로세스만 접근 가능하게 하는 방법이 있음.
  • 종료되지 않은 반복문 또는 재귀함수

에러 처리

에러 처리 보안 약점의 유형

  • 오류 메시지 정보 노출 : 응용 프로그램의 민감 정보가 오류 메시지를 통해 노출되는 보안 약점
  • 오류 상황 대응 부재 : 오류 발생 부분에 예외 처리 미구현
  • 부적절한 예외 처리 : 프로그램 수행 중 발생한 예외 조건을 적절하게 검사하지 않아 문제 야기

코드 오류

코드 오류 보안 약점의 유형

  • 널 포인터 역참조 : 널 값을 고려하지 않은 코드에서 발생하는 보안 약점. 의도적으로 널 값을 유발해 예외 상황을 확인하고 추후 공격에 활용.
  • 부적절한 자원 해제 : 자원고갈로 인한 시스템 오류 유발 보안 약점. 소켓, 힙 메모리 등 자원을 할당받아 사용 후 미반환 시 발생
  • 해제된 자원 사용 : C언어 해제한 메모리를 참조하여 의도치 않은 코드를 실행하는 보안 약점
  • 초기화되지 않은 변수 사용 : C언어 함수 내 지역변수 초기화하지 않고 사용할 시 발생하는 보안 약점

캡슐화

캡슐화 보안 약점의 유형

  • 잘못된 세션에 의한 정보 노출 : 멀티 스레드 환경에서 서로 다른 세션 간 데이터가 공유될 수 있는 보안 약점. 대응 방안으로 싱글톤 패턴 사용. 그러나 변수 적용 범위를 주의
  • 제거되지 않은 디버그 코드 : 의도하지 않은 민감 정보가 노출될 수 있는 보안 약점.
  • 시스템 정보 노출 : 시스템 내부 데이터가 노출되어 공격의 실마리가 되는 보안 약점

API 오용

API 오용 보안 약점의 유형

  • DNS에 의존한 보안 결정 : 공격자가 DNS 정보를 변조하여 보안 결정을 우회 가능한 보안 약점. 대응 방안으로는 DNS로 확인된 정보 대신 IP 주소를 사용하는 방법이 있음.
  • 취약한 API 사용 : 금지되거나 안전하지 않은 함수를 사용하는 보안 약점

SW 개발 보안 테스트와 결함 관리

소프트웨어 개발 보안 테스트의 개념

소프트웨어 보안 요구사항이 반영되어 있음을 보증하고, 취약점을 발견하고 개선하여 안전한 소프트웨어를 개발하기 위한 활동.

소프트웨어 개발 보안 테스트의 유형

  • 정적 분석(화이트박스 테스트) : SW를 실행하지 않고 보안 약점을 분석. SW 개발 단계에서 주로 사용.
  • 동적 분석(블랙박스 테스트) : SW 실행환경에서 보안 약점 분석. SW 시험 단계에서 주로 사용.




출처
정보처리기사 실기 2020 수제비(저자 : NCS 정보처리기술사 연구회) [건기원]


728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday
링크