참고문헌 및 사이트

- 알기쉬운 정보보호개론 2탄 - 흥미로운 암호 기술의 세계(히로시 유키 지음)

http://www.krcert.or.kr/kor/data/secNoticeView.jsp?p_bulletin_writing_sequence=20884

http://hacksum.net/?p=2070

http://thehackernews.com/2014/04/heartbleed-bug-explained-10-most.html?m=1

http://apollo89.com/wordpress/?p=5907

http://teamcrak.tistory.com/375

http://www.theregister.co.uk/2014/04/10/many_clientside_vulns_in_heartbleed_says_sans/

http://www.ricardomartins.cc/2014/04/09/bleeding-hearts-and-sharp-bits/



1. 인터넷 통신 방식

1) 암호화 미적용방식의 인터넷 통신


엘리스가 보낸 카드번호는 암호화가 되어 있지 않아 이브에게 모두 도청당할 수 있다.


2) SSL/TLS 방식의 인터넷 통신

- 통신 내용을 암호화해주는 주는 프로토콜로서 SSL(Secure Socket Layer), TLS(Transport Layer Security)

   를 이용한다.

- SSL/TLS 상에 HTTP를 올리는 것이다.(프로토콜의 이중 구조)

- 이것에 의해 HTTP의 통신(요청과 응답)은 암호화되어 도청을 방지할 수 있다.

- SSL/TLS 로 통신을 수행할 때의 URL은 http://가 아니고 https://로 시작된다.


2. SSL/TLS의 역할

1) 인터넷 통신에서 보장해야할 것들

① (기밀성) 앨리스가 송신하는 신용카드 번호와 주소를 "도청" 당하는 일 없이 밥 서점에 보내고 싶다.

② (무결성) 앨리스가 송신하는 신용카드 번호와 주소를 "조작" 당하는 일 없이 밥 서점에 보내고 싶다.

③ (인증) 통신 상대의 웹 서버가 "진짜 밥 서점" 이라는 것을 확인하고 싶다.


2) 보장해야할 보안요소의 관련 기술

① 기밀성

- "대칭 암호" 방식을 이용

- 대칭 암호 키를 통신 상대에게 배송하기 위해 "공개 키 암호" 방식의 키 교환을 사용한다.


② 무결성

- 조작을 검출하고 데이터 인증을 수행하기 위해 "메시지 인증 코드(MAC)"를 사용

- 메시지 인증 코드는 "일방향 해시 함수"를 사용해서 구성한다.


③ 인증

- 상대를 인증하기 위해 공개 키에 "디지탈 서명"을 붙인 인증서를 사용한다.


3. SSL/TLS 적용 범위

- HTTP

- 메일을 전송하기 위하 SMTP(Simple Mail Transfer Protocol)

- 메일을 수신하기 위한 POP3(Post Office Protocol)



4. SSL과 TLS의 차이

1) SSL

- 1994년 Netscape 사에 의해 만들어진 프로토콜

- 많은 웹 브라우저에 사용되어 사실상 업계의 표준


2) TLS

- IETF가 만든 프로토콜


5. SSL/TLS 핸드쉐이크 프로토콜의 절차



6. HeartBleed 취약점 개요

OpenSSL 암호화 라이브러리의 하트비트(Heartbeat)라는 확장 모듈에서 클라이언트 요청 메시지를 처리할 때 

   데이터 길이 검증을 수행하지 않아 시스템 메모리에 저장된 64KB 크기의 데이터를 외부에서 아무런 제한 없이 

   탈취할 수 있는 취약점


   하트비트 : 클라이언트와 서버 간의 연결 상태 체크를 위한 OpenSSL 확장 모듈



7. HeartBleed 취약점 작동 방식



8. HeartBleed 취약점 동영상 설명



9. HeartBleed 취약점을 이용한 공격방법 설명

1)


2)



10. HeartBleed 취약점 소스 이해

1) HeartBeat 전문 구조

- 공격자는 헤더에서 HeartBeat 길이 2 byte 를 조작해서 서버측 메모리의 65535 바이트(65k?) 정보를 가져올

   수 있다.




2) 취약한 소스의 구조


① 첫번째 빨간 박스

- 수신된 ssl 구조체를 포인터 p에 담는다

- ssl 구조체 



② 두번째 빨간 박스

- 레코드 타입과 페이로드 길이를 변수에 담는다

- hbtype 변수에 TLS1_HB_REQUEST 저장

- payload 변수에 p 에서 TLS1_HB_REQUEST 이후 다음 번지의 2 바이트 값을 저장한다.

- 보통은 여기에 heartbeat 할 값을 넣는데 heartbleed 취약점은 여기에 빈값을 넣어 정해진 메모리의

   바깥 영역의 데이터를 가져가려고 한다.



③ 네번째 빨간 박스



- bp 변수 처음에 응답 메시지 타입을 저장하고 bp는 다음 포인터로 이동

- s2n 함수에 의해 bp 변수에 payload 2 바이트 길이를 저장하고 bp는 2바이트 이후 포인트로 이동

- 위에서 pl = p 이므로 pl 은 서버측 메모리값. 거기서 payload 에 올라온 사이즈만큼 복사해서

   bp 에 넣는다. 헤더상 2 바이트이므로 2^16 = 65535만큼의 길이를 셋팅할 수 있고

   memcpy 에서는 바이트 만큼 복사할 수 있다.

-> 그런데 왜 64KByte 가져갈 수 있지? 포인터 때문인가? ㅜㅜ 

-> 추가 체크!

 



'My Security Study > Skill' 카테고리의 다른 글

TCPdump  (0) 2013.11.12
TCP Connection  (0) 2013.11.11
TCP Protocol  (0) 2013.11.11
Form SQL Injection  (0) 2013.11.10
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,