본문 바로가기

자격증/정보처리기사 3과목

3-3강. 서버프로그램 구현-서버 프로그램 구현

[ 목차 ]

1. 보안 취약성 식별

2. 취약점 식별과 제거

3. 취약점 사례

15. 웹 API

 

1. 보안 취약성 식별

1) 취약점 : 공격자가 시스템의 정보 보증을 낮추는데 사용되는 약점

2) 컴퓨터, 네트워크에 침입해 환경 내의 리소스에 대해 허가되지 않은 접근을 시도하려는 공격자에게 열린 문을 제공할 수 있는 소프트웨어, 하드웨어, 절차 혹은 인력상의 약점

3) 결함에 대한 익스플로잇 가능성

4) =공격 영역

익스플로잇
1) 취약점을 이용한 공격
2) 컴퓨터나 컴퓨터 관리 전자제품의 보안 취약점을 이용한 공격 방법

2. 취약점 식별과 제거

1) 취약점 발견을 도와주는 sw 틀들이 감시관에게 좋은 개요를 제공하지만 인간의 판단을 대체할 수 없음

2) 스캐너에만 의존하는 것은 현재 시스템에 존재하는 문제들에 대한 제한된 관점과 긍정오류 유발

3) 취약점들은 모든 주요 운영 체제들에서 발견

4) 취약점을 줄일 유일한 방법은 감사와 최적의 배치(방화벽, 접근제어), 세심한 시스템 관리를 포함한 꾸준한 조심

 

3. 취약점 사례

1) 시스템 물리적 환경 취약점

  1] 직원

  2] 관리

  3] 조직 내 관리 절차와 보안 방식

  4] 경영 활동과 서비스 전달

  5] 하드웨어

  6] 소프트웨어

  7] 통신 장비 시설

  8] 위 내용의 조합

 

4. 소프트웨어 취약점 예시

1) 메모리 보안 침임

  1] 버퍼 오버플로 : 메모리를 다루는 데에 오류가 발생해 잘못된 동작을 수행

  2] 허상 포인터 : 적절한 타입의 유효한 객체를 가리키지 않는 포인터

2) 입력 확인 오류

  1] 포맷 스트링 버그 : printf() 같은 특정한 c 함수들에서 검사되지 않은 사용자 입력을 포맷 스트링 파라미터로 사용

  2] sql 삽입(인젝션) : 악의적인 sql문을 실행

  3] 코드 인젝션 : 유효하지 않은 데이터를 실행

  4] 이메일 인젝션 : 메일 송신 기능에 공격

  5] 디렉토리 접근 공격 : 비공개 디렉토리의 파일 공격

  6] 사이트 간 스크립팅 

  7] http 헤더 인젝션 : 피스폰스 헤더필드에 개행문자 등을 삽입

  8] http 응답 스플리팅 : 두 번째 응답에 악의적 코드가 주입

3) 경쟁 상태

  1] 타임 오브 체크 투 타임 오브 유즈 버그 : 하나의 지원에 대하여 동시에 검사시점과 사용시점이 달라 생기는 것

  2] 심볼릭 링크 : 다른 파일이나 디렉터리에 대한 참조(바로가기)를 이용한 공격

4) 권한 혼동 버그

  1] 사이트 간 요청 위조 : 불특정 다수를 대상으로 로그인 된 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위를 수행

  2] 클릭재킹(거짓을 사실이라고 주장) : 투명한 버튼이나 링크를 함정으로 사용해 의도치 않은 콘텐츠에 엑세스

  3] ftp 바운스 공격 : ftp(파일 전송 서비스) 프로토콜 구조의 허점을 이용한 공격방법으로 대상의 포트를 스캐닝 공격 

 

5. 취약점 익스플로잇의 4가지 예시

1) 취약점을 찾아 민감한 데이터를 내보내는 악성코드를 설치

2) 악성코드가 들어있는 이메일 메시지를 열게 만듬

3) 내부인이 보호되고 암호화된 프로그램을 usb에 담아와 집에서 크랙

4) 1층에 설치된 컴퓨터 시스템에 수해로 인한 피해가 발생

 

6. 보안취약성 식별 절차

1) 시큐어 코딩 : 보완상 취약점이 발생할 수 있는 부부을 보완하여 프로그래밍

2) 종심보안 : 이중, 삼중으로 진지를 배치해 계속적으로 적의 진출을 차단하는 방어

 

7. sw 개발 보안

1) SW 개발 과정에서 개발자의 실수, 논리적 오류 등으로 내포될 수 있는 보안 취약점을 최소화하고 사이법 ㅗ안 위협에 대응할 수 있는 안전한 SW를 개발하기 위한 일련의 보안 활동

2) 정부에서 제공하는 SW 개발 보안 가이드를 참고

3) 기밀성 : 인가된 사용자만 정보 자산에 접근할 수 있는 것

4) 무결성 : 적절한 권한을 가진 사용자에 의해 인가된 방법으로만 정보 변경 가능

5) 가용성 : 정보 자산에 적잘한 시간에 접근 가능한 것을 의미

 

8. 47개 보안 약점

1) 입력 데이터 검증 및 표현 : 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식 지정으로 발생하는 약점, 15개

  1] SQL 삽입 : 공겨자가 입력 폼 및 URL 입력란에 SQL문 자체를 입력해 DB로부터 정보를 열람, 조작

  2] 경로 조작 및 자원 삽입 : 입력 값 조작을 통해 시스템이 보호하는 자원에 임의로 접근하고 자원의 수정, 삭제, 시스템 정보 누출, 자원 간 출동로 인한 서비스 장애를 유발

  3] XSS 크로스 사이트 스크립트 : 악의적 스크립트로 페이지가 깨지거나 사용자의 사용을 방해, 개인 정보를 특정 사이트로 전송시키는 것으로 적절한 검증 없이 실행되기 때문에 사용자의 세션을 탈취하거나 악의적 사이트로 사용자를 이동

2) 보안기능 : 보안 기능을 적절하기 않게 구현시 발생할 수 있는 약점으로 16개

  1] 인증 : 다중 사용자 컴퓨터 시스템 또는 망 운영 시스템에서 시스템이 단말 작동 개시정보를 확인하는 보안 절차

  2] 접근제어 : 허가된 주체만이 정보 시스템 자원에 접근 제한, 시스템이 네트워크 안에서 다른 시스템으로부터 적절히 보호될 수 있도록 네트워크 관점에서 접근을 통제

  3] 권한 관리 : 적절한 권한을 적절한 정보 자산에 접근하도록 통제

  4] 부적절한 인가 : 모든 가능한 실행 경로에 대해 접근제어를 검사하지 않거나 불완전하게 검사하는 경우 발생하는 약점으로, 접근 가능한 실행 경로를 통해 정보를 유출

  5] 중요정보 평문 저장 : 중요정보를 암호화하여 저장하지 않으 정보가 노출될 수 있는 약점

  6] 중요정보 평문 전송 : 중요 데이터를 평문으로 송수신하여 통신채널 스니핑을 통해 인가되지 않은 사용자에게 민감한 데이터가 노출될 수 있는 약점

  7] 스니핑 : 네트워크 중간에서 남의 패킷 정보를 도청하는 해킹

3) 시간 및 상태 : 거의 동시 수행을 지원한느 병렬 시스템, 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리하여 나타나는 약점으로 2개

  1] 경쟁 조건 : 자원을 상요하기 전 자원의 상태를 검사(검사시점)검사 후  자원을 사용하는 시점(사용시점)에 자원의 상태가 변하는 것으로, 이로인해 여러 문제가 발생

  2] 제어문을 사용하지 않는 재귀함수 : 적절한 제어문 사용이 없는 재귀함수에서 무한재귀가 발생

재귀함수
1) 함수 안에서 자신을 다시 호출하는 것

4) 에러처리 : 에러를 처리하지 않거나 불충분하게 처리해 에러 정보에 중요 정보가 포함될 수 있는 약점으로 3개

  1] 오류 메시지를 통한 정보 노출 : 개발 시 활용을 위한 오류정보의 출력메시지를 배포될 버전의 SW에 포함

  2] 오류상황 대응 부재 : 시스템에서 발생하는 오류사항을 처리하지 않아 의도하지 않은 상황이 발생

  3] 부적절한 예외처리 : 예외에 대한 부적절한 처리로 의도치 않은 상황 발생

5) 코드오류 : 타입 변환 오류, 자원의 부적절 반환 등 개발자가 범한 수 있는 코딩 오류로 인한 약점으로 4개

  1] 널 포인터 역참조 : 널로 설정된 변수의 주소 값을 참조했을 때 발생

  2] 부적절한 자원 해제 : 사용된 자원을 적절히 해제하지 않아 자원의 누수가 발생하고 부족한 자원으로 인해 새로운 입력처리 불가

6) 캡슐화 : 중요 데이터, 기능을 분충분하게 캡슐화했을 때 인가되지 않은 사용자에게 데이터 누출이 발생, 5개

  1] 캡슐화 : 데이터와 기능(속성과 함수)을 하나의 객체로 묶어 코딩

  2] 제거되지 않고 남은 디버그 코드 : 디버깅을 위해 만든 코드를 통해 권한 없는 사용자 인증우회 접근이 가능해지는 약점

  3] 시스템 데이터 정보 노출 : 사용자가 볼 수 있는 오류 메시지, 스택 정보에 시스템 내부 데이터, 디버깅 관련 정보가 공개

7) API 오용 : 의도된 사용에 반하는 방법으로 API를 이용하거나 보안에 약한 APU를 이용하는 것으로 2개

  1] DNS LOCKUP에 의존한 보안 결정 : 보안결정을 DNS 이름에 의존할 경우 보안결정 등이 노출되는 약점 발생

  2] 수푸핑 : 승인 받은 사용자인 것처럼 속이는 것

  3] 취약한 API 사용

 

9. API

1) 응용 프로그램에서 사용할 수 있도록 운영 체제, 프로그래밍 언어가 제공하는 기능(라이브러리 형태)을 제어할 수 있게 만든 인터페이스

2) 절차적 언어에서 API는 특정 작업을 수행할 함수들의 집합을 규정

 

10. WINDOWS API

1) 윈도 운영 체제들이 사용하는 것

2) C/C++ 프로그램에서 직접 운영 체제와 상호작용 할 수 있게 만들었으며 그보다 더 낮은 수준의 제어는 ntdll.dll을 사

용하는 낮은 수준의 DLL로 가능

 

11. API 서비스

1) 기본 서비스

  1] 중요한 리소스를 윈도우 시스템에서 이용할 수 있게 도움

  2] 파일 시스템, 장치, 프로세스, 스레드, 오류 처리와 같은 것들을 포함

  3] 32비트 윈도우의 경우 kernel32.dll에 상주

2) 고급 서비스

  1] 윈도 레지스트리, 시스템 종료/다시 시작, 윈도 서비스 등이 포함

3) 그래픽 장치 인터페이스

  1] 출력되는 그래픽 컨텐츠를 모니터, 프린터, 기차 출력 장치에 전달

4) 사용자 인터페이스

  1] 화면 창을 포함한 단추, 스크롤바와 같은 가장 기본적인 컨트롤을 만들어 관리

  2] 마우스, 키보드 입력을 받는 기능

  3] 윈도우의 GUI와 연동하는 기능

5) 공통 대화 상자 라이브러리

  1] 응용 프로그램에 파일 열기 및 저장, 색 및 글꼴 선택

  2] 해당 API는 사용자 인터페이스 집합에 들어 있음

6) 공통 컨트롤 라이브러리

  1] 상태 표시줄, 진행 표시줄, 도구 모읍, 탭 등

  2] 해당 API는 사용자 인터페이스 집합에 들어 있음

7) 윈도 셸

  1] 셸이 제공하는 기능에 접근

  2] 해당 API는 사용자 인터페이스 집합에 들어 있음

8) 네트워크 서비스

  1] 네트워킹 기능을 운영 체제에 제공

9) 웹

  1] 인터넷 익스플로러 웹 브라우저

 

12. 단일 유닉스 규격 SUS

1) 컴퓨터의 운영 체제가 유닉스란 이름을 사용하기 위해 지켜야 하는 표준 규격 총칭

2) 전기 전자 기술자 협회와 오픈 그룹의 표준화 작업 결과물에 바탕을 두고 있으며 오스틴 그룹이 개발, 유지관리를 담당

 

13. 4가지 인터페이스 분류표

1) base definitions

2) shell and utilities

3) system interfaces

4) rationale

 

14. 자바 API

1) 자바를 사용해 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합

2) 하나의 클래스 계층구조로 설계

 

15. 웹 API

1) 웹 애플리케이션 개발에서 다른 서비스와 요청을 보내고 응답을 받기 위해 정의된 명세

2) 블로그 API를 이용하면 블로그에 접속하지 않고도 다른 방법으로 글을 올릴 수 있게 하는 것