일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 네트워크관리사2급
- 정보처리기사 필기 합격
- 네트워크 보안
- 디지털포렌식 with CTF
- 는 하지마...
- 2022시작
- 생활코딩
- pythonchallenge
- 윈도우 프로세스
- html
- ftz
- memory
- blkls
- CTF-D
- 디지털포렌식
- Multimeida
- vinetto
- 24시간의 전사
- Multimedia
- network
- 슬퍼유
- Window process
- disk
- 포렌식
- ZIP 파일구조
- N0Named
- 실기
- 생활코딩 html
- slack space
- 윈도우 프로세스 종류
Archives
- Today
- Total
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만으로도 모든 종류의 요청을 표현할 수 있어서 두 메소드만 가지고 개발한다.
- GET : 정보를 요청하기 위해서 사용한다. (SELECT)
- POST : 정보를 밀어넣기 위해서 사용한다. (INSERT)
- PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)
- HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지 확인하기 위해 사용한다.
- OPTIONS : 웹서버가 지원하는 메서드의 종류를 요청한다.
- 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을 명시해야 한다.
- 응답 코드로 서버의 상태를 알려준다.
- 주로 아래 세 가지가 사용된다.
- HTTP/1.1 200 OK\r\n
- HTTP/1.1 404 Not Found\r\n
- 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 가지 방법이 있다.
- FTPS : 표준 FTP의 확장으로 데이터를 암호화 해서 전송할 수 있게 한다.
- SFTP : SSH File Transfer Protocol이다. 이름은 SFTP이지만 FTP 프로토콜과 관련이 없는 기술로 SSH를 이용해서 파일을 전송하는 기술이다. 따라서 표준 FTP 클라이언트로는 SFTP를 사용할 수 없다.
- 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 요청에 응답하는 네임서버이다.
- 네임 서비스 매커니즘은 다음과 같다.
- 웹 브라우저를 이용해 www.example.com 을 입력한다.
- 웹 브라우저는 자신의 캐시에 www.example.com의 IP 주소가 있는지 확인한다.
- 없다면, 운영체제 캐시에 확인한다.
- 운영체제에도 없다면 ISP에서 제공한 Recursing Name Server에 요청한다.
- Recursing Name Server는 Root Name Server에 ".com" 도메인을 관리하는 네임서버정보를 요청한다.
- example.com을 관리하는 Authoritative 네임서버에 www.example.com을 요청한다.
- 응답 받은 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
'sec > forensic' 카테고리의 다른 글
Comments