SSL and TCP/IP
SSL(Secure Sockets Layer)계층 추가
- SSL은 애플리케이션에 API(Application Programming Interface)를 제공합니다. 이를 통해 애플리케이션은 쉽게 SSL 기능을 사용할 수 있습니다.
- C와 Java 같은 언어에서 SSL 라이브러리 또는 클래스가 이미 준비되어 있어, 애플리케이션이 쉽게 SSL 기능을 구현할 수 있습니다.
요즘엔 TLS(Transport Layer Security)라고 부름
ㅡ> SSL이 보안기능을 제공해줌
ㅡ> SSL은 사실 app계층의 라이브러리에 가까움
ㅡ> app계층에서 SSL을 거치면 HTTPS고, 안거치면 HTTP임
HTTPS = HTTP + SSL
Toy SSL
- Handshake (핸드셰이크): Alice와 Bob(두 통신 주체)은 서로를 인증하기 위해 각자의 인증서와 개인 키를 사용합니다. 이 과정에서 공유 비밀(shared secret)을 교환하여 안전한 통신의 기반을 마련합니다.
- Key Derivation (키 파생): Alice와 Bob은 교환한 공유 비밀을 사용하여 여러 개의 키를 파생합니다. 이 키들은 암호화, 무결성 검증 등을 위해 사용됩니다.
- Data Transfer (데이터 전송): 전송할 데이터는 여러 개의 레코드로 나누어집니다. 각 레코드는 암호화되어 안전하게 전송됩니다.
- Connection Closure (연결 종료): 안전하게 연결을 종료하기 위해 특수 메시지를 주고받습니다. 이를 통해 연결이 안전하게 닫히고 데이터 누수 없이 종료됩니다.
핸드셰이크 과정
- Hello 메시지: 첫 번째로 Alice가 Bob에게 "hello" 메시지를 보냅니다. 이는 SSL/TLS 연결을 시작하고자 한다는 신호입니다.
- 공개 키 인증서 (Public Key Certificate): Bob은 Alice에게 자신의 공개 키 인증서를 보냅니다. 이 인증서에는 Bob의 공개 키가 포함되어 있어, Alice가 Bob의 신원을 확인하고 데이터를 암호화할 수 있습니다.
- 암호화된 마스터 비밀 (EMS): Alice는 Bob의 공개 키(KB+)를 사용해 마스터 비밀(Master Secret, MS)을 암호화하여 Bob에게 보냅니다. 이 암호화된 마스터 비밀을 EMS(Encrypted Master Secret)라고 합니다. Bob만이 자신의 개인 키로 이 비밀을 복호화할 수 있습니다.
공개키 인증서로 인증기관에서 공개키
우리나라는 위 그림과 반대로, 사용자가 은행한테 공개키인증서를 보내고 있다
그래서 사용자가 불편하고 은행이 편함
data record
레코드(record)
ㅡ> SSL의 데이터 단위
ㅡ> MAC은 주소가 아니라, Message Authentification Code이다.
ㅡ> 해쉬함수에 데이터와 키를 넣어서 MAC을 만든다
- 데이터를 TCP에 연속 스트림으로 암호화하지 않는 이유:
- MAC(메시지 인증 코드)을 어디에 배치할지 문제가 발생합니다. 만약 MAC이 데이터 끝에 있다면, 모든 데이터가 처리될 때까지 무결성을 확인할 수 없습니다.
- 예를 들어, 실시간 메시징에서는 모든 바이트를 다 받은 후에 무결성 검사를 하는 것이 비효율적이거나 불가능할 수 있습니다.
- 대신 데이터를 레코드 단위로 분할:
- 데이터를 여러 개의 레코드로 나눕니다.
- 각 레코드는 MAC을 포함하고 있어 개별적으로 무결성을 확인할 수 있습니다.
- 수신자는 도착하는 각 레코드를 처리하여 데이터의 무결성을 즉시 확인할 수 있습니다.
- 문제: 수신자가 레코드에서 MAC과 데이터를 구분해야 함:
- 이를 위해 가변 길이 레코드를 사용하고, 레코드의 길이 정보가 필요합니다.
- 레코드 구성:
- 레코드는 length, data, MAC의 세 부분으로 구성됩니다.
- length는 데이터의 길이를 나타내며, 이를 통해 수신자가 data와 MAC을 구분할 수 있습니다.
이렇게 되면 공격자는 segment 헤더까지는 읽을 수 있는데
그 안의 데이터는 record로 보안이 돼있어서 키가 없으면 읽을 수 없다
대신 헤더를 읽어서 어디로 가는지는 알 수 있다
그걸 감추려면 tor 브라우저 같은거 사용
공격자는 통신자들이 알아채지 못하게 공격하려고
연속된 패킷의 헤더는 냅두고 record만 순서를 바꿔서 혼란을 일으킬 수 있다
ㅡ> 그래서 해쉬함수에 레코드의 순서(sequence)를 추가한다
ㅡ> MAC = H(data, key, seq)
공격자는 패킷이 아직 끝나지 않았는데 TCP Fin을 보내서 통신을 종료시킬 수 있다
ㅡ> MAC에 type이라는걸 추가해서 끝났는지 아닌지 판단하게 함
ㅡ> MAC = H(data, key, seq, type)
SSL record protocol
데이터를 쪼개서 해쉬함수로 MAC을 만들어 붙이고
그 덩어리 자체를 키로 암호화하고 헤더를 붙인다
방화벽(Firewall)
게이트웨이에 자리잡아서
나가는 패킷, 들어오는 패킷을 감시
운영자가
어떤 패킷을 통과시키고 금지시킬지 정책을 만듬
원래 라우터에서는 ip까지만 보는데
방화벽은 TCP헤더도 보고 정책을 적용하고 그런다
NAT처럼 계층을 위반하는 디바이스다.
ACL(Access Control List)
ACL
ㅡ> 네트워크 패킷에 대해 허용 또는 거부 규칙을 정의하는 표
ㅡ> (action, condition)쌍
ㅡ> 각 패킷에 대해 규칙을 상단부터 하단까지 순차적으로 적용
Stateful Packet Filtering(상태 기반 패킷 필터링)
Stateless Packet Filtering:
- 특징: 상태를 고려하지 않고 규칙에 따라 패킷을 필터링하는 방식입니다.
- 문제점: 단순한 규칙에 의해 허용되는 패킷이 논리적으로 맞지 않더라도 통과할 수 있습니다.
- 예를 들어, TCP 연결이 설정되지 않았음에도 불구하고 목적지 포트가 80이고 ACK 비트가 설정된 패킷을 허용할 수 있습니다.
- 예시 규칙: 외부의 222.22/16 네트워크 외부에서 출발해, 목적지가 222.22/16 네트워크에 있는 TCP 패킷으로 출발지 포트가 80이고, 목적지 포트가 1023보다 큰 ACK 패킷을 허용함.
Stateful Packet Filtering:
- 특징: 모든 TCP 연결의 상태를 추적하여, 논리적으로 맞지 않는 패킷을 차단합니다.
- 예를 들어, SYN 패킷을 통해 연결 설정을 추적하고, FIN 패킷으로 연결 해제를 추적하여, 이 정보에 기반하여 들어오는 패킷이 올바른지 확인합니다.
- 장점: 비활성화된 연결에 대해서는 제한 시간을 두고 만료시킴으로써 불필요한 패킷을 차단할 수 있습니다.
- 기능:
- 연결 설정(SYN)과 연결 해제(FIN)를 추적하여 각 패킷이 현재 연결 상태에 맞는지 확인합니다.
- 비활성화된 연결에 대한 제한 시간(timeout)을 설정하여 오래된 패킷이 통과하지 못하도록 합니다.
'CS > 네트워크' 카테고리의 다른 글
JWT vs 세션 (0) | 2025.04.01 |
---|---|
네트워크 보안 (1) | 2024.10.28 |
멀티미디어 네트워크 (3) | 2024.10.25 |
무선이동 네트워크3 (0) | 2024.10.24 |
무선이동 네트워크2 (1) | 2024.10.23 |