2011-04-05 4 views
1

OpenSSL 라이브러리를 사용하여 클라이언트와 호스트간에 SSL 소켓을 생성했습니다. 메시지를 올바르게 암호화하려면 SSL 세션의 AES 키가 있어야하며 ssl_write 및 ssl_read 표준 함수를 사용할 수 없습니다. AES_KEY라는 구조체가 있음을 발견했지만 어떻게 알 수 있습니까? 제대로 만 패킷 유형OpenSSL - AES 키 찾기

SSL_write 및 SSL_read 일 : 23 ("응용 프로그램 프로토콜")

내가 해독 할 수있는 방법, 예를 들어, 서버에서 온의 SSL 안녕 메시지 (난이 서버와 SSL 채널을 오픈)? 다른 클라이언트에서 가져온 SSL 클라이언트 (예 : clair)를 어떻게 암호화 할 수 있습니까?

TLS 프로토콜의 "TLS Renegotiation"단계에서 공격을 입증하려고합니다. 사용자 지정 프록시를 사용하여 공격 MITM을 시뮬레이션하려고합니다.

이제 서버는 유형 22 (핸드 셰이크) 및 20 (ChangeCipherSpec)의 암호화 된 특정 메시지를 프록시에 보냅니다. 어떻게 이러한 메시지를 읽고 해독 할 수 있습니까? 표준 라이브러리 ssl_read는 메시지 23 (Application)에서만 작동합니다.

또한 클라이언트는 클라이언트에게 Hello와 22 및 20 유형의 다른 메시지를 프록시로 보냅니다. 어떻게 이러한 메시지를 작성하고 암호화 할 수 있습니까? ssl_write를 사용하여 시도했지만 서버가이 메시지를 이해하지 못합니다.

+0

"표준 함수 ssl_write 및 ssl_read를 사용할 수 없습니다."이유는 무엇입니까? – Jumbogram

+0

맞춤형 핸드 셰이크 메시지를 보내려고하기 때문에. – Michele

+1

개인화 된 핸드 셰이크 메시지를 보내고 싶네요. 하지만 그것은 내 질문에 대답하지 않습니다. – Jumbogram

답변

0

해결책을 찾았습니다. 함수는 다음과 같습니다.

int ssl3_read_bytes (SSL *s, int type, unsigned char *buf, int len, int peek); 
int ssl3_write_bytes (SSL *s, int type, const void *buf_, int len); 
3

레코드를 수동으로 암호화하는 대신 SSL_CTX_set_info_callback을 사용하여 원하는 정보를 얻어야합니다.

+0

감사합니다 ... 그럼 SSL_connect에 대한 콜백을 호출하고 AES 키를 수동으로 생성 한 다음 SSL_write() 및 SSL_read()에 대한 다른 콜백을 호출해야합니까? 이 방법으로 메시지를 개인화 할 수 있지만 키 생성을 위해 많은 문제를 관리해야합니다. 암호화/암호 해독 작업에 사용되는 SSL 개인 키가 어디에 저장되어 있는지 이해할 수 없습니다. – Michele

+1

당신이하려는 일을하지 말아야합니다. – Jumbogram

+0

예, 정상적으로 사용하는 것은 맞지만 시험에 합격하기 위해 TLS 재협상 공격을 입증하려고합니다. – Michele