정보보안 - HTTP
Web 보안
- 웹프로토콜인 HTTP, TCP/IP 가 데이터에 대한 보안서비스를 제공하지 않음
 
웹트래픽 보안
- IPSec
    
- 네트워크 계층에서 사용
 
 - SSL/TLS
    
- 범용 해결방안
 - 전송계층에서 사용
 
 - S/MIME, Kerveros
    
- 응용계층에서 사용
 
 
SSL/TLS
- 개요
    
- 전송 계층의 보안 프로토콜
 - 기밀성 (DES, RC4 와 같은 대칭키 알고리즘 / 비밀키 : Handshake Protocol) , 무결성 (MAC Code), 인증 보안 서비스 (공개키 인증서) 를 제공
 - Netscape 사에서 제안한 웹브라우저를 위한 보안프로토콜
 - 1996년 SSL 3.0 발표
 - 2014년 SSL 3.0 이 Puddle 공격에 취약점이 발견되어 안전하지 않은 것으로 판명
 - 1999년 IETF(국제 인터넷 표준화 기구) 에서 TLS1.0 버전 발표
 - 2006년 TLS1.1 (RFC 4346) , AES 암호화 지원
 - TLS1.2 (RFC 5246),DES 암호화 지원
 
 - 구조
    
- Application Layer 와 Transport Layer 사이에 SSL/TLS Layer 가 존재
 - TCP 기반
 - 상태 정보를 유지하는 프로토콜
 - 암호화 / 복호화 진행
 - Application Layer : HTTP
 - SSL / TLS Layer
        
- Handshake / Change Cipher Spec / Alert / Application Data
 - Record
            
- Application Data : 응용계층에 있는 데이터 전달
 - Handshake : 양 종단 간 보안 파라미터 협상을 위한 프로토콜
 - Change Cipher Spec : 협상된 보안파라미터의 적용, 변경을 알림
 - Alert : SSL / TLS 통신 중 오류가 발생하면 통보
 - Record : 적용, 변경된 보안파라미터를 이용하여 암호화/복호화/압축/해제/무결성보호 기능 제공
 
 
 - Transport Layer : TCP
 
 - 상태정보 유지 프로토콜
    
- 세션 상태정보
        
- Full Handshake (완전협상) 이후 세션 생성
 
 - SSL / TLS 연결 (Connection) 상태정보
        
- Abbreviated Handshake (단축협상)
 
 - 완전협상에 의해 세션을 생성하고, 세션정보 기반 단축협상을 하여 Connection 생성
        
- 완전협상 (Session)
            
- SessionID (32bit) : 100
 - 암호화정보 : AES256/CBC (Cipher suit 중 선택)
 - Master Secret : Hash (서버랜덤값(32byte), 클라이언트랜덤값(32byte), premaster secret)
 
 - 단축협상 (Connection) & Data 송수신
            
- SessionID : 100
 - Key Block : Hash (서버랜덤값, 클라이언트랜덤값, Master Secret)
 - Key Block : 아래의 값들을 생성하는데 이용
                
- Client Write Key : 암호화 비밀키 (서버 Read Key)
 - Server Write Key : 암호화 비밀키 (클라이언트 Read Key)
 - Client Mac Key : MAC 생성 시 사용하는 인증키
 - Server Mac Key : MAC 생성 시 사용하는 인증키
 - Client IV : 블록 암호화에 사용하는 초기벡터값
 - Server IV : 블록 암호화에 사용하는 초기벡터값
 
 
 
 - 완전협상 (Session)
            
 - 세션이 유지되는 동안 다수의 Connection 이 생성됨
 
 - 세션 상태정보
        
 - 완전협상 (Full Handshake)
    
- 과정
        
- Client –> Server : Client Hello
            
- 클라이언트가 지원 가능한 SSL/TLS 버전
 - Cipher Suites (암호화 도구들)
 - 압축방식
 - Client Random (난수 28바이트 + Datetime 4바이트)
 - Session ID (빈 값) : Session ID Length:0
 - Cipher Suites (지원 가능한 Cipher Suite 목록)
                
- Cipher Suites (10 suites)
                    
- Cipher suite: TLS_DHE_RSA_with_AES_256_CBC_SHA
                        
- DHE : (Ephermeral Diffie Hellman) 임시디피헬먼
 - ECDHE : (Elliptic Curve + DHE) 타원곡선암호 + 임시디피헬먼
 - DH : Diffie Hellman
 
 - Cipher suite: …
 - …
 
 - Cipher suite: TLS_DHE_RSA_with_AES_256_CBC_SHA
                        
 - Cipher Suite 란?
                    
- 키 교환 및 인증 알고리즘 필드
 - Cipher Spec (암호명세) 필드 (블록암호화모드,HMAC용 해시알고리즘)
                        
- SSL_TLS_키교환및인증_with_암호명세
 TLS_RSA_with_AES_256_CBC_SHA256- 키교환및인증 : RSA
 - 대칭 암호화 알고리즘 : AES
 - 암호키길이 : 256bit
 - 블록암호화모드 : CBC
 - HMAC용 해시알고리즘 : SHA256
 
TLS_DHE_DSS_with_AES_256_GCM_SHA256- 키교환 / 인증 : DHE (E:임시 Diffie Hellman (익명X)) / DSS
 - 대칭 암호화 알고리즘 : AES
 - 암호키길이 : 256bit
 - 블록암호화모드 : GCM
 - HMAC용 해시알고리즘 : SHA256
 
 
 
 - Cipher Suites (10 suites)
                    
 
 - Client <– Server : Server Hello
            
- SSL/TLS 버전
 - Cipher Suite (클라이언트 암호화 도구들 중 택1)
 - 압축방식
 - Server Random (난수 28바이트 + Datetime 4바이트)
 - Session ID (생성 값) : Session ID Length : 32
 
 - Client <– Server : Server Certificate (Optional)
            
- 서버 인증서 목록
                
- Certificates
                    
- Certificate Length : …
 - Certificate ID : …
 - Certificate Length : …
 - Certificate ID : …
 
 
 - Certificates
                    
 
 - 서버 인증서 목록
                
 - Client <– Server : Server Key Exchange (Optional)
            
- 키 교환 필요 시 키 교환에 필요한 정보를 서명값과 함께 전송
 
 - Client <– Server : Certificate Request (Optional)
            
- 클라이언트 인증서 요청 메시지
 - 서버에서 인증 가능한 인증기관목록 전송
 
 - Client <– Server : Server Hello Done
            
- Server Hello 종료 알림 메시지
 
 - Client –> Server : Client Certificate (Optional)
            
- 클라이언트 인증서 목록 전달 (요청시)
 
 - Client –> Server : Client Key Exchange
            
- 키 교환에 필요한 premaster secret 값 생성하여 전달
 - 암호화 방식에 따라 전달하는 값이 달라짐
 
 - Client –> Server : Certificate Verify (Optional)
            
- 인증서에 대한 증명 메시지
 - 클라이언트가 보낸 인증서에 대한 개인키를 가지고 있음을 증명 (요청시)
 
 - Client –> Server : Change Cipher Spec
            
- 협상한 암호명세 적용/변경함을 알려줌
 
 - Client –> Server : Finished
            
- 협상 완료 메시지
 
 - Client <– Server : Change Cipher Spec
            
- 협상한 암호명세 적용/변경함을 알려줌
 
 - Client <– Server : Finished
            
- 협상 완료 메시지
 
 - Application Data 를 주고 받음 (단축협상이 이루어진 이후)
 
 - Client –> Server : Client Hello
            
 
 - 과정
        
 - 단축협상 (Abbreviated Handshake)
    
- 과정
        
- Client –> Server : Client Hello
            
- Session ID
                
- Session ID Length : 32
 - Session ID : …
 
 - Client Random
 - Cipher Suites
 - 압축 방식
 
 - Session ID
                
 - Client <– Server : Server Hello
            
- Server Random
 - Session ID
                
- Session ID Length : 32
 - Session ID : …
 
 - Cipher Suite
 
 - Client <– Server : Change Cipher Spec (완전 협상과의 차이점)
            
- Content-Type : Change Cipher Spec(20)
 
 - 
            
Client <– Server : Finished
 - Client –> Server : Change Cipher Spec
 - 
            
Client –> Server : Finished
 - Data 송수신
 
 - Client –> Server : Client Hello
            
 - SSL/TLS 계층 중 Record 계층에 대해서…
        
- 아래 과정 진행 후 송수신
            
- 메시지 압축
 - 압축해제
 - 무결성 검증
 - 암호화 / 복호화
 
 - 과정
            
- Application Data 를 단편화
 - 단편화 한 데이터를 압축 + MAC 추가 => 암호화
 - 전송
 
 
 - 아래 과정 진행 후 송수신
            
 
 - 과정
        
 - 공격 및 대응
    
- SSL/TLS 공격
        
- OPENSSL 의 HeartBleed 취약성
            
- 2014년 Google 에서 발견
 - HeartBeat Protocol 이란?
                
- HandShake / ChangeCipherSpec / Alert / ApplicationData
                    
- 
                        
Application Data HeartBeat 로 나눠짐  
 - 
                        
 - 네트워크 상에서 컴퓨터와 네트워크 간 정상동작을 나타내기 위해 사용
 - 네트워크 상 동기화를 위한 주기적인 신호
 - 보조서버, 주서버 동기화 시 HeartBeat 가 없으면 서버 간 재연결 시도
 
 - HandShake / ChangeCipherSpec / Alert / ApplicationData
                    
 - Alert Protocol (2바이트)
                
- Level (1바이트) / Alert (1바이트)
 
 - OpenSSL 사용 시, HeartBeat 프로토콜의 요구 데이터 길이에 대한 점검이 이루어지지 않아 메모리의 관계없는 데이터까지 상대에게 넘어가는 취약점
 - 대응책
                
- SSL 버전 업 (1.0.1g 이상)
 - HeartBeat 확장 기능을 사용하지 않는 옵션 (재컴파일 필요)
 - 인증서 재발급
 
 
 - SSL 3.0 취약성 (POODLE 공격)
            
- 공격자가 TLS1.0 에서 SSL3.0 으로 다운그레이드 강요 요청
 - 이후 MITM (중간자공격) 진행하여 암호화되어있는 쿠키, 데이터 추출
 - SSL 3.0 은 블록암호화 모듈 CBC 사용
                
- 패딩된 암호 블록이 MAC 에 의해 보호되지 않는 취약점이 존재
 
 - 대응책
                
- SSL 3.0 을 사용하지 않음
 
 
 - FREAK 공격 (수출용 RSA 키의 소인수 분해 로 다운그레이드)
            
- 프랑스 국립연구소 2015년 발견
 - 중간자 공격을 이용, SSL 을 통해 강제로 RSA 인증 (취약) 을 사용하도록 함
                
- RSA Export Suite : 512 비트 -> 약한 암호화
 
 - 대응책
                
- 최신 Open SSL 사용
 
 
 - 완전 순방향 비밀성 (PFS, Perfect Forward Secrecy)
            
- SSL/TLS 통신 중 서버의 개인키 노출문제
                
- 키교환 RSA 방식 중 MITM 공격을 통해 트래픽을 가로채고, 서버의 개인키를 이용하여 세션키, 비밀키, 송수신 데이터 복호화
 - 노출된 인증서를 폐기하여도, 이전 트래픽은 복호화 가능
 
 - 완전 순방향 비밀성 : 이전 트래픽 정보의 기밀성이 유지됨
                
- 키 교환시마다 새로운 DH 개인키를 생성
                    
- DHE (Ephermeral Diffie-Hellman) 이용하여 생성
 - premaster secret (서버,클라이언트 공통) 생성
 - 서버 개인키는 DH의 파라미터를 인증하는 용도로만 사용
 
 
 - 키 교환시마다 새로운 DH 개인키를 생성
                    
 - PFS 적용의 어려움
                
- DH 키 교환방식은 RSA 에 비해서 속도가 느림
                    
- 서버에서 DHE, ECDHE cipher suite 를 비활성화하는 경우가 많음
 - 대부분의 웹 브라우저가 DHE, ECDHE 를 지원하지 않음
 
 
 - DH 키 교환방식은 RSA 에 비해서 속도가 느림
                    
 
 - SSL/TLS 통신 중 서버의 개인키 노출문제
                
 
 - OPENSSL 의 HeartBleed 취약성
            
 
 - SSL/TLS 공격
        
 
      
    
댓글남기기