자격증/정보처리기사

[정보처리기사_실기] Chapter 9. 소프트웨어 개발 보안 구축

ZZJJing 2020. 10. 11. 18:43

■ 소프트웨어 개발보안 

[ 개념 ] 소프트웨어 개발 생명주기의 각 단계별로 수행하는 일련의 보안활동을 통하여 안전한 소프트웨어를 만들기 위한 개발 체계 

[ 목적 ] 해킹 등 사이버 공격의 원인이 될 수 있는 보안약점을 소프트웨어 개발단계에서 사전에 제거하는 것을 목적으로 한다.

* 소프트웨어 개발보안 가이드 : 시큐어 코딩 기법을 제시한 가이드 문서 

* 소프트웨어 개발 보안 생명주기(Secure SDLC) 활동단계 

 요구사항 분석단계 → 설계 구현 테스트 유지보수 

* Secure SDLC 방법론 유형

- MS-SDL(Microsoft Secure Development Lifecycle) : 마이크로소프트사에서 만듬

- Seven Touchpoints : 실무적으로 검증된 개발보안 방법론 중 하나, MS-SDL과 동일하게 7개의 보안강화 활동을 정의

- CLASP(Comprehensive, Lightweight Application Security) : SDLC 초기단계에 보안강화를 목적으로 하는 정형화된 프로세스로써 활동중심/역할기반의 프로세스로 구성된 집합체, 이미 운영중인 시스템에 적용하기 좋다. 5가지 관점 

 

■ 설계단계의 보안 요구사항 

(1) 중요 정보 및 개인정보에 대한 보안 요구사항 

(2) 법규에 근거한 중요 정보 및 보호조치 기준 

(3) 소프트웨어의 안전성 확보를 위한 기능상의 보안 요구사항 

 

■ SW개발보안 관련 활동 주체 기관 

행정안전부 / 발주기관(행정기관) / 한국인터넷진흥원 / 감리법인(진단원) 

 

■ 소프트웨어 개발보안 관련법 

- 개인정보 보호법 : 개인정보의 수집, 유출, 오용, 남용으로부터 사생활의 비밀등을 보호.. 개인정보처리에 관한 법률

  → 개인정보의 안전성 확보조치 기준 (개인정보 처리자가 개인정보를 처리할 때 보안을 위해서 필요한 기술적, 관리적,        물리적 안전조치에 관한 기준에 관한 법령) 

  ISMS-P 인증제도 : 정보보호 및 개인정보보호를 위한 일련의 조치와 활동이 인증기준에 적함함을 인터넷 진흥원

                              또는 인증기관이 증명하는 제도 

- 정보통신망법 : 정보통신망의 이용을 촉진하고 정보통신서비스를 이용하는 자의 개인정보를 보호함과 아울러... 법률

- 개인정보 영향평가에 관한 기준 : 개인정보 보호법 제 33조와 개인정보보호법 시행령 제38조에 따른 평가기관의 지정                                               및 영향평가의 절차 등에 관한 세부기준

- 위치정보의 보호 및 이용들에 관한 법률 : 위치 정보의 유출, 오용 및 남용으로 부터 사생활의 비밀등을 보호 ... 국민생활의 향상과 공공 복리의 증진에 이바지함을 목적으로 하는 법률 

 

* 개인정보 관련 보안기준을 명시한 법률

ㄱ - 모든 유형의 개인정보는 정보통신망을 통해 전송할 경우 반드시 암호화 전송을 해야한다. 

ㄴ - 암호화 저장이 필요한 개인정보 가운데 비밀번호는 SHA-256 방식 이상의 보안강도를 가지는 일방향 해쉬함수를 이용하여 암호화해야한다.

ㄷ - 암호화 저장이 필요한 개인정보 가운데 비밀번호를 제외한 나머지 개인정보의 저장 암호화 방식은 AES, SEED , ARIA 등 보안성이 보증된 양방향 암호화 알고리즘과 128bit 이상의 암호화키를 사용해야하며, 블록 암호화의 보안성을 강화하기 위해 CBC모드의 사용을 권고하고 있습니다. 

 

■ 소프트웨어 SW 개발 보안 구축 시 정보보안 3요소 [ 기 무 가 + 인 부 ]

밀성 (Confidentiality) : 인가된 사람, 인가된 프로세스만 접근 

결성 (Integrity) : 불법적으로 생성, 변경, 삭제 불가능 

용성 (Availability) : 시스템이 지체없이 동작, 합법적사용자는 잘 이용할 수 있게 해야함  

+ 인증 

+ 부인방지  

 

취약점(Vulnerability) : 위협이 발생하기 위한 사전조건에 따른 상황 

■ 소프트웨어 보안 취약점과 보안약점 

[소프트웨어 보안 취약점] : 해킹등 실제 침해사고에 이용될 수 있는 외부에 노출된 보안약점  

[보안약점] : 보안 취약점의 근본 원인이 되는 소프트웨어의 결함이나 버그 (소스코드에 존재하는 잠재적 위험)

 

■ CVE (Common Vulnerability Exposure)  - 보안취약점을 정리한 목록으로 인덱스형식에 확인년도 포함 

[ 개념 ] 보안 취약점을 데이터베이스로 관리하기 위한 표기 방법 

- CVE는 공개적으로 알려진 컴퓨터 보안 결함 목록으로 CVE를 지칭할 때는 일반적으로 보안 결함에 할당된 CVE ID번호를 뜻한다. 

- CVE는 IT전문가들이 이러한 취약점에 우선순위를 지정하고 해결하기 위해 협력하여 소프트웨어를 보다 안전하게 관리하도록 지원 

[ 표기법 ] 

CVE-2020-0000

접두사-해당년도-취약점번호 

 

 CWE (Common Weakness Enumeration)  [ 입 보 시 에 코 캡 아(A) ] 

[ 개념] 일반적으로 널리 통용되는 소프트웨어의 주요 취약점, 보안상의 문제들을 분류하여 놓은 목록(사전식)

아래도 있지만 CWE만의 7가지 보안약점 

보안약점 설명
력데이터 검증 및 표현  XSS / SQL삽입 / 버퍼오버플로우 등 
안기능  중요정보 평문 저장 /  하드코딩된 패스우드 
간 및 상태  Deadlock 자원에 대한 경쟁조건 / 세션고착
러처리  처리루틴 누착 /  정보 노출
드 품질 널 포인트 역참조 / 부적절한 자원해제 
슐화 디버거 코드 / 시스템 데이터 정보
API 악용 DNS Lookup에 의존한 보안 결정 

 

 

■ 소프트웨어 개발 보안 요구공학 프로세스  [ 도 분 명 확 ]

요구사항 출 -> 석 -> 세 -> 인 

 

■ 접근통제 

[ 개념 ] 보안 정책에 따라 접근 객체에 대한 접근 주체의 접근 권한 확인 및 이를 기반으로 한 접근 제어를 통해 자원에 대한 비 인가된 사용을 방지하는 기능 

[ 종류 ]

- 임의 접근통제 (DAC, Discretionary Access Control) 

- 강제 접근 통제 (MAC, Mandatory Access Control) 

- 역할기반 접근 통제(RBAC, Role Based Access Control) : 사용자가 주어진 역할에 접근 권한을 부여받는 방식 

 

 

■ 보안 점검

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

- SQL Injection : 공격자가 URL입력란에 SQL문을 삽입하여 DB로부터 정보를 열람하거나 조작 

  웹 응용 프로그램에 강제로 SQL구문을 삽입하여 내부 데이터베이스(DB)서버의 데이터를 유출 및 변조하고 관리자 인증을 우회하는 공격기법 

   (해결: PreparedStatement 객체를 사용해 DB에 컴파일된 쿼리문 전달) 

   ex) String param = request.getParameter("id"); ........ 

          Connection con = db.getConeection();

          PrepareStatement pstmt = con.prepareStatement(sql);

          pstmt.setString(1, param);

          ResultSet rs = pstmt.executeQuery(); 

- XSS (크로스사이트 스크립팅) : 검증 되지 않은 외부 입력이 동적 웹 페이지 생성에 사용될 경우, 공격 스크립트가 실행될수 있는 보안약점 

  + 악의적인 사용자가 공격하려는 사이트에 스크립트를 삽입하고, 사용자가 삽입된 스크립트 코드를 실행하면 의도치 않은 행동을 수행하거나 쿠키, 세션 토큰 등의 민감한 정보를 탈취하는 공격이다. 

- 경로 조작 및 자원삽입 : 외부 입력값을 사용해 파일 및 서버 등 시스템 자원에 접근 할 때 입력값 조작을 통해 접근 권한이 없는 파일에 접근하여 조회, 수정, 삭제 등을 할 수 있는 취약점이다. 

- 운영체제 명령어 삽입 

- 위험한 형식 파일 업로드 → 허용된 확장자만 업로드, 업로드 파일을 저장시 파일명과 추측 불가능한 임의의 문자열로 변경, 파일 저장경로를 외부에서 직접 접근이 불가능하도록 Web Document Root 외부에 저장 해야함. 

- 신뢰되지 않는 URL 주소로 자동 접속 연결 

- XQuery 삽입 

- XPath 삽입 

- LDAP 삽입 

- 크로스사이트 위조요청 

- HTTP 응답 분할 

- 정수형 오버플로우 : 정수값이 증가하면서, 허용된 가장 큰 값보다 더 커져서 실제 저장된 값이 의도치 않게 아주 작은 수이거나 음수가 되어 발생

- 보안기능 결정에 사용되는 부적절한 입력값

- 포맷 스트링 삽입 

 

* 메모리 보안 칩입

- 메모리 버퍼 오버플로우: 할당된 메모리의 범위를 넘어선 위치에 자료를 읽거나 쓰려고 할 때 프로그램의 오작동을 유발시키거나, 악의적인 코드를 실행시킴으로써 공격자 프로그램을 통제할 수 있는 권한을 획득하는 공격 방법

- 허상포인터 (Dangling pointer)

- Null Pointer 역참조 

 

(2) 보안기능을 부적절하게 구현시 발생할 수 이는 보안약점 

- 적절한 인증없는 중요기능 허용

- 부적절한 인가 (불충분한 인가): 프로그램이 권한 체크가 필요한 기능을 요청받았을 경우, 접근제어를 검사하지 않으면 공격자가 접근권한이 없는 정보를 획득할 수 있는 취약점 

- 중요한 자원에 대한 잘못된 권한 설정 

- 취약한 암호화 알고리즘 사용 

- 중요 정보 평문 저장 : 중요정보(개인정보, 인증정보, 금융정보)를 저장할 떄 암호화하지 않고 저장하면 추후 공격자가 중요정보가 저장된 파일이나 데이터 탈취 시 정보가 놀출 될 수 있다는 취약점 

- 중요 정보 평문 전송 

- 하드코드된 비밀번호 

- 충분하지 않은 키 길이 사용 : 키 길이가 충분하지 않으면 공격자가 암호화된 패스워드를 복호화 할 수 있다. 

- 적절하지 않은 난수값 사용

- 하드코드된 암호화 키 

- 취약한 비밀번호 사용 : 사용자에게 강한 패스워드 조합규칙을 요구하지 않으면 사용자계정이 취약해짐 

- 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 

- 주석문 안에 포함된 시스템 주요 정보 

- 솔트 없이 일방향 해시함수 사용 

- 무결성 검사 없는 코드 다운로드 : 원격으로부터 소스코드 또는 실행파일을 무결성 검사없이 다운로드 받고, 이를 실행할 경우 악의적인 코드가 실행될 수 있다. 

- 반복된 인증시도 제한 기능 부재 

 

(3) 시간 및 상태 

- TOCTOU : 하나의 자원에 대하여 동시에 검사시점과 사용시점이 달라 생기는 보안약점

- 종료되지 않은 반복문 또는 재귀함수 

- 심볼릭 링크 경쟁 (Symbolic link) 

 

(4) 에러 정보에 중요정보 포함

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

  해결방안) e.printStackTrace();  정보가 노출됨 → logger.error("ERROR 파일읽기에러"); 숨김 

- 오류 상황 대응 부재

- 부적절한 예외 처리 

 

(5) 코드오류 취약점 : 개발자가 범하는 오류 ex) 형변환 오류, 메모리 자원 적절히 사용하지 못함

- Null Point 역참조 : '일반적으로 그 객체가 널(Null)이 될 수 없다'라고 하는 가정을 위반했을 때 발생하는 보안약점 

- 부적절한 자원 해제 : 사용된 자원을 적절히 해제하지 않아 자원 누수가 발생하여 새로운 입력을 처리할 수 없게 되는 보안 취약점 

  * 열린 파일디스크립터, 힙메모리, 소켓 등은 유한한 자원이다. 이러한 자원을 할당 받아 사용한 후, 더 이상 사용하지 않는 경우에는 적절히 반환해야하는데 프로그램 오류 또는 에러로 사용이 끝난 자원을 반한하지 못하는경우에 발생 

- 해제된 자원 사용

- 초기화 되지 않은 변수 사용 

 

(6) 캡슐화 

- 잘못된 세션에 의한 데이터 정보노출 

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

- 시스템 데이터 정보노출

- Public 메서드로부터 반환된 Private 할당

- Private 배열에 Public 데이터 할당 

 

(7) API 오용 

- DNS lookup에 의존한 보안 결정

- 취약한 API 사용 : 보안상 금지된 함수나, 부주의하게 사용될 가능성이 많은 API사용시 보안 문제 발생 


 

■ [에러(Error) / 오류] -> 일반적으로 개발자가 프로그램 코드 또는 기타 작업 산출물을 작성하면서 발생  

■ [결함 / 버그(Bug) / 결점] -> 에러 또는 오류가 원인이 되어 소프트웨어 제품에 포함되어 있는 결함, 이를 제거 하지 않으면 소프트웨어 제품이 실패(Failure)하거나 문제(Problem)가 발생할 수 있다.

[실패(failure) / 문제(problem)] : 소프트 웨어 제품에 포함된 결함이 실행 될 때 발생하는 현상 

 

 

■ 보안 결함 ( 헷갈리는 단어) 

- 발견된 보안결함 : 설치/운영 전 발견된 소프트웨어 보안결함

- 잠재적 보안결함 : 설치/운영되는 환경에 전달된 소프트웨어 보안결함 

 

- 보안 취약점 : 해킹 등 외부 공격으로 시스템의 보안 정책을 침해하는 보안사고의 실제 원인이 되는 시스템상의 보안허점으로 운영 단계에서의 보안리스크  

- 보안 약점 : 보안 취약점의 근본적인 원인이 되는 소프트웨어의 결함, 실수 버그 등의 오류이며 개발 단계의 보안리스크를 말함. 

 


■ 공격 기법 

- APT (Advanced Persistent Threat) 공격 / 지능형 지속 위협 

특정 타겟을 목표로하여 다양한 수단을 통한 지속적이고 지능적인 맞춤형 공격으로 특수목적의 조직이 하나의 표적에 대해 다양한 IT 기술을 이용하여, 지속적으로 정보를 수집하고, 취약점을 분석하여 피해를 주는 공격 기법 

+ 특정 기업이나 조직 네트워크에 침투해 활동 거점을 마련한 뒤 떄를 기다리면서 보안을 무력화시키고 정보를 탈취 

- Zero Day Attack (제로데이공격): 컴퓨터 소프트웨어의 취약점을 공격하는 기술적 위협으로, 해당 보안취약점에 대한 패치가 나오지 않은 시점에서 이루어지는 공격

- Smurfing (스머핑):  고성능 컴퓨터를 이용해 초당 엄청난 양의 접속신호를 한사이트에 집중적으로 보냄   

+ 출발지 주소를 공격 대상의 IP로 설정하여 네트워크 전체에게 ICMP Echo 패킷을 직접 브로드캐스팅하여 마비시키는 공격기법이다

- 스누핑 

- 스니핑 

- 스미싱 (Smishing) : 각종 행사 안내, 경품 안내 등의 문자 메시지(SMS)를 통해 사용자 개인 신용 정보를 빼냄 

- 스피어 피싱 (Spear Phising) : 특정 대상을 선정한 후 그 대상에게 메일을 지속적으로 발생해서 메일의 본문 링크나 첨부된 파일을 클릭하도록 유도해 사용자의 개인정보를 탈취 

- 큐싱(Qshing) : QR코드를 통해 악성 앱의 다운로드를 유도하거나 악성 프로그램을 설치하도록 하여 개인정보 뺴돌림 

- SYN Flooding : 공격자가 가상의 클라이언트로 위장하여 3-way-handshake 과정을 의도적으로 중단시킴으로써 공격대상자인 서버가 대기 상태에 놓여 정상적인 서비스가 불가 

- RUDY : 요청헤더의 content-length를 비정상적으로 크게 설정하여 메시지 바디부분을 매우 소량으로 보내 계속 네트워크를 연결시켜 자원을 소진시키는 공격기법 

- Land Attack (랜드공격) : 패킷을 전송할때 주소 또는 포트를 송신 IP주소로 하여 자신에게 무한히 응답하게 하는 공격 

- Tear Drop (티어드롭) : 분할된 패킷의 순서가 기록되어있는 Fragment Offset 값을 변경하여 수신측에서 재조립시 오류로 인한 과부화를 유도하는 공격방식

- DDos (Distributed Denied of Service) : 분산 서비스 공격 수행, 네트워크에서 취약점이 있는 호스트들을 탐색한 후 이들 호스트들에게 분산 서비스 공격용 툴을 설치하여 에이전트(Agent)로 만든 후 DDoS 공격에 이용 

- 스턱스넷 : 2010년 6월에 발견된 웜바이러스 독일 지멘스나오면 스턱스넷 / 스턱스넷은 자비를 프로그램하는데 사용되는 PLC를 감염시켜 장비의 동작을 변경한다. 

- ping of Death (죽음의핑) : 핑 명령을 전송할 때 패킷의 크기를 인터넷 프로토콜 허용 범위(65,536바이트)이상으로 전송하여 공격대상의 네트워크를 마비시킴 

- 크라임웨어 (Crime ware) : 온라인 상에서 불법활동을 조장하기 위해 만들어진 컴퓨터 프로그램이다. 공격용 툴킷이라고 불리며 보통 취약점을 이용하도록 미리 프로그램된 악성 코드 등으로 구성돼 원하는 형태로 공격을 강행하거나 공격을 자동화 시킬 수 있다. 

- SQL Injection (SQL 삽입공격): URL에 SQL 쿼리문을 삽입하여 내부 DB서버의 데이터 유출 및 변조 

- 무작위 대입 공격 (Brute Force Attack) : 암호화된 문서의 암호키를 찾아내기 위해 적용가능한 모든 값을 다 대입하여 공격

- XSS 크로스사이트 스크립팅 : 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취, 비정상 적인 기능 수행유발하는 등 스크립트의 취약점을 악용한 해킹기법 

- CSRF(Cross-site request forgery)  : 공격자가 사용자의 Cookie 값이나 Session 정보를 의도한 사이트로 보내거나 특정한 동작을 유발하는 스크립트를 글에 삽입하여 사용자가 게시물 등을 클릭할 경우 공격자가 원하는 동작이 실행되는 해킹기법 

- 좀비(Zombie) PC : 악성코드에 감염되어 다른 컴퓨터나 프로그램을 조종하도록 만들어진 컴퓨터로 C&C서버의 제어를 받아 주로 DDoS 공격 등에 이용됨

C&C 서버 : 해커가 원격지에서 감염된 좀비 PC에게 명령을 내리고 악성 코드를 제어하기 위한 용도로 사용하는 것 

봇넷 : 스팸메일이나 악성코드 등을 전파하도록 하는 악성코드 봇에 감염되어 해커가 마음대로 제어할 수 있는 좀비 PC로 구성된 네트워크 

웜 바이러스 (Worm) : 네트워크를 통해 연속적으로 자신을 복제하여 시스템의 부하를 일으켜 다운시키는 공격형태  

- 키로거 공격(Key Logger Attack) : 사용자의 키보드 움직임을 탐지해 중요한 개인정보를 뺴가는 공격

랜섬웨어(Ransomeware) : 사용자의 사진, 문서 등을 암호화해 열지 못하게 만들고 복호화의 대가로 금전을 요구하는 악성 프로그램

- 백도어 (Back Door, Trap Door) : 시스템 설계자가 서비스 기술자나 유지보수 프로그램 작성자의 액세스 편의를 위해 시스템 보안을 제거해놓은 비밀통로로 범죄에 악용되기도 함 

* 백도어 탐지방법: 무결성검사 , 로그분석, SetUID 파일검사

- 트로이 목마(Trojan Horse) : 정상적인 기능을 하는 프로그램으로 위장, 프로그램에 숨어있다가 동작할때 활성화되어 부작용을 일으킴, 자기 복제 능력은 없음 

 

 

■ 암호화 알고리즘

[ 개념 ] 암호화 알고리즘은 치환, 전치, 혼합, 블록화, 확장, 압축등과 같은 원리를 이용해서 평문을 암호문으로 만드는 과정  

- 개인키 암호화 

- 공개키 암호화 (Public Key Encryption) 

- 해시(Hash) 

 

■ 공개키 기반구조 (PKI, Public Key Infrastructure) 

공개키 암호 방식 기반으로 디지털 인증서를 활용하는 소프트웨어, 하드웨어, 사용자, 정책 및 제도 등을 총칭하는 암호 기술 

* 공개키 기반구조는 공인인증서의 기반이 되는 기술

 

 

■ 주요 암호화 알고리즘 

대칭키 알고리즘 비대칭키 알고리즘
비밀키(암호화) / 비밀키(복호화) 공개키(public key/암호화)/ 개인키(private key/복호화)
키관리 복자 키관리 단순
부인방지불가능  부인방지 가능 
블록 암호화(AES,DES,IDEA,RC5) ,
스트림 암호화(평문을 XOR로 1bit단위로 암호화)
소인수분해, 이산대수, 근저백터
- DES (Data Encryption Standard) : 미국 NBS에서 국가 표준으로 정한 암호,대칭키 암호이며 56비트의 키를 사용
- 3DES
- SEED
- AES (Advanced Encryption Standard) : 미국 표준기술 연구소(NIST)에서 수행된 암호화 알고리즘 공모전에 선정된 기술, 대칭키 암호이며 세종류의 키 (128비트, 192비트, 256비트)를사용
- ARIA(Academy,Research Institute, Agency) 합작
- IDEA(International Data Encryrion Alogorithm) : 128비트의 키를 사용해 64비트의 평문을 8라운드에 거쳐 64비트의 암호문으로 구성 
- RSA (Rivest, Shamir, Adleman) : 세명이 만듬, 소인수분해 어려움을 기초로 한 공개키 암호화, 디지털 서명과 같은 새로운 개념의 출현 
- ECC
- DSA : 전자서명 알고리즘, 이산대수 
- Diffle Hellman
구현이 용이, 변형가능, 쉽게 해독, 키관리 어려움 암호해독이 어려움, 전자서명, 해독시간이 많이 걸림 

*SEED / ARIA / DES / AES / RSA 는 적용 알고리즘 

* 공개키 암호화 알고리즘

[개념] 공개키로 암호화한 평문을 개인키로 복호화하는 비대칭구조를 가지고 있는 암호화 알고리즘

 

■ 해시 알고리즘

해시함수 유형 

SHA-1 :  MD4에 기반해서 1993년 미국 NIST에서 개발한 해시알고리즘 MD5보다 보안성이 우수하지만 ? 보안강도가 약해서                   SHA-256이나 SHA-512 (이거두개는 SHA-2알고리즘,블록체인기술에도 사용되는 암호) 로 대체되고 있다.

              활용) 전자서명

MD5 : 128비트 기반의 암호화 해시함수, 결과값이 16개 문자열, 설계상 결함으로 사용이 줄어드는 추세 

            활용) 메시지 무결성 검사 

HAVAL : MD5를 변형하여 만든 해시함수

 

 

■ 사용자 인증기법 유형 

- 지식기반 인증 : 사용자의 지식 기초로 접근제어를 수행하는 사용자 인증기법

- 소유기반 인증 : OTP토큰, 스마트카드,보안카드, 휴대폰 

- 생체기반 인증 : 지문/홍채/정맥/손 모양 등 

- 행위기반 인증 : 서명, 음성인식, 걸음걸이 등 

 

 

■ 프로젝트 참여 직무

- 프로젝트 관리자 (PM : Project Manager)

- 요구사항 분석가(Requirement Specifier)

- 아키텍트 (Architect) : 리소스

- 설계자 (Designer) 

- 구현 개발자(Implementer) 

- 테스트분석가(Test Analst)

- 보안감시자(Security Auditor)