본문 바로가기

정보보안기사

정보보안기사 애플리케이션 보안(1)

1. DNS
 1) 구조
  ㄱ. Recursive 네임/DNS 서버
   : 사용자 호스트로부터 질의가 들어오면 자신의 캐시에 저장된 정보 또는 반복적 질의를 통해 그 결과를 사용자 호스트에 응답해주는 네임서버
   : ISP 업체
   : 사용자 -> Recursive 네임서버 => 재귀적 질의

  ㄴ. Authoritative 네임/DNS 서버
   : 특정 도메인에 대한 정보를 관리하면서 해당 도메인에 대한 질의만 해주는 네임서버
   : 네임서버가 관리하는 도메인 영역을 존이라하고 관리 도메인에 대한 정보를 담고 있는 파일을 존 파일이라 한다.
   : 각 회사/사이트별로 자신의 도메인을 관리하는 DNS 서버
   : Recursive 네임서버 -> 각 도메인 관리 네임서버 => 반복적 질의


  2) 동작방식
  ㄱ. 사용자 호스트가 Recursive 서버에 요청 => DNS 질의(Query)
    * 윈도우 경우에는 로컬 DNS 캐시, hosts.ics, hosts 순으로 검색
  ㄴ. Recursive 네임 서버는 해당 도메인의 정보가 자신의 캐시에 저장되어 있으면 호스트에 응답, 그렇지 않으면 root

네임서버로부터 최종 질의 대상 도메인의 네임서버까지 반복적 질의 수행
  ㄷ. 정보를 획득한 Recursive 서버는 호스트에게 응답, DNS Response
  ㄹ. 호스트는 응답을 받은 IP 주소를 자신의 DNS 캐시에 일정시간 저장 => 부하 감소


2. DNS Spoofing
  : 희생자에게 전달되는 DNS 응답을 조작하거나 DNS 서버의 캐시 정보를 조작하여 희생자가 의도하지 않은 주소로 접속하게 만드는 공격
  : UDP 프로토콜 기반의 비연결 특성의 취약점을 이용한 공격으로 Transaction ID, 출발지, 목적지 주소만 일치하면 가능하다는 취약점을 이용한 것
  1) 스니핑 기반의 DNS Spoofing
   : 공격자는 Promiscuous 동작으로 DNS Query를 스니핑하여 Transaction ID, 출발지, 목적지 알아내어 조작된 DNS Response 송신


   -대응책
  ㄱ. 스니핑을 이용하기 때문에 이를 탐지 및 차단
  ㄴ. 중요한 사이트의 IP 주소에 대해서는 DNS 질의보다 우선순위가 높은 hosts 파일에서 관리


  2) DNS Cache Poisoning
   : DNS 서버의 캐쉬정보를 조작하는 공격
   : DNS 서버는 반복적 질의 요청으로 부하가 발생하는 것을 막기 위해 캐시와 TTL로 정보 유지
   : DNS 서버 자체가 공격 대상이기 때문에 조작된 캐시 정보가 유지되는 동안 해당 서버에 접근하는 다수의 사용자들이 피해 대상


 -공격방식
  : 생일자 공격 원리에 기반한다. 최대 65536개의 값을 가질 수 있는 Transaction ID를 다수의 조작된 DNS Response 송신하는 방법을 통하여 조작된 응답 중 정상 응답보다 먼저 일치하는 응답이 있으면 조작된 주소정보가 공격 대상 DNS 서버의 캐시에 저장하는 취약점을 이용한다.

 

 -대응책
  ㄱ. 네임서버의 소프트웨어를 최신 버전 상태로 유지
  ㄴ. 도메인 관리용 DNS 서버는 재귀적 질의를 허용X, 제한된 사용자가 사용하는 Recursive DNS 서버라면 해당 사용자로 제한해서 허용
  ㄷ. DNSSEC 사용 => DNS에 공개키 암호화 방식의 보안기능을 부여


 3) DNS 서버 보안
  ㄱ. 마스터/슬레이브 네임서버
   : 원본 존 데이터를 관리하는 마스터 네임서버, 이를 동기화해서 사용하는 슬레이브 네임서버
   : 마스터에 있는 원본 존 데이터를 슬레이브가 동기화하는 'Zone Transfer' 작업, 53/tcp
  ㄴ. 재귀적 질의에 대한 제한
   : 과도한 재귀적 질의 요청이 발생하게 되면 Dos 형태의 공격으로 악용 소지, 따라서 제한된 사용자의 재귀적 질의에 대한 접근제어 필요. /etc/named.conf에서 allow-recursion 항목 설정
   ㄷ. Zone Transfer에 대한 제한
    : 지속적으로 Zone Transfer 요청하여 자원 소모 가능, Zone 데이터 유출 가능
    : M/S 운영 환경에서 지정한 Slave에서만 Zone Transfer 요청 가능하도록 설정
    => /etc/named.conf에서 allow-transfer 항목을 none 또는 Slave의 주소정보로 설정
allow-transfer {192.168.68.137;};

 

3. HTTP
  : 다양한 하이퍼 텍스트 문서들이 웹상에서 서로 연결되어 주로 80/tcp 포트를 사용한 클라이언트 요청과 서버 응답으로 이루어지는 HTTP 통신 프로토콜
  : 웹 상에서 클라이언트와 서버 간에 통신을 위해 개발된 프로토콜
  : TCP 연결 설정 및 종료에 대한 부하를 줄이면서 효율적으로 클라이언트 요청을 처리하기 위해 Keep-Alive 옵션 사용
   => httpd.conf 웹서버 설정 파일의 Keep-Alive=timeout=?, max=? 옵션


  1) 클라이언트 상태정보 유지 기술
  : 상태정보를 유지하지 않는 Stateless 프로토콜이기 때문에 현재 요청과 이전 요청을 식별X
  : 상태 정보 유지가 필요한 경우에 대하여 클라이언트 기술 "쿠키", 서버 기술 "세션" 사용

  ㄱ. Cookie 방식
   : 쿠키는 개별 클라이언트 상태정보를 클라이언트에 저장하고 HTTP 요청/응답 헤더에 담아서 전달하는 방식
해킹 및 스니핑 공격에 의한 변조와 외부 노출에 취약함

  ㄴ. Session 방식
   : 세션은 개별 클라이언트 상태정보를 서버에 저장한다. 클라이언트 세션을 식별하기 위해 세션ID를 부여하고 세션ID는 세션 쿠키를 이용하여 클라이언트와 서버 간에 요청/응답 전달
   : 공격자가 정상적인 사용자의 세션ID 정보를 탈취하면 위장 접근 가능 => HTTP Session Hijacking

  ㄷ. HTTP 쿠키 관련 보안 속성 (응답 헤더의 Set-Cookie 항목)
   : httponly 속성 => 클라이언트에서 스크립트를 통해 쿠키 접근 차단해주는 속성
   : secure 속성 => HTTPS 통신일 경우에만 쿠기 전송, 쿠키에 대한 기밀성 보장 목적

  2) HTTP 요청/응답 메시지 구조
   : 공백=(HEX)0x20, 개행=(제어문자)CRLF, (HEX)0x0d0a

  ㄱ. 요청/상태 라인
   요청: 요청 메소드, 요청URL, HTTP 버전 *각 파라미터는 공백으로 구분
   상태: HTTP 버전, 상태코드, 응답 구문
  ㄴ. 요청/응답 헤더
   요청: Host, Agent, Referer
   응답: Content-Type, Content-Length
  ㄷ. 빈 라인: 헤더의 끝을 의미하는 개행, 빈 라인을 통해 끝을 식별
  ㄹ. 요청/응답 바디: 클라이언트에서 서버, 서버에서 클라이언트로 전송하는 데이터를 담는 부분

4. FTP(File Transfer Protocol)
  : TCP/IP 기반의 서버와 클라이언트 간의 파일 전송 통신 프로토콜
  : FTP 서비스는 암호화 되지 않은 채로 전송되어 스니퍼에 의해 노출될 수 있으므로 필요한 경우를 제외하고는 FTP 서비스 사용을 제한(SFTP(SSH), FTPs(SSL/TLS) 사용 권장)

1) 동작모드
  ㄱ. Active 능동 모드
   : C->S 21번 포트로 접속, 제어 채널을 생성
   : S->C 20번 포트로 접속, 데이터 전송
   * 클라이언트의 PC에 방화벽이 설치되어 외부에서의 접속을 허용하지 않는다면 제어채널의 연결은 되나, 데이터 채널의 연결이 불가능한 문제 발생

  ㄴ. Passive 수동 모드
   : C->S 21번 포트로 접속, 제어 채널을 생성
   : PASV 명령어로 수동모드로 전환, Server는 Cilent에게 1024번 이상 포트를 안내
   : C->S 1024번 이상의 포트, 데이터 채널을 생성

 2) FTP 보안 취약점
   ㄱ. FTP Bounce Attack
   : Active Mode에서 FTP 서버의 파일을 요청하면 클라이언트에서 파일을 받을 IP, Port를 지정하여 전달한다.(PORT 명령) 이 과정에서 IP, Port를 임의의 주소로 지정 가능한 취약점을 이용
   : PORT 명령을 조작하여 공격대상 네트워크를 스캔하고, FTP 서버로 하여금 공격자가 원하는 곳으로 데이터를 전송하게 한다. (제어 채널을 통해 그 전송 결과를 받음)
   : FTP 서버에 스팸메일파일 업로드 후, PORT 명령을 통해 수신측 주소를 조작하여 SMTP 서버로 지정한다.

  ㄴ. Trivial FTP Attack
   : 자체 디스크가 없는 워크스테이션에 부팅이미지를 전달할 목적으로 사용하는 단순하고 간단한 파일 송수신 프로토콜로, 별도의 인증과정 없이 디렉토리에 접근할 수 있는 취약점 존재
   : 접근 제어를 통한 보안 설정을 하지 않을 경우 공격자가 임의의 파일에 접근 가능
    * inetd.conf => 주석 처리, xinetd => service tftp 목록에서 "disable = yes" 서비스 차단
   : TFTP는 secure mode로 사용, chroot 기능을 이용하는 것으로 지정한 디렉토리를 최상위 디렉토리로 지정, 그 상위로는 접근 제한
    * inetd.conf => ... in.tftpd -s /tftpboot
      xinetd => service tftp 목록에서 "server_args = -s tftpboot"

  ㄷ. Anonymous FTP 공격
   : 익명으로 FTP 접속이 가능한 서비스, 익명 계정을 허용하면 원격에서 인증받지 않은 아무 사용자라도 서버의 파일에 접근 가능, 쓰기 권한까지 있다면 악성 코드 업로드로 피해 발생 가능
   : 서비스 차단은 vsftpd.conf 에서 "annonymous_enable_NO" 설정

  3) FTP 접근 제어 설정
   ㄱ. ftpusers 파일을 통한 접근 제어
    : ftpusers 파일은 접속을 제한할 계쩡정보를 담고 있는 설정파일
   ㄴ. TCP Wrapper를 통한 접근 제어
    : hosts.allow, hosts.deny 파일을 이용해 IP 기반 접근 제어를 수행한다. *allow 파일이 우선

 


5. SNMP (Simple Network Management Protocol)
 : TCP/IP 기반 네트워크의 각 호스트로부터 정기적으로 관리정보를 자동으로 수집하거나 상태 모니터링 및 설정할 수 있는 서비스
 : 시스템, 네트워크 관리자로 하여금 원격으로 네트워크 장비를 모니터링, 환경설정 등의 운영할 수 있도록 하는 네트워크 관리 프로토콜, 관리의 편의성 제공
 : OSI 7계층의 어플레키에션 계층 프로토콜이며, 메시지의 요청과 응답 형식으로 교환되기 때문에 전송계층 프로토콜로 UDP를 사용한다.

  1) 동작방식
   : 관리 시스템(Manager)이 161/udp 포트를 이용해 Agent에게 정보를 요청한다.
   : 관리 대상(Agent)은 Agent가 설치된 시스템의 정보나 네트워크 정보 등을 수집하여 MIB형태로 보관하고, 요청 시에 Manager에게 전송한다. *MIB: 관리되는 특정한 정보의 DB

 

- Manager와 Agent의 통신을 위한 필요 사항
ㄱ. SNMP 버전이 상호 동일해야한다.
ㄴ. Community String: 데이터 교환 전에 인증을 위해 사용하는 일종의 패스워드

- 데이터 수집 방식
ㄱ. Polling 방식: M->A에게 정보요청, A->M에게 요청 정보 응답, 161/udp
ㄴ. Trap 방식: A->M에게 알리는 방식, 특정 이벤트에 대한 정보를 비동기적으로 알리기 위해 사용하며 notify라고도 한다.


6. NMS (Network Management System)
 : 네트워크 상의 자원들을 모니터링하고 제어하기 위한 도구, 중앙 제어 구조, M-A 구조
 : Polling, Event Reporting(Trap 비슷하며, 주기적으로 상태를 M에게 알림) 방식


7. DHCP (Dynamic Host Configuration Protocol)
 : 동적으로 클라이언트의 네트워크 주소를 설정하기 위한 프로토콜


  1) 할당 절차
DHCP Discover: DHCP 서버를 찾기 위해 자신의 MAC 정보를 담아 브로드캐스트
Offer: DHCP서버가 클라이언트에게 IP정보를 제공
Request: 해당 IP를 사용하겠다고 C->S에게 요청(제공 IP 바로 설정X)
Ack: 서버는 해당 MAC과 IP를 테이블에 저장, 할당 주소정보를 클라이언트에게 전송, 클라이언트는 이제 IP정보를 설정한다.

2) DHCP Starvation Attack
 : DHCP서버의 할당 가능한 IP를 모두 소진하게 만드는 공격
 : Discover 메시지로 서로 다른 MAC 주소를 대량을 보내어 offer를 받고, request까지 보낸 후 실제로는 할당하지 않음