diff --git "a/2\354\243\274\354\260\250/kimahhh/IP.md" "b/2\354\243\274\354\260\250/kimahhh/IP.md" new file mode 100644 index 0000000..00e2837 --- /dev/null +++ "b/2\354\243\274\354\260\250/kimahhh/IP.md" @@ -0,0 +1,71 @@ +# IP +인터넷 프로토콜(Internet Protocol)의 약자로, + +인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약 + +## 주요 기능 +### 주소 지정 +IP 주소를 사용하여 전 세계의 각 장치를 고유하게 식별 +### 데이터 전달 +패킷 단위로 데이터를 송수신하며, 라우터를 통해 데이터를 목적지까지 전달 + +## 데이터 패킷 +**패킷** 또는 **데이터그램**이라고 불리는 단위로 전송 + +헤더와 데이터 부분으로 구성 +### 헤더 +소스 IP 주소, 목적지 IP 주소, 기타 제어 정보 포함 + +## 비연결성 및 비신뢰성 +### 비연결성 +패킷을 전송하기 전에 목적지와의 연결을 설정하지 않음 +### 비신뢰성 +패킷이 목적지에 도착할 것을 보장하지 않음 + +패킷의 전달, 순서, 오류 복구는 상위 계층 프로토콜(예: TCP)에 의존 + +## 프래그먼테이션 +패킷을 여러 개의 작은 패킷으로 분할하는 것 +### MTU(Maximum Transmission Unit) +데이터를 전송할 수 있는 최대 크기 + +큰 패킷이 작은 MTU를 가진 네트워크를 통과해야할 때, 프레그먼테이션 수행 + +## 버전 +### IPv4 +현재 가장 널리 사용되는 IP 버전 + +32비트 주소 체계 사용 +### IPv6 +보다 큰 주소 공간이 필요한 상황에서 등장한 새로운 버전 + +128비트 주소 체계 사용 +### 변환 방법 +1. Dual Stack + - 단일 장치에서 IPv4와 IPv6 주소를 동시에 실행하는 방법 + - 두 프로토콜 스택을 동시에 지원 +2. Tunneling + - IPv6 패킷을 IPv4 패킷 내에 캡슐화하여 IPv4 네트워크를 통해 전송하는 기술 + - 종류: 6to4, Teredo, ISATAP +3. NAT64 / DNS64 + - NAT64: IPv6 네트워크와 IPv4 네트워크 사이에서 주소 변환을 수행하여 통신을 가능하게 함 + - DNS64: IPv6-only 네트워크에서 도메인 이름을 IPv4 주소로 해석하고, 해당 IPv4 주소를 NAT64 게이트웨이로 전송하여 변환 수행 + +## NAT (Network Address Translation) +### 장점 +1. 주소 보존 + - 공개 IP 주소 부족 문제를 완화 + - 여러 개의 private IP 주소를 단일 public IP 주소 뒤로 숨길 수 있기 때문에 IP 주소 보존 가능 + +2. 보안 + - 내부 네트워크의 private IP 주소를 외부에서 직접 볼 수 없도록 함 + +3. IP 주소 재구성 유연성 + - 내부 네트워크 구성의 IP 주소 체계를 변경할 필요 없이 외부 IP 주소만 변경하여 통신 가능 + +### 단점 +1. end-to-end 연결성 저하 + - NAT는 중간에 주소를 변경하기 때문에, 순수한 end-to-end 통신 방해 +2. 일부 애플리케이션 문제 + - NAT는 IP 주소와 포트 정보를 변경하기 때문에, 이 정보를 사용하는 일부 애플리케이션에서 문제 발생 가능성 + \ No newline at end of file diff --git "a/2\354\243\274\354\260\250/kimahhh/OSI 7 layer.md" "b/2\354\243\274\354\260\250/kimahhh/OSI 7 layer.md" new file mode 100644 index 0000000..d7e1fcf --- /dev/null +++ "b/2\354\243\274\354\260\250/kimahhh/OSI 7 layer.md" @@ -0,0 +1,32 @@ +### 물리 계층 (Physical Layer) +- 기능: 비트 단위의 데이터를 전송하고 받는 역할 +- 주요 장비: 리피터, 허브 등 +- 특징: 전송 매체(케이블)의 전기적, 물리적 성질을 다룸 + +### 데이터 링크 계층 (Data Link Layer) +- 기능: 물리 계층을 통해 전송되는 정보의 오류와 흐름을 관리하여 안전한 정보의 전달을 도와주는 역할 +- 주요 장비: 브리지, 스위치 등 +- 특징: MAC 주소를 사용하여 프레임을 전송, 오류 검출 및 오류 복구 기능 수행 + +### 네트워크 계층 (Network Layer) +- 기능: 데이터의 경로를 선택하고 주소를 정하며, 그 경로에 따라 패킷을 전달하는 역할 +- 주요 장비: 라우터, L3 스위치 등 +- 특징: IP 주소를 사용, 라우팅 · 패킷 포워딩 · 경로 선택 기능 담당 + +### 전송 계층 (Transport Layer) +- 기능: 데이터 흐름의 투명성을 제공하며, 장치 간의 데이터 전송을 관리하는 역할 +- 주요 프로토콜: TCP, UDP 등 +- 특징: 세션의 연결 및 종료, 흐름 제어, 오류 복구 등의 기능 제공 + +### 세션 계층 (Session Layer) +- 기능: 응용 프로그램 간의 세션을 설정, 관리 및 종료하는 역할 +- 특징: 대화 제어 및 동기화 수행 + +### 표현 계층 (Presentation Layer) +- 기능: 데이터의 변환, 암호화, 압축을 관리하는 역할 +- 특징: 응용 프로그램 형식과 네트워크 형식 간의 변환 수행, 데이터를 표준화함 + +### 응용 계층 (Application Layer) +- 기능: 사용자와 가장 가까운 계층으로, 응용 프로그램 및 네트워크 서비스가 이 계층에서 동작 +- 주요 프로토콜: HTTP, FTP, SMTP 등 +- 특징: 사용자 인터페이스, 이메일, 데이터베이스 관리, 파일 전송 등의 서비스를 제공 \ No newline at end of file diff --git "a/2\354\243\274\354\260\250/kimahhh/README.md" "b/2\354\243\274\354\260\250/kimahhh/README.md" new file mode 100644 index 0000000..c89c36c --- /dev/null +++ "b/2\354\243\274\354\260\250/kimahhh/README.md" @@ -0,0 +1,31 @@ +## 질문 리스트 +- 네트워크 장비 + - 라우터와 리피터 + - 리피터와 허브 +- OSI 7계층 + - 전송 계층 + - 데이터 링크 계층 +- 패킷 교환 방식 + - 가상 회선 방식 + - 데이터그램 방식 +- TCP/IP + - TCP의 순서 제어, 흐름 제어 + - TCP, IP의 패킷 교환 방식 +- 흐름 제어 + - stop and wait + - sliding window + +## TODO +- [x] OSI 7계층 +- [x] IP + - [x] IPv4, IPv6 + - [x] NAT +- [x] TCP + - [x] UDP와의 비교 + - [x] 흐름제어, 혼잡 제어 +- [x] 공격 기법 + - [x] 디도스 + - [x] 스니핑 + - [x] HTTP, HTTPS 차이점 + - [x] SSL/TLS + - [x] CSRF \ No newline at end of file diff --git "a/2\354\243\274\354\260\250/kimahhh/TCP.md" "b/2\354\243\274\354\260\250/kimahhh/TCP.md" new file mode 100644 index 0000000..ca2ff97 --- /dev/null +++ "b/2\354\243\274\354\260\250/kimahhh/TCP.md" @@ -0,0 +1,90 @@ +# TCP + +Transmission Control Protocol + +## 특징 + +### 연결 지향적 + +통신을 시작하기 전에 송신자와 수신자 간의 연결을 설정 + +**3-way handshake** + +1. **SYN (Synchronize Sequence Numbers)** + - 클라이언트는 서버에 연결을 요청하기 위해 SYN 패킷을 전송 + - 이 패킷은 초기 시퀀스 번호(예: x)를 포함 +2. **SYN-ACK (Synchronize-Acknowledgment)** + - 서버는 SYN 패킷을 받고, 클라이언트에게 연결 요청을 수락한다는 의미로 SyYN-ACK 패킷을 보냄 + - 이 패킷은 자신의 초기 시퀀스 번호(예: y)와 클라이언트의 시퀀스 번호에 1을 더한 값(x+1)을 ACK 번호로 사용하여 전송 +3. **ACK(Acknowledgment)** + - 클라이언트는 서버의 SYN-ACK 패킷을 받아들이고, 서버에세 ACK 패킷을 보냄 + - 이 패킷의 ACK 번호는 서버의 시퀀스 번호에 1을 더한 값 (y+1)으로 설정 + - 이 단계가 완료되면 연결이 공식적으로 설정되고, 데이터 전송이 시작 + +### 신뢰성 있는 전송 + +패킷의 손실, 중복, 지연 또는 순서 변경을 감지하고 이러한 오류를 복구하기 위한 메커니즘 제공 + +### 흐름 제어 (Flow Control) + +송신자와 수신자 사이의 데이터 전송 속도를 조절하여 네트워크의 혼잡도나 수신자의 처리 능력 초과를 방지 + +**Sliding Window Protocol** + +### 혼잡 제어 (Congestion Control) + +네트워크 내의 혼잡을 감지하고 전송 속도를 조절하여 혼잡 붕괴를 방지 + +**Slow Start** + +**Congestion Avoidance** + +**Fast Retransmit** + +**Fast Recovery** + +**RTO(Retransmission Timeout)과 Backoff** + +### 순서 보장 + +데이터가 올바른 순서로 도착하도록 보장 + +패킷이 순서대로 도착하지 않으면 재정렬 + +**Sequence Number** + +### 오류 검출 + +TCP 헤더에 체크섬이 포함되어 있어 데이터 전송 중 발생할 수 있는 오류 감지 + +## UDP (User Datagram Protocol) + +### 공통점 + +1. 전송 계층 프로토콜 + - 둘 다 OSI 모델의 전송 계층에서 작동 +2. IP와 함께 사용 + - 둘 다 IP(Internet Protocol)와 결합하여 인터넷을 통해 데이터를 전송하는 데 사용 +3. 포트 번호 사용 + - 송신자와 수신자의 응용 프로그램을 식별하기 위해 포트 번호 사용 + +### 차이점 + +1. 신뢰성 + - TCP: 신뢰성 있는 데이터 전송을 보장 / 패킷 손실, 순서 변경, 중복 등의 문제를 자동으로 처리 + - UDP: 신뢰성 있는 전송 보장 X / 패킷 손실이나 순서 변경이 발생하면 응용 프로그램이 처리해야 함 +2. 연결 설정 + - TCP: 연결 지향적 / 데이터 전송 전에 송신자와 수신자 간의 연결 설정 과정(3-way handshake)이 필요 + - UDP: 연결이 설정되지 않는 연결 없는 프로토콜 / 송신자는 수신자에게 데이터를 직접 전송 +3. 속도 + - TCP: 흐름 제어, 혼잡 제어, 오류 복구 기능으로 인해 상대적으로 느림 + - UDP: 오버헤드가 덜 발생하므로 상대적으로 빠름 +4. 헤더 크기 + - TCP: 더 큰 헤더를 가지며, 신뢰성과 흐름 제어 관련 정보가 포함 + - UDP: 헤더가 간단하고 작으며, 최소한의 정보만 포함 +5. 오류 검출 및 복구 + 1. TCP: 체크섬 및 순서 정보를 사용하여 오류를 검출하고 복구 + 2. UDP: 기본 체크섬만 제공하므로 오류 복구 기능 제한적 +6. 사용 사례 + - TCP: 웹 브라우징, 이메일, 파일 전송 등 신뢰성 있는 데이터 전송이 필요한 응용 프로그램 + - UDP: 스트리밍 미디어, VoIP, 온라인 게임 등 신속하고 연속적인 데이터 전송이 중요한 응용 프로그램 \ No newline at end of file diff --git "a/2\354\243\274\354\260\250/kimahhh/\352\263\265\352\262\251 \352\270\260\353\262\225.md" "b/2\354\243\274\354\260\250/kimahhh/\352\263\265\352\262\251 \352\270\260\353\262\225.md" new file mode 100644 index 0000000..df7729a --- /dev/null +++ "b/2\354\243\274\354\260\250/kimahhh/\352\263\265\352\262\251 \352\270\260\353\262\225.md" @@ -0,0 +1,162 @@ +# DDos + +분산 서비스 거부 공격 (Distributed Denial of Service) + +여러 대의 컴퓨터를 사용하여 특정 서버나 네트워크에 대량의 트래픽을 발생시켜서 정상적인 서비스 요청을 처리하지 못하게 하는 공격 + +- 분산된 공격 + - 여러 컴퓨터(봇넷)를 사용하여 통합된 공격 수행 + - 공격의 근원을 추적하기 어렵게 함 +- 대량의 트래픽 + - 예상치 못한 규모의 트래픽이 유입 → 정상적인 서비스 요청 처리 불가 + +### Volume Based Attacks + +대상에게 많은 데이터를 보내서 대역폭을 고갈시키는 공격 + +ICMO, UDP flood + +### Protocol Attacks + +서버의 자원을 고갈시키거나 네트워크 장비에 과부하를 주는 공격 + +SYN flood, Ping of Death, Smurf 공격 + +### Application Layer Attacks + +특정 응용 프로그램 또는 서비스에 대한 요청을 통해 서버의 자원을 고갈시키는 공격 + +HTTP flood + +# 스니핑 + +네트워크 상에서 데이터 패킷을 가로채는 행위 or 기술 + +공격자가 민감한 정보를 도청하거나 습득하는 데 사용 + +## 스니퍼 도구 + +### 패시브 스니핑 + +스니퍼가 네트워크 트래픽을 수동적으로 모니터링 + +트래픽에 직접적으로 영향 X + +### 액티브 스니핑 + +스니퍼가 네트워크 환경에서 패킷을 도청하기 위해 네트워크의 동작에 개입 + +ex) 스위치된 환경에서 ARP 스푸핑과 같은 방법을 사용하여 패킷을 가로챌 수 있음 + +## 보호 방법 + +### 암호화된 통신 + +HTTPS, VPN + +### 정적 ARP 항목 + +ARP 스푸핑 방지 + +### 보안 솔루션 + +스니핑을 감지하거나 방지하는 IDS(침입 탐지 시스템) 구축 + +## HTTPS + +### HTTP + +- HyperText Transfer Protocol +- 웹 브라우저와 웹 서버 간에 정보를 교환하는 데 사용되는 애플리케이션 계층의 프로토콜 +- 평문(암호화되지 않은 텍스트)로 데이터 전송 +- 중간의 공격자(ex. 스니퍼)가 트래픽을 가로채면 내용을 쉽게 읽을 수 있음 +- 데이터의 무결성 및 인증 메커니즘 X → 중간자 공격(man-in-the-middle attack)에 취약 +- 기본적으로 포트 80 사용 + +### HTTPS + +- HyperText Transfer Protocol Secure +- HTTP의 보안 버전 +- 데이터 전송을 암호화하기 위해 SSL(Secure Sockets Layer) 또는 그 후속인 TLS(Transport Layer Security) 사용 +- 암호화된 통신을 통해 데이터의 기밀성 보장 +- SSL/TLS 인증서를 사용하여 웹 서버의 신원 인증 → 사용자는 자신이 접속하려는 사이트가 정당한 사이트임을 확신 +- 데이터의 무결성을 보장하여 중간의 공격자가 데이터를 수정하는 것을 방지 +- 기본적으로 포트 443 사용 + +### SSL/TLS + +- 기능 + - **암호화**: 데이터를 암호화하여 통신 내용을 도청하는 공격자로부터 보호 + - **인증**: 통신하는 양측이 서로의 신원을 확인하게 하여 사용자가 통신하고자 하는 서버가 정당한지 확인 가능 + - **무결성**: 전송되는 데이터가 중간에 변경되거나 손상되지 않았음을 확인 +- 동작 방식 + - **핸드쉐이크**: 연결 초기에 클라이언트와 서버는 `핸드쉐이크` 과정을 통해 통신할 암호화 방식을 협상 & 서로의 신원 인증 + - **인증서**: 디지털 인증서를 사용하여 서버(때로는 클라이언트도)의 신원을 인증 + - 대부분의 경우, 이 인증서는 신뢰할 수 있는 제3자 기관(`CA`, Certificate Authority)에 의해 서명됨 + - **키 교환**: 핸드쉐이크 과정에서 클라이언트와 서버는 안전하게 공유된 `세션 키`를 생성 → 이후의 암호화된 통신에 사용 + +## VPN + +Virtual Private Network + +### 특징 + +- **보안**: 사용자의 인터넷 연결을 암호화하여 중간에 데이터를 가로채거나 조작하는 것을 방지 +- **프라이버시**: 사용자의 실제 IP 주소를 숨기며, 그에 따라 온라인 활동의 추적을 어렵게 함 +- **지리적 제한 우회**: 특정 지역에서만 사용할 수 있는 서비스나 콘텐츠에 접근 가능 +- **원격 접속**: 기업은 직원이 외부에서 안전하게 회사 네트워크에 접근할 수 있도록 VPN 사용 + +### 동작 방식 + +1. **터널링**: `터널`이라는 안전한 연결 통로를 생성 → 이 터널을 통해 데이터가 암호화되어 전송 +2. **암호화**: 데이터를 암호화하여 중간의 공격자로부터 보호 +3. **인증**: 서버와 클라이언트는 서로의 신원을 확인하기 위해 인증 과정을 거침 + +### 주요 유형 + +- PPTP(Point-to-Point Tunneling Protocol) +- L2TP(Layer 2 Tunneling Protocol) +- OpenVPN +- IPSec(Internet Protocol Security) +- SSTP(Secure Socket Tunneling Protocol) + +## ARP 스푸핑 + +### 동작 방식 + +1. LAN 상에서 호스트는 IP 주소를 통해 다른 장치와 통신함. 그러나 실제 데이터는 MAC 주소를 기반으로 전송됨. ARP는 IP 주소를 해당 MAC 주소로 변환하는 데 사용 +2. 공격자는 속이는 ARP 응답을 통해 특정 IP 주소가 자신의 MAC 주소와 연결되어 있다고 잘못 알림. 이로 인해 트래픽은 원래의 목적지 대신 공격자에게 전송됨. +3. 공격자는 이 트래픽을 검사, 수정 또는 변조한 후 원래의 목적지로 전송 + +### 목표 + +- 데이터 도청 +- 세션 하이재킹 +- 데이터 변조 +- 서비스 거부 공격 (DoS) + +### 방어 방법 + +- 정적 ARP 항목 +- ARP 스푸핑 탐지 도구 +- 포트 보안 +- VLAN 사용 +- VPN 및 암호화 + +# CSRF + +Cross-Site Request Forgery(크로스 사이트 요청 위조) + +### 동작 방식 + +1. 피해자가 취약한 웹 사이트에 로그인하며 세션 쿠키를 생성 +2. 피해자가 악성 웹페이지 또는 이메일에 포함된 악성 코드를 클릭하거나 방문 +3. 악성 코드는 피해자의 브라우저를 통해, 피해자가 로그인한 상태에서만 수행할 수 있는 행동(ex. 비밀번호 변경, 계정 설정 변경 등)을 자동으로 취약한 웹 사이트에 요청 +4. 피해자의 세션 쿠키를 사용하여 웹 사이트는 요청을 합법적인 것으로 간주하고 수행 + +### 방어 방법 + +- Anti-CSRF 토큰 +- SameSite 쿠키 속성 +- 검증에 Referer 헤더 사용 +- 요청에 대한 사용자 확인 \ No newline at end of file