웹 보안의 필요성
- 인터넷은 처음 개발 당시, 서비스/네트워크가 더 시급했기 때문에 보안을 고려하지 않았다. 추후에 보안 서비스를 추가하게 되었다 그것이 TLS/SSL이다.
- WWW는 인터넷과 TCP/TP 상에서 돌아가는 클라이언트 및 서버 응용프로그램이다.
- 다음과 같은 이유로 WWW에는 보안 기술이 요구된다.
- 웹 서버를 구성하고 웹 컨텐츠를 개발하는 것은 점점 쉬워지고 있지만, 그 내부에서 돌아가는 것들은 매우 복잡하다. 따라서 우리가 알지 못하는 보안적 결함이 숨어 있을 수 있따.
- 웹 서버(외부에서의 관문)를 침입 기반으로 하여 (다른) 전체 시스템에 침입할 수 있다.
- 웹 기반 서비스 이용자는 상대적으로 보안에 대하여 잘 알지 못하는 사람이 대부분이다. (이용자에게 신뢰를 주어야 해서)
웹 보안 위협
SSL/TLS
- 응용 계층 보안을 위한 기술로 웹에서 가장 많이 사용되고 있는 보안 서비스 중 하나이다.
- 응용 계층 : OS 7계층에서 가장 위
- 처음에는 Secure Socket Layer 기술이 개발되어 널리 사용되었지만 보안 결함으로 인해 더욱 업그레이드 된 Transport Layer Security (TLS)가 개발되어 사용되고 있다.
- 다음과 같은 서비스를 제공한다.
- 기밀성/무결성/인증을 위해서
- 가용성은 없다.
- 서버와 클라이언트 사이에 전송되는 데이터를 암호화한다.
- 서버와 클라이언트는 공개키 기반 암호 시스템을 이용하여 서로를 인증한다.
- MAC을 이용하여 전송되는 모든 메세지의 무결성을 검사한다.
- 현재, 웹브라우저를 포함한 많은 응용프로그램에 TLS 패키지가 내장되어 있다.
TLS 구조
- 2개의 계층에 걸쳐있는 프로토콜
- 응용 계층
- 상위 계층 : Handshake Protocol, Change Cipher Specification Protocol, Alert Protocol, Heartbeat Protocol, HTTP
- 하위 계층 : Record Protocol - 상위계층 프로토콜에 기본적인 보안 서비스 제공
- HTTP도 TLS 위에서 동작이 가능하다. (Ex. HTTPS)
- 연결 : 통신에서 정보 전달을 위해 개체 간에 설정된 통신로
- 세션 : 개체 간의 통신을 위한 논리적 연결로 서로를 인식한 이후부터 통신을 마칠 때까지를 말한다.
TLS Handshake Protocol
- 서버와 클라이언트가 세션을 만들기 위해 처음으로 수행하는 프로토콜
- 암호화 방법, 메세지 인증, 압축 방법, 사용되는 각종 키들을 정한다.
- Handshake Protocol 결과, 서버와 클라이언트는 동일한 premaster secret 값을 가지게 된다. 각각은 이 값으로부터 master secret을 유도해낸다.
- 목표 : 클라이언트와 서버가 상대방의 공개키를 받아서 인증한다, 세션키와 MAC용 키를 공유한다.
TLS Record Protocol
- 전송 데이터의 보안을 위해 실질적으로 MAC 코드를 생성하고 암호화하는 과정이다.
- 다음 두가지 서비스를 제공한다.
- 기밀성 : Handshake Protocol에서 정의한 대칭키를 이용하여 전송 데이터를 암호화한다. (단계3)
- 무결성 : MAC을 생성하여 전송된 데이터의 무결성을 증명해준다.
- 다음 다섯 단계로 데이터를 처리한다.
- 단편화 (Fragmentation) : 16,384바이트(16KB) 이하의 블록으로 나눈다. (큰 데이터로 일정하게 쪼개기)
- 압축 (Compression)
- 메시지 인증 코드 계산 : HMAC 이용한다.
- 암호화 : AES나 3DES, RC4 알고리즘을 사용한다.
- 헤더 붙이기 : 컨텐츠 유형, 주버전, 서브버전, 압축된 데이터의 길이로 구성된다.
- 컨텐츠 유형은 change_cipher_spec, alert, handshake, application_data 중 하나의 값을 갖는다. (상위계층 중 하나로)
TLS에서 발생할 수 있는 여러가지 공격들
- HandShake Protocol에 대한 공격 (가장 취약한 부분이다.)
- 웹사이트 금지 방법
- Domain Name을 차단한다.
- 서버의 IP 주소를 차단한다.
- Contents를 보고 차단한다. (Https를 사용하면 무용지물)
- 웹사이트 금지 방법
- 레코드와 응용데이터 프로토콜에 대한 공격 : Chosen Ciphertext attack에 취약하다고 알려져 있다. (그렇긴 한데, 뚫리진 않는다.)
- PKI에 대한 공격 : X.509는 다양한 취약점들이 발견되었는데 이를 기반으로 한 TLS에는 이 취약점을 이용한 공격들이 일어나고 있다.
- X.509을 사용하는 대부분이 타겟이다.
- 개개인의 암호 기술에 대한 공격 (하나라도 뚫으려고)
- OpenSSL의 HeartBleed 취약성 : 서버가 잘 살아있는지 응답, 필요보다 큰 Byte를 요구해도 다 들어준다. → 문제가 발생한다. (10Byte를 보내면서 10Byte가 아닌 30Byte를 달라해도 준다. 나머지 20Byte에 민감한 정보가 있을 수도 있다.)
- POODLE 공격 : 예전 버전과 통신할 수 있다.(다운그레이드해서 통신해주어야 한다.)
- FREAK 공격 : 각각의 암호 기술에 대해서
- 의사난수 생성기에 대한 공격
- 인증서의 취약점을 노리는 공격
- Handshake를 과도하게 발생시켜서 DoS 공격을 한다.
- DoS : 가용성을 침해하는 모든 공격
HTTPS
- HTTP와 SSL/TLS의 결합
- 지원 기능
- 현재 접속하고 있는 웹사이트 검증
- 전송되는 모든 데이터 암호화
- HTTP는 80포트를 사용하지만 HTTPS는 443포트를 사용한다.
- HTTPS를 사용하면 다음 내용들이 암호화된다.
- URL
- 문서내용
- 브라우저 양식 내용
- 쿠키
- HTTP 헤더
HTTP vs HTTPS
- HTTP : 평문으로 통신
- HTTPS : 내 PC에서 서명/암호화 완료 후 전송 → 도청해도 소용없다. 웹브라우저 단에서 서명/암호화 한다.
HTTPS의 연결 개시와 연결 종료
- HTTPS 연결 시작을 위한 과정
- 클라이언트가 적절한 포트를 통해 TLS_ClientHello를 서버에 보냄으로써 연결 시작
- TLS 핸드셰이크가 마무리되면 첫번째 HTTP 요청을 전송한다.
- 모든 HTTP 데이터는 TLS 응용 데이터로 전송한다.
- HTTPS 연결 종료를 위한 과정
- 클라이언트나 서버가 HTTP 레코드 안에 “Connection: close”를 삽입해서 연결을 종료한다.
- 오류로 인하여 연결 중단되었을 때는 close_notify 경보를 띄우고 사용자에게 경고 메세지를 나타내어준다.
SSH
- 쉽게 구현이 가능하고 저비용 설계된 안전한 네트워크 통신용 프로토콜
- SSH 서버는 22번 포트를 사용한다. (Telnet은 23번, 원격 리눅스 머신 등에 접속할 때 사용한다.)
- Telnet의 보안 문제를 해결하기 위해 만들어졌다.
- SSH는 Telnet보다 일반적인 클라이언트/서버 기능과 파일 전송, 전자메일 기능을 제공한다. (SSH보다 기능이 많다.)
- 초기버전은 SSH1으로 안전한 원격 로그온 기능을 제공하는 데에 중점을 두었다. (현재는 SSH2)
- SSH1의 보안 문제를 해결한 것이 SSH2이다.
SSH 구성
- SSH 전송층 프로토콜
- 사용자 인증 프로토콜 (User Authentication Protocol)
- 연결 프로토콜 (Connection Protocol)
SSH Port Forwarding
- 직접 접근 못하는 서버에 접속하기 위해서이다. (Ex.Proxy, VPN, Port Forwarding)
- 임의의 안전하지 않은 TCP 연결을 안전한 SSH 연결로 변환한다.
- SSH 터널링이라고 한다.
- SSH는 두가지 유형의 Port Forwarding을 지원한다.
- 로컬 포워딩 (local forwarding) : client가 요청한다.
- 원격 포워딩 (remote forwarding) : SSH Server가 요청한다.
- 원리는 같다. : 터널링을 한다.
- 주로 일반적인 방법으로는 연결이 불가능한 컴퓨터에 연결할 때 사용한다.
Local SSH Port Forwading
- 사용자의 특정 포트로 들어오는 패킷을 SSH 연결을 통하여 SSH 서버로 전송한 뒤, 최종목적지로 전송하는 기법이다.
- 사용자가 다음 명령어를 입력했다고 가정한다. ( ssh -L 9999:mailserver.com:110 203.153.1.2)
- 사용자 컴퓨터의 9999번 포트로 들어오는 모든 패킷은 SSH를 통하여 SSH서버로 전송 된다. 그리고 서버는 일반 연결을 통해 mailserver.com의 110번 포트로 전송된다.
- mailserver.com의 110번 포트로부터 응답이 오면 SSH서버는 SSH 연결을 통해 사용 자의 9999번 포트로 전송해준다.
- 여러 client가 접속할 수 있다.
Remote SSH Port Forwarding
- 누가 SSH 연결을 시도하는지가 다르다.
- 서버가 클라이언트로 하여금, SSH 서버를 통하여 자기 자신 서버와 연결되게끔 해 주는 기술이다.
- 서버 운영자가 특정 서비스를 외부 사용자에게 접속을 허락해주기 위해 주로 사용한다.
- 서버 운영자가 다음 명령어를 입력했다고 가정 (ssh -R 9999:company.com:3389 203.153.1.2)
- 이는 Client(203.153.1.2)의 9999번 포트로 들어오는 모든 메시지는 company.com의 3389번 포트로 자동으로 릴레이 되게 해 준다.
- server.com으로부터 응답이 오면 SSH서버는 SSH 연결을 통해 사용자의 컴퓨터로 전송 해준다.
- Server가 접속할 Client를 한정할 수 있다. (Client 주소를 명시해서)
'Computer Science > Network Security' 카테고리의 다른 글
[CS][알기 쉬운 정보보호개론 3판] Chapter14. 이메일 보안 (0) | 2023.12.06 |
---|---|
[CS][알기 쉬운 정보보호개론 3판] Chapter13. 난수 (1) | 2023.12.06 |
[CS][알기 쉬운 정보보호개론 3판] Chapter12. Key (1) | 2023.12.06 |
[CS][알기 쉬운 정보보호개론 3판] Chapter11. 인증서 (0) | 2023.12.06 |
[CS][알기 쉬운 정보보호개론 3판] Chapter10. 디지털 서명 (0) | 2023.12.06 |