2015-12-29 36 views
7

tôi đã thực hiện một gói tin mạng Java sniffer tương tự như của http://www.freeproject.co.in/source/Network-Packet-Sniffer.aspx?pf=Java&t=web hoặc http://packetsnifferusingjpcap.blogspot.it/Decrypt TLS https dữ liệu giao thông

đề xuất Bây giờ tôi muốn giải mã luồng dữ liệu đến từ một https, trong một nỗ lực để làm như vậy tôi đặt biến SSLKEYLOGFILE, theo cách này trình duyệt sẽ viết các giá trị sử dụng để tạo ra các khóa phiên TLS ra vào một tập tin chỉ định bởi biến này thấy https://isc.sans.edu/forums/diary/Psst+Your+Browser+Knows+All+Your+Secrets/16415/

Vì nó được giải thích trong https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format

Tệp được chỉ ra bởi SSLKEYLOGFILE là một chuỗi các dòng. Dòng chú thích bắt đầu bằng ký tự sắc nét ('#'). Nếu không, dòng có một trong các định dạng này.

RSA <space> <16 bytes of hex encoded encrypted pre master secret> <space> <96 bytes of hex encoded pre master secret> 

CLIENT_RANDOM <space> <64 bytes of hex encoded client_random> <space> <96 bytes of hex encoded master secret> 

Tôi làm cách nào để sử dụng tệp nhật ký bí mật SSL/TLS để giải mã gói mạng trong mã java?

+0

Nếu bạn có quyền kiểm soát mạng (để cài đặt proxy) và máy khách (để cài đặt chứng chỉ CA của riêng bạn), hãy thử tấn công MITM tốt hơn. – user1516873

+0

@ user1516873 bạn có thể giải thích cách thực hiện không? evnironment là: 1) trình duyệt của tôi được kết nối với trang web truyền dữ liệu bằng giao thức ssl, mặc dù trên cổng khác 443 2) Tôi có một trình chặn chặn tất cả lưu lượng được mã hóa Có thể đặt proxy betwen dữ liệu được mã hóa (trình duyệt) và sniffer, để sniffer nhận dữ liệu được giải mã? P.S. bằng cách sử dụng wireshark Tôi có thể giải mã dữ liệu – famedoro

+0

Dường như không có khả năng rằng wireshark có thể giải mã dữ liệu qua các tls, trừ khi sự hiểu biết của tôi về cách hoạt động của tls là thiếu sót. –

Trả lời

1

Vì Wireshark đã triển khai tất cả các logic cần thiết, bạn chỉ có thể lấy dữ liệu được thu thập thông qua tshark và phân tích cú pháp văn bản đầu ra trở lại ứng dụng của bạn.

Bạn cũng có thể tự làm điều đó với sự trợ giúp của thư viện mật mã như bouncycastle, nhưng sẽ rất nhiều nỗ lực vì bạn vẫn phải phân tích cú bắt tay và mọi thứ (SSLKEYLOGFILE chỉ chứa thực sự bit bí mật, rất nhiều bối cảnh vẫn cần thiết để giải mã thành công lưu lượng truy cập!).

+0

Cảm ơn bạn đã trả lời: Tôi đã nghĩ về khả năng này (xem https://ask.wireshark.org/questions/48767/ tshark-tham số-cho-lọc-by-given-ip-và-giải mã-nó-sử dụng-ssl), nhưng tôi không biết làm thế nào chuyển hướng trên một tập tin, tất cả các gói giải mã từ một địa chỉ IP cố định. Wireshark giải mã chỉ các gói tin sau khi đưa ra "Theo dõi luồng" trên một gói cụ thể (đúng với tôi nếu tôi sai), trong khi tôi muốn giải mã tất cả các gói tin từ một IP đã cho. – famedoro

+0

Một câu trả lời cho câu hỏi tshark của bạn cho biết bạn chỉ cần nói cho nó biết cổng nào cần giải mã là ssl. Nếu bạn có các gói bị bắt, nó sẽ không quan trọng trong Java để kiểm tra xem nguồn ip của họ có phải là cái bạn quan tâm không, và nếu có, hãy tra cứu số cổng. – user1531083

+0

Tất nhiên điều này có nghĩa là gọi tshark ít nhất một lần cho mỗi cổng mới mà bạn gặp phải, nhưng bạn thuận tiện, bạn thậm chí có thể gọi nó một lần cho mỗi kết nối tcp (Một lần nữa theo dõi những người trong mã của riêng bạn). – user1531083

1

Để trả lời câu hỏi cụ thể của bạn, bạn cần phải tạo một khách hàng TLS. Có một số thư viện Java TLS tốt có sẵn nhưng bạn có thể cung cấp cho JRE gói Java Secure Socket Extension (JSSE) một lần thử trước khi thử các công cụ của bên thứ ba. JSSE có sự tích hợp tốt đẹp với phần còn lại của các công cụ mã hóa Java. Để bắt đầu, bạn có thể sử dụng these JSSE samples.

Nếu các API trong mặc định thực hiện JSSE không phù hợp với nhu cầu của bạn, hãy nhìn vào hai mã nguồn mở TLS thư viện tốt cho Java:

Một khi bạn đã giải mã các gói mà bạn vẫn còn, tất nhiên, cần phải xử lý lưu lượng HTTP. Để làm điều đó, bạn có thể đưa các gói trở lại trình duyệt hoặc một thư viện máy khách HTTP khác.

Lưu ý 1: các bí mật tạm thời được tạo trong quá trình bắt tay TLS chỉ tốt cho phiên TLS cụ thể. Việc thu thập những bí mật vô hạn này không cho phép bạn tạo proxy chung, như Mallory would want to mount a generic man-in-the-middle attack nhưng nó cho phép bạn truy cập vào thông tin được mã hóa TLS, vì vậy nếu Alice đăng nhập vào ngân hàng của mình, tên người dùng và mật khẩu của Alice sẽ là một phần của Dữ liệu được mã hóa TLS hiện khả dụng. Đây là một lý do, các lược đồ tên người dùng-mật khẩu có đặc tính bảo mật kém ngay cả khi Alice tạo mật khẩu "mạnh".

Note 2: trong TLS, Alice phải tin tưởng client TLS mình, ví dụ, khi Alice sử dụng máy tính công cộng, Alice là tin tưởng rằng trình duyệt của mình là phiên bản của Google Chrome, không Chuck's or Malloy's phiên bản Chromium.

Note 3: trong TLS, Alice phải tin tưởng rằng chỉ có Bob có quyền truy cập vào khóa bí mật của Bob khi cô kết nối với máy chủ của Bob. Nếu Chuck nắm bắt khóa riêng của Bob, thì Chuck có thể ủy quyền trang web của Bob mà không cần Alice chú ý (và, thật đáng buồn, nó thường mất một thời gian dài là Bob) - rất tiếc, có một số điểm yếu hoạt động CNTT. tương đối dễ dàng nhưng đó không phải là kỹ thuật tấn công vào chính TLS.

Lưu ý 4: Mallory có thể sử dụng Key Compromise Impersonation attack làm cuộc tấn công kỹ thuật trung gian trên TLS, nếu khách hàng dễ bị tổn thương và máy chủ bắt buộc; KCI chủ yếu giảm nhẹ vào thời điểm này.

0

Bạn có thể sử dụng Charles Proxy (30 ngày miễn phí), được viết bằng Java, sẽ cho phép kiểm tra lưu lượng truy cập https không được mã hóa và thân thiện hơn nhiều so với WireShark. Nhưng Charles Proxy chỉ xử lý http/https, wireshark là tổng quát hơn.

Các vấn đề liên quan