[네트워크 보안] Chapter 04. 어플리케이션 보안

15 분 소요

4.1 웹·어플리케이션 보안

1. 웹(Web) 개념

  • 웹서버는 웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 콘텐츠를 제공하는 서버로서 HTTP 프로토콜을 통해 웹 브라우저로 전송
  • 웹 애플리케이션 서버(Web Application Server)는 인터넷상에서 HTTP를 통해 애플리케이션을 수행해 주는 미들웨어(소프트웨어 엔진)이다.
    • 서버 단에서 애플리케이션을 동작할 수 있도록 지원하며, 주로 동적인 콘텐츠를 제공할 때 사용한다. WAS Server 종류는 tomcat, tMaxjeus, BEA Web Logic, IBM Web Sphere, JBOSS 등이 있다.
  • 인터넷에서는 FTP, Telnet, HTTP, SMTP, POP 등 여러 가지 프로토콜이 쓰인다. 그 중에서도 가장 흔히 쓰이는 프로토콜이 HTTP(Hyper Text Transfer Protocol)다.

2. HTTP 프로토콜 특성

  • HTTP는 웹 상에서 클라이언트와 서버 사이에 정보를 교환하기 위한 프로토콜로서 TCP/IP와 관련된 하나의 응용 프로토콜이다. 통신구조는 비연결형(Connectionless)과 무상태(Stateless) 특성을 가지며, 정보교환을 위한 메시지 구조는 요청과 응답의 형태
  1. 비지속적인 연결 기반 통신구조
    • HTTP 통신은 HTTP 요청에 대해 TCP 통신을 설정한 후, 요청에 대한 응답이 처리되면 TCP 연결을 끊어버리는 형태의 통신으로 트랜잭션이 연결된 지속적인 통신에는 부적합하지만 인터넷과 같이 다수의 사용자를 대상으로, 사용자가 원할 때 필요한 HTML 문서를 서버로부터 불러오는 클라이언트 풀(Client Pull) 방식의 서비스에는 네트워크 부하가 거의 없는 적합한 통신방식이다.
  2. 무상태(Stateless) 통신 구조
    • 기본적으로 요청에 대한 응답으로 HTTP 트랜잭션이 종료되므로 연속적인 작업에 필요한 트랜잭션 상태정보를 관리하기 위한 웹 서버의 부하가 필요 없다.
  3. HTTP 요청과 응답 메시지 구조
    • HTTP 통신은 클라이언트의 HTTP 요청 메시지에 대해 서버의 HTTP 응답 메시지를 전달 받는 형식이다. 따라서 요청 및 응답 메시지는 HTTP 통신의 핵심이라 할 수 있다. 각 메시지는 시작라인, 헤더, 메시지 바디로 구성되어 있다.

3. HTTP Request

  • HTTP Request는 웹 서버에 데이터를 요청하거나 전송할 때 보내는 패킷으로 주로 GET, POST 같은 메소드(Method)를 사용한다. HTTP 메소드(GET, POST), 요청 URL, 서버에 전달할 정보로 이루어진다.
  1. GET 방식
    • GET 방식은 가장 일반적인 HTTP Request 형태로 웹 브라우저에 요청 데이터에 대한 인수를 URL(Uniform Resource Locator)을 통해 전송한다. GET 방식은 데이터가 주소 입력란에 표시되기 때문에 최소한의 보안도 유지되지 않는 매우 취약한 방식이다.
  2. POST 방식
    • POST 방식은 URL에 요청 데이터를 기록하지 않고 HTTP 바디에 데이터를 전송한다. 내부의 구분자가 각 파라미터(이름과 값)을 구분하며 서버에 각 구분자에 대한 내용을 해석하여 데이터를 처리하기 때문에 GET 방식에 비해 상대적으로 처리 속도가 늦다.
    • 게시판 등에서 파일 업로드는 POST 방식으로만 할 수 있는데, GET 방식과는 달리 보내려는 데이터가 URL을 통해서 노출되지 않기 때문에 최소한의 보안성은 갖추고 있다.
    • 일반적으로 게시판의 목록이나 글 보기화면은 접근 자유도를 부여하기 위해 GET 방식을 사용하고 글 저장/수정/삭제나 많은 양의 데이터를 전송할 때는 POST 방식을 사용한다.

4. HTTP Response

  • HTTP Response는 클라이언트의 HTTP Request에 대한 응답 패킷이다. 서버에 쓰이고 있는 프로토콜 버전, Request에 대한 실행 결과 코드 및 간략한 실행 결과 설명문(OK등)에 대한 내용이 담겨 있다.
  • 전달할 데이터의 형식과 데이터 길이 등과 같은 추가 정보가 MIME 형식으로 표현되어 있다. 헤더 정보 뒤에는 실제 데이터(HTML이나 그림파일)이 전달되며 데이터 전달이 끝나면 서버는 연결을 끊는다.

4.2 웹 공격 유형

1. 파일 접근

  1. 디렉토리 리스팅(Directory Listing)
    • 디렉토리 리스팅은 웹 브라우저에서 웹 서버의 특정 디렉토리를 열면 그 디렉토리에 있는 파일과 디렉토리 목록이 모두 나열되는 것이다.
    • 공격자는 디렉토리 리스팅을 통해 여러 정보를 획득할 수 있다. 우선 화면에 보이지 않는 여러 웹 페이지를 클릭 하나만으로도 직접 접근할 수 있다.
  2. 임시/백업 파일 접근
    • 일반적으로 웹 서버에서 상용 에디터 등을 이용해 웹 소스를 직접 편집하는 것을 금한다. 이는 상용 프로그램을 이용한 편집은 확장자가 bak이나 old인 백업파일을 자동으로 생성하기 때문이다.
  3. 디렉토리 탐색(Directory Traversal)
    • 웹브라우저에서 확인 가능한 경로의 상위 디렉토리를 탐색하여 특정 파일을 다운로드하는 공격
    • 게시판 등에서 정상적으로 첨부파일을 내려 받을 때
      • http://www.test.com/board/download.jsp?filename=demo.doc
    • 공격자가 filename 변수에 http://www.test.com/board/download.jsp?filename=../../../../etc/passwd 라고 입력이 가능하면 디렉토리를 탐색하여 passwd 파일의 내려 받기를 시도할 수 있다.
  4. 파일 업로드 제한 부재
    • 파일 업로드 공격도 파일 다운로드처럼 웹 서버에서 제공하는 게시판과 같은 서비스를 주로 이용한다.
    • 공격자가 시스템 내부 명령어를 실행시킬 수 있는 웹 프로그램(ASP나 JSP, PHP)을 제작하여 자료실과 같은 곳에 공격용 프로그램을 업로드 하는 공격방식이다. 이 공격용 프로그램은 웹에서 브라우저를 이용해 접근하면 시스템 내부 명령어를 실행시킬 수 있다.

2. 리버스 텔넷(Reverse Telent)

  • 리버스 텔넷 기술은 방화벽이 존재하는 시스템을 공격할 때 사용된다. 일반적으로 웹 서버는 방화벽 내부에 존재한다. 그리고 웹 서버는 80번 포트를 이용한 웹 서비스만을 제공하면 되기 때문에, 방화벽은 외부 인터넷을 사용하는 사용자에 대해 80포트만을 허용
  • 리버스 텔넷을 이용해 웹 서버에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 쉘을 획득하기 위한 방법임
    ①웹 브라우저에서 실행 가능한 웹 쉘을 웹 서버에 업로드하여 공격자가 명령을 입력할 수 있는 명령창을 획득
    ②리버스 텔넷용 툴 업로드: nc(net cat) 등
    ③공격자 PC의 리버스 텔넷 데몬 활성화: 서버에서 리버스 텔넷을 공격자 PC로 요청해서 리버스 텔넷 세션을 생성

3. 인증 우회

  • 인증 우회는 관리자 페이지나 인증이 필요한 페이지에 대한 인증 미처리로 인해 인증을 우회하여 접속할 수 있게 되는 취약점이다. 이 취약점에 노출되면 일반 사용자로 로그인하지 않은 사용자가 관리자 페이지에 접근하여 관리자 권한의 기능을 악용할 수 있다.
  • 관리자로 로그인해서 관리자용 웹 페이지를 접속할 수 있어야 하는데 로그인을 하지 않고도 관리자용 웹 페이지에서 특정 작업을 직접 수행할 수 있는 것이다.
  • 인증 우회를 막기 위해서는 웹에 존재하는 중요 페이지에 세션 값(쿠키)을 확인할 수 있도록 검증 로직을 입력해두어야 한다.
  • 웹 프로그래머의 실수나 게으름으로 인해 세션에 대한 검증 로직을 생략하면 웹 개발자가 만들어 놓은 웹 이용 시나리오 중간에 공격자가 끼어들어 인증을 거치지 않고 자신이 원하는 기능을 사용할 수 있다.

4. 패킷 변조

  1. 서버에서 클라이언트로 전송되는 패킷 변조
    • 서버에서 전달되는 패킷 변조를 통한 공격 유형은 클라이언트에 해킹하고자 하는 대상이 있는 경우와 서버에서 클라이언트에 정보를 전송했다가 이를 다시 전송 받아 처리하는 경우가 있다.
    • 웹 브라우저 내용만 바뀌었지만 실제로는 ActiveX 등의 형태로 여러 프로그램이 클라이언트에 설치되어 웹 서비스를 제공하는 경우가 많이 있다. 이때 클라이언트에 설치된 서비스 프로그램을 속이는 것이 가능하다.
  2. 클라이언트에서 서버로 전송되는 패킷 변조
    • 서버에서 클라이언트로 전송되는 패킷을 변조하는 것과 클라이언트에서 서버로 전송되는 패킷을 변조하는 것은 기본적으로는 같다
    • 클라이언트에서 서버로 전송되는 패킷을 변조하는 것은 일반적인 웹 서비스의 메뉴 상 접속할 수 없는 것에 접근하거나 특정한 값을 넣어 시스템의 오작동을 유도하기 위한 목적으로 많이 사용한다.

5. XSS(Cross Site Scripting) 공격

  • XSS는 ‘Cross Site Scripting’의 약자로 공격자가 작성한 스크립트를 다른 사용자에게 전달해 사용자의 정보를 추출하기 위한 공격이다.
  • XSS 취약점은 쉽게 악용될 수 있으며, 공격 효과도 커 공격자들이 자주 이용하는 기술
  • XSS 공격은 브라우저로 전달되는 데이터에 악성 스크립트가 포함되어 개인의 브라우저에서 실행되면서 해킹을 하는 것이며, 이 공격용 악성 스크립트는 공격자가 웹 서버에 구현된 웹 어플리케이션의 XSS 취약점을 이용하여 서버 측 또는 URL에 미리 삽입해 놓은 것이다.

  • Stored XSS 공격: 공격자가 XSS 취약점이 있는 웹 서버에 공격용 스크립트를 입력시켜 놓으면, 방문자가 악성 스크립트가 삽입되어 있는 페이지를 읽는 순간 방문자의 브라우저를 공격하는 방식이다.
  • Reflected XSS 공격: 악성 스크립트가 포함된 URL을 사용자가 클릭하도록 유도하여 URL을 클릭하면 클라이언트를 공격하는 것
    ①공격자는 먼저 A사이트에 XSS 취약점이 있는 것을 발견한다.
    ②민감한 정보를 획득할 수 있는 공격용 악성 URL을 생성한다.
    ③공격자는 이 URL을 이메일 메시지에 포함하여 배포한다.
    ④피해자가 URL을 클릭하면, 바로 공격 스크립트가 피해자로 반사되어 민감한 정보(ID/패스워드, 세션 정보)를 공격자에게 전송한다.
  • DOM 기반 XSS 공격: DOM(Document Object Model) 환경에서 악성 URL을 통해 사용자의 브라우저를 공격하는 것
  • XSS 공격 대응방법: 웹 방화벽 도입, <script> 등의 특정 문자열을 탐지

6. 쿠키 획득 공격

  • 쿠키(COOKIE)는 웹 서버에 로그인한 뒤에 어떤 정보를 열람했을 때 웹 서버가 어떤 ID로 로그인한 사용자인지 모르면 정보 열람을 시도할 때마다 인증 정보를 입력해야 하는데 이런 불편을 해소하기 위해 등장한 것이 쿠키다.
  • 쿠키는 서버가 특정 코드를 이용하여 클라이언트에 만든다. 사용자가 웹 사이트에 방문하면 웹 사이트는 사용자의 컴퓨터에 쿠키를 만든다.
  • 사용자가 www.university.co.kr에 접속하면 www.university.co.kr 사이트는 사용자의 브라우저를 확인하는 ID 번호를 쿠키파일에 넣어서 사용자의 컴퓨터에 저장한다.

7. SQL(Structured Query Language) Injection 공격

  • 명령삽입 공격은 URL 또는 웹 서비스 요청에 포함되는 파라미터 값에 시스템 명령을 삽입하는 형태의 공격이다.
  • SQL Injection 공격은 대표적인 명령삽입 공격으로 SQL 구문을 삽입하는 공격이다. 웹사이트에서 많이 사용되는 게시판이나 방명록, 검색 기능과 같이 DB와 연동하여 사용하는 웹 어플리케이션을 대상으로 발생되는 공격
    • DB 관리 시스템(DBMS)이 이용되는 홈페이지를 대상으로 개인정보 등을 탈취할 목적으로 SQL Injection 공격을 시도한다.
    • SQL Injection 공격수법은 웹 주소창에 SQL 구문에 사용되는 문자기호의 입력을 적절히 필터링 하지 않아 조작된 SQL 구문을 통해 DB에 무단 접근하여 자료를 유출/변조할 수 있는 취약점으로 홈페이지 설계시 고려하지 않았다면 모두 해킹이 가능하게 된다.
  • 실제 웹 소스의 로그인 처리 부분
    Query = "SELECT user_id FROM member WHERE uesr_id = '"&strUser_id&"'
          AND password = '"&strPassword&"'"
              strAuthCheck = GetQueryResult(Query)
              If strAuthCheck = "" then
                  boolAuthenticated = False
              Else
                  boolAuthenticated = True
              EndIf
    
    • SQL 삽입 공격은 어떤 수단을 쓰든 SQL의 결과값이 NULL이 나오지 않도록 하여 로그인 하는 것
    • 조건 값에 ‘or “=’을 입력하면 where로 입력되는 조건문을 항상 참으로 만들 수 있음
    • 쿼리의 결과로 한 사용자 이상의 결과가 나온다면, 대부분의 애플리케이션은 나온 결과 중 처음에 있는 사용자를 반환

8. CSRF(Cross-site request forgery, XSRF)

  • 웹 사이트 취약점 공격의 하나로, 공격자가, 사용자(즉 희생자)가 사용하고 있는 웹브라우저를 통해서, 공격자가 조작한 HTTP request를, 웹서버에 보내는 공격
  • 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹 사이트에 요청하게 하는 공격
  • 공격에 성공하려면 공격자는, 사용자의 웹브라우저가 “조작된 HTTP request”를 보내도록 유도해야 한다. (예를 들면, 사회공학기법을 사용하여 email에 첨부된 URL 주소 또는 hyperlink를 클릭하도록 유도)
  • XSS와의 차이는 브라우저에서 스크립트가 실행되느냐, 아니면, 웹서버로 HTTP request가 보내져서 웹서버에서 실행되느냐로 구분된다. 웹서버로 보내지는 HTTP request는, 웹 서버 접속 인증을 받은 사용자의 신분으로 보내지게 된다.

4.3 웹·어플리케이션 공격 유형

1. HTTP 프로토콜 위협

  1. TCP SYN Flooding 공격에 영향
    • HTTP 프로토콜은 기본적으로 TCP 연결이 가용한 상태에서 클라이언트의 서비스 요청에 대한 처리가 가능하다. HTTP 프로토콜은 TCP SYN Flooding 공격에 영향을 받게 된다
  2. 요청과 응답 메시지 통신구조
    • 하나의 웹페이지를 완성하기 위해서는 웹페이지에 포함된 하나 이상의 다수의 객체가 필요하다. 또한 객체는 클라이어트 요청에 의해 HTTP 세션을 통해 서버로부터 응답 받게 된다
    • DDoS 공격을 받고 있다든지 웹서버 세션 자원이 고갈되는 경우에는 웹페이지에 필요로 하는 객체를 제대로 응답받지 못하는 세션이 발생하여 웹 가용성에 영향을 끼치게 된다
  3. HTTP CC 공격
    • HTTP 1.1 버전의 CC(Cahce-Control) 헤더 옵션은 자주 변경되는 데이터에 대해 새롭게 HTTP 요청 및 응답을 요구하기 위하여 캐시(Cache) 기능을 사용하지 않게 할 수 있음
    • 서비스 거부 공격 기법에 이를 응용하기 위해 ‘Cache-Control: no-store, mustrevalidate’ 옵션을 사용하면 웹서버는 캐시를 사용하지 않고 응답해야 하므로 웹서비스 부하가 증가하게 됨

2. 온라인 거래정보의 노출

  • 개인 PC와 온라인 거래 서버와 전자적 거래 시 평문형태로 전송할 경우 공격자가 키보드 해킹 등의 악성코드나 네트워크 스니핑 등을 통해 ID/Password, 신용카드번호, 계좌번호 등의 정보를 가로채거나, 세션 하이재킹 등을 통해 거래정보를 위/변조하여 거래 금액의 변경 등을 시도할 수 있다

3. 홈페이지 해킹

  • 최근의 홈페이지 해킹은 절취형 악성코드를 유포하는 사이트로 변형시켜 개인정보, 온라인게임 정보, 주민번호 등을 절취해가는 등의 해킹에서 해킹 후에 악성코드를 설치하여 숙주를 감염시켜 서비스 장애, 콘텐츠 파괴 및 공격 경유지로 악용하는 형태가 일반화되고 있다

4. 홈페이지 서비스거부(DoS, DDoS) 공격

  • 전통적으로 홈페이지에 대한 분산 서비스거부 공격은 사이버 시위용으로 여러 해커들이 연합으로 공격하였지만 현재는 서비스거부 공격용 에이전트가 설치된 좀비 PC로 구성된 봇 네트워크를 이용한 공격이 나타나고 있다

4.4 인터넷 응용 보안

1. 공개용 취약점 점검 도구

  1. Port Scanning
    • Port Scanning은 목표시스템에 대한 어떠한 포트가 열려있는지를 알아보는 것
    • 열려있는 well known port를 확인하여 목표 시스템에서 제공중인 서비스를 파악
    • TCP port scanning과 UDP port scanning으로 구분
    • 대표적인 도구: nmap
    1. UDP Port Scanning
      • UDP port scanning은 조사하기를 원하는 포트를 destination port로 설정하여 UDP packet을 보내는 것이다
      • 닫혀있는 경우 목표시스템은 destination unreachable 메시지를 보내온다
    2. TCP Port Scanning
      • TCP port scanning은 주로 특정 TCP flag를 설정한 뒤 패킷을 보내어 거기에 대한 반응을 체크하는 방법으로 이루어진다
        • connect() scanning, SYN scanning, FIN scanning, NULL scanning, X-mas scanning 등
  2. Password Crack Program
    1. John the Ripper
      • John the Ripper는 Unix, DOS, Windows 계열 운영체제에서 동작하며 유닉스 계열의 패스워드를 크랙하기 위해 개발되었다
      • 패스워드 점검 도구 중에서 가장 널리 쓰이고 있는 도구
      • 사전파일 공격 및 무작위 대입 공격을 지원한다
      • 관련 URL: <hhtp://www.oepnwall.com/john>
    2. L0phtCrack
      • 패스워드 취약점 점검 도구로서 윈도우 시스템의 원격 및 로컬 서버에 대한 패스워드를 크랙하기 위해 개발되었다
      • 최신 버전은 L0phtCrack7이며 유닉스 계열의 운영체제도 지원한다
    3. pwdump
      • 획득한 SAM 파일의 해시 값을 저장하여 John the Ripper나 LC7 같은 패스워드 크랙 도구를 사용하여 패스워드를 추측해 낼 수 있다
    4. ipccrack
      • 사전파일에 저장된 데이터를 바탕으로 대상 서버에서 장악하려는 사용자 계정의 패스워드를 원격지에서 추측하는 크랙 도구이다
      • btdump 등의 도구를 이용하여 장악할 사용자 계정을 알아내고 ipccrack을 이용하여 패스워드를 추측한다
      • ipccrack는 사전대입 방식을 사용하기 때문에 패스워드 파일이 있어야 한다
  3. Keylog software
    • 설치된 컴퓨터에서 키보드로 입력한 정보를 로그로 남기는 프로그램
    • 키보드 입력뿐만 아니라 윈도우를 이용한 프로그램 사용, 인터넷 익스플로러를 이용한 인터넷접속 정보 등도 로그로 남긴다
    • 로그파일을 실시간으로 공격자에게 전송하거나, 설정된 메일 및 메신저로 저장된 시간에 로그파일을 자동 전송하는 기능도 있다
  4. 백트랙(BackTrack) 및 칼리 리눅스(Kali Linux)
    • 백트랙(BackTrack)은 정보보호 취약점을 테스트하기위한 오픈 소스 리눅스 배포판
    • 칼리 리눅스(Kali Linux)는 백트랙의 후속버전으로 정보보호전문가가 해킹 전용 기반 환경에서 점검을 실시할 수 있게 구성된 리눅스 기반 모의침투 테스트 종합 도구이다
  5. Tripwire
    • 먼저 시스템에 존재하는 파일에 대해 DB를 만들어 저장한 후 생성된 DB와 비교하여 추가, 삭제되거나 변조된 팡리이 있는지 점검하고 관리자에게 통지해주는 무결성 검사 도구이다
  6. COPS(Computer Oracle and Password System)
    • 시스템 보안 감시활동을 자동화해주는 프로그램의 집합으로 유닉스, 리눅스 시스템에 대한 보안 감시 활동을 수행
    • 시스템에 침투한 외부 크래커나, 악의적인 내부 사용자들이 시스템 관리자 몰래 시스템을 변경할 경우 시스템 관리자에게 통보해준다
  7. NMAP
    • NMAP은 가장 대표적인 포트 또는 IP 스캔 프로그램으로서 로컬 및 네트워크 시스템에 대한 스캔을 통해 자신이 관리하는 시스템에 자신도 알지 못하는 포트가 열려있는지를 확인할 수 있는 도구다
    • 한 호스트 뿐만 아니라 네트워크 주소 값을 입력하면 네트워크 주소 대역에 대한 스캔도 가능
    • 다른 종류의 프로그램에 비해 스캔 속도가 빠르며 OS에 대한 정보도 확인 가능
  8. Nipper
    • 다양한 네트워크 장비의 환경설정에서 보안 설정 상태를 점검하는 도구이며, 주어진 각각의 장비에서 보안 문제점을 발견해서 취약점에 대한 대략적인 위험도와 함께 리포트한다
    • 또한 발견된 문제점 내용에 대해 자세히 소개하고, 이를 고칠 수 있는 방법을 알려준다
  9. MBSA(Microsoft Baseline Security Analyze)
    • 주로 Windows 기반 컴퓨터를 대상으로 일반적으로 잘못된 보안 구성을 찾아내고 검사하며 관련 결과에 대한 보안 보고서를 생성한다. MBSA가 실행될 수 있는 환경은 Windows Server 2003, Windows Server 2000 및 Windows XP 등이 있다
  10. NESSUS
    • NESSUS는 가장 많이 사용되는 취약점 점검 도구로서, 원격지에서 다양한 방법을 통해 시스템이나 네트워크의 알려진 취약성에 대하여 점검을 수행하며 이 결과 역시 취약성의 내용과 해결 방법 등에 대한 직관적인 보고서를 제공한다
  11. NKITO
    • NKITO는 사용하기 편리하고 단순하면서도 강력한 기능을 제공하고 있으며 웹 해킹이 대중화되면서 더욱 그 중요성이 커지고 있다. NKITO는 웹서버 설치 시 기본적으로 설치되는 파일과 웹서버의 종류와 버전 등을 스캔하며 특히 취약한 CGI 파일의 스캔 기능이 강력하다

4.5 소프트웨어 개발 보안

1. 소프트웨어 개발 방법론

  1. SDLC(Software Development Life Cycle)
    • SDLC란 소프트웨어 개발 생명 주기
    • 소프트웨어를 개발하기 위한 계획부터 구현 및 사용이 끝나서 완전히 폐기될 때까지의 전 과정을 단계적으로 분류하여 정의한 것
    • 소프트웨어를 개발함에 있어 개발 공정 단계에서 불안전하게 개발된 소프트웨어는 보안 취약점 등으로 인해 향후 프로그램 업데이트나 유지보수를 수반해야 한다
  2. 소프트웨어 개발 단계
    • 폭포수 모델은 소프트웨어의 개발 단계를 계획 단게, 요구분석 단계, 설계 단계, 구현 단계, 시험 단계, 운용 및 유지보수 단계로 나누고 있다

2. 시큐어 코딩(Secure Coding)

  1. 개요
    • 소프트웨어 개발 보안 또는 시큐어 코딩이란 안전한 소프트웨어 개발을 위해 소스코드 등에 존재할 수 있는 잠재적인 보안 취약점을 제거하고, 보안을 고려하여 기능을 설계 및 구현하는 등 소프트웨어 개발과정에서 지켜야 할 일련의 보안활동
    • 인터넷 홈페이지나 소프트웨어 개발 시 보안 취약점을 악용한 해킹 등 내·외부 공격으로부터 시스템을 안전하게 방어할 수 있도록 코딩하는 것
    • 미국은 2002년에 시큐어 코딩을 의무화
    • 마이크로소프트는 윈도우비스타 개발 시 시큐어 코딩 도입
    • 한국은 2012년 ‘SW 개발 보안 의무제’ 시행
  2. 소프트웨어 개발 보안 중요성
    • 비용효율성
      • 기업이 부담해야하는 비용의 최대 30배까지 비용 절감 가능(미국 NIST)
    • 개인정보의 중요성 및 해킹 방법들의 증대
    • ❖소프트웨어 보안 취약점에 대한 정보 제공
      • MITRE 재단의 CWE(Common Weakness Enumeration), CVE(Common Vulnerability and Exposures), OWASP(The Open Web Application Security Project) Top 10 등
    • ❖국내에서도 2009년부터 소스코드 보안 취약점 진단 도구 등과 함께 각종 관리 점검 기준 및 가이드라인을 개발하여 소프트웨어 개발 보안을 강화하고 있음
    • ➢보안 약점: 소프트웨어내의 버그, 에러, 결점 등을 총칭
    • ➢보안 취약점: 보안 약점 + 공격자의 접근 가능 + 공격으로 시스템 보안이 깨질 수 있음
  3. 소프트웨어 개발 보안 방법론
    • 안전한 어플리케이션의 개발, 운영, 유지를 위해 SDLC 단계별로 정보를 암호화하고 보안 약점을 제거하고 구조적 약점을 보완해 안전한 프로그램을 만드는 방법론을 말한다
    • 소프트웨어 개발 보안의 3대 원칙
      • 소프트웨어에 에러가 발생하지 말아야 하며
      • 데이터는 노출되지 말아야 하며
      • 서비스는 서버에서 불필요한 기능이 동작하지 않도록 작성되어야 한다는 것
    • MS-SDL(Security Development Lifecycle), 시큐어소프트사에서 개발하고 현재 OWASP에서 관리되고 있는 CLASP(Comprehensive, Lightweight Application Security Process) 등이 있다
    • ①OWASP-CLASP
      • 소프트웨어 개발 생명주기의 초기 단계의 보안을 강화하기 위한 정형 프로세스
      • 프로젝트 관리자, 보안감사 책임자, 개발자, 설게자, 테스트 책임자 등 프로젝트 참여자에 대한 보안에 관한 지침 제공
      • 프로그램 설계나 코딩 오류를 찾아내어 개선하기위해 개발팀에 취약점 목록을 제공
      • 취약점 목록의 취약점들을 점검하기 위한 자동화된 정적 분석 툴 이용
    • ②MS-SDL(Microsoft Security Development Lifecycle)
      • MS-SDL은 마이크로소프트의 보안 개발 방법에 대한 투명한 제공을 위해 제작된 보안 프로세스다
      • 소프트웨어 기획단계/개발단계의 모든 라이프사이클에서 보안 검토를 적용하기 위한 프로세스이며, 취약점을 줄이는 데 목적을 두고 있다
      • 윈도우 비스타에 처음 적용됐으며 이전 버전에 비해 50%이상 취약점이 감소되었다고 함

3. 소프트웨어 보안 취약점 평가 체계

  • CWSS(Common Weakness Scoring System)
    • CWSS는 소프트웨어가 가지고 있는 보안상의 약점들을 정량적으로 평가하는 체계로 미국 정부와 학계, 산업계에서 함께 공동으로 연구를 진행
    • CWSS는 정량적인 평가를 위해서 3가지 영역의 점수를 각각 계산하고 중간 점수들의 곱으로 최종적인 CWSS의 점수를 계산한다
    • 3가지 영역은 약점 자체의 심각성(Base Finding Metric Group), 공격 측면의 심각성(Attack Surface Matric Group), 환경적 측면의 심각성(Environment Matric Group)으로 분류
  • CVSS(Common Vulnerability Scoring System)
    • CVSS는 보안 취약점을 본질적인 기본 척도(Base Metric), 시간에 따른 척도(Temporal Metric), 환경적인 척도(Environmental Metric)에 따라 평가하도록 하여 보안 취약점의 심각성을 다양한 관점에서 평가하기 위한 방법을 제공

4. 응용프로그램(홈페이지) 개발 시 보안 취약점

  1. 접근통제 취약점
    • 관리자 페이지에 대한 접근통제가 필요하다
  2. 부적절한 파라미터
    • 공격자는 URL, 쿼리 문자열, HTTP 헤더, 쿠키, HTML 폼 인자, HTML hidden 필드 등 모든 HTTP 요청을 변조할 수 있으며, 이를 통해 사이트의 보안 메커니즘을 우회
  3. 취약한 세션 관리(Cookie Injection)
    • 쿠키(Cookie) 값 변조를 통해 다른 사용자로 위장하거나 권한 상승 등을 시도할 수 있다
  4. 버퍼 오버플로우
    • 공격자는 웹 어플리케이션에 조작한 입력 값을 보내어 웹 어플리케이션이 임의의 코드를 수행하도록 할 수 있으며, 이를 이용해 시스템을 효과적으로 장악할 수 있다
  5. 악의적인 명령 실행(XSS)
  6. SQL Injection
  7. File Upload 취약점
  8. File Download 취약점
  9. 개발 보안 관리
    • 웹 어플리케이션 개발에 있어서 지켜야할 원칙은 다음과 같다
      ①사용자에게 전달된 값(HIDDEN form 필드, parameter)를 재사용할 경우 신뢰해서는 안된다
      ②최종 통제 메커니즘은 반드시 서버에서 수행되어야 한다
      ③클라이언트에게 중요 정보를 전달하지 않는다
      ④중요 정보 전송 시 POST Method 및 SSL을 적용한다
      ⑤중요한 트랜잭션이 일어나는 프로세스에 사용자의 비밀번호를 재확인한다
      ⑥중요 정보를 보여주는 페이지는 캐시를 사용하지 못하도록 설정한다
      ⑦적절한 방법으로 암호화한다
      ⑧각 언어에서 제공하는 보안 수단을 이해한 후 사용한다

5. 소프트웨어 개발 보안 취약점 유형

유형 설명 취약점
1. 입력데이터 검증 및 표현 프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정으로 인해 발생할 수 있는 보안 약점 • SQL 삽입
• 경로 조작 및 자원 삽입
• 크로사이트 스크립트
• 운영체제 명령어 삽입
• 위험한 형식 파일 업로드
• 신뢰되지 않는 URL 주소로 자동접속 연결
• XQuery 삽입
• XPath 삽입
• LDAP 삽입
• 크로스사이트 요청 위조
• HTTP 응답분할
• 정수형 오버플로우
• 보안기능 결정에 사용되는 부적절한 입력 값
• 메모리 버퍼 오버플로우
• 포맷 스트링 삽입
2. 보안 기능 보안기능(인증, 접근제어, 기밀성, 암호화, 권환 관리 등)을 부적절하게 구현 시 발생할 수 있는 보안 약점 • 적절한 인증 없는 중요기능 허용
• 부적절한 인가
• 중요한 자원에 대한 잘못된 권한 설정
• 취약한 암호화 알고리즘 사용
• 중요정보 평문저장
• 중요정보 평문전송
• 하드코드된 비밀번호
• 충분하지 않은 키 길이 사용
• 적절하지 않은 난수 값 사용
• 하드코드된 암호화키
• 취약한 비밀번호 허용
• 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출
• 주석문 안에 포함된 시스템 주요 정보
• 솔트 없이 일방향 해시 함수 사용
• 무결성 검사 없는 코드 다운로드
• 반복된 인증시도 제한 기능 부재
3. 시간 및 상태 동시 또는 거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작되는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안 약점 • 경쟁조건: 검사 시점과 사용 시점(TOCTOU)
• 종료되지 않는 반복문 또는 재귀함수
4. 에러 처리 에러를 처리하지 않거나, 불충분하게 처리하여 에러정보에 중요정보(시스템 등)가 포함될 때 발생할 수 있는 보안 약점 • 오류 메시지를 통한 정보 노출
• 오류 상황 대응 부재
• 부적절한 예외 처리
5. 코드 오류 타입 변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩오류로 인해 유발되는 보안 약점 • Null Pointer 역참조
• 부적절한 자원해제
• 해제된 자원 사용
• 초기화되지 않은 변수 사용
6. 캡슐화 중요한 데이터 또는 기능성을 불충분하게 캡슐화하였을 때, 인가되지 않은 사용자에게 데이터 누출이 가능해지는 보안 약점 • 잘못된 세션에 의한 데이터 정보 노출
• 제거되지 않고 남은 디버그 코드
• 시스템 데이터 정보노출
• Public 메소드로부터 반환된 Private 배열
• Private 배열에 Public 데이터 할당
7. API 오용 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안 약점 • DNS lookup에 의존한 보안결정
• 취약한 API 사용

댓글남기기