ssoL2 TISTORY

[WHOIS] 포렌식 교육 6주차 공부 / HTTP, FTP, DNS, TLS 프로토콜/ZIP password cracking/advanced archive password recovery 본문

sec/forensic

[WHOIS] 포렌식 교육 6주차 공부 / HTTP, FTP, DNS, TLS 프로토콜/ZIP password cracking/advanced archive password recovery

ssoL2 2021. 2. 13. 15:57

공부

1. http, ftp, dns, tls 프로토콜 통신규약 등을 공부하기
2. zip password cracking 하는 법 (ex : advanced archive password recovery)


1. 프로토콜 통신규약 

  • 프로토콜(Protocol) : 컴퓨터 통신 시 지켜야 할 절차 및 규약

1) HTTP 프로토콜

  • HTTP(Hypertext Transfer Protocol) : 인터넷에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜
  • Application Level Protocol로 TCP/IP 위에서 작동한다.
  • HTTP는 이미지, 동영상, 오디오 등 어떤 종류의 데이터든지 전송할 수 있도록 설계돼 있다.
  • Hypertext 기반으로, 즉 링크 기반으로 데이터를 전송 및 접속한다.

 

  • Client에서 요청(request)하면 -> Server에서 응답(respond)한다.

 

  • HTTP는 Connectless 방식으로 작동한다.
  • -> 자원 하나에 대해서 하나의 연결을 만들고 끝나면 연결을 끊는다.
  • 수십만명이 웹 서비스를 사용하더라도 접속유지는 최소한이기에 머 많은 유저의 요청 처리 가능하다.
  • 그러나, 연결을 끊어버리기에 Client의 이전 상태를 알 수가 없는데 이를 stateless 하다고 한다.
  • HTTP는 cookie를 이용해서 stateless 문제를 해결하고 있다.
  • Cookie : 클라이언트와 서버의 상태 정보를 담고 있는 정보조각(클라이언트는 쿠키, 서버는 DB 지님)

 

  • 클라이언트 프로그램(웹 브라우저)는 URL을 이용하여 자원의 위치를 찾는다.
  • HTTP는 전송 프로토콜이고, URL은 자원의 위치를 알려주기 위한 프로토콜이다.
  • http://www.joinc.co.kr/index.php
  • http : 자원에 접근하기 위해서 http 프로토콜을 사용한다.
  • www.joinc.co.kr : 자원의 인터넷 상에서의 위치이다. 도메인은 ip주소로 변환된다.
  • index.php : 요청할 자원의 이름이다.

 

  • 서버에게 요청할 때 사용하는 메소드(Method)
  • 보통 GET과 POST만으로도 모든 종류의 요청을 표현할 수 있어서 두 메소드만 가지고 개발한다.
  1. GET : 정보를 요청하기 위해서 사용한다. (SELECT)
  2. POST : 정보를 밀어넣기 위해서 사용한다. (INSERT)
  3. PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)
  4. HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지 확인하기 위해 사용한다.
  5. OPTIONS : 웹서버가 지원하는 메서드의 종류를 요청한다.
  6. TRACE : 클라이언트의 요청을 그대로 반환한다. echo 서비스로 서버 상태를 확인하기 위해 주로 사용한다.

 

  • 요청(request)는 서버가 인식 가능한 약속된 형식(HTTP 형식)을 따라야 한다.
  • 웹 브라우저는 웹 서버에 데이터를 "요청"하는 "클라이언트 프로그램"이다.
  • "HEADER" + "BODY"
  • HTTP 헤더 파싱할 때 "요청 메서드 + 요청 URL + HTTP 프로토콜 버전"은 제일 처음으로 와야한다.

 

  • 응답 헤더는 서버의 여러 상태 정보를 포함하기 때문에 복잡하다.
  • wget 명령어로 헤더 정보를 가져올 수 있다.
응답 프로토콜과 버전 | 응답 코드 | 응답 메시지\r\n
Date(날짜)\r\n
서버 프로그램 정보 | 스크립트 정보\r\n
다양한 정보 추가 가능~\r\n
Last-Modified(마지막 수정일)\r\n
Cache-Control(캐쉬제어방식)\r\n
Content-Length(길이)\r\n
Keep-Alive(기능)\r\n
Content-Type\r\n
\r\n
  • 응답 헤더 또한 "HTTP 프로토콜 버전 + 응답 코드 + 응답 메시지"가 제일 처음으로 와야한다.
  • KeepAlive 기능은 Client 측에 연결을 유지하라는 신호를 보내기 위해서 사용한다.
  • Client는 최대 timeout 시간동안 연결을 유지한다.
  • Content-Type은 Application의 형태를 나타낸다. 전송 데이터에 맞는 content-type을 명시해야 한다.

 

  • 응답 코드로 서버의 상태를 알려준다.
  • 주로 아래 세 가지가 사용된다.
  1. HTTP/1.1 200 OK\r\n
  2. HTTP/1.1 404 Not Found\r\n
  3. HTTP/1.1 500 Internal error\r\n

 


 

2) FTP 프로토콜

  • File Transfer Protocol의 줄임말로 하나의 호스트에서 다른 호스트로 파일을 옮기기 위한 TCP 기반 프로토콜이다.
  • FTP 또한 서버/클라이언트 모델을 따른다.
  • 클라이언트는 파일 업로드 및 다운로드 요청(request)를 하고, 서버가 응답(respond)으로 파일 전송 및 수신한다.

 

  • 인증 과정 없이 유저의 접근을 허용하며 이러한 유저를 Anonymous 유저라고 한다.
  • 파일 공유하기 위한 목적으로 주로 사용하며 Anonymous 유저에게는 읽기 권한만 주는게 일반적이다.

 

  • 모든 웹 브라우저는 FTP 프로토콜을 지원한다.
  • 직접 FTP 클라이언트가 돼서, FTP 서버에 연결할 수 있다.
주소창 : ftp://public.ftp-server.com
주소창 : ftp://user001:secretpassword@private.ftp-server.example.com

 

  • FTP는 암호화를 지원하지 않는다.
  • 그래서 Secure FTP를 이용하는데 다음 3 가지 방법이 있다.
  1. FTPS : 표준 FTP의 확장으로 데이터를 암호화 해서 전송할 수 있게 한다.
  2. SFTP : SSH File Transfer Protocol이다. 이름은 SFTP이지만 FTP 프로토콜과 관련이 없는 기술로 SSH를 이용해서 파일을 전송하는 기술이다. 따라서 표준 FTP 클라이언트로는 SFTP를 사용할 수 없다.
  3. FTP over SSH : SFTP가 아니고, SSH를 이용해서 터널을 만들고, 이 터널에서 FTP 세션을 맺는 방식으로 작동한다.

 

  • FTP는 L7 프로토콜이기 때문에, NAT과 상관없이 작동할 수 있다.
  • 하지만 Host relay 기능을 사용하는 FTP 서버는 NAT 하에서 문제가 될 수 있다.
  • 이를 해결하기 위해서, 특정 포트에서 출발하는 패킷을 열어서 데이터(주소)를 수정하는 방법을 사용한다.

 


 

3) DNS 프로토콜

  • DNS(Domain Name System)은 인터넷이나 사설망에서 컴퓨터나 서비스 등의 리소스를 위한 계층적 분산 네이밍 시스템이다.
  • IP 주소를 사람이 쉽게 인지할 수 있는 도메인 이름 서비스이다.
  • DNS 프로토콜은 네임 서비스를 위한 데이터 교환에 필요한 데이터베이스 기능을 지닌다.
  • 도메인 이름 계층과 IP 주소 공간 사이의 변환 정보를 관리하며, 이것의 구현이 DNS 네임서버이다.

 

  • 도메인 이름 공간은 tree로 구성된다.
  • DNS Zone은 단지 하나의 도메인으로 구성될 수 있으며 권한에 따라 여러 개의 도메인과 서브 도메인으로 구성될 수 있다.
  • 도메인 이름 규칙은 RFC 1035, RFC 1123, RFC 2181에 정의돼 있다.
  • "."으로 각 영역을 구분한다.
  • 가장 오른쪽에 있는 라벨(label)이 Top-level domain이다. ex) www.naver.com의 경우 com
  • 오른쪽에서 왼쪽으로 계층적으로 구성된다.
  • naver은 com의 서브도메인이며 www는 naver.com의 서브도메인이 된다. 이런 서브도메인 트리는 127 레벨까지 가능하다.

 

  • DNS 시스템은 서버/클라이언트 모델을 따르는 분산 데이터베이스 시스템으로 관리된다.
  • 각 데이터 베이스 노드는 네임서버가 관리한다.
  • 각 도메인은 도메인과 하위 도메인에 대한 하나 이상의 authoritative DNS 서버를 지닌다.
  • authoritative name server은 관리하는 DNS Zone에서 DNS 요청에 응답하는 네임서버이다.

 

  • 네임 서비스 매커니즘은 다음과 같다.

  1. 웹 브라우저를 이용해 www.example.com 을 입력한다.
  2. 웹 브라우저는 자신의 캐시에 www.example.com의 IP 주소가 있는지 확인한다.
  3. 없다면, 운영체제 캐시에 확인한다.
  4. 운영체제에도 없다면 ISP에서 제공한 Recursing Name Server에 요청한다.
  5. Recursing Name Server는 Root Name Server에 ".com" 도메인을 관리하는 네임서버정보를 요청한다.
  6. example.com을 관리하는 Authoritative 네임서버에 www.example.com을 요청한다.
  7. 응답 받은 IP주소를 웹 브라우저에게 반환한다.

 

  • 캐싱 네임 서버를 이용하여 한 번 들린 도메인 서버의 IP 주소를 저장한다.
  • 그래서 모든 DNS 쿼리에서 Recursing Name Server를 통한 루트 도메인 서버 경유를 막는다.

 

  • 클라이언트는 DNS resolver를 이용하여 네임 서비스를 요청할 네임서버를 찾는다.
  • 리눅스 운영체제의 경우 /etc/resolv.conf 에 DNS resolve를 위한 네임서버의 목록을 설정한다.
# cat /etc/resolv.conf
nanemserver 8.8.8.8
nanemserver 8.8.6.6

 

  • DNS resolver는 Recursive와 Iterative의 2 가지 방식이 있다.
  • resolver는 application의 요청을 /etc/resolv.conf에 설정된 네임서버에 던진다.
  • 이후 Root Name Server와 Top Level Name Server를 경유하여 응답을 받는 모든 과정을 네임서버에 맡긴다.

  • resolver가 Recursing Name Server로의 역할을 한다.
  • 그래서 DNS 요청이 오면 resolver가 Root Name Server와 Top Level Name Server를 직접 경유해서 응답을 받는다.

 

  • DNS 메시지 포멧은 요청과 응답이 같은 포맷을 사용한다.
  • 각 메세지는 헤더와 Questions, Answers RRs, Authority RRs, Additional RRs 4개의 섹션으로 구성된다.

  • DNS Header는 다양한 필드를 지닌다.
  • Identification (16 bit) : 요청 혹은 응답을 식별하기 위한 식별값이다.
  • QR : 질의(Query)인지 응답(Response)인지 구분한다.
  • OPCODE : Operation Code
  • AA : Authoritative Answer이다. 신뢰가능한 Authoritative 서버의 응답일 경우 응답에 AA 비트를 설정해서 전송
  • TC : Truncated
  • RD : Recursion Desired
  • RA : Recursing Available
  • Z : Zero (Reserved)
  • AD : Authenticated Data
  • CD : Checking Disabled
  • RCODE : Return Code

 


 

4) TLS 프로토콜

  • 인터넷에서의 정보를 암호화해서 송수신하는 프로토콜
  • SSL(Secure Sockets Layer)에 기반한 기술로, 국제 인터넷 표준화 기구에서 표준으로 인정받은 프로토콜

 

  • 핸드셰이크(Handshake)과정을 거친다.
  • 먼저 서로가 어떤 TLS 버전을 사용 가능한지 확인한다. (ClientHello 메시지, ServerHello 메시지)
  • 인증서를 사용해 서로를 믿을 수 있는지 확인한다. (Certificate 메시지, ServerHelloDone 메시지)
  • 서로간의 통신에 쓸 암호를 교환한다. (pre-master secret->ClientKeyExchange 메시지)
  • 이후는 서로 교환한 암호를 사용해 제 3자가 도청 불가능한 통신을 하면 된다. (ChangeCipherSpec 메시지)
  • 대칭키 암호를 쓰는 이유는 보안 수준 대비 준수한 속도를 내기 위함이다.(비대칭키는 하드웨어 자원 낭비)

 

  • TLS를 사용해 암호화된 연결을 하는 HTTP를 HTTPS(HTTP Secure)이라고 한다.
  • 기본 포트는 80번이 아닌 443번을 쓴다.
  • TLS는 다양한 종류의 보안 통신을 하기 위한 프로토콜이며, HTTPS는 TLS 위에 HTTP 프로토콜을 얹은 것이다.

 

  • HTTPS로 연결된 페이지에서 한 개라도 구성요소 중 HTTP로 로드하면 웹 브라우저에서 보안경고 및 무시한다.

 

  • 만약 제대로 확인되지 않은 인증서를 발급한다면 더이상 그 인증서를 신뢰할 수가 없을 것이다.
  • 예를 들어 몇몇 인증 기관에서는 도메인 소유자만 확인하는 인증서이기 때문에 아무나 인증서를 받을 수 있다.
  • HTTPS 프로토콜이라도 피싱 도메인에 들어간다면 보안은 뚫리게 된다.
  • -> EV-SSL은 엄격한 심사 기준으로 발급한 인증서를 사용하여 보안을 강화한 프로토콜이다.

 


2. zip password cracking 하는 법

  • Zip 암호를 cracking하는 방법
  • advanced archive password recovery 프로그램
  • -> rar 파일, zip 파일 등 문서 압축프로그램의 암호를 해제해주는 프로그램이다.
다운로드 링크 -> advanced-archive-password-recovery.kr.uptodown.com/windows

 

  • 설치합시다.

 

  • 사용법은 매우 간단하다.
  • 압축 해제할 파일을 오픈해서 선택하고 크랙하면 된다.

 

  • 옵션 중에서 [All printable]을 선택해야 특수문자도 검색이 된다.

 

 

< 참고 >

www.joinc.co.kr/w/Site/Network_Programing/AdvancedComm/HTTP

www.joinc.co.kr/w/man/12/DNS

www.joinc.co.kr/w/man/12/FTP

namu.wiki/w/TLS

doill.tistory.com/1030

 

Comments